in src/services/rest/request.ts [123:164]
export async function request(
serverUrl?: string | null,
endpoint?: string | null,
options?: RestRequestOptions | null,
withAuth?: boolean,
): Promise<Response> {
checkRequestPossibility()
const method = options?.method
if (method != null && method.toUpperCase() !== 'GET') {
await checkCSRFExists()
}
async function doRequest() {
const headers = getHeaders(options, withAuth)
return {
csrfToken: headers['X-TC-CSRF-Token'],
response: await (options instanceof Request
? fetch(options)
: fetch([serverUrl, endpoint].filter(Boolean).join('/'), {
credentials: 'include',
...options,
headers,
})),
}
}
const {response, csrfToken} = await doRequest()
return new Promise(async resolve => {
const shouldRetry = await processErrorCodes({
url: serverUrl,
statusCode: response.status,
getMessage: () => response.clone().text(),
retryCallback: async () => resolve((await doRequest()).response),
csrfToken,
})
if (!shouldRetry) {
resolve(response)
}
})
}