diff --git a/src/acp/control-plane/manager.test.ts b/src/acp/control-plane/manager.test.ts index 6f02d1c979c..16cb9317712 100644 --- a/src/acp/control-plane/manager.test.ts +++ b/src/acp/control-plane/manager.test.ts @@ -87,10 +87,13 @@ async function flushMicrotasks(rounds = 3): Promise { } function createDeferred(): { promise: Promise; resolve: () => void } { - let resolve!: () => void; + let resolve: (() => void) | undefined; const promise = new Promise((next) => { resolve = next; }); + if (!resolve) { + throw new Error("Expected deferred resolver to be initialized"); + } return { promise, resolve }; } diff --git a/src/gateway/server-lanes.test.ts b/src/gateway/server-lanes.test.ts index bd2ea60aa0b..d51335acb73 100644 --- a/src/gateway/server-lanes.test.ts +++ b/src/gateway/server-lanes.test.ts @@ -5,12 +5,15 @@ import { CommandLane } from "../process/lanes.js"; import { applyGatewayLaneConcurrency } from "./server-lanes.js"; function createDeferred() { - let resolve!: (value: T | PromiseLike) => void; - let reject!: (reason?: unknown) => void; + let resolve: ((value: T | PromiseLike) => void) | undefined; + let reject: ((reason?: unknown) => void) | undefined; const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); + if (!resolve || !reject) { + throw new Error("Expected deferred callbacks to be initialized"); + } return { promise, resolve, reject }; } diff --git a/src/gateway/server-methods/models.test.ts b/src/gateway/server-methods/models.test.ts index b47b027c5a2..fc918fe473f 100644 --- a/src/gateway/server-methods/models.test.ts +++ b/src/gateway/server-methods/models.test.ts @@ -10,12 +10,15 @@ type Deferred = { }; function createDeferred(): Deferred { - let resolve!: (value: T) => void; - let reject!: (error: unknown) => void; + let resolve: ((value: T) => void) | undefined; + let reject: ((error: unknown) => void) | undefined; const promise = new Promise((resolvePromise, rejectPromise) => { resolve = resolvePromise; reject = rejectPromise; }); + if (!resolve || !reject) { + throw new Error("Expected deferred callbacks to be initialized"); + } return { promise, resolve, reject }; } diff --git a/src/gateway/server.chat.gateway-server-chat-b.test.ts b/src/gateway/server.chat.gateway-server-chat-b.test.ts index 1f8118e7b7c..b494dbacfc0 100644 --- a/src/gateway/server.chat.gateway-server-chat-b.test.ts +++ b/src/gateway/server.chat.gateway-server-chat-b.test.ts @@ -51,12 +51,15 @@ const sendReq = ( }; function createDeferred() { - let resolve!: (value: T | PromiseLike) => void; - let reject!: (reason?: unknown) => void; + let resolve: ((value: T | PromiseLike) => void) | undefined; + let reject: ((reason?: unknown) => void) | undefined; const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); + if (!resolve || !reject) { + throw new Error("Expected deferred callbacks to be initialized"); + } return { promise, resolve, reject }; } diff --git a/src/realtime-transcription/websocket-session.test.ts b/src/realtime-transcription/websocket-session.test.ts index 5607cb15754..496e6e07a54 100644 --- a/src/realtime-transcription/websocket-session.test.ts +++ b/src/realtime-transcription/websocket-session.test.ts @@ -60,18 +60,26 @@ async function createRealtimeServer(params?: { return { url: `ws://127.0.0.1:${port}` }; } +function createSignal() { + let resolve: (() => void) | undefined; + const promise = new Promise((next) => { + resolve = next; + }); + if (!resolve) { + throw new Error("Expected frame signal resolver to be initialized"); + } + return { promise, resolve }; +} + describe("createRealtimeTranscriptionWebSocketSession", () => { it("flushes queued binary audio after an open-ready connection", async () => { const frames: Buffer[] = []; - let resolveFrames!: () => void; - const framesReady = new Promise((resolve) => { - resolveFrames = resolve; - }); + const framesReady = createSignal(); const server = await createRealtimeServer({ onBinary: (payload) => { frames.push(payload); if (Buffer.concat(frames).toString() === "queuedafter") { - resolveFrames(); + framesReady.resolve(); } }, }); @@ -88,7 +96,7 @@ describe("createRealtimeTranscriptionWebSocketSession", () => { session.sendAudio(Buffer.from("queued")); await session.connect(); session.sendAudio(Buffer.from("after")); - await framesReady; + await framesReady.promise; expect(Buffer.concat(frames).toString()).toBe("queuedafter"); expect(session.isConnected()).toBe(true); session.close(); @@ -96,16 +104,13 @@ describe("createRealtimeTranscriptionWebSocketSession", () => { it("lets providers mark ready after a JSON handshake", async () => { const frames: unknown[] = []; - let resolveFrames!: () => void; - const framesReady = new Promise((resolve) => { - resolveFrames = resolve; - }); + const framesReady = createSignal(); const server = await createRealtimeServer({ initialEvent: { type: "session.created" }, onText: (payload) => { frames.push(payload); if (frames.length === 2) { - resolveFrames(); + framesReady.resolve(); } }, }); @@ -126,7 +131,7 @@ describe("createRealtimeTranscriptionWebSocketSession", () => { session.sendAudio(Buffer.from("queued")); await session.connect(); - await framesReady; + await framesReady.promise; expect(frames).toEqual([ { type: "session.update" }, { type: "input_audio.append", audio: Buffer.from("queued").toString("base64") },