import { ILogin_Response_DTO } from "@shared/contexts"; import { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from "axios"; import secureLocalStorage from "react-secure-storage"; const onRequest = (request: InternalAxiosRequestConfig): InternalAxiosRequestConfig => { const authInfo: ILogin_Response_DTO = secureLocalStorage.getItem( "uecko.auth" ) as ILogin_Response_DTO; if (authInfo && authInfo.token && request.headers) { request.headers.Authorization = `Bearer ${authInfo.token}`; } return request; }; const onRequestError = (error: AxiosError): Promise => { /*console.group("[request error]"); console.dir(error); console.groupEnd();*/ return Promise.reject(error); }; const onResponse = (response: AxiosResponse): AxiosResponse => { /*console.group("[response]"); console.dir(response); console.groupEnd();*/ const config = response?.config; if (config.raw) { return response; } /*if (response.status === 200) { const data = response?.data; if (!data) { throw new HttpError("API Error. No data!"); } return data; }*/ //throw new HttpError("API Error! Invalid status code!"); return response; }; const onResponseError = (error: AxiosError): Promise => { console.group("[response error]"); console.log(error); if (error.response) { // La respuesta fue hecha y el servidor respondió con un código de estado // que esta fuera del rango de 2xx console.log("1 => El servidor respondió con un código de estado > 200"); console.log(error.response.data); console.log(error.response.status); switch (error.response.status) { case 400: console.error("Bad Request"); break; case 401: console.error("UnAuthorized"); return (window.location.href = "/logout"); break; case 403: console.error("Forbidden"); break; /*AppEvents.publish(Events.N_Error, { message: "Forbidden", description: "Operation ", });*/ case 404: console.error("Not found"); break; case 422: console.error("Unprocessable Content"); throw error.response.data; } console.error(error.response.status); } else if (error.request) { // La petición fue hecha pero no se recibió respuesta console.log("2 => El servidor no respondió"); console.error(error); } else { // Algo paso al preparar la petición que lanzo un Error console.log("3 => Error desconocido"); console.error(error); } console.groupEnd(); throw error; }; export function setupInterceptorsTo(axiosInstance: AxiosInstance): AxiosInstance { axiosInstance.interceptors.request.use(onRequest, onRequestError); axiosInstance.interceptors.response.use(onResponse, onResponseError); return axiosInstance; }