handle method

Middleware handle()

Returns a Middleware that enforces the rate limit.

Implementation

Middleware handle() {
  return (Context ctx, Next next) async {
    final ip = ctx.request.rawRequest.connectionInfo?.remoteAddress.address ?? 'unknown';
    final now = DateTime.now();

    final clientRequests = _requests[ip] ??= [];
    final recentRequests = clientRequests.where((d) => now.difference(d) < window).toList();
    _requests[ip] = recentRequests;

    if (recentRequests.length >= maxRequests) {
      return Response(
        statusCode: 429,
        body: 'Too Many Requests',
        headers: {'Retry-After': window.inSeconds.toString()},
      );
    }

    recentRequests.add(now);
    return next();
  };
}