export async function request()

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)
    }
  })
}