All checks were successful
		
		
	
	Build and Deploy / remote-build-and-deploy (push) Successful in 13m17s
				
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import axios from 'axios';
 | |
| 
 | |
| // Vite reemplazará import.meta.env.VITE_API_BASE_URL con el valor del .env
 | |
| // durante la compilación. Si no está definida, usará la URL de desarrollo.
 | |
| const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:5183/api';
 | |
| 
 | |
| const apiClient = axios.create({
 | |
|   baseURL: API_BASE_URL,
 | |
|   headers: {
 | |
|     'Content-Type': 'application/json',
 | |
|   },
 | |
| });
 | |
| 
 | |
| // Interceptor para añadir el token JWT a las peticiones (si existe)
 | |
| apiClient.interceptors.request.use(
 | |
|   (config) => {
 | |
|     const token = localStorage.getItem('authToken'); // O donde guardes el token
 | |
|     if (token) {
 | |
|       config.headers.Authorization = `Bearer ${token}`;
 | |
|     }
 | |
|     return config;
 | |
|   },
 | |
|   (error) => {
 | |
|     return Promise.reject(error);
 | |
|   }
 | |
| );
 | |
| 
 | |
| apiClient.interceptors.response.use(
 | |
|   (response) => {
 | |
|     // Cualquier código de estado que este dentro del rango de 2xx causa la ejecución de esta función
 | |
|     return response;
 | |
|   },
 | |
|   (error) => {
 | |
|     // Cualquier código de estado que este fuera del rango de 2xx causa la ejecución de esta función
 | |
|     if (axios.isAxiosError(error) && error.response) {
 | |
|       if (error.response.status === 401) {
 | |
|         // Token inválido o expirado
 | |
|         console.warn("Error 401: Token inválido o expirado. Deslogueando...");
 | |
|         
 | |
|         // Limpiar localStorage y recargar la página.
 | |
|         // AuthContext se encargará de redirigir a /login al recargar porque no encontrará token.
 | |
|         localStorage.removeItem('authToken');
 | |
|         localStorage.removeItem('authUser'); // Asegurar limpiar también el usuario
 | |
|         // Forzar un hard refresh para que AuthContext se reinicialice y redirija
 | |
|         // Esto también limpiará cualquier estado de React.
 | |
|         // --- Mostrar mensaje antes de redirigir ---
 | |
|         alert("Tu sesión ha expirado o no es válida. Serás redirigido a la página de inicio de sesión.");
 | |
|         window.location.href = '/login'; // Redirección más directa
 | |
|       }
 | |
|     }
 | |
|     // Es importante devolver el error para que el componente que hizo la llamada pueda manejarlo también si es necesario
 | |
|     return Promise.reject(error);
 | |
|   }
 | |
| );
 | |
| 
 | |
| // Puedes añadir interceptores de respuesta para manejar errores globales (ej: 401 Unauthorized)
 | |
| 
 | |
| export default apiClient; |