alpic 0.0.0-dev.f74887d → 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.
Files changed (137) hide show
  1. package/dist/__tests__/auth.e2e.test.js +18 -3
  2. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  3. package/dist/__tests__/deploy-flags.e2e.test.js +92 -5
  4. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
  5. package/dist/__tests__/deploy.e2e.test.js +22 -10
  6. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  7. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  8. package/dist/__tests__/deployment-inspect.e2e.test.js +114 -0
  9. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
  10. package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/deployment-list.e2e.test.js +108 -0
  12. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
  13. package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/deployment-logs.e2e.test.js +180 -0
  15. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
  16. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +249 -0
  18. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  19. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +121 -0
  21. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +138 -0
  24. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  25. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  26. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +318 -0
  27. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  28. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  29. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  30. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  31. package/dist/__tests__/git-flags.e2e.test.js +6 -6
  32. package/dist/__tests__/git-flags.e2e.test.js.map +1 -1
  33. package/dist/__tests__/git.e2e.test.js +2 -2
  34. package/dist/__tests__/link.e2e.test.d.ts +1 -0
  35. package/dist/__tests__/link.e2e.test.js +279 -0
  36. package/dist/__tests__/link.e2e.test.js.map +1 -0
  37. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  38. package/dist/__tests__/logs.e2e.test.js +197 -0
  39. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  40. package/dist/__tests__/mock-server.d.ts +20 -0
  41. package/dist/__tests__/mock-server.js +250 -7
  42. package/dist/__tests__/mock-server.js.map +1 -1
  43. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  44. package/dist/__tests__/publish.e2e.test.js +485 -0
  45. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  46. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  47. package/dist/__tests__/tunnel.e2e.test.js +64 -0
  48. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  49. package/dist/__tests__/utils.d.ts +8 -2
  50. package/dist/__tests__/utils.js +53 -18
  51. package/dist/__tests__/utils.js.map +1 -1
  52. package/dist/commands/audit.d.ts +13 -0
  53. package/dist/commands/audit.js +138 -0
  54. package/dist/commands/audit.js.map +1 -0
  55. package/dist/commands/deploy.d.ts +4 -1
  56. package/dist/commands/deploy.js +36 -17
  57. package/dist/commands/deploy.js.map +1 -1
  58. package/dist/commands/deployment/inspect.d.ts +11 -0
  59. package/dist/commands/deployment/inspect.js +68 -0
  60. package/dist/commands/deployment/inspect.js.map +1 -0
  61. package/dist/commands/deployment/list.d.ts +11 -0
  62. package/dist/commands/deployment/list.js +85 -0
  63. package/dist/commands/deployment/list.js.map +1 -0
  64. package/dist/commands/deployment/logs.d.ts +12 -0
  65. package/dist/commands/deployment/logs.js +48 -0
  66. package/dist/commands/deployment/logs.js.map +1 -0
  67. package/dist/commands/environment-variable/add.d.ts +14 -0
  68. package/dist/commands/environment-variable/add.js +47 -0
  69. package/dist/commands/environment-variable/add.js.map +1 -0
  70. package/dist/commands/environment-variable/list.d.ts +9 -0
  71. package/dist/commands/environment-variable/list.js +45 -0
  72. package/dist/commands/environment-variable/list.js.map +1 -0
  73. package/dist/commands/environment-variable/remove.d.ts +11 -0
  74. package/dist/commands/environment-variable/remove.js +33 -0
  75. package/dist/commands/environment-variable/remove.js.map +1 -0
  76. package/dist/commands/environment-variable/update.d.ts +13 -0
  77. package/dist/commands/environment-variable/update.js +41 -0
  78. package/dist/commands/environment-variable/update.js.map +1 -0
  79. package/dist/commands/git/connect.d.ts +1 -1
  80. package/dist/commands/git/connect.js +7 -10
  81. package/dist/commands/git/connect.js.map +1 -1
  82. package/dist/commands/git/disconnect.d.ts +1 -1
  83. package/dist/commands/git/disconnect.js +6 -10
  84. package/dist/commands/git/disconnect.js.map +1 -1
  85. package/dist/commands/link.d.ts +17 -0
  86. package/dist/commands/link.js +101 -0
  87. package/dist/commands/link.js.map +1 -0
  88. package/dist/commands/login.js +4 -2
  89. package/dist/commands/login.js.map +1 -1
  90. package/dist/commands/logs.d.ts +16 -0
  91. package/dist/commands/logs.js +96 -0
  92. package/dist/commands/logs.js.map +1 -0
  93. package/dist/commands/publish.d.ts +15 -0
  94. package/dist/commands/publish.js +51 -0
  95. package/dist/commands/publish.js.map +1 -0
  96. package/dist/commands/tunnel.d.ts +9 -0
  97. package/dist/commands/tunnel.js +53 -0
  98. package/dist/commands/tunnel.js.map +1 -0
  99. package/dist/lib/base-workflow.d.ts +1 -1
  100. package/dist/lib/base-workflow.js +1 -1
  101. package/dist/lib/base-workflow.js.map +1 -1
  102. package/dist/lib/config.d.ts +1 -0
  103. package/dist/lib/config.js +1 -0
  104. package/dist/lib/config.js.map +1 -1
  105. package/dist/lib/deployment.d.ts +68 -0
  106. package/dist/lib/deployment.js +102 -1
  107. package/dist/lib/deployment.js.map +1 -1
  108. package/dist/lib/environment-variable.d.ts +37 -0
  109. package/dist/lib/environment-variable.js +292 -0
  110. package/dist/lib/environment-variable.js.map +1 -0
  111. package/dist/lib/git.d.ts +3 -3
  112. package/dist/lib/git.js +4 -6
  113. package/dist/lib/git.js.map +1 -1
  114. package/dist/lib/{project.d.ts → link.d.ts} +23 -11
  115. package/dist/lib/{project.js → link.js} +168 -81
  116. package/dist/lib/link.js.map +1 -0
  117. package/dist/lib/logs.d.ts +20 -0
  118. package/dist/lib/logs.js +86 -0
  119. package/dist/lib/logs.js.map +1 -0
  120. package/dist/lib/publish.d.ts +22 -0
  121. package/dist/lib/publish.js +181 -0
  122. package/dist/lib/publish.js.map +1 -0
  123. package/dist/lib/resolve.d.ts +6 -0
  124. package/dist/lib/resolve.js +26 -0
  125. package/dist/lib/resolve.js.map +1 -0
  126. package/dist/lib/table.d.ts +8 -0
  127. package/dist/lib/table.js +27 -0
  128. package/dist/lib/table.js.map +1 -0
  129. package/dist/lib/utils.d.ts +4 -0
  130. package/dist/lib/utils.js +21 -0
  131. package/dist/lib/utils.js.map +1 -0
  132. package/dist/lib/utils.test.d.ts +1 -0
  133. package/dist/lib/utils.test.js +21 -0
  134. package/dist/lib/utils.test.js.map +1 -0
  135. package/dist/types.d.ts +1 -0
  136. package/package.json +22 -17
  137. 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 class ProjectWorkflow extends BaseWorkflow {
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 selectProjectFromList(projects) {
26
- if (projects.length === 0) {
27
- return null;
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 project"),
31
- options: projects.map((proj) => ({ value: proj.id, label: proj.name })),
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 project = projects.find((proj) => proj.id === choice);
36
- return project ?? null;
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(`Deploy project "${existingConfig.projectName}"${envLabel}?`),
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 confirmDeployDirectory() {
110
- const confirmed = await this.confirm({
111
- message: chalk.bold(`Deploy the directory? `) + chalk.cyan(process.cwd()),
112
- initialValue: true,
113
- });
114
- if (p.isCancel(confirmed))
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 (p.isCancel(linkAnother))
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 (!linkExisting) {
185
- return this.runCreateProjectFlow();
206
+ if (linkExisting === null)
207
+ return null;
208
+ if (linkExisting) {
209
+ return this.runLinkingFlow(team);
186
210
  }
187
- return this.runLinkingFlow();
211
+ return this.runCreateProjectFlow(team);
188
212
  }
189
213
  async resolveEnvironmentForProject(projectId) {
190
214
  const project = await api.projects.get.v1({ projectId });
@@ -197,9 +221,68 @@ export class ProjectWorkflow extends BaseWorkflow {
197
221
  return null;
198
222
  return { environmentId: environment.id, environmentName: environment.name };
199
223
  }
200
- async runCreateProjectFlow() {
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
- throw new Error("--project-name is required when using --yes");
285
+ throw new Error("--project-name is required when using --non-interactive");
203
286
  }
204
287
  const name = this.flags.projectName ??
205
288
  (await p.text({
@@ -214,7 +297,6 @@ export class ProjectWorkflow extends BaseWorkflow {
214
297
  },
215
298
  }));
216
299
  if (p.isCancel(name)) {
217
- p.cancel("Project name is required.");
218
300
  return null;
219
301
  }
220
302
  const detectedRuntime = this.detectRuntime();
@@ -223,16 +305,13 @@ export class ProjectWorkflow extends BaseWorkflow {
223
305
  ? (this.flags.runtime ?? defaultRuntime)
224
306
  : await p.select({
225
307
  message: chalk.bold("Runtime"),
226
- options: [
227
- { value: "node24", label: "Node.js 24" },
228
- { value: "node22", label: "Node.js 22" },
229
- { value: "python3.14", label: "Python 3.14" },
230
- { value: "python3.13", label: "Python 3.13" },
231
- ],
308
+ options: RUNTIMES.map((value) => ({
309
+ value,
310
+ label: value === detectedRuntime ? `${RUNTIME_LABELS[value]} (detected)` : RUNTIME_LABELS[value],
311
+ })),
232
312
  initialValue: defaultRuntime,
233
313
  });
234
314
  if (p.isCancel(runtime)) {
235
- p.cancel("Runtime is required.");
236
315
  return null;
237
316
  }
238
317
  const rootDirectory = await this.promptRootDirectory();
@@ -242,6 +321,7 @@ export class ProjectWorkflow extends BaseWorkflow {
242
321
  const projectInput = {
243
322
  name,
244
323
  runtime,
324
+ teamId: team.id,
245
325
  };
246
326
  projectInput.rootDirectory = rootDirectory ?? undefined;
247
327
  const created = await api.projects.create.v1(projectInput);
@@ -253,6 +333,7 @@ export class ProjectWorkflow extends BaseWorkflow {
253
333
  const newConfig = {
254
334
  projectId: created.id,
255
335
  teamId: created.teamId,
336
+ teamName: team.name,
256
337
  projectName: created.name,
257
338
  environmentId: productionEnv.id,
258
339
  environmentName: productionEnv.name,
@@ -265,8 +346,13 @@ export class ProjectWorkflow extends BaseWorkflow {
265
346
  throw error;
266
347
  }
267
348
  }
268
- async runLinkingFlow() {
269
- const projects = await api.projects.list.v1();
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 });
270
356
  if (projects.length === 0) {
271
357
  throw new Error("No projects found. Create a project in the Alpic dashboard first.");
272
358
  }
@@ -283,6 +369,7 @@ export class ProjectWorkflow extends BaseWorkflow {
283
369
  const newConfig = {
284
370
  projectId: project.id,
285
371
  teamId: project.teamId,
372
+ teamName: team.name,
286
373
  projectName: project.name,
287
374
  environmentId: environment.id,
288
375
  environmentName: environment.name,
@@ -294,4 +381,4 @@ export class ProjectWorkflow extends BaseWorkflow {
294
381
  return newConfig;
295
382
  }
296
383
  }
297
- //# sourceMappingURL=project.js.map
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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"}
@@ -0,0 +1,20 @@
1
+ import type { RouterOutput } from "@alpic-ai/api";
2
+ export type RuntimeLogEntry = RouterOutput["environments"]["getLogs"]["v1"]["logs"][number];
3
+ type LogLevel = "INFO" | "ERROR" | "WARNING" | "DEBUG";
4
+ type FollowEnvironmentLogsParams = {
5
+ environmentId: string;
6
+ limit?: number;
7
+ level?: LogLevel[];
8
+ search?: string;
9
+ nextToken?: string | null;
10
+ initialLogs?: RuntimeLogEntry[];
11
+ pollIntervalMs?: number;
12
+ onLog: (log: RuntimeLogEntry) => void;
13
+ };
14
+ export declare function formatLogTimestamp(timestamp: Date | undefined, noColor: boolean): string;
15
+ export declare function printLog(log: RuntimeLogEntry, { noColor }?: {
16
+ noColor?: boolean;
17
+ }): void;
18
+ export declare function followEnvironmentLogs({ environmentId, limit, level, search, nextToken, initialLogs, pollIntervalMs, onLog, }: FollowEnvironmentLogsParams): Promise<never>;
19
+ export declare function parseLevel(values: string[]): LogLevel[];
20
+ export {};
@@ -0,0 +1,86 @@
1
+ import chalk from "chalk";
2
+ import { api } from "../api.js";
3
+ const LOG_TYPE_COLORS = {
4
+ ERROR: chalk.red,
5
+ WARNING: chalk.yellow,
6
+ DEBUG: chalk.gray,
7
+ INFO: chalk.white,
8
+ START: chalk.dim,
9
+ END: chalk.dim,
10
+ };
11
+ const LOG_TYPE_LABELS = {
12
+ START: "START",
13
+ END: "END",
14
+ INFO: "INFO",
15
+ ERROR: "ERROR",
16
+ WARNING: "WARN",
17
+ DEBUG: "DEBUG",
18
+ };
19
+ const LOG_LEVEL_WIDTH = 5;
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);
25
+ }
26
+ export function printLog(log, { noColor = false } = {}) {
27
+ const colorize = noColor ? (s) => s : (LOG_TYPE_COLORS[log.type] ?? chalk.white);
28
+ const ts = formatLogTimestamp(log.timestamp, noColor);
29
+ const shortRequestId = log.requestId.split("-")[0] ?? log.requestId;
30
+ const levelPrefix = `${LOG_TYPE_LABELS[log.type].padEnd(LOG_LEVEL_WIDTH, " ")} `;
31
+ let message;
32
+ if (log.type === "START") {
33
+ const methodPrefix = log.method ? `method: ${log.method}, ` : "";
34
+ const startMessage = `--- MCP REQUEST START --- (${methodPrefix}requestId: ${shortRequestId})`;
35
+ message = noColor ? startMessage : chalk.dim(startMessage);
36
+ process.stdout.write(`${ts} ${levelPrefix}${message}\n`);
37
+ return;
38
+ }
39
+ else if (log.type === "END") {
40
+ const durationSuffix = log.durationInMs !== undefined ? ` (duration: ${log.durationInMs}ms)` : "";
41
+ const endMessage = `--- MCP REQUEST END -----${durationSuffix}`;
42
+ message = noColor ? endMessage : chalk.dim(endMessage);
43
+ process.stdout.write(`${ts} ${levelPrefix}${message}\n`);
44
+ return;
45
+ }
46
+ else {
47
+ message = colorize(log.content ?? "");
48
+ }
49
+ process.stdout.write(`${ts} ${levelPrefix}${message}\n`);
50
+ }
51
+ export async function followEnvironmentLogs({ environmentId, limit, level, search, nextToken, initialLogs = [], pollIntervalMs = 3_000, onLog, }) {
52
+ const lastInitialLog = initialLogs.at(-1);
53
+ let lastTimestamp = lastInitialLog === undefined
54
+ ? new Date().toISOString()
55
+ : new Date(lastInitialLog.timestamp.getTime() + 1).toISOString();
56
+ let cursor = nextToken ?? null;
57
+ while (true) {
58
+ const options = {
59
+ environmentId,
60
+ since: lastTimestamp,
61
+ limit,
62
+ level,
63
+ search,
64
+ nextToken: cursor ?? undefined,
65
+ };
66
+ const response = await api.environments.getLogs.v1(options);
67
+ for (const log of response.logs) {
68
+ onLog(log);
69
+ lastTimestamp = new Date(log.timestamp.getTime() + 1).toISOString();
70
+ }
71
+ cursor = response.nextToken;
72
+ if (cursor === null) {
73
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
74
+ }
75
+ }
76
+ }
77
+ export function parseLevel(values) {
78
+ return values.map((value) => {
79
+ const normalized = value.toUpperCase();
80
+ if (!["INFO", "ERROR", "WARNING", "DEBUG"].includes(normalized)) {
81
+ throw new Error(`Invalid log level: "${value}". Valid values: info, error, warning, debug`);
82
+ }
83
+ return normalized;
84
+ });
85
+ }
86
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +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,MAAM,UAAU,kBAAkB,CAAC,SAA2B,EAAE,OAAgB;IAC9E,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAoB,EAAE,EAAE,OAAO,GAAG,KAAK,KAA4B,EAAE;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzF,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC;IACpE,MAAM,WAAW,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC;IAElF,IAAI,OAAe,CAAC;IACpB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,YAAY,GAAG,8BAA8B,YAAY,cAAc,cAAc,GAAG,CAAC;QAC/F,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;SAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,MAAM,UAAU,GAAG,4BAA4B,cAAc,EAAE,CAAC;QAChE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,WAAW,GAAG,OAAO,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAC1C,aAAa,EACb,KAAK,EACL,KAAK,EACL,MAAM,EACN,SAAS,EACT,WAAW,GAAG,EAAE,EAChB,cAAc,GAAG,KAAK,EACtB,KAAK,GACuB;IAC5B,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,aAAa,GACf,cAAc,KAAK,SAAS;QAC1B,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC1B,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,IAAI,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC;IAE/B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG;YACd,aAAa;YACb,KAAK,EAAE,aAAa;YACpB,KAAK;YACL,KAAK;YACL,MAAM;YACN,SAAS,EAAE,MAAM,IAAI,SAAS;SAC/B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAE5D,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,aAAa,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE5B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAgB;IACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,8CAA8C,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,UAAsB,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -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 {};