From 203367cb4557bebca87fd26878444695a95cf20d Mon Sep 17 00:00:00 2001 From: Aqil Aziz Date: Fri, 22 May 2026 18:00:38 +0700 Subject: [PATCH] fix(auth): refresh RPC cache before deep-link session store (#2384) --- .../utils/__tests__/desktopDeepLinkListener.test.ts | 11 +++++++++++ app/src/utils/desktopDeepLinkListener.ts | 3 +++ 2 files changed, 14 insertions(+) diff --git a/app/src/utils/__tests__/desktopDeepLinkListener.test.ts b/app/src/utils/__tests__/desktopDeepLinkListener.test.ts index 41665241d..f253cb1d2 100644 --- a/app/src/utils/__tests__/desktopDeepLinkListener.test.ts +++ b/app/src/utils/__tests__/desktopDeepLinkListener.test.ts @@ -33,6 +33,13 @@ const waitForOAuthAuthReadiness = vi.hoisted(() => vi.fn().mockResolvedValue({ ready: true as const }) ); +const coreRpcCache = vi.hoisted(() => ({ + clearCoreRpcUrlCache: vi.fn(), + clearCoreRpcTokenCache: vi.fn(), +})); + +vi.mock('../../services/coreRpcClient', () => coreRpcCache); + vi.mock('../oauthAppVersionGate', async importOriginal => { const actual = await importOriginal(); return { @@ -59,6 +66,8 @@ describe('desktopDeepLinkListener', () => { waitForOAuthAuthReadiness.mockResolvedValue({ ready: true }); vi.mocked(storeSession).mockReset(); vi.mocked(storeSession).mockResolvedValue(undefined); + coreRpcCache.clearCoreRpcUrlCache.mockClear(); + coreRpcCache.clearCoreRpcTokenCache.mockClear(); windowControls.show.mockClear(); windowControls.unminimize.mockClear(); windowControls.setFocus.mockClear(); @@ -172,6 +181,8 @@ describe('desktopDeepLinkListener', () => { await waitForAuthSettled(); expect(storeSession).toHaveBeenCalledWith('abc', {}); + expect(coreRpcCache.clearCoreRpcUrlCache).toHaveBeenCalledTimes(1); + expect(coreRpcCache.clearCoreRpcTokenCache).toHaveBeenCalledTimes(1); expect(getDeepLinkAuthState().isProcessing).toBe(false); }); diff --git a/app/src/utils/desktopDeepLinkListener.ts b/app/src/utils/desktopDeepLinkListener.ts index 254b6f96d..9128fec66 100644 --- a/app/src/utils/desktopDeepLinkListener.ts +++ b/app/src/utils/desktopDeepLinkListener.ts @@ -4,6 +4,7 @@ import { getCurrent, onOpenUrl } from '@tauri-apps/plugin-deep-link'; import { patchCoreStateSnapshot } from '../lib/coreState/store'; import { consumeLoginToken } from '../services/api/authApi'; +import { clearCoreRpcTokenCache, clearCoreRpcUrlCache } from '../services/coreRpcClient'; import { beginDeepLinkAuthProcessing, completeDeepLinkAuthProcessing, @@ -76,6 +77,8 @@ const focusMainWindow = async () => { }; const applySessionToken = async (sessionToken: string): Promise => { + clearCoreRpcUrlCache(); + clearCoreRpcTokenCache(); await storeSession(sessionToken, {}); patchCoreStateSnapshot({ snapshot: { sessionToken } }); window.dispatchEvent(new CustomEvent(SESSION_TOKEN_UPDATED_EVENT, { detail: { sessionToken } }));