@@ -4,6 +4,7 @@ import React from 'react';
44
55import { PromisifiedAuthProvider } from '../../client-boundary/PromisifiedAuthProvider' ;
66import { getDynamicAuthData } from '../../server/buildClerkProps' ;
7+ import { createClerkClientWithOptions } from '../../server/createClerkClient' ;
78import type { NextClerkProviderProps } from '../../types' ;
89import { canUseKeyless } from '../../utils/feature-flags' ;
910import { mergeNextClerkPropsWithEnv } from '../../utils/mergeNextClerkPropsWithEnv' ;
@@ -96,7 +97,7 @@ export async function ClerkProvider(
9697 const newOrReadKeys = await import ( '../../server/keyless-node.js' )
9798 . then ( mod => mod . createOrReadKeyless ( ) )
9899 . catch ( ( ) => null ) ;
99- const { keylessLogger , createConfirmationMessage, createKeylessModeMessage } = await import (
100+ const { clerkDevelopmentCache , createConfirmationMessage, createKeylessModeMessage } = await import (
100101 '../../server/keyless-log-cache.js'
101102 ) ;
102103
@@ -108,7 +109,8 @@ export async function ClerkProvider(
108109 publishableKey : newOrReadKeys . publishableKey ,
109110 __internal_keyless_claimKeylessApplicationUrl : newOrReadKeys . claimUrl ,
110111 __internal_keyless_copyInstanceKeysUrl : newOrReadKeys . apiKeysUrl ,
111- __internal_keyless_dismissPrompt : runningWithClaimedKeys ? deleteKeylessAction : undefined ,
112+ // Explicitly use `null` instead of `undefined` here to avoid persisting `deleteKeylessAction` during merging of options.
113+ __internal_keyless_dismissPrompt : runningWithClaimedKeys ? deleteKeylessAction : null ,
112114 } ) }
113115 nonce = { await generateNonce ( ) }
114116 initialState = { await generateStatePromise ( ) }
@@ -118,10 +120,37 @@ export async function ClerkProvider(
118120 ) ;
119121
120122 if ( runningWithClaimedKeys ) {
123+ try {
124+ const secretKey = await import ( '../../server/keyless-node.js' ) . then (
125+ mod => mod . safeParseClerkFile ( ) ?. secretKey ,
126+ ) ;
127+ if ( ! secretKey ) {
128+ // we will ignore it later
129+ throw new Error ( secretKey ) ;
130+ }
131+ const client = createClerkClientWithOptions ( {
132+ secretKey,
133+ } ) ;
134+
135+ /**
136+ * Notifying the dashboard the should runs once. We are controlling this behaviour by caching the result of the request.
137+ * If the request fails, it will be considered stale after 10 minutes, otherwise it is cached for 24 hours.
138+ */
139+ await clerkDevelopmentCache ?. run (
140+ ( ) => client . __experimental_accountlessApplications . completeAccountlessApplicationOnboarding ( ) ,
141+ {
142+ cacheKey : `${ newOrReadKeys . publishableKey } _complete` ,
143+ onSuccessStale : 24 * 60 * 60 * 1000 , // 24 hours
144+ } ,
145+ ) ;
146+ } catch {
147+ // ignore
148+ }
149+
121150 /**
122151 * Notify developers.
123152 */
124- keylessLogger ?. log ( {
153+ clerkDevelopmentCache ?. log ( {
125154 cacheKey : `${ newOrReadKeys . publishableKey } _claimed` ,
126155 msg : createConfirmationMessage ( ) ,
127156 } ) ;
@@ -145,7 +174,7 @@ export async function ClerkProvider(
145174 /**
146175 * Notify developers.
147176 */
148- keylessLogger ?. log ( {
177+ clerkDevelopmentCache ?. log ( {
149178 cacheKey : newOrReadKeys . publishableKey ,
150179 msg : createKeylessModeMessage ( { ...newOrReadKeys , claimUrl : claimUrl . href } ) ,
151180 } ) ;
0 commit comments