| 
									
										
										
										
											2025-05-05 15:49:01 -03:00
										 |  |  | import axios from 'axios'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-17 18:29:32 -03:00
										 |  |  | // 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'; | 
					
						
							| 
									
										
										
										
											2025-05-05 15:49:01 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-09 19:37:07 -03:00
										 |  |  | 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); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-05 15:49:01 -03:00
										 |  |  | // Puedes añadir interceptores de respuesta para manejar errores globales (ej: 401 Unauthorized)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default apiClient; |