UNPKG

@zebec-network/zebec-stake-sdk

Version:

An SDK for zebec network stake solana program

58 lines (57 loc) 1.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RateLimitedQueue = void 0; class RateLimitedQueue { queue = []; running = 0; maxConcurrent; minDelay; lastRequestTime = 0; constructor(maxConcurrent = 3, minDelayMs = 200) { this.maxConcurrent = maxConcurrent; this.minDelay = minDelayMs; } async add(task) { return new Promise((resolve, reject) => { this.queue.push(async () => { try { // Ensure minimum delay between requests const now = Date.now(); const timeSinceLastRequest = now - this.lastRequestTime; if (timeSinceLastRequest < this.minDelay) { await new Promise((resolve) => setTimeout(resolve, this.minDelay - timeSinceLastRequest)); } this.lastRequestTime = Date.now(); const result = await task(); resolve(result); } catch (error) { reject(error); } }); this.processQueue(); }); } async processQueue() { if (this.running >= this.maxConcurrent || this.queue.length === 0) { return; } this.running++; const task = this.queue.shift(); try { await task(); } finally { this.running--; this.processQueue(); // Process next item } } // Test helper methods getQueueLength() { return this.queue.length; } getRunningCount() { return this.running; } } exports.RateLimitedQueue = RateLimitedQueue;