import axios from 'axios' // In production, use relative path to hit the proxy // In development, use the env variable for dev server proxy const API_BASE_URL = process.env.NODE_ENV === 'production' ? '' : process.env.VUE_APP_API_URL || 'http://127.0.0.1:5000' const api = axios.create({ baseURL: API_BASE_URL, headers: { 'Content-Type': 'application/json', }, }) // Request interceptor - add auth token api.interceptors.request.use( (config) => { const token = localStorage.getItem('access_token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }, (error) => Promise.reject(error) ) // Response interceptor - handle token refresh api.interceptors.response.use( (response) => response, async (error) => { const originalRequest = error.config if (error.response?.status === 401 && !originalRequest._retry) { originalRequest._retry = true try { const refreshToken = localStorage.getItem('refresh_token') if (!refreshToken) { throw new Error('No refresh token') } // Use relative path in production, full URL in development const refreshUrl = process.env.NODE_ENV === 'production' ? '/api/refresh-token' : `${API_BASE_URL}/refresh-token` const { data } = await axios.post(refreshUrl, { refresh_token: refreshToken }) localStorage.setItem('access_token', data.access_token) originalRequest.headers.Authorization = `Bearer ${data.access_token}` return api(originalRequest) } catch (refreshError) { localStorage.removeItem('access_token') localStorage.removeItem('refresh_token') window.location.href = '/login' return Promise.reject(refreshError) } } return Promise.reject(error) } ) export default api