rateLimit static method

Middleware Function() rateLimit({
  1. required int maxRequests,
  2. required Duration window,
})

Creates endpoint-specific rate limiting middleware.

Implementation

static Middleware Function() rateLimit({
  required int maxRequests,
  required Duration window,
}) {
  final Map<String, List<DateTime>> _requests = {};

  return () => (Handler handler) {
    return (Request request) async {
      final key = request.requestedUri.path;
      final now = DateTime.now();

      _requests[key] ??= [];
      _requests[key]!.removeWhere((time) => now.difference(time) > window);

      if (_requests[key]!.length >= maxRequests) {
        return Response(429,
            body: '{"error": "Rate limit exceeded"}',
            headers: {'content-type': 'application/json'});
      }

      _requests[key]!.add(now);
      return handler(request);
    };
  };
}