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.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); 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(); } }