class ConcurrencyLimiter { constructor(maxConcurrent) { this.maxConcurrent = maxConcurrent; this.active = 0; this.queue = []; } async enqueue(task) { if (this.active >= this.maxConcurrent) { await new Promise(resolve => this.queue.push(resolve)); } this.active++; try { return await task(); } finally { this.active--; if (this.queue.length > 0) { this.queue.shift()(); } } } } module.exports = ConcurrencyLimiter;