'use client' import axios from 'axios' //let accessToken = localStorage.getItem('access') ? localStorage.getItem('access') : null function setCookieFn(name:string, value:string, daysToExpire:number) { const expires = new Date(); expires.setTime(expires.getTime() + (daysToExpire * 24 * 60 * 60 * 1000)); document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/`; } const axiosInstance = axios.create({ baseURL: `${process.env.NEXT_PUBLIC_API_URL}/`, timeout: 10000, headers: { 'Content-Type': 'application/json', //'Authorization': `Bearer ${accessToken}`, } }); axiosInstance.interceptors.request.use(async req => { const accessT = localStorage.getItem('admin_at') req.headers.Authorization = `Bearer ${accessT}` return req }) axiosInstance.interceptors.response.use((response)=> { return response }, async (error) =>{ const originalRequest = error.config; if (error.response.status === 401 && !originalRequest._retry) { originalRequest._retry = true; // Prevent infinite loops try { if (localStorage.getItem('admin_rt') != 'undefined'){ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/auth/refresh-token/`, { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: JSON.stringify({ 'refresh': localStorage.getItem('admin_rt') }) }); if(res.status==200){ setCookieFn('isAuth', 'true', 365) const tokenData = await res.json() localStorage.setItem('admin_at', tokenData.access) localStorage.setItem('admin_rt',tokenData.refresh) originalRequest.headers.Authorization = `Bearer ${tokenData.access}` return axiosInstance(originalRequest) }else{ } } else { localStorage.removeItem('admin_at'); localStorage.removeItem('admin_rt'); document.cookie = "isAuth=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; setTimeout(()=>{ window.location.replace('/login') }, 200) } } catch(refreshError) { localStorage.removeItem('admin_at'); localStorage.removeItem('admin_rt'); document.cookie = "isAuth=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; setTimeout(()=>{ window.location.replace('/login') }, 200) throw refreshError; } } // Return a Promise rejection if the status code is not 401 return Promise.reject(error); }); export default axiosInstance