Skip to content

Commit 0f0a367

Browse files
committed
chore(tanstack-react-start): Fix serialization issues with handshake
1 parent 7ca080f commit 0f0a367

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

packages/tanstack-react-start/src/server/authenticateRequest.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { AuthStatus, constants } from '@clerk/backend/internal';
44
import { handleNetlifyCacheInDevInstance } from '@clerk/shared/netlifyCacheHandler';
55

66
import { errorThrower } from '../utils';
7+
import { ClerkHandshakeRedirect } from './errors';
78
import { patchRequest } from './utils';
89

910
export async function authenticateRequest(
@@ -41,9 +42,9 @@ export async function authenticateRequest(
4142
requestStateHeaders: requestState.headers,
4243
publishableKey: requestState.publishableKey,
4344
});
45+
4446
// triggering a handshake redirect
45-
// eslint-disable-next-line @typescript-eslint/only-throw-error
46-
throw new Response(null, { status: 307, headers: requestState.headers });
47+
throw new ClerkHandshakeRedirect(307, requestState.headers);
4748
}
4849

4950
if (requestState.status === AuthStatus.Handshake) {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export class ClerkHandshakeRedirect extends Error {
2+
constructor(
3+
public status: number,
4+
public headers: Headers,
5+
) {
6+
super('Clerk handshake redirect required');
7+
this.name = 'ClerkHandshakeRedirect';
8+
this.status = status;
9+
this.headers = headers;
10+
}
11+
}

packages/tanstack-react-start/src/server/middlewareHandler.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { AnyRouter } from '@tanstack/react-router';
22
import type { CustomizeStartHandler, HandlerCallback, RequestHandler } from '@tanstack/react-start/server';
33

44
import { authenticateRequest } from './authenticateRequest';
5+
import { ClerkHandshakeRedirect } from './errors';
56
import { loadOptions } from './loadOptions';
67
import type { LoaderOptions } from './types';
78
import { getResponseClerkState } from './utils';
@@ -33,9 +34,12 @@ export function createClerkHandler<TRouter extends AnyRouter>(
3334

3435
await router.load();
3536
} catch (error) {
36-
if (error instanceof Response) {
37+
if (error instanceof ClerkHandshakeRedirect) {
3738
// returning the response
38-
return error;
39+
return new Response(null, {
40+
status: error.status,
41+
headers: error.headers,
42+
});
3943
}
4044

4145
// rethrowing the error if it is not a Response

0 commit comments

Comments
 (0)