import axios from 'axios' import { useAuthStore } from '../stores/authStore' const apiClient = axios.create({ baseURL: import.meta.env.VITE_API_URL || 'http://localhost:5000/api/v1', headers: { 'Content-Type': 'application/json', }, }) apiClient.interceptors.request.use((config) => { const token = useAuthStore.getState().accessToken if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) apiClient.interceptors.response.use( (response) => response, async (error) => { const originalRequest = error.config if (error.response?.status === 401 && !originalRequest._retry) { originalRequest._retry = true try { const refreshToken = useAuthStore.getState().refreshToken const response = await axios.post(`${apiClient.defaults.baseURL}/auth/refresh`, { refreshToken, }) const { accessToken, refreshToken: newRefreshToken } = response.data.data.tokens useAuthStore.getState().updateTokens(accessToken, newRefreshToken) originalRequest.headers.Authorization = `Bearer ${accessToken}` return apiClient(originalRequest) } catch (refreshError) { useAuthStore.getState().logout() window.location.href = '/login' return Promise.reject(refreshError) } } return Promise.reject(error) } ) export default apiClient