11import type { AuthObject } from '@clerk/backend' ;
2- import { AuthStatus , constants , signedInAuthObject , signedOutAuthObject } from '@clerk/backend/internal' ;
2+ import type {
3+ AuthenticatedMachineObject ,
4+ SignedInAuthObject ,
5+ SignedOutAuthObject ,
6+ UnauthenticatedMachineObject ,
7+ } from '@clerk/backend/internal' ;
8+ import {
9+ authenticatedMachineObject ,
10+ AuthStatus ,
11+ constants ,
12+ signedInAuthObject ,
13+ signedOutAuthObject ,
14+ unauthenticatedMachineObject ,
15+ } from '@clerk/backend/internal' ;
316import { decodeJwt } from '@clerk/backend/jwt' ;
417
518import type { LoggerNoCommit } from '../../utils/debugLogger' ;
@@ -11,10 +24,21 @@ import { assertTokenSignature, decryptClerkRequestData, getAuthKeyFromRequest, g
1124 * Given a request object, builds an auth object from the request data. Used in server-side environments to get access
1225 * to auth data for a given request.
1326 */
27+ export type GetAuthDataFromRequestOptions = {
28+ secretKey ?: string ;
29+ logger ?: LoggerNoCommit ;
30+ entity ?: 'user' | 'machine' ;
31+ } ;
1432export function getAuthDataFromRequest (
1533 req : RequestLike ,
16- opts : { secretKey ?: string ; logger ?: LoggerNoCommit } = { } ,
17- ) : AuthObject {
34+ opts : GetAuthDataFromRequestOptions & { entity : 'machine' } ,
35+ ) : Exclude < AuthObject , SignedInAuthObject | SignedOutAuthObject > ;
36+ export function getAuthDataFromRequest (
37+ req : RequestLike ,
38+ opts : GetAuthDataFromRequestOptions & { entity : 'user' } ,
39+ ) : Exclude < AuthObject , AuthenticatedMachineObject | UnauthenticatedMachineObject > ;
40+ export function getAuthDataFromRequest ( req : RequestLike , opts ?: GetAuthDataFromRequestOptions ) : AuthObject ;
41+ export function getAuthDataFromRequest ( req : RequestLike , opts : GetAuthDataFromRequestOptions = { } ) {
1842 const authStatus = getAuthKeyFromRequest ( req , 'AuthStatus' ) ;
1943 const authToken = getAuthKeyFromRequest ( req , 'AuthToken' ) ;
2044 const authMessage = getAuthKeyFromRequest ( req , 'AuthMessage' ) ;
@@ -39,7 +63,16 @@ export function getAuthDataFromRequest(
3963 opts . logger ?. debug ( 'auth options' , options ) ;
4064
4165 let authObject ;
42- if ( ! authStatus || authStatus !== AuthStatus . SignedIn ) {
66+ if ( opts . entity === 'machine' && ( ! authStatus || authStatus !== AuthStatus . MachineAuthenticated ) ) {
67+ authObject = unauthenticatedMachineObject ( options ) ;
68+ } else if ( opts . entity === 'machine' && authStatus === AuthStatus . MachineAuthenticated ) {
69+ assertTokenSignature ( authToken as string , options . secretKey , authSignature ) ;
70+
71+ const jwt = decodeJwt ( authToken as string ) ;
72+
73+ opts . logger ?. debug ( 'jwt' , jwt . raw ) ;
74+ authObject = authenticatedMachineObject ( jwt . raw . text , jwt . payload ) ;
75+ } else if ( ! authStatus || authStatus !== AuthStatus . SignedIn ) {
4376 authObject = signedOutAuthObject ( options ) ;
4477 } else {
4578 assertTokenSignature ( authToken as string , options . secretKey , authSignature ) ;
0 commit comments