import axios from 'axios'; // Replace with your actual HF Space backend URL const API_BASE_URL = process.env.REACT_APP_API_URL || 'https://humblebeeai-al-ghazali-rag-retrieval-api.hf.space'; const api = axios.create({ baseURL: API_BASE_URL, headers: { 'Content-Type': 'application/json', }, }); // Helper to get tokens from localStorage function getAuthTokens() { const tokens = localStorage.getItem('authTokens'); return tokens ? JSON.parse(tokens) : null; } // Request interceptor to add auth token api.interceptors.request.use( (config) => { const tokens = getAuthTokens(); if (tokens?.access) { config.headers['Authorization'] = `Bearer ${tokens.access}`; } return config; }, (error) => Promise.reject(error) ); // Response interceptor to handle token refresh api.interceptors.response.use( (response) => response, async (error) => { const originalRequest = error.config; if (error.response && error.response.status === 401 && !originalRequest._retry) { originalRequest._retry = true; try { const tokens = getAuthTokens(); if (!tokens?.refresh) throw new Error('No refresh token'); const response = await axios.post(`${API_BASE_URL}/refresh`, { refresh_token: tokens.refresh }); const newTokens = { access: response.data.access_token, refresh: response.data.refresh_token }; localStorage.setItem('authTokens', JSON.stringify(newTokens)); originalRequest.headers['Authorization'] = `Bearer ${newTokens.access}`; return api(originalRequest); } catch (refreshError) { localStorage.removeItem('authTokens'); window.location.href = '/'; return Promise.reject(refreshError); } } return Promise.reject(error); } ); export default api;