From 843d498b727e3c7849a358c11fcbe82b17a5dda4 Mon Sep 17 00:00:00 2001 From: Yury Shkoda Date: Thu, 25 Feb 2021 09:14:49 +0300 Subject: [PATCH] fix(RequestClient): improved handleError method --- .gitignore | 4 +++- src/request/RequestClient.ts | 38 +++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 049d264..943b952 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ build .env -/coverage \ No newline at end of file +/coverage + +.DS_Store \ No newline at end of file diff --git a/src/request/RequestClient.ts b/src/request/RequestClient.ts index e0ff19b..2d6e372 100644 --- a/src/request/RequestClient.ts +++ b/src/request/RequestClient.ts @@ -5,6 +5,7 @@ import { LoginRequiredError } from '../types' import { AuthorizeError } from '../types/AuthorizeError' import { NotFoundError } from '../types/NotFoundError' import { parseWeboutResponse } from '../utils/parseWeboutResponse' +import { prefixMessage } from '@sasjs/utils/error' export interface HttpClient { get( @@ -97,7 +98,9 @@ export class RequestClient implements HttpClient { .catch(async (e) => { return await this.handleError(e, () => this.get(url, accessToken, contentType, overrideHeaders) - ) + ).catch((err) => { + throw prefixMessage(err, 'Error while handling error. ') + }) }) } @@ -331,29 +334,50 @@ export class RequestClient implements HttpClient { private handleError = async (e: any, callback: any) => { const response = e.response as AxiosResponse + if (e instanceof AuthorizeError) { - const res = await this.httpClient.get(e.confirmUrl, { - responseType: 'text', - headers: { 'Content-Type': 'text/plain', Accept: '*/*' } - }) + const res = await this.httpClient + .get(e.confirmUrl, { + responseType: 'text', + headers: { 'Content-Type': 'text/plain', Accept: '*/*' } + }) + .catch((err) => { + throw prefixMessage(err, 'Error while getting error confirmUrl. ') + }) if (isAuthorizeFormRequired(res?.data as string)) { await this.authorize(res.data as string) } - return await callback() + + return await callback().catch((err: any) => { + throw prefixMessage( + err, + 'Error while executing callback in handleError. ' + ) + }) } + if (e instanceof LoginRequiredError) { this.clearCsrfTokens() } + if (response?.status === 403 || response?.status === 449) { this.parseAndSetCsrfToken(response) + if (this.csrfToken.headerName && this.csrfToken.value) { - return await callback() + return await callback().catch((err: any) => { + throw prefixMessage( + err, + 'Error while executing callback in handleError. ' + ) + }) } + throw e } else if (response?.status === 404) { throw new NotFoundError(response.config.url!) } + throw e }