import axios from "axios" const api = axios.create({ baseURL: window.location.hostname === "localhost" ? "http://localhost:8000" : "", }) api.interceptors.request.use((config) => { const token = sessionStorage.getItem("access_token") if (token) { config.headers.Authorization = `Bearer ${token}` } return config }, (error) => { return Promise.reject(error) }) api.interceptors.response.use( (res) => res, async (error) => { const originalRequest = error.config if (error.response?.status === 401 && !originalRequest._retry) { originalRequest._retry = true const refresh = sessionStorage.getItem("refresh_token") if (!refresh) { sessionStorage.clear() window.location.href = "/login" return Promise.reject(error) } try { const { data } = await axios.post("http://localhost:8000/auth/refresh", { refresh_token: refresh, }) sessionStorage.setItem("access_token", data.access_token) sessionStorage.setItem("refresh_token", data.refresh_token) originalRequest.headers.Authorization = `Bearer ${data.access_token}` return api(originalRequest) } catch (refreshError) { sessionStorage.clear() window.location.href = "/login" return Promise.reject(refreshError) } } return Promise.reject(error) } ) export default api