Presupuestador_web/client/src/lib/axios/setupInterceptors.ts

98 lines
2.8 KiB
TypeScript
Raw Normal View History

2024-06-09 20:04:46 +00:00
import { ILogin_Response_DTO } from "@shared/contexts";
import { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from "axios";
import secureLocalStorage from "react-secure-storage";
2024-06-06 11:05:54 +00:00
2024-06-09 20:04:46 +00:00
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}`;
}
2024-06-06 11:05:54 +00:00
return request;
};
const onRequestError = (error: AxiosError): Promise<AxiosError> => {
/*console.group("[request error]");
console.dir(error);
console.groupEnd();*/
return Promise.reject(error);
};
const onResponse = (response: AxiosResponse): AxiosResponse => {
2024-07-11 18:31:01 +00:00
/*console.group("[response]");
2024-06-06 11:05:54 +00:00
console.dir(response);
2024-07-11 18:31:01 +00:00
console.groupEnd();*/
2024-06-06 11:05:54 +00:00
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<AxiosError> => {
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");
2024-07-09 16:21:12 +00:00
return (window.location.href = "/logout");
2024-06-06 11:05:54 +00:00
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;
};
2024-06-09 20:04:46 +00:00
export function setupInterceptorsTo(axiosInstance: AxiosInstance): AxiosInstance {
2024-06-06 11:05:54 +00:00
axiosInstance.interceptors.request.use(onRequest, onRequestError);
axiosInstance.interceptors.response.use(onResponse, onResponseError);
return axiosInstance;
}