(next: WebSocket)
| 296 | } |
| 297 | |
| 298 | function attach(next: WebSocket) { |
| 299 | cleanupSocket() |
| 300 | socket = next |
| 301 | socket.on("message", onMessage) |
| 302 | socket.once("error", onError) |
| 303 | socket.once("close", onClose) |
| 304 | cleanupSocket = () => { |
| 305 | socket.off("message", onMessage) |
| 306 | socket.off("error", onError) |
| 307 | socket.off("close", onClose) |
| 308 | } |
| 309 | const { stream: _stream, background: _background, ...payload } = options.body |
| 310 | resetIdleTimeout("idle timeout sending websocket request") |
| 311 | socket.send(JSON.stringify({ type: "response.create", ...payload }), (error) => { |
| 312 | if (completed) return |
| 313 | resetIdleTimeout("idle timeout waiting for websocket") |
| 314 | if (error) invalidate(new ProviderError.ResponseStreamError(error.message, { cause: error })) |
| 315 | }) |
| 316 | } |
| 317 | |
| 318 | return new Response( |
| 319 | new ReadableStream<Uint8Array>({ |
no test coverage detected