fix(ws): close response body to prevent resource leak

The WebSocket dialer returns a response that was never closed, causing a resource leak. Now closes the response body on error.

cognitive committed Dec 30, 2025 at 00:22 UTC bf68eaf338e157c796f50bc53f8e6873f47dd9e0
1 file changed +5 -1
utils/ws.go
+5 -1
@@ -14,10 +14,14 @@ import (
14 // and wraps them as io.ReadWriteCloser.
15 func NewWebSocketDialer() func(context.Context, string) (io.ReadWriteCloser, error) {
16 return func(ctx context.Context, url string) (io.ReadWriteCloser, error) {
17 - wsConn, _, err := websocket.DefaultDialer.Dial(url, nil)
17 + wsConn, resp, err := websocket.DefaultDialer.Dial(url, nil)
18 if err != nil {
19 + if resp != nil {
20 + resp.Body.Close()
21 + }
22 return nil, err
23 }
24 + // Response body is closed by the Dialer on successful connection
25 return &wsstream.WsStream{Conn: wsConn}, nil
26 }
27 }