import axios, { AxiosError } from 'axios' const API_URL = import.meta.env.VITE_API_URL || '/api/v1' const client = axios.create({ baseURL: API_URL, headers: { 'Content-Type': 'application/json', }, }) // Request interceptor to add auth token client.interceptors.request.use((config) => { const token = localStorage.getItem('token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) // Response interceptor to handle errors client.interceptors.response.use( (response) => response, (error: AxiosError<{ detail: string }>) => { // Unauthorized - redirect to login if (error.response?.status === 401) { localStorage.removeItem('token') localStorage.removeItem('user') window.location.href = '/login' } // Server error or network error - redirect to 500 page if ( error.response?.status === 500 || error.response?.status === 502 || error.response?.status === 503 || error.response?.status === 504 || error.code === 'ERR_NETWORK' || error.code === 'ECONNABORTED' ) { // Only redirect if not already on error page if (!window.location.pathname.startsWith('/500') && !window.location.pathname.startsWith('/error')) { window.location.href = '/500' } } return Promise.reject(error) } ) export default client