1+ import { ClerkAPIResponseError } from '@clerk/shared/error' ;
12import type {
23 ActClaim ,
34 CheckAuthorizationWithCustomPermissions ,
@@ -10,6 +11,7 @@ import type {
1011
1112import type { CreateBackendApiOptions } from '../api' ;
1213import { createBackendApiClient } from '../api' ;
14+ import type { ClerkBackendApiResponse } from '../api/request' ;
1315import type { AuthenticateContext } from './authenticateContext' ;
1416
1517type AuthObjectDebugData = Record < string , any > ;
@@ -73,6 +75,27 @@ const createDebug = (data: AuthObjectDebugData | undefined) => {
7375 } ;
7476} ;
7577
78+ // This helper is introduced as compat layer between the v4 and v5 implementations to keep the
79+ // exposed top-level getToken API the same since it's critical and there are already a lot of
80+ // breaking changes.
81+ // TODO: Revamp AuthObject `getToken()` to return { data, errors } in next major version
82+ const throwResponseErrors = < T > ( response : ClerkBackendApiResponse < T > ) : never => {
83+ // used to by-pass type-safety for the `{ status, statusText, clerkTraceId } = response` line below
84+ if ( ! response . errors ) {
85+ throw new Error ( 'no error to throw' ) ;
86+ }
87+
88+ const { status, statusText, clerkTraceId } = response ;
89+ const error = new ClerkAPIResponseError ( statusText || '' , {
90+ data : [ ] ,
91+ status : Number ( status || '' ) ,
92+ clerkTraceId,
93+ } ) ;
94+ error . errors = response . errors ;
95+
96+ throw error ;
97+ } ;
98+
7699/**
77100 * @internal
78101 */
@@ -93,7 +116,14 @@ export function signedInAuthObject(
93116 const getToken = createGetToken ( {
94117 sessionId,
95118 sessionToken : authenticateContext . sessionToken || '' ,
96- fetcher : ( ...args ) => apiClient . sessions . getToken ( ...args ) ,
119+ fetcher : async ( ...args ) => {
120+ const response = await apiClient . sessions . getToken ( ...args ) ;
121+ if ( response . errors ) {
122+ return throwResponseErrors ( response ) ;
123+ }
124+
125+ return response . data . jwt ;
126+ } ,
97127 } ) ;
98128
99129 return {
0 commit comments