diff --git a/.changeset/puny-brooms-grab.md b/.changeset/puny-brooms-grab.md new file mode 100644 index 00000000000..b62fdf0739d --- /dev/null +++ b/.changeset/puny-brooms-grab.md @@ -0,0 +1,5 @@ +--- +'@clerk/tanstack-react-start': patch +--- + +Apply Clerk response headers diff --git a/integration/tests/tanstack-start/basic.test.ts b/integration/tests/tanstack-start/basic.test.ts index cfe68949bca..8aab934b37e 100644 --- a/integration/tests/tanstack-start/basic.test.ts +++ b/integration/tests/tanstack-start/basic.test.ts @@ -71,5 +71,15 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withEmailCodes] })( expect(clerkInitialState !== undefined).toBeTruthy(); }); + + test('clerk handler sets headers', async ({ page, context }) => { + const u = createTestUtils({ app, page, context }); + const r = await u.po.signIn.goTo(); + + expect(r.headers()).toContain({ + 'x-clerk-auth-reason': 'session-token-and-uat-missing', + 'x-clerk-auth-status': 'signed-out', + }); + }); }, ); diff --git a/packages/tanstack-react-start/src/server/middlewareHandler.ts b/packages/tanstack-react-start/src/server/middlewareHandler.ts index 6178ecd0313..21994cdf61c 100644 --- a/packages/tanstack-react-start/src/server/middlewareHandler.ts +++ b/packages/tanstack-react-start/src/server/middlewareHandler.ts @@ -24,11 +24,16 @@ export function createClerkHandler( const requestState = await authenticateRequest(request, loadedOptions); - const clerkInitialState = getResponseClerkState(requestState, loadedOptions); + const { clerkInitialState, headers } = getResponseClerkState(requestState, loadedOptions); // Merging the TanStack router context with the Clerk context and loading the router router.update({ - context: { ...router.options.context, ...clerkInitialState }, + context: { ...router.options.context, clerkInitialState }, + }); + + // Adding the Clerk response headers to the response + headers.forEach((value, key) => { + responseHeaders.set(key, value); }); await router.load();