import axios from 'axios'; export const api = axios.create({ baseURL: '/api', timeout: 30000, // Aumentar para 30 segundos timeoutErrorMessage: 'Tempo limite da requisição excedido. Por favor, tente novamente.' }); // Interceptor para adicionar token em todas as requisições api.interceptors.request.use(config => { const token = localStorage.getItem('@AdvX:token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }); api.interceptors.response.use( response => response, error => { if (axios.isAxiosError(error)) { if (error.code === 'ECONNABORTED') { // Erro específico de timeout console.error('Timeout da requisição:', { url: error.config?.url, method: error.config?.method, timeout: error.config?.timeout }); return Promise.reject(new Error('A operação demorou muito para responder. Por favor, tente novamente.')); } // Outros erros do Axios console.error('API Error:', { message: error.message, status: error.response?.status, data: error.response?.data, url: error.config?.url, method: error.config?.method }); } else if (error.response) { console.error('API Error Response:', { status: error.response.status, statusText: error.response.statusText, data: error.response.data, url: error.config?.url, method: error.config?.method }); } else if (error.request) { console.error('API Error Request:', error.request); } else { console.error('API Error:', error.message); } if (error.response && error.response.status === 401) { // Remover token inválido localStorage.removeItem('@AdvX:token'); // Redirecionar para login se não estiver na página de login if (window.location.pathname !== '/login') { window.location.href = '/login'; } } return Promise.reject(error); } ); export default api;