Skip to content
5 changes: 5 additions & 0 deletions .changeset/better-vans-obey.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@clerk/backend': minor
---

Initial stub of the new handshake payload flow with nonce
18 changes: 18 additions & 0 deletions packages/backend/src/api/endpoints/HandshakePayloadApi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type { HandshakePayload } from '../resources/HandshakePayload';
import { AbstractAPI } from './AbstractApi';

const BASE_PATH = '/handshake_payload';

type GetHandshakePayloadParams = {
nonce: string;
};

export class HandshakePayloadAPI extends AbstractAPI {
public async getHandshakePayload(queryParams: GetHandshakePayloadParams) {
return this.request<HandshakePayload>({
method: 'GET',
path: BASE_PATH,
queryParams,
});
}
}
15 changes: 15 additions & 0 deletions packages/backend/src/api/resources/HandshakePayload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export type HandshakePayloadJSON = {
nonce: string;
payload: string;
};

export class HandshakePayload {
constructor(
readonly nonce: string,
readonly payload: string,
) {}

static fromJSON(data: HandshakePayloadJSON): HandshakePayload {
return new HandshakePayload(data.nonce, data.payload);
}
}
2 changes: 2 additions & 0 deletions packages/backend/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const Cookies = {
Handshake: '__clerk_handshake',
DevBrowser: '__clerk_db_jwt',
RedirectCount: '__clerk_redirect_count',
HandshakeNonce: '__clerk_handshake_nonce',
} as const;

const QueryParameters = {
Expand All @@ -33,6 +34,7 @@ const QueryParameters = {
HandshakeHelp: '__clerk_help',
LegacyDevBrowser: '__dev_session',
HandshakeReason: '__clerk_hs_reason',
HandshakeNonce: Cookies.HandshakeNonce,
} as const;

const Headers = {
Expand Down
Loading