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.log("[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"); const data = error.response.data; const status = error.response.status; console.log(data); console.log(status); /* { detail: "Quote data not valid", instance: "/api/v1/quotes", status: 422, title: "Unprocessable Entity", type: "about:blank", context: { params: { }, query: { }, body: { date: "2024-08-13", customer_information: "", reference: "", status: "draft", id: "9c1c6073-127a-4bde-a73c-6229efb51ad0", }, }, extra: { errors: [ { reference: "{reference} is not allowed to be empty", }, { customer_information: "{customer_information} is not allowed to be empty", }, ], }, } */ switch (status) { case 400: console.error("Bad Request"); break; case 401: console.error("UnAuthorized"); 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"); break; } return Promise.reject(data); } 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(); return Promise.reject(error); }; export function setupInterceptorsTo(axiosInstance: AxiosInstance): AxiosInstance { axiosInstance.interceptors.request.use(onRequest, onRequestError); axiosInstance.interceptors.response.use(onResponse, onResponseError); return axiosInstance; }