Spaces:
Sleeping
Sleeping
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; |