rateLimit static method
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);
};
};
}