From 408a96c3552a1e8167c5dcaf5f7fd19c95d8c73d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 3 Jan 2026 23:50:00 -0800 Subject: [PATCH] Fix wait for open --- src/widgets/truenas/proxy.js | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/widgets/truenas/proxy.js b/src/widgets/truenas/proxy.js index bad73d025..c20c865b2 100644 --- a/src/widgets/truenas/proxy.js +++ b/src/widgets/truenas/proxy.js @@ -115,12 +115,39 @@ async function authenticate(ws, widget) { throw new Error("TrueNAS authentication failed"); } +function waitForOpen(ws) { + return new Promise((resolve, reject) => { + const handleOpen = () => { + cleanup(); + resolve(); + }; + const handleError = (err) => { + cleanup(); + reject(err); + }; + const handleClose = () => { + cleanup(); + reject(new Error("TrueNAS websocket closed before the request was sent")); + }; + + function cleanup() { + ws.off("open", handleOpen); + ws.off("error", handleError); + ws.off("close", handleClose); + } + + ws.once("open", handleOpen); + ws.once("error", handleError); + ws.once("close", handleClose); + }); +} + async function callWebsocket(widget, method) { const wsUrl = buildWebsocketUrl(widget.url); logger.info("Connecting to TrueNAS websocket at %s", wsUrl); const ws = new WebSocket(wsUrl, { rejectUnauthorized: false }); - await waitForMessage(ws, (message) => (message === "open" ? true : undefined)); + await waitForOpen(ws); logger.info("Connected to TrueNAS websocket at %s", wsUrl); try { await ensureConnected(ws);