From 5573a9d78e9e9b5f8de67c11968a4349243df29f Mon Sep 17 00:00:00 2001 From: Heng Wei Bin <45145821+HengWeiBin@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:16:31 +0800 Subject: [PATCH] fix(webui): override wsUrl with local LAN IP when on dev server port 5173 --- webui/src/lib/bootstrap.ts | 16 ++++++++-------- webui/src/tests/bootstrap.test.ts | 13 +++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/webui/src/lib/bootstrap.ts b/webui/src/lib/bootstrap.ts index 434fe685..483e4740 100644 --- a/webui/src/lib/bootstrap.ts +++ b/webui/src/lib/bootstrap.ts @@ -72,20 +72,20 @@ export function deriveWsUrl( wsUrl?: string | null, ): string { const query = `?token=${encodeURIComponent(token)}`; - if (wsUrl && /^(wss?|nanobot-host):\/\//i.test(wsUrl)) { - const join = wsUrl.includes("?") ? "&" : "?"; - return `${wsUrl}${join}token=${encodeURIComponent(token)}`; - } const path = wsPath && wsPath.startsWith("/") ? wsPath : `/${wsPath || ""}`; - if (typeof window === "undefined") { - return `ws://127.0.0.1:8765${path}${query}`; - } - if (window.location.port === "5173") { + if (typeof window !== "undefined" && window.location.port === "5173") { const host = window.location.hostname.includes(":") ? `[${window.location.hostname}]` : window.location.hostname; return `ws://${host}:8765${path}${query}`; } + if (wsUrl && /^(wss?|nanobot-host):\/\//i.test(wsUrl)) { + const join = wsUrl.includes("?") ? "&" : "?"; + return `${wsUrl}${join}token=${encodeURIComponent(token)}`; + } + if (typeof window === "undefined") { + return `ws://127.0.0.1:8765${path}${query}`; + } const scheme = window.location.protocol === "https:" ? "wss" : "ws"; const host = window.location.host; return `${scheme}://${host}${path}${query}`; diff --git a/webui/src/tests/bootstrap.test.ts b/webui/src/tests/bootstrap.test.ts index 27ed3a8b..8bac034e 100644 --- a/webui/src/tests/bootstrap.test.ts +++ b/webui/src/tests/bootstrap.test.ts @@ -14,6 +14,19 @@ describe("bootstrap helpers", () => { ); }); + it("overrides the server-provided websocket URL when on dev server port 5173", () => { + vi.stubGlobal("window", { + location: { + port: "5173", + hostname: "192.168.1.100", + protocol: "http:", + }, + }); + expect(deriveWsUrl("/", "tok", "ws://127.0.0.1:8765/")).toBe( + "ws://192.168.1.100:8765/?token=tok", + ); + }); + it("preserves the host socket bridge URL", () => { expect(deriveWsUrl("/", "tok en", "nanobot-host://engine/")).toBe( "nanobot-host://engine/?token=tok%20en",