NAME

Trickster::Middleware::RateLimiter - Rate limiting middleware for Trickster

SYNOPSIS

use Trickster::Middleware::RateLimiter;

# Default: 60 requests per 60 seconds per IP
$app->middleware(Trickster::Middleware::RateLimiter->new);

# Custom limits
$app->middleware(Trickster::Middleware::RateLimiter->new(
    requests => 100,
    window => 3600,  # 1 hour
));

# Custom key generator (e.g., by user ID)
$app->middleware(Trickster::Middleware::RateLimiter->new(
    key_generator => sub {
        my $env = shift;
        return $env->{'trickster.user_id'} || $env->{REMOTE_ADDR};
    },
));

DESCRIPTION

Trickster::Middleware::RateLimiter provides rate limiting to protect your application from abuse.

OPTIONS

requests

Number of requests allowed per window. Default: 60

window

Time window in seconds. Default: 60

storage

Hash ref for storing rate limit data. Default: in-memory hash (not suitable for multi-process)

key_generator

Code ref that generates a key from the environment. Default: uses REMOTE_ADDR

error_handler

Code ref that returns the response when rate limit is exceeded.

HEADERS

The middleware adds the following headers to responses:

X-RateLimit-Limit

Maximum number of requests allowed

X-RateLimit-Remaining

Number of requests remaining in current window

X-RateLimit-Reset

Unix timestamp when the rate limit resets