98 lines
2.8 KiB
TypeScript
98 lines
2.8 KiB
TypeScript
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<AxiosError> => {
|
|
/*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<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");
|
|
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;
|
|
}
|