Class: TokenBucketRateLimiter

Defined in: rate-limit/limiter.ts:48

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

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();
}

Implements

Constructors

Constructor

new TokenBucketRateLimiter(config?): TokenBucketRateLimiter;

Defined in: rate-limit/limiter.ts:75

Parameters

Parameter Type
config RateLimiterConfig

Returns

TokenBucketRateLimiter

Methods

acquire()

acquire(estimatedTokens?): Promise<AcquireResult>;

Defined in: rate-limit/limiter.ts:93

Acquire permission to make a request

Parameters

Parameter Type Default value
estimatedTokens number 0

Returns

Promise<AcquireResult>

Implementation of

RateLimiter.acquire

canAcquire()

canAcquire(estimatedTokens?): boolean;

Defined in: rate-limit/limiter.ts:190

Check if a request can be made immediately

Parameters

Parameter Type Default value
estimatedTokens number 0

Returns

boolean

Implementation of

RateLimiter.canAcquire

getStats()

getStats(): RateLimiterStats;

Defined in: rate-limit/limiter.ts:149

Get current statistics

Returns

RateLimiterStats

Implementation of

RateLimiter.getStats

release()

release(): void;

Defined in: rate-limit/limiter.ts:123

Release a concurrent request slot

Returns

void

Implementation of

RateLimiter.release

reportUsage()

reportUsage(tokens): void;

Defined in: rate-limit/limiter.ts:135

Report actual token usage

Parameters

Parameter Type
tokens number

Returns

void

Implementation of

RateLimiter.reportUsage

reset()

reset(): void;

Defined in: rate-limit/limiter.ts:165

Reset the rate limiter

Returns

void

Implementation of

RateLimiter.reset