// Bounds how many async tasks run at once. Used both for fanning out // concurrent DB upserts and concurrent HTTP requests. export function createLimiter(concurrency: number) { let active = 0; const queue: Array<() => void> = []; function release() { active--; queue.shift()?.(); } return async function limit(fn: () => Promise): Promise { if (active >= concurrency) { await new Promise((resolve) => queue.push(resolve)); } active++; try { return await fn(); } finally { release(); } }; }