diff --git a/.changeset/curly-dingos-pay.md b/.changeset/curly-dingos-pay.md new file mode 100644 index 00000000000..0510edaefe7 --- /dev/null +++ b/.changeset/curly-dingos-pay.md @@ -0,0 +1,6 @@ +--- +'@clerk/clerk-js': minor +--- + +Optimized session token poller to share token with other open tabs + diff --git a/integration/tests/session-token-cache/single-session.test.ts b/integration/tests/session-token-cache/single-session.test.ts index 793137b0471..03b5bd24953 100644 --- a/integration/tests/session-token-cache/single-session.test.ts +++ b/integration/tests/session-token-cache/single-session.test.ts @@ -11,7 +11,7 @@ import { createTestUtils, testAgainstRunningApps } from '../../testUtils'; * token fetches in one tab are automatically broadcast and cached in other tabs, * eliminating redundant network requests. */ -testAgainstRunningApps({ withEnv: [appConfigs.envs.withBroadcastChannel] })( +testAgainstRunningApps({ withEnv: [appConfigs.envs.withEmailCodes] })( 'MemoryTokenCache Multi-Tab Integration @generic', ({ app }) => { test.describe.configure({ mode: 'serial' }); diff --git a/packages/clerk-js/src/core/tokenCache.ts b/packages/clerk-js/src/core/tokenCache.ts index ddf54e06c0a..74697b80c63 100644 --- a/packages/clerk-js/src/core/tokenCache.ts +++ b/packages/clerk-js/src/core/tokenCache.ts @@ -138,7 +138,7 @@ const generateTabId = (): string => { /** * Creates an in-memory token cache with optional BroadcastChannel synchronization across tabs. * Automatically manages token expiration and cleanup via scheduled timeouts. - * BroadcastChannel support is enabled only in the channel build variant. + * BroadcastChannel support is enabled whenever the environment provides it. */ const MemoryTokenCache = (prefix = KEY_PREFIX): TokenCache => { const cache = new Map(); @@ -147,21 +147,19 @@ const MemoryTokenCache = (prefix = KEY_PREFIX): TokenCache => { let broadcastChannel: BroadcastChannel | null = null; const ensureBroadcastChannel = (): BroadcastChannel | null => { - if (!__BUILD_VARIANT_CHANNEL__) { - return null; - } - if (broadcastChannel) { return broadcastChannel; } - if (typeof BroadcastChannel !== 'undefined') { - broadcastChannel = new BroadcastChannel('clerk:session_token'); - broadcastChannel.addEventListener('message', (e: MessageEvent) => { - void handleBroadcastMessage(e); - }); + if (typeof BroadcastChannel === 'undefined') { + return null; } + broadcastChannel = new BroadcastChannel('clerk:session_token'); + broadcastChannel.addEventListener('message', (e: MessageEvent) => { + void handleBroadcastMessage(e); + }); + return broadcastChannel; };