import axios from "axios"; import keycloak from "./keycloak"; export const baseUrl = process.env.NEXT_PUBLIC_BASE_URL; const axiosInstance = axios.create({ baseURL: baseUrl, }); axiosInstance.interceptors.request.use( async (config) => { if (keycloak?.authenticated) { config.headers.Authorization = `Bearer ${keycloak.token}`; } return config; }, (error) => Promise.reject(error), ); axiosInstance.interceptors.response.use( (response) => response, async (error) => { const originalRequest = error.config; if (error?.response?.status === 401 && !originalRequest._retry) { originalRequest._retry = true; keycloak.login(); try { await keycloak.updateToken(30); const newToken = keycloak.token; if (newToken) { originalRequest.headers["Authorization"] = `Bearer ${newToken}`; return axiosInstance(originalRequest); } } catch (refreshError) { keycloak.logout({ redirectUri: window.location.origin }); } } return Promise.reject(error); }, ); // ✅ Fetcher for GET (used in SWR) export const fetcher = async (url) => { const fullUrl = url.startsWith("http") ? url : `${baseUrl}${url}`; const resp = await axiosInstance.get(fullUrl); return resp.data; }; export default axiosInstance;