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();
    };