Last active
July 25, 2023 02:58
-
-
Save brunapereira/3dd32c9be854e97404b3138f77a68ac1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type AxiosConfigWithMetadata = InternalAxiosRequestConfig & { | |
metadata?: { | |
axiosId: string | |
} | |
} | |
const interceptRequest = (config: AxiosConfigWithMetadata) => { | |
const axiosId = uuidV4(); | |
logger.debug("outbound request", { | |
baseUrl: config.baseURL, | |
method: config.method, | |
data: config.data, | |
params: config.params, | |
url: config.url, | |
headers: config.headers, | |
axiosId, | |
}); | |
config.metadata = { | |
axiosId: axiosId, | |
}; | |
return config; | |
}; | |
const interceptSuccessResponse = (response: AxiosResponse) => { | |
logger.debug("outbound response success", { | |
baseUrl: response.config.baseURL, | |
url: response.config.url, | |
status: `${response.status}:${response.statusText}`, | |
headers: response.headers, | |
body: response.data, | |
axiosId: (response.config as AxiosConfigWithMetadata).metadata?.axiosId, | |
}); | |
return response; | |
}; | |
const interceptorErrorResponse = (error: any) => { | |
if (error instanceof Error) { | |
const axiosError = error as AxiosError; | |
logger.debug("outbound response failure", { | |
baseUrl: axiosError?.response?.config.baseURL, | |
url: axiosError?.response?.config.url, | |
status: axiosError.response?.status, | |
headers: axiosError.response?.headers, | |
body: axiosError.response?.data, | |
axiosId: (axiosError?.response?.config as AxiosConfigWithMetadata).metadata?.axiosId, | |
}); | |
} | |
return Promise.reject(error); | |
}; | |
export const createAxiosInstance = (baseURL: string, headers: Record<string, string>) => { | |
const axiosInstance = Axios.create({baseURL: baseURL, headers}); | |
axiosInstance.interceptors.request.use(interceptRequest); | |
axiosInstance.interceptors.response.use(interceptSuccessResponse, interceptorErrorResponse); | |
return axiosInstance; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment