Rate limiter interface for controlling request rates.

Implements token bucket or similar algorithms to prevent abuse and ensure fair resource usage across agents and operations.

const limiter = new TokenBucketRateLimiter({
maxRequests: 100,
windowMs: 60000 // 100 requests per minute
});

// Check if request is allowed
const result = await limiter.check('user:123');
if (!result.allowed) {
throw new Error(`Rate limit exceeded. Retry after ${result.retryAfter}ms`);
}

// Consume a token
await limiter.consume('user:123');

// Consume multiple tokens
await limiter.consume('user:123', 5);
interface RateLimiter {
    check(key: string): Promise<RateLimitResult>;
    consume(key: string, tokens?: number): Promise<RateLimitResult>;
    reset(key: string): Promise<void>;
    get(key: string): Promise<null | RateLimitResult>;
    block(key: string, durationMs: number): Promise<void>;
    unblock(key: string): Promise<void>;
    isBlocked(key: string): Promise<boolean>;
}

Methods

  • Consume tokens from the rate limit

    Parameters

    • key: string

      Unique identifier for the rate limit

    • Optionaltokens: number

      Number of tokens to consume (default: 1)

    Returns Promise<RateLimitResult>

    Rate limit result after consumption

    If rate limit is exceeded

  • Block a key from making requests for a duration

    Parameters

    • key: string

      Unique identifier to block

    • durationMs: number

      Duration to block in milliseconds

    Returns Promise<void>

  • Check if a key is currently blocked

    Parameters

    • key: string

      Unique identifier to check

    Returns Promise<boolean>

    true if blocked