testes/src_2/services/api.js

68 lines
2.2 KiB
JavaScript

import axios from 'axios';
/**
* Instância centralizada do Axios para todas as comunicações com o backend.
* A base URL é configurada via variável de ambiente VITE_API_URL.
*
* Exemplo de configuração no .env:
* VITE_API_URL=https://dev.workspace.itguys.com.br/api
*/
const api = axios.create({
baseURL: import.meta.env.VITE_API_URL || 'https://dev.workspace.itguys.com.br/api',
headers: {
'Content-Type': 'application/json',
},
timeout: 120000, // 120 segundos (2 minutos) para lidar com a lentidão do backend
});
// Interceptor para adicionar o token em cada requisição
api.interceptors.request.use(
(config) => {
const token = localStorage.getItem('x-access-token');
if (token) {
config.headers['x-access-token'] = token;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
// Interceptor para tratamento de erros de resposta
api.interceptors.response.use(
(response) => response,
(error) => {
// Tratamento de erro 401 (não autorizado)
if (error.response?.status === 401) {
// Limpar token inválido
localStorage.removeItem('x-access-token');
localStorage.removeItem('integra_user');
// Redirecionar para login se não estiver já na página de login
const currentPath = window.location.pathname;
if (!currentPath.includes('/login')) {
// Redireciona para o login específico do ambiente atual
if (currentPath.includes('/plataforma/prafrot')) {
window.location.href = '/plataforma/prafrot/login';
} else if (currentPath.includes('/plataforma/financeiro-v2')) {
window.location.href = '/plataforma/auth/login-finance';
} else if (currentPath.includes('/plataforma/fleet-v2')) {
window.location.href = '/plataforma/auth/login';
} else if (currentPath.includes('/plataforma/hr')) {
window.location.href = '/plataforma/hr/login';
} else if (currentPath.includes('/plataforma/fleet')) {
window.location.href = '/plataforma/fleet/login';
} else {
// Default para o login global do sistema
window.location.href = '/plataforma/auth/login';
}
}
}
return Promise.reject(error);
}
);
export default api;