diff --git a/.changeset/weak-monkeys-approve.md b/.changeset/weak-monkeys-approve.md new file mode 100644 index 00000000000..e30dbadde7a --- /dev/null +++ b/.changeset/weak-monkeys-approve.md @@ -0,0 +1,5 @@ +--- +'@clerk/nextjs': patch +--- + +Avoid calling `safeParseClerkFile` before checking if keyless is allowed. diff --git a/packages/nextjs/src/app-router/server/ClerkProvider.tsx b/packages/nextjs/src/app-router/server/ClerkProvider.tsx index 7748f06fa6a..60983345579 100644 --- a/packages/nextjs/src/app-router/server/ClerkProvider.tsx +++ b/packages/nextjs/src/app-router/server/ClerkProvider.tsx @@ -4,7 +4,6 @@ import React from 'react'; import { PromisifiedAuthProvider } from '../../client-boundary/PromisifiedAuthProvider'; import { getDynamicAuthData } from '../../server/buildClerkProps'; -import { safeParseClerkFile } from '../../server/keyless-node'; import type { NextClerkProviderProps } from '../../types'; import { canUseKeyless } from '../../utils/feature-flags'; import { mergeNextClerkPropsWithEnv } from '../../utils/mergeNextClerkPropsWithEnv'; @@ -80,8 +79,16 @@ export async function ClerkProvider( ); - const runningWithClaimedKeys = propsWithEnvs.publishableKey === safeParseClerkFile()?.publishableKey; - const shouldRunAsKeyless = (!propsWithEnvs.publishableKey || runningWithClaimedKeys) && canUseKeyless; + let [shouldRunAsKeyless, runningWithClaimedKeys] = [false, false]; + if (canUseKeyless) { + const locallyStorePublishableKey = await import('../../server/keyless-node.js') + .then(mod => mod.safeParseClerkFile()?.publishableKey) + .catch(() => undefined); + + runningWithClaimedKeys = + Boolean(propsWithEnvs.publishableKey) && propsWithEnvs.publishableKey === locallyStorePublishableKey; + shouldRunAsKeyless = !propsWithEnvs.publishableKey || runningWithClaimedKeys; + } if (shouldRunAsKeyless) { // NOTE: Create or read keys on every render. Usually this means only on hard refresh or hard navigations.