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