'use strict'; const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); class PoliteGate { constructor({ minMs = 8000, maxMs = 15000 } = {}) { if (!Number.isFinite(minMs) || !Number.isFinite(maxMs) || minMs < 0 || maxMs < minMs) { throw new Error('Invalid delay range'); } this.minMs = minMs; this.maxMs = maxMs; this.lastRequestAt = 0; } async wait() { if (!this.lastRequestAt) return; const target = this.minMs + Math.floor(Math.random() * (this.maxMs - this.minMs + 1)); const remaining = target - (Date.now() - this.lastRequestAt); if (remaining > 0) await sleep(remaining); } mark() { this.lastRequestAt = Date.now(); } } module.exports = { PoliteGate, sleep };