@@ -32,11 +32,12 @@ class ClerkApiToken implements FPApiToken {
3232 constructor ( sthis : SuperThis ) {
3333 this . sthis = sthis ;
3434 }
35- async verify ( token : string ) : Promise < Result < VerifiedAuth > > {
35+
36+ readonly keysAndUrls = Lazy ( ( ) : Result < { keys : string [ ] ; urls : string [ ] } > => {
3637 const keys : string [ ] = [ ] ;
3738 const urls : string [ ] = [ ] ;
3839 // eslint-disable-next-line no-constant-condition
39- for ( let idx = 0 ; true ; idx ++ ) {
40+ for ( let idx = 0 ; true ; idx ++ ) {
4041 const suffix = ! idx ? "" : `_${ idx } ` ;
4142 const key = `CLERK_PUB_JWT_KEY${ suffix } ` ;
4243 const url = `CLERK_PUB_JWT_URL${ suffix } ` ;
@@ -64,6 +65,12 @@ class ClerkApiToken implements FPApiToken {
6465 ) ;
6566 }
6667 }
68+ return Result . Ok ( { keys, urls } ) ;
69+ } )
70+
71+ async verify ( token : string ) : Promise < Result < VerifiedAuth > > {
72+ const { keys, urls } = this . keysAndUrls ( ) . Ok ( ) ;
73+
6774 const rt = await sts . verifyToken ( token , keys , urls , {
6875 parseSchema : ( payload : unknown ) : Result < FPClerkClaim > => {
6976 const r = FPClerkClaimSchema . safeParse ( payload ) ;
@@ -79,6 +86,7 @@ class ClerkApiToken implements FPApiToken {
7986 return Result . Err ( rPublicKey ) ;
8087 }
8188 const pem = await exportSPKI ( rPublicKey . Ok ( ) . key ) ;
89+ console . log ( "ClerkApiToken-verify" , pem ) ;
8290 const r = await exception2Result ( ( ) =>
8391 ClerkVerifyToken ( token , {
8492 jwtKey : pem ,
@@ -212,6 +220,7 @@ const tokenApi = Lazy(async (sthis: SuperThis) => {
212220 } ;
213221} ) ;
214222
223+ export type BindPromise < T > = ( promise : Promise < T > ) => Promise < T > ;
215224// BaseSQLiteDatabase<'async', ResultSet, TSchema>
216225export async function createHandler < T extends DashSqlite > ( db : T , env : Record < string , string > | Env ) {
217226 // const stream = new utils.ConsoleWriterStream();
@@ -269,7 +278,7 @@ export async function createHandler<T extends DashSqlite>(db: T, env: Record<str
269278 maxLedgers : coerceInt ( env . MAX_LEDGERS , 5 ) ,
270279 deviceCA : rDeviceIdCA . Ok ( ) ,
271280 } ) ;
272- return async ( req : Request ) : Promise < Response > => {
281+ return async ( req : Request , bindPromise : BindPromise < Result < unknown > > = ( p ) => p ) : Promise < Response > => {
273282 const startTime = performance . now ( ) ;
274283 if ( req . method === "OPTIONS" ) {
275284 return new Response ( "ok" , {
@@ -359,7 +368,7 @@ export async function createHandler<T extends DashSqlite>(db: T, env: Record<str
359368 return new Response ( "Invalid request" , { status : 400 , headers : DefaultHttpHeaders ( ) } ) ;
360369 }
361370 try {
362- const rRes = await res ;
371+ const rRes = await bindPromise ( res ) ;
363372 // console.log("Response", rRes);
364373 if ( rRes . isErr ( ) ) {
365374 logger . Error ( ) . Any ( { request : jso . type } ) . Err ( rRes ) . Msg ( "Result-Error" ) ;
0 commit comments