@@ -6,42 +6,58 @@ import { cachedAuthPath } from "./config";
6
6
import { refreshAccessTokenOrThrow } from "./refreshAccessTokenOrThrow" ;
7
7
import { CachedAuthDetails } from "./types" ;
8
8
9
- export async function getAccessToken ( ) : Promise < string | undefined > {
9
+ export type AccessTokenInfo = {
10
+ accessToken : string | undefined ;
11
+ apiKeySource : "REPLAY_API_KEY" | "RECORD_REPLAY_API_KEY" | undefined ;
12
+ } ;
13
+
14
+ const NO_ACCESS_TOKEN : AccessTokenInfo = {
15
+ accessToken : undefined ,
16
+ apiKeySource : undefined ,
17
+ } ;
18
+
19
+ export async function getAccessToken ( ) : Promise < AccessTokenInfo > {
10
20
if ( process . env . REPLAY_API_KEY ) {
11
21
logger . debug ( "Using token from env (REPLAY_API_KEY)" ) ;
12
- return process . env . REPLAY_API_KEY ;
22
+ return {
23
+ accessToken : process . env . REPLAY_API_KEY ,
24
+ apiKeySource : "REPLAY_API_KEY" ,
25
+ } ;
13
26
} else if ( process . env . RECORD_REPLAY_API_KEY ) {
14
27
logger . debug ( "Using token from env (RECORD_REPLAY_API_KEY)" ) ;
15
- return process . env . RECORD_REPLAY_API_KEY ;
28
+ return {
29
+ accessToken : process . env . RECORD_REPLAY_API_KEY ,
30
+ apiKeySource : "RECORD_REPLAY_API_KEY" ,
31
+ } ;
16
32
}
17
33
18
34
let { accessToken, refreshToken } = readFromCache < CachedAuthDetails > ( cachedAuthPath ) ?? { } ;
19
35
if ( typeof accessToken !== "string" ) {
20
36
logger . debug ( "Unexpected accessToken value" , { accessToken } ) ;
21
- return ;
37
+ return NO_ACCESS_TOKEN ;
22
38
}
23
39
if ( typeof refreshToken !== "string" ) {
24
40
logger . debug ( "Unexpected refreshToken" , { refreshToken } ) ;
25
- return ;
41
+ return NO_ACCESS_TOKEN ;
26
42
}
27
43
28
44
const [ _ , encodedToken , __ ] = accessToken . split ( "." , 3 ) ;
29
45
if ( typeof encodedToken !== "string" ) {
30
46
logger . debug ( "Token did not contain a valid payload" , { accessToken : maskString ( accessToken ) } ) ;
31
- return ;
47
+ return NO_ACCESS_TOKEN ;
32
48
}
33
49
34
50
let payload : any ;
35
51
try {
36
52
payload = JSON . parse ( Buffer . from ( encodedToken , "base64" ) . toString ( ) ) ;
37
53
} catch ( error ) {
38
54
logger . debug ( "Failed to decode token" , { accessToken : maskString ( accessToken ) , error } ) ;
39
- return ;
55
+ return NO_ACCESS_TOKEN ;
40
56
}
41
57
42
58
if ( typeof payload !== "object" ) {
43
59
logger . debug ( "Token payload was not an object" ) ;
44
- return ;
60
+ return NO_ACCESS_TOKEN ;
45
61
}
46
62
47
63
const expiration = ( payload ?. exp ?? 0 ) * 1000 ;
@@ -57,11 +73,11 @@ export async function getAccessToken(): Promise<string | undefined> {
57
73
} catch ( error ) {
58
74
writeToCache ( cachedAuthPath , undefined ) ;
59
75
updateCachedAuthInfo ( accessToken , undefined ) ;
60
- return ;
76
+ return NO_ACCESS_TOKEN ;
61
77
}
62
78
} else {
63
79
logger . debug ( `Access token valid until ${ expirationDate . toLocaleDateString ( ) } ` ) ;
64
80
}
65
81
66
- return accessToken ;
82
+ return { accessToken, apiKeySource : undefined } ;
67
83
}
0 commit comments