fix(openai): preserve websocket upgrade error messages

This commit is contained in:
Aiden Cline
2026-05-28 12:35:45 -05:00
parent 05e3c4ecee
commit daac68f7bf
2 changed files with 14 additions and 2 deletions
+3 -2
View File
@@ -3,6 +3,7 @@
import WebSocket from "ws" import WebSocket from "ws"
import { ProviderError } from "@/provider/error" import { ProviderError } from "@/provider/error"
import { errorMessage } from "@/util/error"
export const PROTOCOL_HEADER = "responses_websockets=2026-02-06" export const PROTOCOL_HEADER = "responses_websockets=2026-02-06"
@@ -94,10 +95,10 @@ export function connectResponsesWebSocket(options: ConnectResponsesWebSocketOpti
resolve(socket) resolve(socket)
} }
function onError(error: Error) { function onError(error: unknown) {
socket.on("error", () => {}) socket.on("error", () => {})
cleanup() cleanup()
reject(error) reject(error instanceof Error ? error : new Error(errorMessage(error), { cause: error }))
} }
function onClose(code: number, reason: Buffer) { function onClose(code: number, reason: Buffer) {
@@ -39,6 +39,17 @@ describe("plugin.openai.ws", () => {
).rejects.toThrow("WebSocket connect timed out") ).rejects.toThrow("WebSocket connect timed out")
}) })
test("surfaces websocket upgrade rejection messages", async () => {
await using server = await createRejectingWebSocketServer(() => {})
await expect(
OpenAIWebSocket.connectResponsesWebSocket({
url: server.wsUrl,
headers: {},
}),
).rejects.toThrow("Expected 101 status code")
})
test("enforces websocket send idle timeout", async () => { test("enforces websocket send idle timeout", async () => {
const socket = new (class extends EventEmitter { const socket = new (class extends EventEmitter {
send(_data: string, _callback: (error?: Error) => void) {} send(_data: string, _callback: (error?: Error) => void) {}