Files
wallabicher/web/backend/middlewares/rateLimit.js
Omar Sánchez Pizarro 81bf0675ed mongodb
Signed-off-by: Omar Sánchez Pizarro <omar.sanchez@pistacero.net>
2026-01-20 03:21:50 +01:00

31 lines
932 B
JavaScript

import { getRateLimiter } from '../services/mongodb.js';
// Rate Limiter Middleware
export async function rateLimitMiddleware(req, res, next) {
const rateLimiter = getRateLimiter();
if (!rateLimiter) {
// Si no hay rate limiter configurado, continuar sin límite
return next();
}
try {
// Usar IP como clave para el rate limiting
const key = req.ip || req.socket.remoteAddress || 'unknown';
await rateLimiter.consume(key);
next();
} catch (rejRes) {
// Se excedió el límite de peticiones
const retryAfter = Math.round(rejRes.msBeforeNext / 1000) || 60;
res.set('Retry-After', String(retryAfter));
res.set('X-RateLimit-Limit', '100');
res.set('X-RateLimit-Remaining', '0');
res.status(429).json({
error: 'Too Many Requests',
message: `Has excedido el límite de peticiones. Intenta de nuevo en ${retryAfter} segundos.`,
retryAfter
});
}
}