diff --git a/.changeset/fix-gettoken-template-rn.md b/.changeset/fix-gettoken-template-rn.md new file mode 100644 index 00000000000..d884bd5f1cc --- /dev/null +++ b/.changeset/fix-gettoken-template-rn.md @@ -0,0 +1,5 @@ +--- +"@clerk/shared": patch +--- + +Fix `getToken({ template })` not working in React Native by correcting `isValidBrowser()` and `isBrowserOnline()` to return `true` in non-browser environments instead of `false` diff --git a/packages/shared/src/__tests__/browser.spec.ts b/packages/shared/src/__tests__/browser.spec.ts index 4cb73c6989a..b85244298c0 100644 --- a/packages/shared/src/__tests__/browser.spec.ts +++ b/packages/shared/src/__tests__/browser.spec.ts @@ -38,12 +38,12 @@ describe('isValidBrowser', () => { vi.restoreAllMocks(); }); - it('returns false if not in browser', () => { + it('returns true if not in browser (assumes valid in non-browser environments like React Native)', () => { const windowSpy = vi.spyOn(global, 'window', 'get'); // @ts-ignore - Test windowSpy.mockReturnValue(undefined); - expect(isValidBrowser()).toBe(false); + expect(isValidBrowser()).toBe(true); }); it('returns true if in browser, navigator is not a bot, and webdriver is not enabled', () => { diff --git a/packages/shared/src/browser.ts b/packages/shared/src/browser.ts index ea61931f6d3..d927101046f 100644 --- a/packages/shared/src/browser.ts +++ b/packages/shared/src/browser.ts @@ -57,7 +57,10 @@ export function userAgentIsRobot(userAgent: string): boolean { export function isValidBrowser(): boolean { const navigator = inBrowser() ? window?.navigator : null; if (!navigator) { - return false; + // Not in a browser environment (e.g. React Native, SSR). + // Return true so non-browser runtimes are not incorrectly + // treated as bots or automated browsers. + return true; } return !userAgentIsRobot(navigator?.userAgent) && !navigator?.webdriver; } @@ -70,7 +73,10 @@ export function isValidBrowser(): boolean { export function isBrowserOnline(): boolean { const navigator = inBrowser() ? window?.navigator : null; if (!navigator) { - return false; + // Not in a browser environment (e.g. React Native, SSR). + // Assume online — RN has its own networking layer and the + // absence of browser APIs does not indicate offline status. + return true; } // navigator.onLine is the standard API and is reliable for detecting