From c87f860a81f609c8be3a3dd51b110b359398273e Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Thu, 10 Jul 2025 10:42:19 -0700 Subject: [PATCH 1/4] chore(expo): Set default token cache --- packages/expo/src/provider/ClerkProvider.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/expo/src/provider/ClerkProvider.tsx b/packages/expo/src/provider/ClerkProvider.tsx index b450bf7622d..03229651363 100644 --- a/packages/expo/src/provider/ClerkProvider.tsx +++ b/packages/expo/src/provider/ClerkProvider.tsx @@ -5,6 +5,7 @@ import type { Without } from '@clerk/types'; import * as WebBrowser from 'expo-web-browser'; import type { TokenCache } from '../cache/types'; +import { tokenCache as defaultTokenCache } from '../token-cache'; import { isNative, isWeb } from '../utils/runtime'; import { getClerkInstance } from './singleton'; import type { BuildClerkOptions } from './singleton/types'; @@ -43,7 +44,7 @@ const SDK_METADATA = { export function ClerkProvider(props: ClerkProviderProps): JSX.Element { const { children, - tokenCache, + tokenCache = defaultTokenCache, publishableKey, __experimental_passkeys, experimental, From 613d59a76af38a2bd2fc766546f021c662d0163e Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Thu, 10 Jul 2025 11:23:54 -0700 Subject: [PATCH 2/4] chore: deprecated memory token cache --- packages/expo/src/cache/MemoryTokenCache.ts | 7 +++++++ packages/expo/src/provider/ClerkProvider.tsx | 3 +-- .../expo/src/provider/singleton/createClerkInstance.ts | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/expo/src/cache/MemoryTokenCache.ts b/packages/expo/src/cache/MemoryTokenCache.ts index 14557c7ec4a..9af70d280e9 100644 --- a/packages/expo/src/cache/MemoryTokenCache.ts +++ b/packages/expo/src/cache/MemoryTokenCache.ts @@ -16,4 +16,11 @@ const createMemoryTokenCache = (): TokenCache => { }; }; +/** + * @deprecated + * MemoryTokenCache is not secure and should only be used for testing or non-production environments. + * For production, use the default tokenCache implementation, which uses expo-secure-store for secure storage. + * + * @see https://docs.expo.dev/versions/latest/sdk/securestore/ + */ export const MemoryTokenCache = createMemoryTokenCache(); diff --git a/packages/expo/src/provider/ClerkProvider.tsx b/packages/expo/src/provider/ClerkProvider.tsx index 03229651363..b450bf7622d 100644 --- a/packages/expo/src/provider/ClerkProvider.tsx +++ b/packages/expo/src/provider/ClerkProvider.tsx @@ -5,7 +5,6 @@ import type { Without } from '@clerk/types'; import * as WebBrowser from 'expo-web-browser'; import type { TokenCache } from '../cache/types'; -import { tokenCache as defaultTokenCache } from '../token-cache'; import { isNative, isWeb } from '../utils/runtime'; import { getClerkInstance } from './singleton'; import type { BuildClerkOptions } from './singleton/types'; @@ -44,7 +43,7 @@ const SDK_METADATA = { export function ClerkProvider(props: ClerkProviderProps): JSX.Element { const { children, - tokenCache = defaultTokenCache, + tokenCache, publishableKey, __experimental_passkeys, experimental, diff --git a/packages/expo/src/provider/singleton/createClerkInstance.ts b/packages/expo/src/provider/singleton/createClerkInstance.ts index cd001cbb2e0..0dc08e80819 100644 --- a/packages/expo/src/provider/singleton/createClerkInstance.ts +++ b/packages/expo/src/provider/singleton/createClerkInstance.ts @@ -10,6 +10,7 @@ import type { } from '@clerk/types'; import { Platform } from 'react-native'; +import type { TokenCache } from '../../cache'; import { ClientResourceCache, DUMMY_CLERK_CLIENT_RESOURCE, @@ -17,8 +18,8 @@ import { EnvironmentResourceCache, SessionJWTCache, } from '../../cache'; -import { MemoryTokenCache } from '../../cache/MemoryTokenCache'; import { errorThrower } from '../../errorThrower'; +import { tokenCache as secureStoreTokenCache } from '../../token-cache'; import { isNative } from '../../utils'; import type { BuildClerkOptions } from './types'; @@ -34,7 +35,7 @@ export function createClerkInstance(ClerkClass: typeof Clerk) { return (options?: BuildClerkOptions): HeadlessBrowserClerk | BrowserClerk => { const { publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY || process.env.CLERK_PUBLISHABLE_KEY || '', - tokenCache = MemoryTokenCache, + tokenCache = secureStoreTokenCache as TokenCache, __experimental_resourceCache: createResourceCache, } = options || {}; From 797c11e0a263a1f00e428ca090d9524194ee571a Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Thu, 10 Jul 2025 11:26:17 -0700 Subject: [PATCH 3/4] chore: apply secure store token cache on native devices --- packages/expo/src/cache/MemoryTokenCache.ts | 7 ------- packages/expo/src/provider/ClerkProvider.tsx | 3 ++- .../expo/src/provider/singleton/createClerkInstance.ts | 5 ++--- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/packages/expo/src/cache/MemoryTokenCache.ts b/packages/expo/src/cache/MemoryTokenCache.ts index 9af70d280e9..14557c7ec4a 100644 --- a/packages/expo/src/cache/MemoryTokenCache.ts +++ b/packages/expo/src/cache/MemoryTokenCache.ts @@ -16,11 +16,4 @@ const createMemoryTokenCache = (): TokenCache => { }; }; -/** - * @deprecated - * MemoryTokenCache is not secure and should only be used for testing or non-production environments. - * For production, use the default tokenCache implementation, which uses expo-secure-store for secure storage. - * - * @see https://docs.expo.dev/versions/latest/sdk/securestore/ - */ export const MemoryTokenCache = createMemoryTokenCache(); diff --git a/packages/expo/src/provider/ClerkProvider.tsx b/packages/expo/src/provider/ClerkProvider.tsx index b450bf7622d..1364e2b86e4 100644 --- a/packages/expo/src/provider/ClerkProvider.tsx +++ b/packages/expo/src/provider/ClerkProvider.tsx @@ -5,6 +5,7 @@ import type { Without } from '@clerk/types'; import * as WebBrowser from 'expo-web-browser'; import type { TokenCache } from '../cache/types'; +import { tokenCache as secureStoreTokenCache } from '../token-cache'; import { isNative, isWeb } from '../utils/runtime'; import { getClerkInstance } from './singleton'; import type { BuildClerkOptions } from './singleton/types'; @@ -69,7 +70,7 @@ export function ClerkProvider(props: ClerkProviderProps): JSX.Element { isNative() ? getClerkInstance({ publishableKey: pk, - tokenCache, + tokenCache: tokenCache || secureStoreTokenCache, __experimental_passkeys, __experimental_resourceCache, }) diff --git a/packages/expo/src/provider/singleton/createClerkInstance.ts b/packages/expo/src/provider/singleton/createClerkInstance.ts index 0dc08e80819..cd001cbb2e0 100644 --- a/packages/expo/src/provider/singleton/createClerkInstance.ts +++ b/packages/expo/src/provider/singleton/createClerkInstance.ts @@ -10,7 +10,6 @@ import type { } from '@clerk/types'; import { Platform } from 'react-native'; -import type { TokenCache } from '../../cache'; import { ClientResourceCache, DUMMY_CLERK_CLIENT_RESOURCE, @@ -18,8 +17,8 @@ import { EnvironmentResourceCache, SessionJWTCache, } from '../../cache'; +import { MemoryTokenCache } from '../../cache/MemoryTokenCache'; import { errorThrower } from '../../errorThrower'; -import { tokenCache as secureStoreTokenCache } from '../../token-cache'; import { isNative } from '../../utils'; import type { BuildClerkOptions } from './types'; @@ -35,7 +34,7 @@ export function createClerkInstance(ClerkClass: typeof Clerk) { return (options?: BuildClerkOptions): HeadlessBrowserClerk | BrowserClerk => { const { publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY || process.env.CLERK_PUBLISHABLE_KEY || '', - tokenCache = secureStoreTokenCache as TokenCache, + tokenCache = MemoryTokenCache, __experimental_resourceCache: createResourceCache, } = options || {}; From 501b5c583b2e0452336e7c9900a84837d5830a10 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Thu, 10 Jul 2025 11:28:08 -0700 Subject: [PATCH 4/4] chore: fix incorrect jsdoc link --- packages/expo/src/provider/ClerkProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/expo/src/provider/ClerkProvider.tsx b/packages/expo/src/provider/ClerkProvider.tsx index 1364e2b86e4..baa791247c7 100644 --- a/packages/expo/src/provider/ClerkProvider.tsx +++ b/packages/expo/src/provider/ClerkProvider.tsx @@ -18,7 +18,7 @@ export type ClerkProviderProps = Without