From 75b27fa42d07bd661f724dff35077dfbeb5a220e Mon Sep 17 00:00:00 2001 From: tianma-if Date: Wed, 29 Jul 2026 01:43:24 +0800 Subject: [PATCH] fix: keep desktop instance switching accessible --- apps/desktop/package.json | 2 +- apps/web/src/components/LoginScreen.tsx | 5 +++++ apps/web/src/lib/api.test.mjs | 28 +++++++++++++++++++++++++ apps/web/src/lib/api.ts | 1 + package.json | 2 +- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index d2609b49..0a2dbada 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@edgeever/desktop", - "version": "1.6.39", + "version": "1.6.40", "desktopName": "EdgeEver", "private": true, "description": "Native EdgeEver desktop client", diff --git a/apps/web/src/components/LoginScreen.tsx b/apps/web/src/components/LoginScreen.tsx index f5029452..2ac689b1 100644 --- a/apps/web/src/components/LoginScreen.tsx +++ b/apps/web/src/components/LoginScreen.tsx @@ -106,6 +106,11 @@ export const LoginScreen = ({ configurationError, error, isSubmitting, onChangeI {isSubmitting ? t("login.submitting") : t("login.submit")} + {onChangeInstance ? ( + + ) : null} } diff --git a/apps/web/src/lib/api.test.mjs b/apps/web/src/lib/api.test.mjs index 3f41611f..779c4d3c 100644 --- a/apps/web/src/lib/api.test.mjs +++ b/apps/web/src/lib/api.test.mjs @@ -11,6 +11,10 @@ globalThis.window = { apiBaseUrl: "", setApiBaseUrl: async (value) => { calls.push(["bridge:start", value]); + if (!value) { + calls.push(["bridge:complete", value]); + return value; + } await new Promise((resolve) => { completeSave = resolve; }); @@ -39,6 +43,7 @@ const { api, cacheDesktopSession, getCachedDesktopSession, + resetDesktopApiBaseUrl, saveDesktopApiBaseUrl, } = await import("./api.ts"); @@ -61,9 +66,32 @@ describe("desktop instance setup", () => { expect(storage.get(DESKTOP_API_BASE_URL_STORAGE_KEY)).toBe("https://notes.example.com"); }); + test("clears the saved instance and cached session before switching", async () => { + calls.length = 0; + storage.set(DESKTOP_API_BASE_URL_STORAGE_KEY, "https://notes.example.com"); + cacheDesktopSession({ + authRequired: true, + authenticated: true, + demoMode: false, + sessionToken: "old-instance-session", + user: { id: "user-1", username: "admin", displayName: null, role: "owner" }, + }); + + resetDesktopApiBaseUrl(); + await Promise.resolve(); + + expect(storage.has(DESKTOP_API_BASE_URL_STORAGE_KEY)).toBe(false); + expect(getCachedDesktopSession()).toBeNull(); + expect(calls.slice(-2)).toEqual([ + ["bridge:start", ""], + ["bridge:complete", ""], + ]); + }); + test("uses the desktop session token and stops network retries after a 401", async () => { calls.length = 0; events.length = 0; + storage.set(DESKTOP_API_BASE_URL_STORAGE_KEY, "https://notes.example.com"); cacheDesktopSession({ authRequired: true, authenticated: true, diff --git a/apps/web/src/lib/api.ts b/apps/web/src/lib/api.ts index 8a1782c5..916dbbe7 100644 --- a/apps/web/src/lib/api.ts +++ b/apps/web/src/lib/api.ts @@ -123,6 +123,7 @@ export const saveDesktopApiBaseUrl = async (value: string) => { export const resetDesktopApiBaseUrl = () => { if (typeof window === "undefined" || !window.edgeeverDesktop?.isAvailable) return; + clearCachedDesktopSession(); window.localStorage.removeItem(DESKTOP_API_BASE_URL_STORAGE_KEY); void window.edgeeverDesktop.setApiBaseUrl(""); }; diff --git a/package.json b/package.json index f3b574a6..d520ab3b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "edgeever", - "version": "1.6.39", + "version": "1.6.40", "private": true, "type": "module", "workspaces": [