@factiii/stack 0.1.58 → 0.1.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/addons/vercel/scanfix/config.d.ts +1 -0
- package/dist/plugins/addons/vercel/scanfix/config.d.ts.map +1 -1
- package/dist/plugins/addons/vercel/scanfix/config.js +164 -41
- package/dist/plugins/addons/vercel/scanfix/config.js.map +1 -1
- package/dist/plugins/addons/vercel/utils/vercel-api.d.ts +41 -0
- package/dist/plugins/addons/vercel/utils/vercel-api.d.ts.map +1 -1
- package/dist/plugins/addons/vercel/utils/vercel-api.js +83 -0
- package/dist/plugins/addons/vercel/utils/vercel-api.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/scanfix/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/scanfix/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAGtD,eAAO,MAAM,KAAK,EAAE,GAAG,EAkStB,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Vercel Configuration Scanfixes
|
|
4
4
|
*
|
|
5
5
|
* Detects and fixes Vercel project configuration issues.
|
|
6
|
+
* Uses Vercel REST API for auto-fixing (no CLI required).
|
|
6
7
|
*/
|
|
7
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
9
|
if (k2 === undefined) k2 = k;
|
|
@@ -48,7 +49,7 @@ exports.fixes = [
|
|
|
48
49
|
severity: 'critical',
|
|
49
50
|
description: 'Vercel configuration missing in stack.yml',
|
|
50
51
|
scan: async (config, _rootDir) => {
|
|
51
|
-
// Skip if vercel not configured
|
|
52
|
+
// Skip if vercel not configured at all
|
|
52
53
|
if (!config.vercel)
|
|
53
54
|
return false;
|
|
54
55
|
// Check required fields
|
|
@@ -58,19 +59,107 @@ exports.fixes = [
|
|
|
58
59
|
}
|
|
59
60
|
return false; // Configured properly
|
|
60
61
|
},
|
|
61
|
-
fix:
|
|
62
|
+
fix: async (config, rootDir) => {
|
|
63
|
+
console.log(' Auto-detecting Vercel project via API...');
|
|
64
|
+
try {
|
|
65
|
+
const { getVercelToken, findVercelProject, listVercelProjects, createVercelProject } = await Promise.resolve().then(() => __importStar(require('../utils/vercel-api.js')));
|
|
66
|
+
// Get token
|
|
67
|
+
let token;
|
|
68
|
+
try {
|
|
69
|
+
token = await getVercelToken(config, rootDir);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
console.log(' [!] VERCEL_TOKEN not found — cannot auto-detect project');
|
|
73
|
+
console.log(' Run: npx stack fix --secrets (to set VERCEL_TOKEN first)');
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const repoName = config.name ?? path.basename(rootDir);
|
|
77
|
+
const teamId = config.vercel?.org_id;
|
|
78
|
+
// Try to find existing project by repo name
|
|
79
|
+
console.log(' Looking for project matching "' + repoName + '"...');
|
|
80
|
+
let project = await findVercelProject(token, repoName, teamId);
|
|
81
|
+
if (!project) {
|
|
82
|
+
// List all projects so user can see what's available
|
|
83
|
+
const allProjects = await listVercelProjects(token, teamId);
|
|
84
|
+
if (allProjects.length > 0) {
|
|
85
|
+
console.log(' No project named "' + repoName + '" found.');
|
|
86
|
+
console.log(' Available projects:');
|
|
87
|
+
for (const p of allProjects.slice(0, 10)) {
|
|
88
|
+
console.log(' - ' + p.name + ' (id: ' + p.id + ')');
|
|
89
|
+
}
|
|
90
|
+
if (allProjects.length > 10) {
|
|
91
|
+
console.log(' ... and ' + (allProjects.length - 10) + ' more');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Create the project automatically
|
|
95
|
+
console.log('');
|
|
96
|
+
console.log(' Creating Vercel project "' + repoName + '"...');
|
|
97
|
+
const gitRepo = config.github_repo;
|
|
98
|
+
const cleanGitRepo = gitRepo && !gitRepo.toUpperCase().startsWith('EXAMPLE')
|
|
99
|
+
? gitRepo
|
|
100
|
+
: undefined;
|
|
101
|
+
project = await createVercelProject(token, repoName, {
|
|
102
|
+
teamId,
|
|
103
|
+
gitRepo: cleanGitRepo,
|
|
104
|
+
framework: 'nextjs',
|
|
105
|
+
});
|
|
106
|
+
console.log(' [OK] Created Vercel project: ' + project.name);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log(' [OK] Found existing project: ' + project.name);
|
|
110
|
+
}
|
|
111
|
+
// Update stack.yml with project info
|
|
112
|
+
const { getStackConfigPath } = await Promise.resolve().then(() => __importStar(require('../../../../constants/config-files.js')));
|
|
113
|
+
const configPath = getStackConfigPath(rootDir);
|
|
114
|
+
let configContent = fs.readFileSync(configPath, 'utf8');
|
|
115
|
+
// Check if there's an existing vercel section to update
|
|
116
|
+
if (configContent.includes('vercel:')) {
|
|
117
|
+
// Replace EXAMPLE values or add missing fields
|
|
118
|
+
configContent = configContent
|
|
119
|
+
.replace(/project_name:\s*EXAMPLE_[^\n]*/i, 'project_name: ' + project.name)
|
|
120
|
+
.replace(/project_id:\s*EXAMPLE_[^\n]*/i, 'project_id: ' + project.id)
|
|
121
|
+
.replace(/org_id:\s*EXAMPLE_[^\n]*/i, 'org_id: ' + (project.orgId ?? ''));
|
|
122
|
+
// If project_id wasn't in the file, add it
|
|
123
|
+
if (!configContent.includes('project_id:')) {
|
|
124
|
+
configContent = configContent.replace(/project_name:\s*.+/, '$&\n project_id: ' + project.id);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Add new vercel section
|
|
129
|
+
const vercelSection = '\nvercel:\n' +
|
|
130
|
+
' project_name: ' + project.name + '\n' +
|
|
131
|
+
' project_id: ' + project.id + '\n' +
|
|
132
|
+
(project.orgId ? ' org_id: ' + project.orgId + '\n' : '');
|
|
133
|
+
configContent += vercelSection;
|
|
134
|
+
}
|
|
135
|
+
fs.writeFileSync(configPath, configContent, 'utf8');
|
|
136
|
+
console.log(' [OK] Updated stack.yml with Vercel project config');
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
141
|
+
if (msg.includes('403')) {
|
|
142
|
+
console.log(' [!] 403 Forbidden — token may be team-scoped');
|
|
143
|
+
console.log(' Fix: Add org_id to vercel section in stack.yml:');
|
|
144
|
+
console.log(' vercel:');
|
|
145
|
+
console.log(' org_id: team_XXXXX # from Vercel Settings → General');
|
|
146
|
+
console.log(' Or create a new token: https://vercel.com/account/tokens');
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.log(' [!] Failed: ' + msg);
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
62
154
|
manualFix: `
|
|
63
155
|
Add Vercel configuration to stack.yml:
|
|
64
156
|
|
|
65
157
|
vercel:
|
|
66
|
-
project_name:
|
|
67
|
-
org_id:
|
|
68
|
-
project_id:
|
|
158
|
+
project_name: EXAMPLE_my-project
|
|
159
|
+
org_id: EXAMPLE_team_xxx # Optional: your Vercel team/org ID
|
|
160
|
+
project_id: EXAMPLE_prj_xxx # Optional: auto-detected after linking
|
|
69
161
|
|
|
70
|
-
|
|
71
|
-
vercel link
|
|
72
|
-
|
|
73
|
-
Or use the Vercel dashboard to create a project and add the IDs to stack.yml.
|
|
162
|
+
Or run: npx stack fix (auto-detects from Vercel API if VERCEL_TOKEN is set)
|
|
74
163
|
`,
|
|
75
164
|
},
|
|
76
165
|
{
|
|
@@ -79,40 +168,81 @@ Or use the Vercel dashboard to create a project and add the IDs to stack.yml.
|
|
|
79
168
|
severity: 'warning',
|
|
80
169
|
description: 'Vercel project not linked (missing .vercel/project.json)',
|
|
81
170
|
scan: async (config, rootDir) => {
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
171
|
+
// Skip if vercel not configured
|
|
172
|
+
if (!config.vercel)
|
|
173
|
+
return false;
|
|
174
|
+
// Skip if project_name is still EXAMPLE
|
|
175
|
+
const projectName = config.vercel.project_name;
|
|
176
|
+
if (!projectName || projectName.toUpperCase().startsWith('EXAMPLE')) {
|
|
177
|
+
return false; // Will be caught by vercel-config-missing
|
|
88
178
|
}
|
|
89
179
|
// Check if .vercel/project.json exists
|
|
90
180
|
const vercelConfigPath = path.join(rootDir, '.vercel', 'project.json');
|
|
91
|
-
|
|
181
|
+
return !fs.existsSync(vercelConfigPath);
|
|
182
|
+
},
|
|
183
|
+
fix: async (config, rootDir) => {
|
|
184
|
+
console.log(' Auto-linking Vercel project via API...');
|
|
185
|
+
try {
|
|
186
|
+
const projectId = config.vercel?.project_id;
|
|
187
|
+
const orgId = config.vercel?.org_id;
|
|
188
|
+
const projectName = config.vercel?.project_name;
|
|
189
|
+
if (!projectId && !projectName) {
|
|
190
|
+
console.log(' [!] No project_id or project_name in stack.yml');
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
let finalProjectId = projectId;
|
|
194
|
+
let finalOrgId = orgId;
|
|
195
|
+
// If we have name but no ID, look it up via API
|
|
196
|
+
if (!finalProjectId && projectName) {
|
|
197
|
+
const { getVercelToken, findVercelProject } = await Promise.resolve().then(() => __importStar(require('../utils/vercel-api.js')));
|
|
198
|
+
const token = await getVercelToken(config, rootDir);
|
|
199
|
+
const project = await findVercelProject(token, projectName, orgId);
|
|
200
|
+
if (project) {
|
|
201
|
+
finalProjectId = project.id;
|
|
202
|
+
finalOrgId = finalOrgId ?? project.orgId;
|
|
203
|
+
console.log(' Found project: ' + project.name + ' (id: ' + project.id + ')');
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
console.log(' [!] Project "' + projectName + '" not found in Vercel');
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Create .vercel directory
|
|
211
|
+
const vercelDir = path.join(rootDir, '.vercel');
|
|
212
|
+
if (!fs.existsSync(vercelDir)) {
|
|
213
|
+
fs.mkdirSync(vercelDir, { recursive: true });
|
|
214
|
+
}
|
|
215
|
+
// Write project.json (same format as vercel link creates)
|
|
216
|
+
const projectJson = {
|
|
217
|
+
projectId: finalProjectId,
|
|
218
|
+
orgId: finalOrgId ?? '',
|
|
219
|
+
};
|
|
220
|
+
fs.writeFileSync(path.join(vercelDir, 'project.json'), JSON.stringify(projectJson, null, 2) + '\n', 'utf8');
|
|
221
|
+
console.log(' [OK] Created .vercel/project.json');
|
|
222
|
+
console.log(' Project ID: ' + finalProjectId);
|
|
223
|
+
if (finalOrgId)
|
|
224
|
+
console.log(' Org ID: ' + finalOrgId);
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
console.log(' [!] Failed: ' + (e instanceof Error ? e.message : String(e)));
|
|
92
229
|
return false;
|
|
93
230
|
}
|
|
94
|
-
return true;
|
|
95
231
|
},
|
|
96
|
-
fix: null,
|
|
97
232
|
manualFix: `
|
|
98
233
|
Link your project to Vercel:
|
|
99
234
|
|
|
100
235
|
vercel link
|
|
101
236
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
2. Ask if you want to link to an existing project or create new one
|
|
105
|
-
3. Create .vercel/project.json with project metadata
|
|
106
|
-
|
|
107
|
-
After linking, the project_id and org_id will be saved in .vercel/project.json.
|
|
108
|
-
You can optionally copy these to stack.yml for documentation.
|
|
237
|
+
Or set project_id in stack.yml and run: npx stack fix
|
|
238
|
+
(The fix will auto-create .vercel/project.json from the API)
|
|
109
239
|
`,
|
|
110
240
|
},
|
|
111
241
|
{
|
|
112
242
|
id: 'vercel-cli-not-installed',
|
|
113
243
|
stage: 'dev',
|
|
114
|
-
severity: '
|
|
115
|
-
description: 'Vercel CLI not installed (
|
|
244
|
+
severity: 'info',
|
|
245
|
+
description: 'Vercel CLI not installed (optional — API is used for deployments)',
|
|
116
246
|
scan: async (config, _rootDir) => {
|
|
117
247
|
// Skip if vercel not configured
|
|
118
248
|
if (!config.vercel)
|
|
@@ -120,11 +250,11 @@ You can optionally copy these to stack.yml for documentation.
|
|
|
120
250
|
// Check if vercel CLI is installed
|
|
121
251
|
try {
|
|
122
252
|
const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
123
|
-
execSync('which vercel', { stdio: 'pipe' });
|
|
253
|
+
execSync('which vercel || where vercel', { stdio: 'pipe' });
|
|
124
254
|
return false; // CLI installed = no problem
|
|
125
255
|
}
|
|
126
256
|
catch {
|
|
127
|
-
return true; // CLI not installed =
|
|
257
|
+
return true; // CLI not installed = info-level (API works without it)
|
|
128
258
|
}
|
|
129
259
|
},
|
|
130
260
|
fix: async (_config, _rootDir) => {
|
|
@@ -140,7 +270,7 @@ You can optionally copy these to stack.yml for documentation.
|
|
|
140
270
|
return false;
|
|
141
271
|
}
|
|
142
272
|
},
|
|
143
|
-
manualFix: 'Install Vercel CLI manually: npm install -g vercel',
|
|
273
|
+
manualFix: 'Install Vercel CLI manually: npm install -g vercel\n(Optional — deployments use the Vercel API, not CLI)',
|
|
144
274
|
},
|
|
145
275
|
{
|
|
146
276
|
id: 'vercel-gitignore-missing',
|
|
@@ -148,20 +278,13 @@ You can optionally copy these to stack.yml for documentation.
|
|
|
148
278
|
severity: 'info',
|
|
149
279
|
description: '.vercel directory not in .gitignore',
|
|
150
280
|
scan: async (config, rootDir) => {
|
|
151
|
-
//
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const usesVercel = Object.values(environments).some((env) => env.pipeline === 'vercel');
|
|
155
|
-
if (!usesVercel) {
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
281
|
+
// Skip if vercel not configured
|
|
282
|
+
if (!config.vercel)
|
|
283
|
+
return false;
|
|
158
284
|
// Check if .vercel is in .gitignore
|
|
159
285
|
const { isGitignored } = await Promise.resolve().then(() => __importStar(require('../../../../utils/gitignore.js')));
|
|
160
286
|
const isIgnored = await isGitignored('.vercel', rootDir);
|
|
161
|
-
|
|
162
|
-
return false;
|
|
163
|
-
}
|
|
164
|
-
return true;
|
|
287
|
+
return !isIgnored; // Not ignored = problem
|
|
165
288
|
},
|
|
166
289
|
fix: async (_config, rootDir) => {
|
|
167
290
|
console.log(' Adding .vercel to .gitignore...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/scanfix/config.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/scanfix/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,47 @@ interface DeployOptions {
|
|
|
19
19
|
branch?: string;
|
|
20
20
|
commit?: string;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Get VERCEL_TOKEN from vault or environment
|
|
24
|
+
*/
|
|
25
|
+
export declare function getVercelToken(config: FactiiiConfig, rootDir: string): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Get user's Vercel teams (to resolve 403 errors)
|
|
28
|
+
*/
|
|
29
|
+
export declare function getVercelTeams(token: string): Promise<{
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
slug: string;
|
|
33
|
+
}[]>;
|
|
34
|
+
/**
|
|
35
|
+
* List all Vercel projects for the authenticated user/team.
|
|
36
|
+
* If no teamId is provided and we get 403, auto-discovers teams and retries.
|
|
37
|
+
*/
|
|
38
|
+
export declare function listVercelProjects(token: string, teamId?: string): Promise<{
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
orgId?: string;
|
|
42
|
+
}[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Find a Vercel project by name (case-insensitive match)
|
|
45
|
+
*/
|
|
46
|
+
export declare function findVercelProject(token: string, projectName: string, teamId?: string): Promise<{
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
orgId?: string;
|
|
50
|
+
} | null>;
|
|
51
|
+
/**
|
|
52
|
+
* Create a new Vercel project via API
|
|
53
|
+
*/
|
|
54
|
+
export declare function createVercelProject(token: string, name: string, options?: {
|
|
55
|
+
teamId?: string;
|
|
56
|
+
gitRepo?: string;
|
|
57
|
+
framework?: string;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
orgId?: string;
|
|
62
|
+
}>;
|
|
22
63
|
/**
|
|
23
64
|
* Deploy to Vercel via API
|
|
24
65
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-api.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/utils/vercel-api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAS9E,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IACnD,UAAU,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IACnE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;CAC9C;AAED,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"vercel-api.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/utils/vercel-api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAS9E,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IACnD,UAAU,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IACnE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;CAC9C;AAED,UAAU,aAAa;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5F;AAmHD;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CASvD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAiCzD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAI9D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACtE,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBvD;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAmIvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAelC"}
|
|
@@ -41,6 +41,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
};
|
|
42
42
|
})();
|
|
43
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.getVercelToken = getVercelToken;
|
|
45
|
+
exports.getVercelTeams = getVercelTeams;
|
|
46
|
+
exports.listVercelProjects = listVercelProjects;
|
|
47
|
+
exports.findVercelProject = findVercelProject;
|
|
48
|
+
exports.createVercelProject = createVercelProject;
|
|
44
49
|
exports.deployToVercel = deployToVercel;
|
|
45
50
|
exports.getDeploymentStatus = getDeploymentStatus;
|
|
46
51
|
const fs = __importStar(require("fs"));
|
|
@@ -154,6 +159,84 @@ async function callVercelAPI(endpoint, token, options = {}) {
|
|
|
154
159
|
}
|
|
155
160
|
return await response.json();
|
|
156
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Get user's Vercel teams (to resolve 403 errors)
|
|
164
|
+
*/
|
|
165
|
+
async function getVercelTeams(token) {
|
|
166
|
+
try {
|
|
167
|
+
const result = (await callVercelAPI('/v2/teams', token));
|
|
168
|
+
return result.teams ?? [];
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* List all Vercel projects for the authenticated user/team.
|
|
176
|
+
* If no teamId is provided and we get 403, auto-discovers teams and retries.
|
|
177
|
+
*/
|
|
178
|
+
async function listVercelProjects(token, teamId) {
|
|
179
|
+
try {
|
|
180
|
+
const result = (await callVercelAPI('/v10/projects?limit=100', token, { teamId }));
|
|
181
|
+
return (result.projects ?? []).map(p => ({
|
|
182
|
+
id: p.id,
|
|
183
|
+
name: p.name,
|
|
184
|
+
orgId: p.accountId ?? teamId,
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
const errorMsg = e instanceof Error ? e.message : String(e);
|
|
189
|
+
// If 403 and no teamId was provided, try to discover teams
|
|
190
|
+
if (errorMsg.includes('403') && !teamId) {
|
|
191
|
+
const teams = await getVercelTeams(token);
|
|
192
|
+
if (teams.length > 0) {
|
|
193
|
+
const team = teams[0];
|
|
194
|
+
// Try with the first team
|
|
195
|
+
console.log(' Token is team-scoped, trying team: ' + team.name);
|
|
196
|
+
const result = (await callVercelAPI('/v10/projects?limit=100', token, { teamId: team.id }));
|
|
197
|
+
return (result.projects ?? []).map(p => ({
|
|
198
|
+
id: p.id,
|
|
199
|
+
name: p.name,
|
|
200
|
+
orgId: p.accountId ?? team.id,
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
throw e; // Re-throw if we can't recover
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Find a Vercel project by name (case-insensitive match)
|
|
209
|
+
*/
|
|
210
|
+
async function findVercelProject(token, projectName, teamId) {
|
|
211
|
+
const projects = await listVercelProjects(token, teamId);
|
|
212
|
+
const normalizedName = projectName.toLowerCase();
|
|
213
|
+
return projects.find(p => p.name.toLowerCase() === normalizedName) ?? null;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Create a new Vercel project via API
|
|
217
|
+
*/
|
|
218
|
+
async function createVercelProject(token, name, options = {}) {
|
|
219
|
+
const body = { name };
|
|
220
|
+
if (options.gitRepo) {
|
|
221
|
+
body.gitRepository = {
|
|
222
|
+
type: 'github',
|
|
223
|
+
repo: options.gitRepo,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (options.framework) {
|
|
227
|
+
body.framework = options.framework;
|
|
228
|
+
}
|
|
229
|
+
const result = (await callVercelAPI('/v9/projects', token, {
|
|
230
|
+
method: 'POST',
|
|
231
|
+
body,
|
|
232
|
+
teamId: options.teamId,
|
|
233
|
+
}));
|
|
234
|
+
return {
|
|
235
|
+
id: result.id,
|
|
236
|
+
name: result.name,
|
|
237
|
+
orgId: result.accountId ?? options.teamId,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
157
240
|
/**
|
|
158
241
|
* Deploy to Vercel via API
|
|
159
242
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-api.js","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/utils/vercel-api.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"vercel-api.js","sourceRoot":"","sources":["../../../../../src/plugins/addons/vercel/utils/vercel-api.ts"],"names":[],"mappings":"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"}
|