rateLimit.js 624 B

1234567891011121314151617181920212223242526
  1. const buckets = new Map();
  2. export function rateLimitMiddleware(req, res, next) {
  3. const limitPerMinute = Number(process.env.RATE_LIMIT_PER_MINUTE ?? 0);
  4. if (!limitPerMinute) return next();
  5. const key = req.ip ?? "unknown";
  6. const now = Date.now();
  7. const windowMs = 60_000;
  8. const bucket = buckets.get(key) ?? { count: 0, resetAt: now + windowMs };
  9. if (now > bucket.resetAt) {
  10. bucket.count = 0;
  11. bucket.resetAt = now + windowMs;
  12. }
  13. bucket.count += 1;
  14. buckets.set(key, bucket);
  15. if (bucket.count > limitPerMinute) {
  16. res.status(429).json({ error: "rate_limited" });
  17. return;
  18. }
  19. next();
  20. }