From f1bda668838b839834d9cca3a6bebd8ce8a3fabc Mon Sep 17 00:00:00 2001 From: Moritz Date: Wed, 6 Sep 2023 18:22:35 +0200 Subject: [PATCH] Allow to define custom bucket size --- src/RateLimiter.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/RateLimiter.ts b/src/RateLimiter.ts index acc9b10..b75b91f 100644 --- a/src/RateLimiter.ts +++ b/src/RateLimiter.ts @@ -5,6 +5,7 @@ export type RateLimiterOpts = { tokensPerInterval: number; interval: Interval; fireImmediately?: boolean; + bucketSize?: number; }; /** @@ -18,6 +19,8 @@ export type RateLimiterOpts = { * one of the following strings: 'second', 'minute', 'hour', day'. * @param options.fireImmediately Whether or not the promise will resolve * immediately when rate limiting is in effect (default is false). + * @param options.bucketSize Maximum number of tokens to hold in the bucket. + * Also known as the burst rate. Defaults to options.tokensPerInterval. */ export class RateLimiter { tokenBucket: TokenBucket; @@ -25,9 +28,9 @@ export class RateLimiter { tokensThisInterval: number; fireImmediately: boolean; - constructor({ tokensPerInterval, interval, fireImmediately }: RateLimiterOpts) { + constructor({ tokensPerInterval, interval, fireImmediately, bucketSize }: RateLimiterOpts) { this.tokenBucket = new TokenBucket({ - bucketSize: tokensPerInterval, + bucketSize: bucketSize ?? tokensPerInterval, tokensPerInterval, interval, });