1
1
import { BuildExtension } from "@trigger.dev/core/v3/build" ;
2
2
import { syncEnvVars } from "./core.js" ;
3
3
4
- export function vercelSyncEnvVars ( ) : BuildExtension {
4
+ export function syncVercelEnvVars (
5
+ options ?: { projectId ?: string ; vercelAccessToken ?: string } ,
6
+ ) : BuildExtension {
5
7
const sync = syncEnvVars ( async ( ctx ) => {
8
+ const projectId = options ?. projectId ?? process . env . VERCEL_PROJECT_ID ??
9
+ ctx . env . VERCEL_PROJECT_ID ;
10
+ const vercelAccessToken = options ?. vercelAccessToken ??
11
+ process . env . VERCEL_ACCESS_TOKEN ??
12
+ ctx . env . VERCEL_ACCESS_TOKEN ;
13
+
14
+ if ( ! projectId ) {
15
+ throw new Error (
16
+ "vercelSyncEnvVars: you did not pass in a projectId or set the VERCEL_PROJECT_ID env var." ,
17
+ ) ;
18
+ }
19
+
20
+ if ( ! vercelAccessToken ) {
21
+ throw new Error (
22
+ "vercelSyncEnvVars: you did not pass in a vercelAccessToken or set the VERCEL_ACCESS_TOKEN env var." ,
23
+ ) ;
24
+ }
25
+
6
26
const environmentMap = {
7
27
prod : "production" ,
8
28
staging : "preview" ,
@@ -13,32 +33,40 @@ export function vercelSyncEnvVars(): BuildExtension {
13
33
environmentMap [ ctx . environment as keyof typeof environmentMap ] ;
14
34
15
35
const vercelApiUrl =
16
- `https://api.vercel.com/v8/projects/${ process . env . VERCEL_PROJECT_ID } /env?decrypt=true` ;
36
+ `https://api.vercel.com/v8/projects/${ projectId } /env?decrypt=true` ;
17
37
18
- const response = await fetch ( vercelApiUrl , {
19
- headers : {
20
- Authorization : `Bearer ${ process . env . VERCEL_ACCESS_TOKEN } ` ,
21
- } ,
22
- } ) ;
38
+ try {
39
+ const response = await fetch ( vercelApiUrl , {
40
+ headers : {
41
+ Authorization : `Bearer ${ vercelAccessToken } ` ,
42
+ } ,
43
+ } ) ;
23
44
24
- if ( ! response . ok ) {
25
- throw new Error ( `HTTP error! status: ${ response . status } ` ) ;
26
- }
45
+ if ( ! response . ok ) {
46
+ throw new Error ( `HTTP error! status: ${ response . status } ` ) ;
47
+ }
27
48
28
- const data = await response . json ( ) ;
49
+ const data = await response . json ( ) ;
29
50
30
- const filteredEnvs = data . envs
31
- . filter (
32
- ( env : { type : string ; value : string ; target : string [ ] } ) =>
33
- env . type === "encrypted" && env . value &&
34
- env . target . includes ( vercelEnvironment ) ,
35
- )
36
- . map ( ( env : { key : string ; value : string } ) => ( {
37
- name : env . key ,
38
- value : env . value ,
39
- } ) ) ;
51
+ const filteredEnvs = data . envs
52
+ . filter (
53
+ ( env : { type : string ; value : string ; target : string [ ] } ) =>
54
+ env . type === "encrypted" && env . value &&
55
+ env . target . includes ( vercelEnvironment ) ,
56
+ )
57
+ . map ( ( env : { key : string ; value : string } ) => ( {
58
+ name : env . key ,
59
+ value : env . value ,
60
+ } ) ) ;
40
61
41
- return filteredEnvs ;
62
+ return filteredEnvs ;
63
+ } catch ( error ) {
64
+ console . error (
65
+ "Error fetching or processing Vercel environment variables:" ,
66
+ error ,
67
+ ) ;
68
+ throw error ; // Re-throw the error to be handled by the caller
69
+ }
42
70
} ) ;
43
71
44
72
return {
0 commit comments