import type { RunId, RunResult, WebhookRunResult } from "../types"; export class EngineWaiters { private readonly completionWaiters = new Map void>>(); private readonly webhookResponseWaiters = new Map void>>(); waitForCompletion(runId: RunId): Promise { return new Promise((resolve) => { const list = this.completionWaiters.get(runId) ?? []; list.push(resolve); this.completionWaiters.set(runId, list); }); } waitForWebhookResponse(runId: RunId): Promise { return new Promise((resolve) => { const list = this.webhookResponseWaiters.get(runId) ?? []; list.push(resolve); this.webhookResponseWaiters.set(runId, list); }); } resolveRunCompletion(result: RunResult): void { if (result.status !== "completed" && result.status !== "failed" && result.status !== "halted") return; const list = this.completionWaiters.get(result.runId); if (!list || list.length === 0) return; this.completionWaiters.delete(result.runId); for (const r of list) r(result); } resolveWebhookResponse(result: WebhookRunResult): void { const list = this.webhookResponseWaiters.get(result.runId); if (!list || list.length === 0) return; this.webhookResponseWaiters.delete(result.runId); for (const resolve of list) resolve(result); } }