From 33ac63f5b87dfc25facad14082351f8f2a6f9658 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 25 Mar 2026 00:34:55 -0500 Subject: [PATCH] fix: get websocket to work w/ oauth --- .../opencode/src/plugin/openai/websocket.ts | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/packages/opencode/src/plugin/openai/websocket.ts b/packages/opencode/src/plugin/openai/websocket.ts index 328c109a54..4c97c956b9 100644 --- a/packages/opencode/src/plugin/openai/websocket.ts +++ b/packages/opencode/src/plugin/openai/websocket.ts @@ -35,26 +35,18 @@ export interface CreateWebSocketFetchOptions { * ``` */ export function createWebSocketFetch(options?: CreateWebSocketFetchOptions) { - const wsUrl = options?.url ?? "wss://api.openai.com/v1/responses" - let ws: WebSocket | null = null let connecting: Promise | null = null let busy = false - function getConnection(authorization: string): Promise { + function getConnection(url: string, headers: Record): Promise { if (ws?.readyState === WebSocket.OPEN && !busy) { return Promise.resolve(ws) } - if (connecting && !busy) return connecting connecting = new Promise((resolve, reject) => { - const socket = new WebSocket(wsUrl, { - headers: { - Authorization: authorization, - "OpenAI-Beta": "responses_websockets=2026-02-06", - }, - }) + const socket = new WebSocket(url, { headers }) socket.on("open", () => { ws = socket @@ -95,10 +87,10 @@ export function createWebSocketFetch(options?: CreateWebSocketFetchOptions) { return globalThis.fetch(input, init) } - const headers = normalizeHeaders(init.headers) - const authorization = headers["authorization"] ?? "" + const wsUrl = getWebSocketURL(url, options?.url) + const headers = getWebSocketHeaders(init.headers) - const connection = await getConnection(authorization) + const connection = await getConnection(wsUrl, headers) busy = true const { stream: _, ...requestBody } = body @@ -208,3 +200,18 @@ function normalizeHeaders(headers: HeadersInit | undefined): Record