Class: LeakyBucketLimiter
Defined in: throttle.ts:635 Leaky-bucket rate limiter. Requests are appended to a fixed-capacity FIFO queue and “leak” out at a constant rate (requestsPerSecond). The result is smoothed
traffic: even if acquire is called in a burst, each protected
action fires at fixed 1000 / requestsPerSecond millisecond
intervals.
Compared to TokenBucketLimiter, leaky-bucket does not allow
bursts — pick this when downstream systems can’t tolerate spiky
load.
Example
Constructors
Constructor
new LeakyBucketLimiter(Defined in: throttle.ts:649capacity,requestsPerSecond):LeakyBucketLimiter
Parameters
capacity
number
Maximum queue depth. Calls to acquire
that exceed this throw immediately (“Rate limit exceeded:
queue full”); use tryAcquire to test first.
requestsPerSecond
number
Steady-state drain rate. Internally
converted to a per-request gap of 1000 / requestsPerSecond
milliseconds.
Returns
LeakyBucketLimiter
Methods
acquire()
acquire():Defined in: throttle.ts:661 Enqueue and await release.Promise<void>
Returns
Promise<void>
Throws
Error"Rate limit exceeded: queue full" when the queue
is already at capacity. Catch and translate to a 429 in
HTTP middleware.
getStats()
getStats(): object
Defined in: throttle.ts:728
Snapshot of bucket state.
Returns
object
{ availableTokens, queueSize, capacity } where
availableTokens = capacity − queueSize (free queue slots).
availableTokens
availableTokens: number
capacity
capacity: number
queueSize
queueSize: number
reset()
reset(): void
Defined in: throttle.ts:743
Drop every queued waiter and stop processing.
Note: pending promises returned by acquire will never
resolve after a reset(). Plumb an AbortSignal through call
sites if cancellable waits are required.
Returns
void
tryAcquire()
tryAcquire(): boolean
Defined in: throttle.ts:681
Non-blocking probe.
Returns
boolean
true only when the queue is empty and no drain
timer is currently armed — i.e. the caller could fire
immediately. Returns false even when there is room in the
queue but a previous call is still mid-leak; in that case
acquire would still succeed but with a wait.