handler property

  1. @override
MiddlewareHandler get handler
override

Implementation

@override
MiddlewareHandler get handler => (req, res, next) async {
  final ip = req.ip;

  if (_store.isRateLimited(ip, maxRequests)) {
    res.status(429).sendJson({
      'error': 'Too Many Requests',
      'message': 'You have exceeded the rate limit.',
      'retry_after': _store.getRetryAfter(ip).inSeconds,
    });
    return;
  }

  _store.increment(ip);

  // Add rate limit headers
  final remaining = maxRequests - _store.getRequestCount(ip);
  final reset = _store.getResetTime(ip).millisecondsSinceEpoch ~/ 1000;

  res.header('X-RateLimit-Limit', maxRequests.toString());
  res.header('X-RateLimit-Remaining', remaining.toString());
  res.header('X-RateLimit-Reset', reset.toString());

  await next();
};