import { authOptions } from "@/app/auth"; import axios, { type AxiosError } from "axios"; import { type Session, getServerSession } from "next-auth"; import { getSession } from "next-auth/react"; import { redirect } from "next/navigation"; axios.defaults.xsrfCookieName = "csrftoken"; axios.defaults.xsrfHeaderName = "X-CSRFToken"; const APIClient = () => { const instance = axios.create({ baseURL: process.env.SARLINK_API_BASE_URL, headers: { Accept: "application/json", }, }); let lastSession: Session | null = null; console.log("Last session: ", lastSession); instance.interceptors.request.use( async (request) => { if (lastSession == null || Date.now() > Date.parse(lastSession.expires)) { const session = await getServerSession(authOptions); console.log("Server session: ", session); lastSession = session; } if (lastSession) { request.headers.Authorization = `Token ${lastSession.apiToken}`; } else { request.headers.Authorization = undefined; } return request; }, (error) => { console.error("API Request Error: ", error); throw error; }, ); instance.interceptors.response.use( async (response) => { return response; }, async (error: AxiosError) => { if (error?.response?.status === 401) { // Redirect to the signin page if the user is unauthorized redirect("/auth/signin"); } return Promise.reject(error); }, ); return instance; }; export const AxiosClient = APIClient();