dec8891506
Panel nuevo en Configuracion ("Errores del sistema", solo superadmin): errores de backend
(excepciones 500 no manejadas, con stack/ruta/metodo/usuario) y de frontend (errores JS y
promesas sin catch en el navegador del usuario, antes invisibles para cualquiera mas alla de esa
persona). Filtro por origen, boton para limpiar el historial.
Error Boundary de React: si algo rompe el render, ya no queda pantalla en blanco -- aviso simple
con boton de recargar, y el error queda reportado igual.
Nuevo error_logs (tabla, se recorta sola a 1000 filas) + GET/DELETE /api/error-logs (superadmin)
+ POST /api/error-logs (publico, rate-limited, para reportar incluso sin sesion).
Probado de punta a punta en dev: error real de backend (500) capturado con stack completo y
usuario correcto, error JS global y promesa rechazada capturados desde el navegador, panel
muestra ambos y el boton de limpiar funciona. Se encontro y corrigio un bug real en el camino: la
identificacion de usuario opcional leia jwt.payload.id en vez de .sub (como realmente lo firma
auth/service.js), asi que nunca identificaba a nadie.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
17 lines
818 B
JavaScript
17 lines
818 B
JavaScript
import { Router } from 'express';
|
|
import rateLimit from 'express-rate-limit';
|
|
import { requireAuth, requireRole, CAN_MANAGE_SETTINGS } from '../../middleware/auth.js';
|
|
import { getErrorLogs, postErrorLog, deleteErrorLogs } from './controller.js';
|
|
|
|
const router = Router();
|
|
|
|
// Publico (sin requireAuth): el frontend debe poder reportar un error incluso en paginas sin
|
|
// sesion (login, registro). Rate-limited para que no se pueda usar para floodear la tabla.
|
|
const reportLimiter = rateLimit({ windowMs: 5 * 60 * 1000, limit: 30, standardHeaders: true, legacyHeaders: false });
|
|
router.post('/', reportLimiter, postErrorLog);
|
|
|
|
router.get('/', requireAuth, requireRole(...CAN_MANAGE_SETTINGS), getErrorLogs);
|
|
router.delete('/', requireAuth, requireRole(...CAN_MANAGE_SETTINGS), deleteErrorLogs);
|
|
|
|
export default router;
|