1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-07 04:20:05 +00:00

Merge branch 'master' into dependabot/npm_and_yarn/webpack-4.44.1

This commit is contained in:
Allan Bowe
2020-08-04 20:56:51 +02:00
committed by GitHub
2 changed files with 38 additions and 6 deletions

View File

@@ -1018,7 +1018,10 @@ export class SASViyaApiClient {
const { result: folder } = await this.request<Folder>( const { result: folder } = await this.request<Folder>(
`${this.serverUrl}${url}`, `${this.serverUrl}${url}`,
requestInfo requestInfo
); ).catch((err) => {
return {result: null};
})
if (!folder) return undefined; if (!folder) return undefined;
return `/folders/folders/${folder.id}`; return `/folders/folders/${folder.id}`;
} }

View File

@@ -1,4 +1,8 @@
import { CsrfToken } from "../types"; import { CsrfToken } from "../types";
import { needsRetry } from "./needsRetry";
let retryCount: number = 0;
let retryLimit: number = 5;
export async function makeRequest<T>( export async function makeRequest<T>(
url: string, url: string,
@@ -6,6 +10,8 @@ export async function makeRequest<T>(
callback: (value: CsrfToken) => any, callback: (value: CsrfToken) => any,
contentType: "text" | "json" = "json" contentType: "text" | "json" = "json"
): Promise<{ result: T; etag: string | null }> { ): Promise<{ result: T; etag: string | null }> {
let retryRequest: any = null;
const responseTransform = const responseTransform =
contentType === "json" contentType === "json"
? (res: Response) => res.json() ? (res: Response) => res.json()
@@ -23,7 +29,7 @@ export async function makeRequest<T>(
value: token || "", value: token || "",
}); });
const retryRequest = { retryRequest = {
...request, ...request,
headers: { ...request.headers, [tokenHeader]: token }, headers: { ...request.headers, [tokenHeader]: token },
}; };
@@ -37,12 +43,35 @@ export async function makeRequest<T>(
return Promise.reject({ status: response.status, body }); return Promise.reject({ status: response.status, body });
} }
} else { } else {
if (response.redirected && response.url.includes("SASLogon/login")) { const responseTransformed = responseTransform(response);
const body = await response.text(); let responseText = '';
return Promise.reject({ status: 401, body });
if (typeof responseTransformed === 'string') {
responseText = responseTransformed;
} else {
responseText = JSON.stringify(responseTransformed);
} }
if (response.redirected && response.url.includes("SASLogon/login")) {
return Promise.reject({ status: 401, responseTransformed });
}
if (needsRetry(responseText)) {
if (retryCount < retryLimit) {
retryCount++;
let retryResponse = await makeRequest(url, retryRequest || request, callback, contentType);
retryCount = 0;
return retryResponse;
} else {
retryCount = 0;
throw new Error('Request retry limit exceeded');
}
}
etag = response.headers.get("ETag"); etag = response.headers.get("ETag");
return responseTransform(response); return responseTransformed;
} }
}); });
return { result, etag }; return { result, etag };