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:
@@ -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}`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
|||||||
Reference in New Issue
Block a user