Skip to content

Commit db3993b

Browse files
fix(clerk-js): include ticket strategy in future helpers (#8641)
Co-authored-by: Dylan Staley <88163+dstaley@users.noreply.github.com>
1 parent 8082b7c commit db3993b

5 files changed

Lines changed: 71 additions & 4 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@clerk/clerk-js": patch
3+
---
4+
5+
Send the ticket strategy when using Core 3 sign-in and sign-up ticket helpers.

packages/clerk-js/src/core/resources/SignIn.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1414,7 +1414,7 @@ class SignInFuture implements SignInFutureResource {
14141414

14151415
async ticket(params?: SignInFutureTicketParams): Promise<{ error: ClerkError | null }> {
14161416
const ticket = params?.ticket ?? getClerkQueryParam('__clerk_ticket');
1417-
return this.create({ ticket: ticket ?? undefined });
1417+
return this.create({ strategy: 'ticket', ticket: ticket ?? undefined });
14181418
}
14191419

14201420
async finalize(params?: SignInFutureFinalizeParams): Promise<{ error: ClerkError | null }> {

packages/clerk-js/src/core/resources/SignUp.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1135,7 +1135,7 @@ class SignUpFuture implements SignUpFutureResource {
11351135

11361136
async ticket(params?: SignUpFutureTicketParams): Promise<{ error: ClerkError | null }> {
11371137
const ticket = params?.ticket ?? getClerkQueryParam('__clerk_ticket');
1138-
return this.create({ ...params, ticket: ticket ?? undefined });
1138+
return this.create({ ...params, strategy: 'ticket', ticket: ticket ?? undefined });
11391139
}
11401140

11411141
async finalize(params?: SignUpFutureFinalizeParams): Promise<{ error: ClerkError | null }> {

packages/clerk-js/src/core/resources/__tests__/SignIn.test.ts

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2270,7 +2270,43 @@ describe('SignIn', () => {
22702270
expect.objectContaining({
22712271
method: 'POST',
22722272
path: '/client/sign_ins',
2273-
body: { ticket: 'ticket_from_query' },
2273+
body: { strategy: 'ticket', ticket: 'ticket_from_query' },
2274+
}),
2275+
);
2276+
});
2277+
2278+
it('uses provided ticket parameter', async () => {
2279+
const mockSearchParams = new URLSearchParams('?__clerk_ticket=ticket_from_query');
2280+
vi.stubGlobal('window', {
2281+
location: {
2282+
search: '?__clerk_ticket=ticket_from_query',
2283+
href: 'https://example.com?__clerk_ticket=ticket_from_query',
2284+
},
2285+
});
2286+
vi.stubGlobal('URLSearchParams', vi.fn().mockReturnValue(mockSearchParams));
2287+
2288+
SignIn.clerk = {
2289+
__internal_environment: {
2290+
displayConfig: {
2291+
captchaOauthBypass: [],
2292+
},
2293+
},
2294+
} as any;
2295+
2296+
const mockFetch = vi.fn().mockResolvedValue({
2297+
client: null,
2298+
response: { id: 'signin_123' },
2299+
});
2300+
BaseResource._fetch = mockFetch;
2301+
2302+
const signIn = new SignIn();
2303+
await signIn.__internal_future.ticket({ ticket: 'provided_ticket' });
2304+
2305+
expect(mockFetch).toHaveBeenCalledWith(
2306+
expect.objectContaining({
2307+
method: 'POST',
2308+
path: '/client/sign_ins',
2309+
body: { strategy: 'ticket', ticket: 'provided_ticket' },
22742310
}),
22752311
);
22762312
});

packages/clerk-js/src/core/resources/__tests__/SignUp.test.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,7 @@ describe('SignUp', () => {
790790
method: 'POST',
791791
path: '/client/sign_ups',
792792
body: expect.objectContaining({
793+
strategy: 'ticket',
793794
ticket: 'provided_ticket',
794795
}),
795796
}),
@@ -1296,6 +1297,7 @@ describe('SignUp', () => {
12961297
method: 'POST',
12971298
path: '/client/sign_ups',
12981299
body: expect.objectContaining({
1300+
strategy: 'ticket',
12991301
ticket: 'ticket_from_query',
13001302
}),
13011303
}),
@@ -1319,13 +1321,37 @@ describe('SignUp', () => {
13191321
BaseResource._fetch = mockFetch;
13201322

13211323
const signUp = new SignUp();
1322-
await signUp.__internal_future.ticket({ ticket: 'provided_ticket' });
1324+
await signUp.__internal_future.ticket({ ticket: 'provided_ticket', firstName: 'Test' });
1325+
1326+
expect(mockFetch).toHaveBeenCalledWith(
1327+
expect.objectContaining({
1328+
method: 'POST',
1329+
path: '/client/sign_ups',
1330+
body: expect.objectContaining({
1331+
strategy: 'ticket',
1332+
ticket: 'provided_ticket',
1333+
firstName: 'Test',
1334+
}),
1335+
}),
1336+
);
1337+
});
1338+
1339+
it('forces the ticket strategy', async () => {
1340+
const mockFetch = vi.fn().mockResolvedValue({
1341+
client: null,
1342+
response: { id: 'signup_123' },
1343+
});
1344+
BaseResource._fetch = mockFetch;
1345+
1346+
const signUp = new SignUp();
1347+
await signUp.__internal_future.ticket({ strategy: 'oauth_google', ticket: 'provided_ticket' } as any);
13231348

13241349
expect(mockFetch).toHaveBeenCalledWith(
13251350
expect.objectContaining({
13261351
method: 'POST',
13271352
path: '/client/sign_ups',
13281353
body: expect.objectContaining({
1354+
strategy: 'ticket',
13291355
ticket: 'provided_ticket',
13301356
}),
13311357
}),

0 commit comments

Comments
 (0)