@@ -30,7 +30,10 @@ import { env, isCI } from "std-env";
30
30
import { CLOUD_API_URL } from "../consts.js" ;
31
31
import {
32
32
isPersonalAccessToken ,
33
+ isOrganizationAccessToken ,
34
+ validateAccessToken ,
33
35
NotPersonalAccessTokenError ,
36
+ NotAccessTokenError ,
34
37
} from "../utilities/isPersonalAccessToken.js" ;
35
38
import { links } from "@trigger.dev/core/v3" ;
36
39
@@ -94,8 +97,12 @@ export async function login(options?: LoginOptions): Promise<LoginResult> {
94
97
const accessTokenFromEnv = env . TRIGGER_ACCESS_TOKEN ;
95
98
96
99
if ( accessTokenFromEnv ) {
97
- if ( ! isPersonalAccessToken ( accessTokenFromEnv ) ) {
98
- throw new NotPersonalAccessTokenError (
100
+ const validationResult = validateAccessToken ( accessTokenFromEnv ) ;
101
+
102
+ if ( ! validationResult . success ) {
103
+ // We deliberately don't surface the existence of organization access tokens to the user for now, as they're only used internally.
104
+ // Once we expose them in the application, we should also communicate that option here.
105
+ throw new NotAccessTokenError (
99
106
"Your TRIGGER_ACCESS_TOKEN is not a Personal Access Token, they start with 'tr_pat_'. You can generate one here: https://cloud.trigger.dev/account/tokens"
100
107
) ;
101
108
}
@@ -119,6 +126,7 @@ export async function login(options?: LoginOptions): Promise<LoginResult> {
119
126
dashboardUrl : userData . data . dashboardUrl ,
120
127
auth : {
121
128
accessToken : auth . accessToken ,
129
+ tokenType : validationResult . type ,
122
130
apiUrl : auth . apiUrl ,
123
131
} ,
124
132
} ;
@@ -188,6 +196,7 @@ export async function login(options?: LoginOptions): Promise<LoginResult> {
188
196
auth : {
189
197
accessToken : authConfig . accessToken ,
190
198
apiUrl : authConfig . apiUrl ?? opts . defaultApiUrl ,
199
+ tokenType : "personal" as const ,
191
200
} ,
192
201
} ;
193
202
}
@@ -209,6 +218,7 @@ export async function login(options?: LoginOptions): Promise<LoginResult> {
209
218
auth : {
210
219
accessToken : authConfig . accessToken ,
211
220
apiUrl : authConfig . apiUrl ?? opts . defaultApiUrl ,
221
+ tokenType : "personal" as const ,
212
222
} ,
213
223
} ;
214
224
}
@@ -270,7 +280,10 @@ export async function login(options?: LoginOptions): Promise<LoginResult> {
270
280
getPersonalAccessTokenSpinner . stop ( `Logged in with token ${ indexResult . obfuscatedToken } ` ) ;
271
281
272
282
writeAuthConfigProfile (
273
- { accessToken : indexResult . token , apiUrl : opts . defaultApiUrl } ,
283
+ {
284
+ accessToken : indexResult . token ,
285
+ apiUrl : opts . defaultApiUrl ,
286
+ } ,
274
287
options ?. profile
275
288
) ;
276
289
@@ -309,6 +322,7 @@ export async function login(options?: LoginOptions): Promise<LoginResult> {
309
322
auth : {
310
323
accessToken : indexResult . token ,
311
324
apiUrl : authConfig ?. apiUrl ?? opts . defaultApiUrl ,
325
+ tokenType : "personal" as const ,
312
326
} ,
313
327
} ;
314
328
} catch ( e ) {
0 commit comments