Skip to content

Commit fbea181

Browse files
committed
initial review
1 parent 072dc5c commit fbea181

File tree

5 files changed

+40
-161
lines changed

5 files changed

+40
-161
lines changed

packages/nextjs/src/app-router/keyless-actions.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ export async function syncKeylessConfigAction(args: AccountlessApplication & { r
4343
* Force middleware to execute to read the new keys from the cookies and populate the authentication state correctly.
4444
*/
4545
redirect(`/clerk-sync-keyless?returnUrl=${returnUrl}`, RedirectType.replace);
46-
return;
4746
}
4847

4948
return;

packages/shared/src/__tests__/keyless.spec.ts

Lines changed: 0 additions & 140 deletions
This file was deleted.

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@ export const clerkMiddleware = (options?: ClerkMiddlewareOptions): AnyRequestMid
2424

2525
// In keyless mode, try to read/create keys from the file system
2626
if (canUseKeyless && (!publishableKey || !secretKey)) {
27-
const keylessApp = await keyless.getOrCreateKeys();
27+
const keylessService = keyless();
28+
const keylessApp = await keylessService.getOrCreateKeys();
2829
if (keylessApp) {
2930
publishableKey = publishableKey || keylessApp.publishableKey;
3031
secretKey = secretKey || keylessApp.secretKey;
3132
keylessClaimUrl = keylessApp.claimUrl;
3233
keylessApiKeysUrl = keylessApp.apiKeysUrl;
3334

34-
keyless.logKeylessMessage(keylessApp.claimUrl);
35+
keylessService.logKeylessMessage(keylessApp.claimUrl);
3536
}
3637
}
3738

packages/tanstack-react-start/src/server/keyless/fileStorage.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ export function createFileStorage(options: FileStorageOptions = {}): KeylessStor
7676
};
7777

7878
const writeReadme = () => {
79-
fs.writeFileSync(getReadmePath(), `## DO NOT COMMIT\nThis directory contains keyless mode secrets.\n`, {
79+
const readme = `## DO NOT COMMIT
80+
This directory is auto-generated from \`@clerk/tanstack-react-start\` because you are running in Keyless mode.
81+
Avoid committing the \`.clerk/\` directory as it includes the secret key of the unclaimed instance.
82+
`;
83+
fs.writeFileSync(getReadmePath(), readme, {
8084
encoding: 'utf8',
8185
mode: 0o600,
8286
});

packages/tanstack-react-start/src/server/keyless/index.ts

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,35 @@ import { createKeylessService } from '@clerk/shared/keyless';
33
import { clerkClient } from '../clerkClient';
44
import { createFileStorage } from './fileStorage';
55

6-
// Create a singleton keyless service for TanStack Start
7-
export const keyless = createKeylessService({
8-
storage: createFileStorage(),
9-
api: {
10-
createAccountlessApplication: async (requestHeaders?: Headers) => {
11-
return await clerkClient().__experimental_accountlessApplications.createAccountlessApplication({
12-
requestHeaders,
13-
});
14-
},
15-
completeOnboarding: async (requestHeaders?: Headers) => {
16-
return await clerkClient().__experimental_accountlessApplications.completeAccountlessApplicationOnboarding({
17-
requestHeaders,
18-
});
19-
},
20-
},
21-
framework: 'tanstack-react-start',
22-
});
6+
// Lazily initialized keyless service singleton
7+
let keylessServiceInstance: ReturnType<typeof createKeylessService> | null = null;
8+
9+
export function keyless() {
10+
if (!keylessServiceInstance) {
11+
keylessServiceInstance = createKeylessService({
12+
storage: createFileStorage(),
13+
api: {
14+
async createAccountlessApplication(requestHeaders?: Headers) {
15+
try {
16+
return await clerkClient().__experimental_accountlessApplications.createAccountlessApplication({
17+
requestHeaders,
18+
});
19+
} catch {
20+
return null;
21+
}
22+
},
23+
async completeOnboarding(requestHeaders?: Headers) {
24+
try {
25+
return await clerkClient().__experimental_accountlessApplications.completeAccountlessApplicationOnboarding({
26+
requestHeaders,
27+
});
28+
} catch {
29+
return null;
30+
}
31+
},
32+
},
33+
framework: 'tanstack-react-start',
34+
});
35+
}
36+
return keylessServiceInstance;
37+
}

0 commit comments

Comments
 (0)