// Created on savesnippets.com ยท https://savesnippets.com/GmQtVIDyGa943c function createRateLimiter(maxTokens = 10, refillRate = 1, refillInterval = 1000) { let tokens = maxTokens; setInterval(() => { tokens = Math.min(maxTokens, tokens + refillRate); }, refillInterval); return function consume(count = 1) { if (tokens >= count) { tokens -= count; return true; } return false; }; } // Usage const allowed = createRateLimiter(5, 1, 1000); // 5 burst, +1/sec for (let i = 0; i < 8; i++) { console.log(`Request ${i + 1}:`, allowed() ? 'OK' : 'RATE LIMITED'); } // First 5: OK, next 3: RATE LIMITED