From 8f77f55a4a6e221807b4582b20c852cd34fab1fc Mon Sep 17 00:00:00 2001 From: Volodymyr Polosukhin Date: Thu, 29 Jan 2026 22:01:02 +0200 Subject: [PATCH] Allow to propagate query params to sdk --- packages/sdk/src/index.ts | 8 +++++++- packages/sdk/src/realtime/client.ts | 12 ++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index 458ac08..de9a90d 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -50,6 +50,7 @@ const decartClientOptionsSchema = z baseUrl: z.url().optional(), proxy: proxySchema.optional(), integration: z.string().optional(), + queryParams: z.any().optional(), }) .refine( (data) => { @@ -72,12 +73,16 @@ export type DecartClientOptions = apiKey?: never; baseUrl?: string; integration?: string; + /** Additional query parameters to append to the WebSocket connection URL */ + queryParams?: Record; } | { proxy?: never; apiKey?: string; baseUrl?: string; integration?: string; + /** Additional query parameters to append to the WebSocket connection URL */ + queryParams?: Record; }; /** @@ -145,7 +150,7 @@ export const createDecartClient = (options: DecartClientOptions = {}) => { } else { baseUrl = parsedOptions.data.baseUrl || "https://api.decart.ai"; } - const { integration } = parsedOptions.data; + const { integration, queryParams } = parsedOptions.data; // Realtime (WebRTC) always requires direct API access with API key // Proxy mode is only for HTTP endpoints (process, queue, tokens) @@ -155,6 +160,7 @@ export const createDecartClient = (options: DecartClientOptions = {}) => { baseUrl: wsBaseUrl, apiKey: apiKey || "", integration, + queryParams, }); const process = createProcessClient({ diff --git a/packages/sdk/src/realtime/client.ts b/packages/sdk/src/realtime/client.ts index 6755cba..4b46716 100644 --- a/packages/sdk/src/realtime/client.ts +++ b/packages/sdk/src/realtime/client.ts @@ -26,6 +26,8 @@ export type RealTimeClientOptions = { baseUrl: string; apiKey: string; integration?: string; + /** Additional query parameters to append to the WebSocket connection URL */ + queryParams?: Record; }; const realTimeClientInitialStateSchema = modelStateSchema; @@ -90,7 +92,7 @@ export type RealTimeClient = { }; export const createRealTimeClient = (opts: RealTimeClientOptions) => { - const { baseUrl, apiKey, integration } = opts; + const { baseUrl, apiKey, integration, queryParams } = opts; const connect = async ( stream: MediaStream | null, @@ -141,8 +143,14 @@ export const createRealTimeClient = (opts: RealTimeClientOptions) => { : undefined; const url = `${baseUrl}${options.model.urlPath}`; + // Build query string with api_key, model, and any additional query params + const urlParams = new URLSearchParams({ + api_key: apiKey, + model: options.model.name, + ...(queryParams || {}), + }); const webrtcManager = new WebRTCManager({ - webrtcUrl: `${url}?api_key=${apiKey}&model=${options.model.name}`, + webrtcUrl: `${url}?${urlParams.toString()}`, apiKey, sessionId, fps: options.model.fps,