import axios from 'axios'; import authService from './auth'; // Usar variable de entorno si está disponible, sino usar '/api' (proxy en desarrollo) const baseURL = import.meta.env.VITE_API_BASE_URL || '/api'; console.log('baseURL', baseURL); const api = axios.create({ baseURL, headers: { 'Content-Type': 'application/json', }, }); // Interceptor para añadir autenticación a las peticiones api.interceptors.request.use( (config) => { const authHeader = authService.getAuthHeader(); if (authHeader) { config.headers.Authorization = authHeader; } return config; }, (error) => { return Promise.reject(error); } ); // Interceptor para manejar errores 401 (no autenticado) api.interceptors.response.use( (response) => response, (error) => { if (error.response?.status === 401) { // Disparar evento personalizado para mostrar diálogo de login window.dispatchEvent(new CustomEvent('auth-required', { detail: { message: 'Se requiere autenticación para esta acción', config: error.config } })); } return Promise.reject(error); } ); export default { // Estadísticas async getStats() { const response = await api.get('/stats'); return response.data; }, // Workers async getWorkers() { const response = await api.get('/workers'); return response.data; }, async updateWorkers(workers) { const response = await api.put('/workers', workers); return response.data; }, // Favoritos async getFavorites() { const response = await api.get('/favorites'); return response.data; }, async addFavorite(favorite) { const response = await api.post('/favorites', favorite); return response.data; }, async removeFavorite(platform, id) { const response = await api.delete(`/favorites/${platform}/${id}`); return response.data; }, // Artículos async getArticles(limit = 100, offset = 0, additionalParams = {}) { const params = { limit, offset, ...additionalParams }; const response = await api.get('/articles', { params }); return response.data; }, async getArticleFacets() { const response = await api.get('/articles/facets'); return response.data; }, async searchArticles(query) { const response = await api.get('/articles/search', { params: { q: query }, }); return response.data; }, // Logs async getLogs(limit = 500, sinceLine = null) { const params = { limit }; if (sinceLine !== null && sinceLine > 0) { params.since = sinceLine; } const response = await api.get('/logs', { params }); return response.data; }, // Configuración async getConfig() { const response = await api.get('/config'); return response.data; }, // Telegram async getTelegramConfig() { const response = await api.get('/telegram/config'); return response.data; }, async setTelegramConfig(config) { const response = await api.put('/telegram/config', config); return response.data; }, async getTelegramThreads() { const response = await api.get('/telegram/threads'); return response.data; }, // Usuarios async getUsers() { const response = await api.get('/users'); return response.data; }, async createUser(userData) { const response = await api.post('/users', userData); return response.data; }, async deleteUser(username) { const response = await api.delete(`/users/${username}`); return response.data; }, async changePassword(passwordData) { const response = await api.post('/users/change-password', passwordData); return response.data; }, };