import axios from 'axios' import i18n from '../i18n' const service = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:5001', timeout: 300000, // 5-min timeout: ontology generation can take a while. headers: { 'Content-Type': 'application/json' } }) service.interceptors.request.use( config => { config.headers['Accept-Language'] = i18n.global.locale.value return config }, error => { console.error('Request error:', error) return Promise.reject(error) } ) service.interceptors.response.use( response => { const res = response.data if (!res.success && res.success !== undefined) { console.error('API Error:', res.error || res.message || 'Unknown error') return Promise.reject(new Error(res.error || res.message || 'Error')) } return res }, error => { console.error('Response error:', error) if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) { console.error('Request timeout') } if (error.message === 'Network Error') { console.error('Network error - please check your connection') } return Promise.reject(error) } ) export const requestWithRetry = async (requestFn, maxRetries = 3, delay = 1000) => { for (let i = 0; i < maxRetries; i++) { try { return await requestFn() } catch (error) { if (i === maxRetries - 1) throw error console.warn(`Request failed, retrying (${i + 1}/${maxRetries})...`) await new Promise(resolve => setTimeout(resolve, delay * Math.pow(2, i))) } } } export default service