import axios, { AxiosRequestConfig, isAxiosError } from "axios"; import { User } from "@/contexts/auth-context"; import { toast } from "sonner"; export const Api = axios.create({ baseURL: "http://localhost:8080", responseType: "json", }); interface ErrorResponseDTO { timestamp: string; message: string; } Api.interceptors.request.use(async (config) => { const jsonString = localStorage.getItem("userData"); if (jsonString) { const userData: User = JSON.parse(jsonString); config.headers.Authorization = `Bearer ${userData.token}`; } return config; }); Api.interceptors.response.use( (response) => response, (error) => { if (!isAxiosError(error)) { console.log(error); return; } const errorDTO = error.response?.data as ErrorResponseDTO; toast.error(errorDTO.message); }, ); export const customInstance = ( config: AxiosRequestConfig, options?: AxiosRequestConfig, ): Promise => { const source = axios.CancelToken.source(); return Api({ ...config, ...options, cancelToken: source.token, paramsSerializer: { indexes: null }, }).then(({ data }) => data); };