Refresh tokens, rate limiting por cuenta y el cierre del path traversal
Detalle completo: obsidian/versions/2.2.0.md en el repo raíz (Quyca).
Lo que entra
Backend
- Refresh tokens con rotación y detección de reuso, sobre un
redis-authdedicado - Rate limiting por cuenta (
AccountThrottlerGuard) enPOST /auth/login— por email, no por IP - Cierre de un path traversal real en la subida de archivos (
resolveFolder()+safeFileName()) - Validación de entradas: listas blancas, topes de tamaño, validación de URLs
/healthahora también hacePINGaredis-auth, no soloSELECT 1a Postgres
Frontend
- Módulo Tools: afinador y "Cantar con Guía"
- Refresh single-flight ante 401 concurrentes
- Rate limiting en nginx (
limit_req/limit_conn) /explore-groupsse guardea concanSee, cierra un agujero de autorización- Responsive completo del dashboard, selector de institución movido a Inicio, invitaciones a un modal
Breaking changes
Ninguno en la superficie de API — ningún endpoint cambió de ruta ni de forma de respuesta.
Sí hubo un requisito de infraestructura: REDIS_AUTH_URL es una variable nueva sin valor por
defecto, y el servicio redis-auth no se crea solo en un deploy (--no-deps). Se preparó a mano en
la VM antes de este release y quedó verificado (PING responde NOAUTH, contraseñas coincidentes).
Detalle en obsidian/versions/2.2.0.md §3 y §4.
Qué hacer para desplegar
Nada adicional — el pipeline (push a master → tests + build + deploy + verificación por curl) lo
hace solo, sobre una VM que ya tiene redis-auth preparado.
🤖 Generated with Claude Code