@satyajit_me/rate-limiter
v1.0.1
Published
Simple rate limiting with token bucket and sliding window algorithms
Maintainers
Readme
Rate Limiter
Simple rate limiting with token bucket and sliding window algorithms.
Installation
npm install rate-limiterQuick Start
import { createLimiter, KeyedRateLimiter } from 'rate-limiter';
// Simple limiter
const limiter = createLimiter({ limit: 100, windowMs: 60000 });
if (limiter.consume()) {
// Process request
} else {
// Rate limited
}
// Per-user limiting
const userLimiter = new KeyedRateLimiter({ limit: 10, windowMs: 60000 });
userLimiter.consume(userId);Algorithms
Token Bucket
Allows bursting up to capacity, then refills over time.
const limiter = new TokenBucket({
capacity: 10, // Maximum tokens
refillRate: 1, // Tokens added per interval
refillInterval: 1000 // Refill interval (ms)
});Fixed Window
Limits requests per fixed time window.
const limiter = new FixedWindow({
limit: 100, // Requests per window
windowMs: 60000 // Window duration (ms)
});Sliding Window
More accurate rate limiting using sliding windows.
const limiter = new SlidingWindow({
limit: 100,
windowMs: 60000
});API
Common Methods
limiter.consume() // Try to consume, returns boolean
limiter.check() // Check without consuming
limiter.remaining() // Get remaining requests
limiter.reset() // Reset the limiterKeyedRateLimiter
For per-user/IP rate limiting:
const limiter = new KeyedRateLimiter({
limit: 10,
windowMs: 60000,
algorithm: 'sliding' // 'sliding', 'fixed', 'token'
});
limiter.consume('user123')
limiter.check('user123')
limiter.remaining('user123')
limiter.reset('user123')
limiter.clear() // Clear allcreateLimiter(options)
Factory function:
createLimiter({ algorithm: 'sliding', limit: 100 })
createLimiter({ algorithm: 'token', capacity: 10 })
createLimiter({ algorithm: 'fixed', limit: 100 })License
MIT
