Logos DX
    Preparing search index...

    Interface RateLimitConfig<S, H, P>

    Configuration for request rate limiting.

    Rate limiting controls the rate of outgoing requests using a token bucket algorithm. Each unique request key (generated by the serializer) gets its own rate limit bucket, allowing per-endpoint or per-user rate limiting.

    interface RateLimitConfig<S = unknown, H = unknown, P = unknown> {
        enabled?: boolean;
        maxCalls?: number;
        methods?: _InternalHttpMethods[];
        onRateLimit?: (
            ctx: RequestKeyOptions<S, H, P>,
            waitTimeMs: number,
        ) => void | Promise<void>;
        rules?: RateLimitRule<S, H, P>[];
        serializer?: RequestSerializer<S, H, P>;
        shouldRateLimit?: (ctx: RequestKeyOptions<S, H, P>) => boolean | undefined;
        waitForToken?: boolean;
        windowMs?: number;
    }

    Type Parameters

    • S = unknown
    • H = unknown
    • P = unknown
    Index

    Properties

    enabled?: boolean

    Enable rate limiting globally. Default: true

    maxCalls?: number

    Maximum calls allowed within the time window. Default: 100

    HTTP methods to rate limit. Default: all methods

    onRateLimit?: (
        ctx: RequestKeyOptions<S, H, P>,
        waitTimeMs: number,
    ) => void | Promise<void>

    Callback invoked when a request is rate limited. Called before waiting (if waitForToken is true) or rejecting.

    rules?: RateLimitRule<S, H, P>[]

    Route-specific rules

    serializer?: RequestSerializer<S, H, P>

    Custom serializer for generating rate limit bucket keys. Default groups requests by method + pathname.

    // Per-user rate limiting
    serializer: (ctx) => `user:${ctx.headers?.['X-User-ID'] ?? 'anonymous'}`
    // Global rate limiting (all requests share one bucket)
    serializer: () => 'global'
    shouldRateLimit?: (ctx: RequestKeyOptions<S, H, P>) => boolean | undefined

    Pre-check callback. Return false to bypass rate limiting for this request. Useful for whitelisting certain requests or implementing dynamic bypass logic.

    waitForToken?: boolean

    Behavior when rate limit is exceeded.

    • true: Wait for token to become available (default)
    • false: Reject immediately with RateLimitError
    windowMs?: number

    Time window in milliseconds. Default: 60000 (1 minute)