frontend/api/api.ts
Rodrigo Verdiani f6177dadb0
All checks were successful
ci/woodpecker/push/pipeline Pipeline was successful
feature: ci/cd pipeline
2025-10-28 23:16:14 -03:00

50 lines
1.1 KiB
TypeScript

import axios, { AxiosRequestConfig, isAxiosError } from "axios";
import { User } from "@/contexts/auth-context";
import { toast } from "sonner";
export const Api = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_BASE_URL,
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 = <T>(
config: AxiosRequestConfig,
options?: AxiosRequestConfig,
): Promise<T> => {
const source = axios.CancelToken.source();
return Api({
...config,
...options,
cancelToken: source.token,
paramsSerializer: { indexes: null },
}).then(({ data }) => data);
};