From 5cd6c9a3bb36f4746087e0f7b66b78189ed2ef6e Mon Sep 17 00:00:00 2001 From: Sergej Chak Date: Wed, 14 Aug 2024 16:09:26 +0200 Subject: [PATCH 1/2] Add support for Axios AbortController --- src/index.ts | 2 +- src/utils/axiosSetup.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 78a36b82..5ce02f99 100644 --- a/src/index.ts +++ b/src/index.ts @@ -143,7 +143,7 @@ export { UserUpdate, UserUpdatePassword, } from './users/types'; -export { testAxiosObject } from './utils/axiosSetup'; +export { testAxiosObject, cancelAllRequests } from './utils/axiosSetup'; export { Pages } from './utils/pages/pages'; export { DeltaSyncParams } from './utils/params/deltaSyncParams'; export { RequestParams, RequestParamsBuilder } from './utils/params/requestParams'; diff --git a/src/utils/axiosSetup.ts b/src/utils/axiosSetup.ts index d320d8e9..be338ef1 100644 --- a/src/utils/axiosSetup.ts +++ b/src/utils/axiosSetup.ts @@ -12,8 +12,15 @@ export type InterceptorParams = { authentication: AuthenticationEndpoint; }; +const abortController = new AbortController(); + +export const cancelAllRequests = () => { + abortController.abort(); +}; + const requestInterceptor = (config: AxiosRequestConfig): InternalAxiosRequestConfig => { // axios.defaults do not automatically apply here, so set timeout manually + config.signal = abortController.signal; config.timeout = axios.defaults.timeout; config.headers = config.headers ?? {}; return config as InternalAxiosRequestConfig; @@ -82,6 +89,7 @@ export const createResponseRejectedInterceptor = (interceptorParams: Interceptor const status = error.response?.status; if (status === 497 || status === 404 || status === 503 || status === 400) { if (interceptorParams.config.settings.onTokenRefreshFailed != null) { + cancelAllRequests(); interceptorParams.config.settings.onTokenRefreshFailed(); } } From 7336356c8f924278cb8f84991d596fe7c137c409 Mon Sep 17 00:00:00 2001 From: Sergej Chak Date: Wed, 14 Aug 2024 16:15:18 +0200 Subject: [PATCH 2/2] Adjust tests --- src/utils/axiosSetup.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/axiosSetup.test.ts b/src/utils/axiosSetup.test.ts index 8648679c..0f69e60b 100644 --- a/src/utils/axiosSetup.test.ts +++ b/src/utils/axiosSetup.test.ts @@ -125,7 +125,7 @@ describe('axiosSetup', () => { mock.onGet(readPath).timeout(); await api.tasks.read(); } catch (error) { - expect(error).toMatchObject({ message: 'timeout of 30000ms exceeded' }); + expect(error).toMatchObject({ message: 'canceled' }); } expect.assertions(1);