fix: scope voice response parsing to its backend lifetime

This commit is contained in:
Sameh Khamis committed 2026-09-13 22:00:14 -07:00
1 parent 1a1cbadf5b
commit c488a18df1
3 files changed
+6 -3

No files matched your search

+4 -1
View File
@@ -7,9 +7,12 @@ export function createRealtimeBackend({
tokenTransport = (...args) => fetch(...args),
connectionTransport = (...args) => fetch(...args),
timeoutMs = 30_000,
signal: lifetime,
} = {}) {
const scoped = (signal) =>
AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)].filter(Boolean));
AbortSignal.any(
[lifetime, signal, AbortSignal.timeout(timeoutMs)].filter(Boolean),
);
return Object.freeze({
protocol: 'openai-realtime',
async requestToken({ tier = DEFAULT_VOICE_TIER, signal } = {}) {
+2 -1
View File
@@ -89,12 +89,13 @@ test('cancellation rejects late token and SDP bodies without promoting a stopped
release = resolve;
});
const backend = createRealtimeBackend({
signal: lifetime.signal,
tokenTransport: async () => ({ ok: true, json: () => pending }),
connectionTransport: async () => ({ ok: true, text: () => pending }),
});
const result =
phase === 'token'
? backend.requestToken({ signal: lifetime.signal })
? backend.requestToken()
: backend.negotiate({
credential: { token: 'test' },
offerSdp: 'offer',
-1
View File
@@ -2598,4 +2598,3 @@ function resetVoiceVisualizerBars(bars) {
bar.style.removeProperty('--audio-opacity');
}
}