@@ -4,7 +4,13 @@ import { API_URL, API_VERSION, MAX_CACHE_LAST_UPDATED_AT_SECONDS } from '../cons
44import runtime from '../runtime' ;
55import { callWithRetry } from '../util/callWithRetry' ;
66import { joinPaths } from '../util/path' ;
7- import { TokenVerificationError , TokenVerificationErrorAction , TokenVerificationErrorReason } from './errors' ;
7+ import { getErrorObjectByCode } from '../util/request' ;
8+ import {
9+ TokenVerificationError ,
10+ TokenVerificationErrorAction ,
11+ TokenVerificationErrorCode ,
12+ TokenVerificationErrorReason ,
13+ } from './errors' ;
814
915type JsonWebKeyWithKid = JsonWebKey & { kid : string } ;
1016
@@ -202,6 +208,31 @@ async function fetchJWKSFromBAPI(apiUrl: string, key: string, apiVersion: string
202208 } ) ;
203209
204210 if ( ! response . ok ) {
211+ const errors = await response . json ( ) . then ( ( { errors } ) => {
212+ if ( ! errors ) {
213+ return false ;
214+ }
215+
216+ const invalidSecretKey = getErrorObjectByCode ( errors , TokenVerificationErrorCode . InvalidSecretKey ) ;
217+
218+ if ( ! invalidSecretKey ) {
219+ return false ;
220+ }
221+
222+ return {
223+ ...invalidSecretKey ,
224+ reason : TokenVerificationErrorReason . InvalidSecretKey ,
225+ } ;
226+ } ) ;
227+
228+ if ( errors ) {
229+ throw new TokenVerificationError ( {
230+ action : TokenVerificationErrorAction . ContactSupport ,
231+ message : errors . message ,
232+ reason : errors . reason ,
233+ } ) ;
234+ }
235+
205236 throw new TokenVerificationError ( {
206237 action : TokenVerificationErrorAction . ContactSupport ,
207238 message : `Error loading Clerk JWKS from ${ url . href } with code=${ response . status } ` ,
0 commit comments