11import  {  BuildExtension  }  from  "@trigger.dev/core/v3/build" ; 
22import  {  syncEnvVars  }  from  "./core.js" ; 
33
4- export  function  vercelSyncEnvVars ( ) : BuildExtension  { 
4+ export  function  syncVercelEnvVars ( 
5+   options ?: {  projectId ?: string ;  vercelAccessToken ?: string  } , 
6+ ) : BuildExtension  { 
57  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+ 
626    const  environmentMap  =  { 
727      prod : "production" , 
828      staging : "preview" , 
@@ -13,32 +33,40 @@ export function vercelSyncEnvVars(): BuildExtension {
1333      environmentMap [ ctx . environment  as  keyof  typeof  environmentMap ] ; 
1434
1535    const  vercelApiUrl  = 
16-       `https://api.vercel.com/v8/projects/${ process . env . VERCEL_PROJECT_ID }  ; 
36+       `https://api.vercel.com/v8/projects/${ projectId }  ; 
1737
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+       } ) ; 
2344
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+        } 
2748
28-     const  data  =  await  response . json ( ) ; 
49+        const  data  =  await  response . json ( ) ; 
2950
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+          } ) ) ; 
4061
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+     } 
4270  } ) ; 
4371
4472  return  { 
0 commit comments