diff --git a/packages/apidom-reference/README.md b/packages/apidom-reference/README.md index 6fd75bd67c..0e64e08ff5 100644 --- a/packages/apidom-reference/README.md +++ b/packages/apidom-reference/README.md @@ -707,7 +707,7 @@ await resolve('/home/user/oas.json', { }); // Promise ``` -**Externally resolving a HTTP(S) URL located on an internet:** +**Externally resolving an HTTP(S) URL located on an internet:** ```js import { resolve } from '@swagger-api/apidom-reference'; diff --git a/packages/apidom-reference/src/resolve/resolvers/HttpResolverAxios.ts b/packages/apidom-reference/src/resolve/resolvers/HttpResolverAxios.ts index 69b6c60baf..a98ccdf45d 100644 --- a/packages/apidom-reference/src/resolve/resolvers/HttpResolverAxios.ts +++ b/packages/apidom-reference/src/resolve/resolvers/HttpResolverAxios.ts @@ -1,4 +1,6 @@ import stampit from 'stampit'; +import { omit, pathOr } from 'ramda'; +import { ensureArray } from 'ramda-adjunct'; import axios, { AxiosInstance } from 'axios'; import ResolverError from '../../util/errors/ResolverError'; @@ -21,13 +23,35 @@ const HttpResolverAxios: stampit.Stamp = stampit(HttpResolver).in this.getHttpClient = function getHttpClient(): AxiosInstance { if (typeof axiosInstance === 'undefined' || oldAxiosConfig !== this.axiosConfig) { + const config = omit(['interceptors'], this.axiosConfig); + const interceptors = pathOr( + { request: [], response: [] }, + ['axiosConfig', 'interceptors'], + this, + ); + axiosInstance = axios.create({ timeout: this.timeout, maxRedirects: this.redirects, withCredentials: this.withCredentials, responseType: 'arraybuffer', - ...(this.axiosConfig || {}), + ...config, }); + + // settings up request interceptors + if (Array.isArray(interceptors?.request)) { + interceptors.request.forEach((requestInterceptor: any) => { + axiosInstance.interceptors.request.use(...ensureArray(requestInterceptor)); + }); + } + + // settings up response interceptors + if (Array.isArray(interceptors?.response)) { + interceptors.response.forEach((responseInterceptor: any) => { + axiosInstance.interceptors.response.use(...ensureArray(responseInterceptor)); + }); + } + oldAxiosConfig = this.axiosConfig; }