@@ -4,83 +4,37 @@ import type { APIContext } from 'astro';
44import { clerkClient } from '../clerk-client' ;
55import { createFileStorage } from './file-storage.js' ;
66
7+ // Lazily initialized keyless service singleton
78let keylessServiceInstance : ReturnType < typeof createKeylessService > | null = null ;
8- let keylessInitPromise : Promise < ReturnType < typeof createKeylessService > | null > | null = null ;
99
10- function canUseFileSystem ( ) : boolean {
11- try {
12- return typeof process !== 'undefined' && typeof process . cwd === 'function' ;
13- } catch {
14- return false ;
15- }
16- }
17-
18- /**
19- * Gets or creates the keyless service singleton.
20- * Returns null for non-Node.js runtimes (e.g., Cloudflare Workers).
21- */
22- export async function keyless ( context : APIContext ) : Promise < ReturnType < typeof createKeylessService > | null > {
23- if ( ! canUseFileSystem ( ) ) {
24- return null ;
25- }
26-
27- if ( keylessServiceInstance ) {
28- return keylessServiceInstance ;
29- }
30-
31- if ( keylessInitPromise ) {
32- return keylessInitPromise ;
33- }
34-
35- keylessInitPromise = ( async ( ) => {
36- try {
37- const storage = await createFileStorage ( ) ;
38-
39- const service = createKeylessService ( {
40- storage,
41- api : {
42- async createAccountlessApplication ( requestHeaders ?: Headers ) {
43- try {
44- return await clerkClient ( context ) . __experimental_accountlessApplications . createAccountlessApplication ( {
45- requestHeaders,
46- } ) ;
47- } catch {
48- return null ;
49- }
50- } ,
51- async completeOnboarding ( requestHeaders ?: Headers ) {
52- try {
53- return await clerkClient (
54- context ,
55- ) . __experimental_accountlessApplications . completeAccountlessApplicationOnboarding ( {
56- requestHeaders,
57- } ) ;
58- } catch {
59- return null ;
60- }
61- } ,
10+ export function keyless ( context : APIContext ) {
11+ if ( ! keylessServiceInstance ) {
12+ keylessServiceInstance = createKeylessService ( {
13+ storage : createFileStorage ( ) ,
14+ api : {
15+ async createAccountlessApplication ( requestHeaders ?: Headers ) {
16+ try {
17+ return await clerkClient ( context ) . __experimental_accountlessApplications . createAccountlessApplication ( {
18+ requestHeaders,
19+ } ) ;
20+ } catch {
21+ return null ;
22+ }
6223 } ,
63- framework : 'astro' ,
64- frameworkVersion : PACKAGE_VERSION ,
65- } ) ;
66-
67- keylessServiceInstance = service ;
68- return service ;
69- } catch ( error ) {
70- console . warn ( '[Clerk] Failed to initialize keyless service:' , error ) ;
71- return null ;
72- } finally {
73- keylessInitPromise = null ;
74- }
75- } ) ( ) ;
76-
77- return keylessInitPromise ;
78- }
79-
80- /**
81- * @internal
82- */
83- export function resetKeylessService ( ) : void {
84- keylessServiceInstance = null ;
85- keylessInitPromise = null ;
24+ async completeOnboarding ( requestHeaders ?: Headers ) {
25+ try {
26+ return await clerkClient (
27+ context ,
28+ ) . __experimental_accountlessApplications . completeAccountlessApplicationOnboarding ( {
29+ requestHeaders,
30+ } ) ;
31+ } catch {
32+ return null ;
33+ }
34+ } ,
35+ } ,
36+ framework : 'astro' ,
37+ } ) ;
38+ }
39+ return keylessServiceInstance ;
8640}
0 commit comments