alpic 0.0.0-dev.f7aa18c → 0.0.0-dev.f7f559c
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/__tests__/auth.e2e.test.js +2 -3
- package/dist/__tests__/auth.e2e.test.js.map +1 -1
- package/dist/__tests__/deploy-flags.e2e.test.js +78 -1
- package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
- package/dist/__tests__/deploy.e2e.test.js +22 -10
- package/dist/__tests__/deploy.e2e.test.js.map +1 -1
- package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
- package/dist/__tests__/deployment-inspect.e2e.test.js +114 -0
- package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
- package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
- package/dist/__tests__/deployment-list.e2e.test.js +108 -0
- package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
- package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
- package/dist/__tests__/deployment-logs.e2e.test.js +180 -0
- package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
- package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +1 -2
- package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -1
- package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +1 -2
- package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -1
- package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +1 -2
- package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -1
- package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +1 -2
- package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -1
- package/dist/__tests__/link.e2e.test.d.ts +1 -0
- package/dist/__tests__/link.e2e.test.js +279 -0
- package/dist/__tests__/link.e2e.test.js.map +1 -0
- package/dist/__tests__/logs.e2e.test.js +2 -2
- package/dist/__tests__/logs.e2e.test.js.map +1 -1
- package/dist/__tests__/mock-server.d.ts +16 -0
- package/dist/__tests__/mock-server.js +125 -5
- package/dist/__tests__/mock-server.js.map +1 -1
- package/dist/__tests__/publish.e2e.test.d.ts +1 -0
- package/dist/__tests__/publish.e2e.test.js +485 -0
- package/dist/__tests__/publish.e2e.test.js.map +1 -0
- package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
- package/dist/__tests__/tunnel.e2e.test.js +64 -0
- package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
- package/dist/__tests__/utils.d.ts +8 -2
- package/dist/__tests__/utils.js +30 -7
- package/dist/__tests__/utils.js.map +1 -1
- package/dist/commands/audit.d.ts +13 -0
- package/dist/commands/audit.js +138 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/deploy.d.ts +3 -0
- package/dist/commands/deploy.js +31 -10
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/deployment/inspect.d.ts +11 -0
- package/dist/commands/deployment/inspect.js +68 -0
- package/dist/commands/deployment/inspect.js.map +1 -0
- package/dist/commands/deployment/list.d.ts +11 -0
- package/dist/commands/deployment/list.js +85 -0
- package/dist/commands/deployment/list.js.map +1 -0
- package/dist/commands/deployment/logs.d.ts +12 -0
- package/dist/commands/deployment/logs.js +48 -0
- package/dist/commands/deployment/logs.js.map +1 -0
- package/dist/commands/environment-variable/add.js +2 -1
- package/dist/commands/environment-variable/add.js.map +1 -1
- package/dist/commands/environment-variable/list.js +2 -1
- package/dist/commands/environment-variable/list.js.map +1 -1
- package/dist/commands/environment-variable/remove.js +2 -1
- package/dist/commands/environment-variable/remove.js.map +1 -1
- package/dist/commands/environment-variable/update.js +2 -1
- package/dist/commands/environment-variable/update.js.map +1 -1
- package/dist/commands/link.d.ts +17 -0
- package/dist/commands/link.js +101 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/logs.js +1 -1
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/publish.d.ts +15 -0
- package/dist/commands/publish.js +51 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/tunnel.d.ts +9 -0
- package/dist/commands/tunnel.js +53 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.js +1 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/deployment.d.ts +68 -0
- package/dist/lib/deployment.js +102 -1
- package/dist/lib/deployment.js.map +1 -1
- package/dist/lib/environment-variable.d.ts +0 -4
- package/dist/lib/environment-variable.js +0 -12
- package/dist/lib/environment-variable.js.map +1 -1
- package/dist/lib/{project.d.ts → link.d.ts} +22 -10
- package/dist/lib/{project.js → link.js} +169 -80
- package/dist/lib/link.js.map +1 -0
- package/dist/lib/logs.d.ts +1 -0
- package/dist/lib/logs.js +6 -3
- package/dist/lib/logs.js.map +1 -1
- package/dist/lib/publish.d.ts +22 -0
- package/dist/lib/publish.js +181 -0
- package/dist/lib/publish.js.map +1 -0
- package/dist/lib/resolve.d.ts +6 -0
- package/dist/lib/resolve.js +26 -0
- package/dist/lib/resolve.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -1
- package/dist/lib/utils.js +16 -12
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/utils.test.js +13 -6
- package/dist/lib/utils.test.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +17 -14
- package/dist/lib/project.js.map +0 -1
|
@@ -2,10 +2,58 @@ import * as p from "@clack/prompts";
|
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
|
+
import { runtimeSchema } from "@alpic-ai/api";
|
|
5
6
|
import { api } from "../api.js";
|
|
6
7
|
import { BaseWorkflow } from "./base-workflow.js";
|
|
7
8
|
import { config } from "./config.js";
|
|
8
|
-
export
|
|
9
|
+
export const RUNTIMES = runtimeSchema.options;
|
|
10
|
+
const RUNTIME_LABELS = {
|
|
11
|
+
node24: "Node.js 24",
|
|
12
|
+
node22: "Node.js 22",
|
|
13
|
+
"python3.14": "Python 3.14",
|
|
14
|
+
"python3.13": "Python 3.13",
|
|
15
|
+
};
|
|
16
|
+
export class LinkWorkflow extends BaseWorkflow {
|
|
17
|
+
async confirmWorkingDirectory() {
|
|
18
|
+
const confirmed = await this.confirm({
|
|
19
|
+
message: chalk.bold(`Use the current directory? `) + chalk.cyan(process.cwd()),
|
|
20
|
+
initialValue: true,
|
|
21
|
+
});
|
|
22
|
+
if (p.isCancel(confirmed))
|
|
23
|
+
return null;
|
|
24
|
+
return confirmed === true;
|
|
25
|
+
}
|
|
26
|
+
async confirmLinkExisting() {
|
|
27
|
+
const link = await this.confirm({
|
|
28
|
+
message: chalk.bold("Link to existing project?"),
|
|
29
|
+
initialValue: true,
|
|
30
|
+
}, false);
|
|
31
|
+
if (p.isCancel(link))
|
|
32
|
+
return null;
|
|
33
|
+
return link === true;
|
|
34
|
+
}
|
|
35
|
+
async confirmLinkToAnotherProject() {
|
|
36
|
+
const link = await this.confirm({
|
|
37
|
+
message: chalk.bold("Link to another project?"),
|
|
38
|
+
initialValue: true,
|
|
39
|
+
}, false);
|
|
40
|
+
if (p.isCancel(link))
|
|
41
|
+
return null;
|
|
42
|
+
return link === true;
|
|
43
|
+
}
|
|
44
|
+
async selectProjectFromList(projects) {
|
|
45
|
+
if (projects.length === 0) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const choice = await p.select({
|
|
49
|
+
message: chalk.bold("Choose a project"),
|
|
50
|
+
options: projects.map((proj) => ({ value: proj.id, label: proj.name })),
|
|
51
|
+
});
|
|
52
|
+
if (p.isCancel(choice))
|
|
53
|
+
return null;
|
|
54
|
+
const project = projects.find((proj) => proj.id === choice);
|
|
55
|
+
return project ?? null;
|
|
56
|
+
}
|
|
9
57
|
async selectEnvironmentFromList(environments) {
|
|
10
58
|
if (environments.length === 0) {
|
|
11
59
|
return null;
|
|
@@ -22,18 +70,34 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
22
70
|
const environment = environments.find((e) => e.id === choice);
|
|
23
71
|
return environment ?? null;
|
|
24
72
|
}
|
|
25
|
-
async
|
|
26
|
-
|
|
27
|
-
|
|
73
|
+
async resolveTeam() {
|
|
74
|
+
const teams = await api.teams.list.v1();
|
|
75
|
+
if (teams.length === 0) {
|
|
76
|
+
throw new Error("No teams found. Create a team in the Alpic dashboard first.");
|
|
77
|
+
}
|
|
78
|
+
if (this.flags.teamId) {
|
|
79
|
+
const match = teams.find((t) => t.id === this.flags.teamId);
|
|
80
|
+
if (!match) {
|
|
81
|
+
throw new Error(`Team "${this.flags.teamId}" not found.`);
|
|
82
|
+
}
|
|
83
|
+
return match;
|
|
84
|
+
}
|
|
85
|
+
if (this.isNonInteractive()) {
|
|
86
|
+
if (teams.length === 1) {
|
|
87
|
+
const singleTeam = teams[0];
|
|
88
|
+
p.log.info(`Using team ${chalk.bold(singleTeam.name)}`);
|
|
89
|
+
return singleTeam;
|
|
90
|
+
}
|
|
91
|
+
throw new Error("Multiple teams found. Use --team-id to select one.");
|
|
28
92
|
}
|
|
29
93
|
const choice = await p.select({
|
|
30
|
-
message: chalk.bold("Choose a
|
|
31
|
-
options:
|
|
94
|
+
message: chalk.bold("Choose a team"),
|
|
95
|
+
options: teams.map((t) => ({ value: t.id, label: t.name })),
|
|
32
96
|
});
|
|
33
97
|
if (p.isCancel(choice))
|
|
34
98
|
return null;
|
|
35
|
-
const
|
|
36
|
-
return
|
|
99
|
+
const selected = teams.find((t) => t.id === choice);
|
|
100
|
+
return selected ?? null;
|
|
37
101
|
}
|
|
38
102
|
async promptRootDirectory() {
|
|
39
103
|
if (this.isNonInteractive()) {
|
|
@@ -71,71 +135,23 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
71
135
|
return trimmed;
|
|
72
136
|
}
|
|
73
137
|
}
|
|
74
|
-
directoryExists(dir) {
|
|
75
|
-
return existsSync(dir) && statSync(dir).isDirectory();
|
|
76
|
-
}
|
|
77
|
-
detectRuntime() {
|
|
78
|
-
const has = (file) => existsSync(file);
|
|
79
|
-
const read = (file) => {
|
|
80
|
-
try {
|
|
81
|
-
return readFileSync(file, "utf8");
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
return "";
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
if (has("pyproject.toml") || has("requirements.txt") || has("setup.py") || has(".python-version")) {
|
|
88
|
-
return "python3.13";
|
|
89
|
-
}
|
|
90
|
-
if (has("package.json")) {
|
|
91
|
-
const nvmrc = has(".nvmrc") ? (read(".nvmrc").trim().split(/\s/)[0] ?? "") : "";
|
|
92
|
-
const major = nvmrc.replace(/^v/i, "").match(/^(\d+)/)?.[1];
|
|
93
|
-
if (major === "22")
|
|
94
|
-
return "node22";
|
|
95
|
-
return "node24";
|
|
96
|
-
}
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
138
|
async confirmDeployWithExistingConfig(existingConfig) {
|
|
100
139
|
const envLabel = existingConfig.environmentName ? ` to environment "${existingConfig.environmentName}"` : "";
|
|
140
|
+
const teamLabel = existingConfig.teamName ? chalk.dim(` [team: ${existingConfig.teamName}]`) : "";
|
|
101
141
|
const confirmed = await this.confirm({
|
|
102
|
-
message: chalk.bold(`
|
|
142
|
+
message: chalk.bold(`Use project "${existingConfig.projectName}"${envLabel}?`) + teamLabel,
|
|
103
143
|
initialValue: true,
|
|
104
144
|
});
|
|
105
145
|
if (p.isCancel(confirmed))
|
|
106
146
|
return null;
|
|
107
147
|
return confirmed === true;
|
|
108
148
|
}
|
|
109
|
-
async
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (
|
|
115
|
-
return false;
|
|
116
|
-
return confirmed === true;
|
|
117
|
-
}
|
|
118
|
-
async confirmLinkExisting() {
|
|
119
|
-
const link = await this.confirm({
|
|
120
|
-
message: chalk.bold("Link to existing project?"),
|
|
121
|
-
initialValue: true,
|
|
122
|
-
}, false);
|
|
123
|
-
if (p.isCancel(link))
|
|
124
|
-
return false;
|
|
125
|
-
return link === true;
|
|
126
|
-
}
|
|
127
|
-
async confirmLinkToAnotherProject() {
|
|
128
|
-
const link = await this.confirm({
|
|
129
|
-
message: chalk.bold("Link to another project?"),
|
|
130
|
-
initialValue: true,
|
|
131
|
-
}, false);
|
|
132
|
-
if (p.isCancel(link))
|
|
133
|
-
return false;
|
|
134
|
-
return link === true;
|
|
135
|
-
}
|
|
136
|
-
async resolveProjectForDeploy() {
|
|
137
|
-
const ok = await this.confirmDeployDirectory();
|
|
138
|
-
if (!ok)
|
|
149
|
+
async runLinkFlow() {
|
|
150
|
+
const fromFlags = await this.getConfigFromFlags();
|
|
151
|
+
if (fromFlags)
|
|
152
|
+
return fromFlags;
|
|
153
|
+
const ok = await this.confirmWorkingDirectory();
|
|
154
|
+
if (ok === null || ok === false)
|
|
139
155
|
return null;
|
|
140
156
|
const existingConfig = config.load();
|
|
141
157
|
if (existingConfig) {
|
|
@@ -147,10 +163,12 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
147
163
|
if (confirmed)
|
|
148
164
|
break;
|
|
149
165
|
const linkAnother = await this.confirmLinkToAnotherProject();
|
|
150
|
-
if (
|
|
166
|
+
if (linkAnother === null)
|
|
151
167
|
return null;
|
|
152
168
|
if (linkAnother) {
|
|
153
169
|
const linkExisting = await this.confirmLinkExisting();
|
|
170
|
+
if (linkExisting === null)
|
|
171
|
+
return null;
|
|
154
172
|
if (!linkExisting) {
|
|
155
173
|
return this.runCreateProjectFlow();
|
|
156
174
|
}
|
|
@@ -161,6 +179,7 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
161
179
|
return {
|
|
162
180
|
projectId: existingConfig.projectId,
|
|
163
181
|
teamId: existingConfig.teamId,
|
|
182
|
+
teamName: existingConfig.teamName,
|
|
164
183
|
projectName: existingConfig.projectName,
|
|
165
184
|
environmentId: existingConfig.environmentId,
|
|
166
185
|
environmentName: existingConfig.environmentName,
|
|
@@ -180,11 +199,16 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
180
199
|
});
|
|
181
200
|
return updatedConfig;
|
|
182
201
|
}
|
|
202
|
+
const team = await this.resolveTeam();
|
|
203
|
+
if (!team)
|
|
204
|
+
return null;
|
|
183
205
|
const linkExisting = await this.confirmLinkExisting();
|
|
184
|
-
if (
|
|
185
|
-
return
|
|
206
|
+
if (linkExisting === null)
|
|
207
|
+
return null;
|
|
208
|
+
if (linkExisting) {
|
|
209
|
+
return this.runLinkingFlow(team);
|
|
186
210
|
}
|
|
187
|
-
return this.
|
|
211
|
+
return this.runCreateProjectFlow(team);
|
|
188
212
|
}
|
|
189
213
|
async resolveEnvironmentForProject(projectId) {
|
|
190
214
|
const project = await api.projects.get.v1({ projectId });
|
|
@@ -197,7 +221,66 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
197
221
|
return null;
|
|
198
222
|
return { environmentId: environment.id, environmentName: environment.name };
|
|
199
223
|
}
|
|
200
|
-
async
|
|
224
|
+
async getConfigFromFlags() {
|
|
225
|
+
const { projectId, environmentId } = this.flags;
|
|
226
|
+
if (projectId && !environmentId) {
|
|
227
|
+
throw new Error("--environment-id is required when using --project-id.");
|
|
228
|
+
}
|
|
229
|
+
if (!projectId && environmentId) {
|
|
230
|
+
throw new Error("--project-id is required when using --environment-id.");
|
|
231
|
+
}
|
|
232
|
+
if (projectId && environmentId) {
|
|
233
|
+
const project = await api.projects.get.v1({ projectId });
|
|
234
|
+
const environment = project.environments?.find((env) => env.id === environmentId);
|
|
235
|
+
if (!environment) {
|
|
236
|
+
throw new Error(`Environment "${environmentId}" not found in project "${project.name}".`);
|
|
237
|
+
}
|
|
238
|
+
const teams = await api.teams.list.v1();
|
|
239
|
+
const team = teams.find((t) => t.id === project.teamId);
|
|
240
|
+
const resolvedConfig = {
|
|
241
|
+
projectId,
|
|
242
|
+
teamId: project.teamId,
|
|
243
|
+
teamName: team?.name,
|
|
244
|
+
projectName: project.name,
|
|
245
|
+
environmentId,
|
|
246
|
+
environmentName: environment.name,
|
|
247
|
+
};
|
|
248
|
+
config.save(resolvedConfig);
|
|
249
|
+
return resolvedConfig;
|
|
250
|
+
}
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
directoryExists(dir) {
|
|
254
|
+
return existsSync(dir) && statSync(dir).isDirectory();
|
|
255
|
+
}
|
|
256
|
+
detectRuntime() {
|
|
257
|
+
const has = (file) => existsSync(file);
|
|
258
|
+
const read = (file) => {
|
|
259
|
+
try {
|
|
260
|
+
return readFileSync(file, "utf8");
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return "";
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
if (has("pyproject.toml") || has("requirements.txt") || has("setup.py") || has(".python-version")) {
|
|
267
|
+
return "python3.13";
|
|
268
|
+
}
|
|
269
|
+
if (has("package.json")) {
|
|
270
|
+
const nvmrc = has(".nvmrc") ? (read(".nvmrc").trim().split(/\s/)[0] ?? "") : "";
|
|
271
|
+
const major = nvmrc.replace(/^v/i, "").match(/^(\d+)/)?.[1];
|
|
272
|
+
if (major === "22")
|
|
273
|
+
return "node22";
|
|
274
|
+
return "node24";
|
|
275
|
+
}
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
async runCreateProjectFlow(team) {
|
|
279
|
+
if (!team) {
|
|
280
|
+
team = (await this.resolveTeam()) ?? undefined;
|
|
281
|
+
if (!team)
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
201
284
|
if (this.isNonInteractive() && !this.flags.projectName) {
|
|
202
285
|
throw new Error("--project-name is required when using --non-interactive");
|
|
203
286
|
}
|
|
@@ -214,7 +297,7 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
214
297
|
},
|
|
215
298
|
}));
|
|
216
299
|
if (p.isCancel(name)) {
|
|
217
|
-
|
|
300
|
+
return null;
|
|
218
301
|
}
|
|
219
302
|
const detectedRuntime = this.detectRuntime();
|
|
220
303
|
const defaultRuntime = detectedRuntime ?? "node24";
|
|
@@ -222,16 +305,14 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
222
305
|
? (this.flags.runtime ?? defaultRuntime)
|
|
223
306
|
: await p.select({
|
|
224
307
|
message: chalk.bold("Runtime"),
|
|
225
|
-
options:
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
{ value: "python3.13", label: "Python 3.13" },
|
|
230
|
-
],
|
|
308
|
+
options: RUNTIMES.map((value) => ({
|
|
309
|
+
value,
|
|
310
|
+
label: value === detectedRuntime ? `${RUNTIME_LABELS[value]} (detected)` : RUNTIME_LABELS[value],
|
|
311
|
+
})),
|
|
231
312
|
initialValue: defaultRuntime,
|
|
232
313
|
});
|
|
233
314
|
if (p.isCancel(runtime)) {
|
|
234
|
-
|
|
315
|
+
return null;
|
|
235
316
|
}
|
|
236
317
|
const rootDirectory = await this.promptRootDirectory();
|
|
237
318
|
const spin = p.spinner();
|
|
@@ -240,6 +321,7 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
240
321
|
const projectInput = {
|
|
241
322
|
name,
|
|
242
323
|
runtime,
|
|
324
|
+
teamId: team.id,
|
|
243
325
|
};
|
|
244
326
|
projectInput.rootDirectory = rootDirectory ?? undefined;
|
|
245
327
|
const created = await api.projects.create.v1(projectInput);
|
|
@@ -251,6 +333,7 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
251
333
|
const newConfig = {
|
|
252
334
|
projectId: created.id,
|
|
253
335
|
teamId: created.teamId,
|
|
336
|
+
teamName: team.name,
|
|
254
337
|
projectName: created.name,
|
|
255
338
|
environmentId: productionEnv.id,
|
|
256
339
|
environmentName: productionEnv.name,
|
|
@@ -263,8 +346,13 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
263
346
|
throw error;
|
|
264
347
|
}
|
|
265
348
|
}
|
|
266
|
-
async runLinkingFlow() {
|
|
267
|
-
|
|
349
|
+
async runLinkingFlow(team) {
|
|
350
|
+
if (!team) {
|
|
351
|
+
team = (await this.resolveTeam()) ?? undefined;
|
|
352
|
+
if (!team)
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
const projects = await api.projects.list.v1({ teamId: team.id });
|
|
268
356
|
if (projects.length === 0) {
|
|
269
357
|
throw new Error("No projects found. Create a project in the Alpic dashboard first.");
|
|
270
358
|
}
|
|
@@ -281,6 +369,7 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
281
369
|
const newConfig = {
|
|
282
370
|
projectId: project.id,
|
|
283
371
|
teamId: project.teamId,
|
|
372
|
+
teamName: team.name,
|
|
284
373
|
projectName: project.name,
|
|
285
374
|
environmentId: environment.id,
|
|
286
375
|
environmentName: environment.name,
|
|
@@ -292,4 +381,4 @@ export class ProjectWorkflow extends BaseWorkflow {
|
|
|
292
381
|
return newConfig;
|
|
293
382
|
}
|
|
294
383
|
}
|
|
295
|
-
//# sourceMappingURL=
|
|
384
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/lib/link.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/logs.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ type FollowEnvironmentLogsParams = {
|
|
|
11
11
|
pollIntervalMs?: number;
|
|
12
12
|
onLog: (log: RuntimeLogEntry) => void;
|
|
13
13
|
};
|
|
14
|
+
export declare function formatLogTimestamp(timestamp: Date | undefined, noColor: boolean): string;
|
|
14
15
|
export declare function printLog(log: RuntimeLogEntry, { noColor }?: {
|
|
15
16
|
noColor?: boolean;
|
|
16
17
|
}): void;
|
package/dist/lib/logs.js
CHANGED
|
@@ -17,12 +17,15 @@ const LOG_TYPE_LABELS = {
|
|
|
17
17
|
DEBUG: "DEBUG",
|
|
18
18
|
};
|
|
19
19
|
const LOG_LEVEL_WIDTH = 5;
|
|
20
|
-
function
|
|
21
|
-
|
|
20
|
+
export function formatLogTimestamp(timestamp, noColor) {
|
|
21
|
+
if (!timestamp)
|
|
22
|
+
return "";
|
|
23
|
+
const formatted = timestamp.toISOString().replace("T", " ").slice(0, 23);
|
|
24
|
+
return noColor ? formatted : chalk.gray(formatted);
|
|
22
25
|
}
|
|
23
26
|
export function printLog(log, { noColor = false } = {}) {
|
|
24
27
|
const colorize = noColor ? (s) => s : (LOG_TYPE_COLORS[log.type] ?? chalk.white);
|
|
25
|
-
const ts =
|
|
28
|
+
const ts = formatLogTimestamp(log.timestamp, noColor);
|
|
26
29
|
const shortRequestId = log.requestId.split("-")[0] ?? log.requestId;
|
|
27
30
|
const levelPrefix = `${LOG_TYPE_LABELS[log.type].padEnd(LOG_LEVEL_WIDTH, " ")} `;
|
|
28
31
|
let message;
|
package/dist/lib/logs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/lib/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAiBhC,MAAM,eAAe,GAA0C;IAC7D,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,OAAO,EAAE,KAAK,CAAC,MAAM;IACrB,KAAK,EAAE,KAAK,CAAC,IAAI;IACjB,IAAI,EAAE,KAAK,CAAC,KAAK;IACjB,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,GAAG,EAAE,KAAK,CAAC,GAAG;CACf,CAAC;AACF,MAAM,eAAe,GAA4C;IAC/D,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,OAAO;CACf,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/lib/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseWorkflow } from "./base-workflow.js";
|
|
2
|
+
type PublishFlags = {
|
|
3
|
+
"non-interactive"?: boolean;
|
|
4
|
+
"project-id"?: string;
|
|
5
|
+
domain?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
"website-url"?: string;
|
|
9
|
+
"icon-src"?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const getMcpRegistrySearchUrl: (serverName: string) => string;
|
|
12
|
+
export declare class PublishWorkflow extends BaseWorkflow<PublishFlags> {
|
|
13
|
+
publish(projectId: string): Promise<void>;
|
|
14
|
+
private doPublish;
|
|
15
|
+
private getDeployedCustomDomains;
|
|
16
|
+
private sortCandidates;
|
|
17
|
+
private selectDomain;
|
|
18
|
+
private promptTitle;
|
|
19
|
+
private promptDescription;
|
|
20
|
+
private promptOptionalUrl;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../api.js";
|
|
4
|
+
import { BaseWorkflow } from "./base-workflow.js";
|
|
5
|
+
export const getMcpRegistrySearchUrl = (serverName) => {
|
|
6
|
+
return `https://registry.modelcontextprotocol.io/?q=${encodeURIComponent(serverName)}`;
|
|
7
|
+
};
|
|
8
|
+
function isValidUrl(value) {
|
|
9
|
+
try {
|
|
10
|
+
new URL(value);
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class PublishWorkflow extends BaseWorkflow {
|
|
18
|
+
async publish(projectId) {
|
|
19
|
+
const project = await api.projects.get.v1({ projectId });
|
|
20
|
+
const productionEnvironment = project.productionEnvironment;
|
|
21
|
+
if (!productionEnvironment) {
|
|
22
|
+
throw new Error("No production environment found.");
|
|
23
|
+
}
|
|
24
|
+
const sharedDomain = new URL(productionEnvironment.mcpServerUrl).hostname;
|
|
25
|
+
const deployedCustomDomains = this.getDeployedCustomDomains(productionEnvironment.domains);
|
|
26
|
+
const rawCandidates = [
|
|
27
|
+
{ domain: sharedDomain, isShared: true },
|
|
28
|
+
...deployedCustomDomains.map((domain) => ({ domain, isShared: false })),
|
|
29
|
+
];
|
|
30
|
+
const candidates = this.sortCandidates(rawCandidates);
|
|
31
|
+
const { domain } = await this.selectDomain(candidates);
|
|
32
|
+
const { serverFields } = await api.distribution.get.v1({ projectId, domain });
|
|
33
|
+
const title = await this.promptTitle(serverFields.title);
|
|
34
|
+
const description = await this.promptDescription(serverFields.description);
|
|
35
|
+
const websiteUrl = await this.promptOptionalUrl("Website URL", "https://example.com", this.flags["website-url"], serverFields.websiteUrl);
|
|
36
|
+
const iconSrc = await this.promptOptionalUrl("Icon URL", "https://example.com/icon.png", this.flags["icon-src"], serverFields.icons?.[0]?.src);
|
|
37
|
+
const dryRunResult = await this.doPublish({
|
|
38
|
+
projectId: project.id,
|
|
39
|
+
domain,
|
|
40
|
+
title,
|
|
41
|
+
description,
|
|
42
|
+
websiteUrl,
|
|
43
|
+
iconSrc,
|
|
44
|
+
}, { dryRun: true });
|
|
45
|
+
const versionToBePublished = dryRunResult.serverFields.version;
|
|
46
|
+
const confirmed = await this.confirm({
|
|
47
|
+
message: chalk.bold(`Publish to MCP Registry under domain ${chalk.cyan(domain)}?${versionToBePublished ? ` (v${versionToBePublished})` : ""}`),
|
|
48
|
+
});
|
|
49
|
+
if (p.isCancel(confirmed) || !confirmed) {
|
|
50
|
+
throw new Error("Publish cancelled.");
|
|
51
|
+
}
|
|
52
|
+
const spinner = p.spinner();
|
|
53
|
+
spinner.start("Publishing to MCP registry...");
|
|
54
|
+
const publishResult = await this.doPublish({
|
|
55
|
+
projectId: project.id,
|
|
56
|
+
domain,
|
|
57
|
+
title,
|
|
58
|
+
description,
|
|
59
|
+
websiteUrl,
|
|
60
|
+
iconSrc,
|
|
61
|
+
});
|
|
62
|
+
spinner.stop("Published successfully");
|
|
63
|
+
const registryUrl = getMcpRegistrySearchUrl(project.name);
|
|
64
|
+
const version = publishResult.serverFields.version ?? "?";
|
|
65
|
+
p.log.success(`Registry publication succeeded ${version ? `(v${version})` : ""}`);
|
|
66
|
+
p.log.info(`Domain: ${chalk.cyan(domain)}`);
|
|
67
|
+
p.log.info(`Registry: ${chalk.cyan(registryUrl)}`);
|
|
68
|
+
}
|
|
69
|
+
async doPublish(input, { dryRun = false } = {}) {
|
|
70
|
+
return api.distribution.publish.v1({
|
|
71
|
+
projectId: input.projectId,
|
|
72
|
+
domain: input.domain,
|
|
73
|
+
title: input.title,
|
|
74
|
+
description: input.description,
|
|
75
|
+
...(input.websiteUrl ? { websiteUrl: input.websiteUrl } : {}),
|
|
76
|
+
...(input.iconSrc ? { iconSrc: input.iconSrc } : {}),
|
|
77
|
+
...(dryRun ? { dryRun: true } : {}),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
getDeployedCustomDomains(domains) {
|
|
81
|
+
return domains.filter((d) => d.status === "deployed").map((d) => d.domain);
|
|
82
|
+
}
|
|
83
|
+
sortCandidates(domains) {
|
|
84
|
+
return [...domains].sort((a, b) => {
|
|
85
|
+
if (a.isShared !== b.isShared)
|
|
86
|
+
return a.isShared ? 1 : -1;
|
|
87
|
+
return a.domain.length - b.domain.length;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async selectDomain(candidates) {
|
|
91
|
+
if (this.flags.domain) {
|
|
92
|
+
const match = candidates.find((d) => d.domain === this.flags.domain);
|
|
93
|
+
if (!match) {
|
|
94
|
+
throw new Error(`Domain "${this.flags.domain}" not found. Available: ${candidates.map((d) => d.domain).join(", ")}`);
|
|
95
|
+
}
|
|
96
|
+
return match;
|
|
97
|
+
}
|
|
98
|
+
if (this.isNonInteractive()) {
|
|
99
|
+
throw new Error(`--domain is required when using --non-interactive. Available: ${candidates.map((d) => d.domain).join(", ")}`);
|
|
100
|
+
}
|
|
101
|
+
const choice = await p.select({
|
|
102
|
+
message: chalk.bold("Select a domain to publish for"),
|
|
103
|
+
options: candidates.map((d) => ({
|
|
104
|
+
value: d.domain,
|
|
105
|
+
label: d.isShared ? `${d.domain} (shared)` : d.domain,
|
|
106
|
+
})),
|
|
107
|
+
});
|
|
108
|
+
if (p.isCancel(choice)) {
|
|
109
|
+
throw new Error("Publish cancelled.");
|
|
110
|
+
}
|
|
111
|
+
return candidates.find((d) => d.domain === choice);
|
|
112
|
+
}
|
|
113
|
+
async promptTitle(prefilled) {
|
|
114
|
+
if (this.isNonInteractive()) {
|
|
115
|
+
if (!this.flags.title) {
|
|
116
|
+
throw new Error("--title is required when using --non-interactive");
|
|
117
|
+
}
|
|
118
|
+
return this.flags.title;
|
|
119
|
+
}
|
|
120
|
+
const value = await p.text({
|
|
121
|
+
message: chalk.bold("Server title"),
|
|
122
|
+
initialValue: this.flags.title ?? prefilled,
|
|
123
|
+
validate: (v) => {
|
|
124
|
+
if (!v?.trim())
|
|
125
|
+
return "Title is required.";
|
|
126
|
+
if (v.length > 100)
|
|
127
|
+
return "Title must be at most 100 characters.";
|
|
128
|
+
return undefined;
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
if (p.isCancel(value)) {
|
|
132
|
+
throw new Error("Publish cancelled.");
|
|
133
|
+
}
|
|
134
|
+
return value.trim();
|
|
135
|
+
}
|
|
136
|
+
async promptDescription(prefilled) {
|
|
137
|
+
if (this.isNonInteractive()) {
|
|
138
|
+
if (!this.flags.description) {
|
|
139
|
+
throw new Error("--description is required when using --non-interactive");
|
|
140
|
+
}
|
|
141
|
+
return this.flags.description;
|
|
142
|
+
}
|
|
143
|
+
const value = await p.text({
|
|
144
|
+
message: chalk.bold("Server description"),
|
|
145
|
+
initialValue: this.flags.description ?? prefilled,
|
|
146
|
+
validate: (v) => {
|
|
147
|
+
if (!v?.trim())
|
|
148
|
+
return "Description is required.";
|
|
149
|
+
if (v.length > 100)
|
|
150
|
+
return "Description must be at most 100 characters.";
|
|
151
|
+
return undefined;
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
if (p.isCancel(value)) {
|
|
155
|
+
throw new Error("Publish cancelled.");
|
|
156
|
+
}
|
|
157
|
+
return value.trim();
|
|
158
|
+
}
|
|
159
|
+
async promptOptionalUrl(label, placeholder, flagValue, prefilled) {
|
|
160
|
+
if (this.isNonInteractive()) {
|
|
161
|
+
return flagValue || undefined;
|
|
162
|
+
}
|
|
163
|
+
const value = await p.text({
|
|
164
|
+
message: chalk.bold(label),
|
|
165
|
+
placeholder,
|
|
166
|
+
initialValue: flagValue ?? prefilled,
|
|
167
|
+
validate: (v) => {
|
|
168
|
+
if (!v || v.trim() === "")
|
|
169
|
+
return undefined;
|
|
170
|
+
if (!isValidUrl(v))
|
|
171
|
+
return "Must be a valid URL.";
|
|
172
|
+
return undefined;
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
if (p.isCancel(value)) {
|
|
176
|
+
throw new Error("Publish cancelled.");
|
|
177
|
+
}
|
|
178
|
+
return value?.trim() || undefined;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/lib/publish.ts"],"names":[],"mappings":"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"}
|