All real-time connect() methods—including listen.v1.connect(), listen.v2.connect(), agent.v1.connect(), speak.v1.connect(), and speak.v2.connect()—accept an abortSignal.
When the signal aborts:
- The SDK stops the pending or active transport.
- Automatic reconnection is disabled.
- A registered
close callback may run.
Important Notes:
AbortSignal does not clear callbacks registered with connection.on().waitForOpen() does not observe the signal directly. If you need to cancel a connection while it is still opening, you must implement an abort-aware wrapper using signal.addEventListener('abort', ...) to reject the promise manually.
import { DeepgramClient } from "@deepgram/sdk";
const client = new DeepgramClient();
const controller = new AbortController();
function waitForOpenOrAbort(
connection: { waitForOpen(): Promise<unknown> },
signal: AbortSignal,
): Promise<void> {
return new Promise((resolve, reject) => {
const cleanup = () => signal.removeEventListener("abort", onAbort);
const onAbort = () => {
cleanup();
reject(signal.reason ?? new Error("Connection aborted"));
};
if (signal.aborted) {
onAbort();
return;
}
signal.addEventListener("abort", onAbort, { once: true });
connection.waitForOpen().then(
() => {
cleanup();
resolve();
},
(error) => {
cleanup();
reject(error);
},
);
});
}
const connection = await client.listen.v1.connect({
model: "nova-3",
language: "en",
abortSignal: controller.signal,
});
connection.on("open", () => console.log("Connection opened"));
connection.on("message", (data) => console.log(data));
connection.connect();
await waitForOpenOrAbort(connection, controller.signal);
// Cancel the session later.
controller.abort();