javascript / expert
Snippet
Generator-Based Stateful Token Bucket Rate Limiting logic for Next.js Middleware
Implements a stateful token bucket rate-limiting mechanism using JavaScript generator functions (function*). The generator encapsulates bucket state across requests, dynamically calculates token refills based on timestamp deltas, and receives requested token consumption counts via bidirectional yield evaluation.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export function* createTokenBucket(capacity, refillRatePerSec) {let tokens = capacity;let lastRefill = Date.now();while (true) {const now = Date.now();const elapsedSeconds = (now - lastRefill) / 1000;tokens = Math.min(capacity, tokens + elapsedSeconds * refillRatePerSec);lastRefill = now;const requested = yield { allowed: tokens >= 1, remaining: Math.floor(tokens) };if (requested && tokens >= requested) {tokens -= requested;}}}
nextjs
Breakdown
1
export function* createTokenBucket(capacity, refillRatePerSec) {
Defines a generator function that produces an iterable state machine for controlling request tokens.
2
tokens = Math.min(capacity, tokens + elapsedSeconds * refillRatePerSec);
Recalculates current available token balance based on elapsed time and refill rate capped at maximum capacity.
3
const requested = yield { allowed: tokens >= 1, remaining: Math.floor(tokens) };
Yields rate limit status to the caller and pauses execution, resuming when the caller passes requested token units back via next(count).