/** * Token Bucket Rate Limiter * * Implements a token bucket algorithm for rate limiting API requests. * Supports both request-based and token-based limits. */ import type { RateLimiterConfig, RateLimiterStats, RateLimiter, AcquireResult } from './types.js'; /** * Token bucket rate limiter implementation * * Uses the token bucket algorithm: * - Tokens are added at a constant rate (refill rate) * - Each request consumes tokens * - If insufficient tokens, request waits or fails * * @example * ```typescript * const limiter = new TokenBucketRateLimiter({ * requestsPerMinute: 60, * tokensPerMinute: 100000, * maxConcurrent: 5, * }); * * // Before making a request * await limiter.acquire(1000); // estimated tokens * * try { * const result = await makeRequest(); * limiter.reportUsage(actualTokens); * } finally { * limiter.release(); * } * ``` */ export declare class TokenBucketRateLimiter implements RateLimiter { private readonly config; private requestTokens; private lastRequestRefill; private llmTokens; private lastTokenRefill; private concurrent; private totalRequests; private totalTokens; private rateLimitHits; private totalWaitTimeMs; private waiters; constructor(config?: RateLimiterConfig); /** * Acquire permission to make a request */ acquire(estimatedTokens?: number): Promise; /** * Release a concurrent request slot */ release(): void; /** * Report actual token usage */ reportUsage(tokens: number): void; /** * Get current statistics */ getStats(): RateLimiterStats; /** * Reset the rate limiter */ reset(): void; /** * Check if a request can be made immediately */ canAcquire(estimatedTokens?: number): boolean; /** * Refill token buckets based on elapsed time */ private refill; /** * Check if can acquire without refilling */ private canAcquireNow; /** * Actually acquire the tokens */ private doAcquire; /** * Estimate wait time until tokens are available */ private estimateWaitTime; /** * Wait and try to acquire */ private waitAndAcquire; /** * Process waiting requests */ private processWaiters; } /** * Create a rate limiter with the given configuration */ export declare function createRateLimiter(config?: RateLimiterConfig): RateLimiter; /** * Create a no-op rate limiter (for testing or unlimited access) */ export declare function createNoopRateLimiter(): RateLimiter;