import { Timer } from '@matrixai/timer'; /** * Internal data structure used to track a buckets' information. * Internal use only so explicitly not exported. */ type TokenBucket = { creationTimestamp: number; tokens: number; lastRefillTimestamp: number; capacity: number; refillRatePerSecond: number; }; declare class RateLimiter { protected defaultTTL: number; protected defaultCapacity: number; protected defaultRate: number; protected defaultConsume: number; protected tokenBuckets: Map; protected expirationTimers: Map; protected refillTimer: Timer | undefined; constructor(defaultTTL?: number, defaultCapacity?: number, defaultRate?: number, defaultConsume?: number); /** * Starts the Refill interval timer */ startRefillInterval(): void; /** * Stops the Refill interval timer */ stopRefillInterval(): void; /** * Refills a second worth of tokens defined by the `refillRatePerSecond`. */ refill(): void; /** * Consumes an amount of tokens for a given bucket. Will return true if the tokens were available to be consumed. * Otherwise, returns false if there were insufficient tokens. * @param key - Key for the given bucket. * @param tokensToConsume - Number of tokens to consume. * @returns True if there were sufficient tokens that were consumed. False otherwise with no tokens consumed. */ consume(key: string, tokensToConsume?: number): boolean; /** * Gets the available tokens for a given bucket. * @param key - Key for the given bucket. */ tokens(key: string): number; /** * Clears all existing `TokenBuckets` . */ clearBuckets(): void; /** * Stops refreshing and clears all existing `TokenBucket`s */ stop(): void; protected scheduleExpiration(key: string, ttl: number): void; protected getBucket(key: string, ttl?: number): TokenBucket; } export default RateLimiter;