alpic 0.0.0-dev.f52c42d → 0.0.0-dev.f54dad0

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 (193) hide show
  1. package/bin/run.js +5 -0
  2. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  3. package/dist/__tests__/auth.e2e.test.js +157 -0
  4. package/dist/__tests__/auth.e2e.test.js.map +1 -0
  5. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  6. package/dist/__tests__/deploy-flags.e2e.test.js +188 -0
  7. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  8. package/dist/__tests__/deploy.e2e.test.js +56 -61
  9. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  10. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/deployment-inspect.e2e.test.js +114 -0
  12. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
  13. package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/deployment-list.e2e.test.js +116 -0
  15. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
  16. package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/deployment-logs.e2e.test.js +255 -0
  18. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
  19. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +259 -0
  21. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +139 -0
  24. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  25. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  26. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +150 -0
  27. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  28. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  29. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +342 -0
  30. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  31. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  32. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  33. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  34. package/dist/__tests__/fixtures/demo-project/index.js +1 -1
  35. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -1
  36. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  37. package/dist/__tests__/git-flags.e2e.test.js +124 -0
  38. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  39. package/dist/__tests__/git.e2e.test.js +59 -20
  40. package/dist/__tests__/git.e2e.test.js.map +1 -1
  41. package/dist/__tests__/link.e2e.test.d.ts +1 -0
  42. package/dist/__tests__/link.e2e.test.js +279 -0
  43. package/dist/__tests__/link.e2e.test.js.map +1 -0
  44. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  45. package/dist/__tests__/logs.e2e.test.js +227 -0
  46. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  47. package/dist/__tests__/mock-server.d.ts +20 -0
  48. package/dist/__tests__/mock-server.js +386 -13
  49. package/dist/__tests__/mock-server.js.map +1 -1
  50. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  51. package/dist/__tests__/publish.e2e.test.js +505 -0
  52. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  53. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  54. package/dist/__tests__/tunnel.e2e.test.js +64 -0
  55. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  56. package/dist/__tests__/utils.d.ts +23 -5
  57. package/dist/__tests__/utils.js +124 -20
  58. package/dist/__tests__/utils.js.map +1 -1
  59. package/dist/api.d.ts +1 -2
  60. package/dist/api.js +6 -10
  61. package/dist/api.js.map +1 -1
  62. package/dist/commands/deploy.d.ts +8 -2
  63. package/dist/commands/deploy.js +63 -28
  64. package/dist/commands/deploy.js.map +1 -1
  65. package/dist/commands/deployment/inspect.d.ts +11 -0
  66. package/dist/commands/deployment/inspect.js +91 -0
  67. package/dist/commands/deployment/inspect.js.map +1 -0
  68. package/dist/commands/deployment/list.d.ts +11 -0
  69. package/dist/commands/deployment/list.js +97 -0
  70. package/dist/commands/deployment/list.js.map +1 -0
  71. package/dist/commands/deployment/logs.d.ts +12 -0
  72. package/dist/commands/deployment/logs.js +50 -0
  73. package/dist/commands/deployment/logs.js.map +1 -0
  74. package/dist/commands/environment-variable/add.d.ts +14 -0
  75. package/dist/commands/environment-variable/add.js +47 -0
  76. package/dist/commands/environment-variable/add.js.map +1 -0
  77. package/dist/commands/environment-variable/list.d.ts +9 -0
  78. package/dist/commands/environment-variable/list.js +45 -0
  79. package/dist/commands/environment-variable/list.js.map +1 -0
  80. package/dist/commands/environment-variable/remove.d.ts +11 -0
  81. package/dist/commands/environment-variable/remove.js +33 -0
  82. package/dist/commands/environment-variable/remove.js.map +1 -0
  83. package/dist/commands/environment-variable/update.d.ts +13 -0
  84. package/dist/commands/environment-variable/update.js +41 -0
  85. package/dist/commands/environment-variable/update.js.map +1 -0
  86. package/dist/commands/git/connect.d.ts +3 -2
  87. package/dist/commands/git/connect.js +29 -34
  88. package/dist/commands/git/connect.js.map +1 -1
  89. package/dist/commands/git/disconnect.d.ts +2 -2
  90. package/dist/commands/git/disconnect.js +20 -30
  91. package/dist/commands/git/disconnect.js.map +1 -1
  92. package/dist/commands/git.js +3 -3
  93. package/dist/commands/git.js.map +1 -1
  94. package/dist/commands/link.d.ts +17 -0
  95. package/dist/commands/link.js +101 -0
  96. package/dist/commands/link.js.map +1 -0
  97. package/dist/commands/login.d.ts +6 -0
  98. package/dist/commands/login.js +34 -0
  99. package/dist/commands/login.js.map +1 -0
  100. package/dist/commands/logout.d.ts +6 -0
  101. package/dist/commands/logout.js +20 -0
  102. package/dist/commands/logout.js.map +1 -0
  103. package/dist/commands/logs.d.ts +16 -0
  104. package/dist/commands/logs.js +96 -0
  105. package/dist/commands/logs.js.map +1 -0
  106. package/dist/commands/publish.d.ts +15 -0
  107. package/dist/commands/publish.js +51 -0
  108. package/dist/commands/publish.js.map +1 -0
  109. package/dist/commands/tunnel.d.ts +9 -0
  110. package/dist/commands/tunnel.js +78 -0
  111. package/dist/commands/tunnel.js.map +1 -0
  112. package/dist/commands/whoami.d.ts +6 -0
  113. package/dist/commands/whoami.js +13 -0
  114. package/dist/commands/whoami.js.map +1 -0
  115. package/dist/env.d.ts +4 -0
  116. package/dist/env.js +10 -0
  117. package/dist/env.js.map +1 -0
  118. package/dist/lib/alpic-command.d.ts +2 -0
  119. package/dist/lib/alpic-command.js +12 -5
  120. package/dist/lib/alpic-command.js.map +1 -1
  121. package/dist/lib/archive.d.ts +3 -3
  122. package/dist/lib/archive.js +11 -15
  123. package/dist/lib/archive.js.map +1 -1
  124. package/dist/lib/auth/auth.d.ts +2 -0
  125. package/dist/lib/auth/auth.js +21 -0
  126. package/dist/lib/auth/auth.js.map +1 -0
  127. package/dist/lib/auth/oauth/client.d.ts +28 -0
  128. package/dist/lib/auth/oauth/client.js +110 -0
  129. package/dist/lib/auth/oauth/client.js.map +1 -0
  130. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  131. package/dist/lib/auth/oauth/constants.js +3 -0
  132. package/dist/lib/auth/oauth/constants.js.map +1 -0
  133. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  134. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  135. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  136. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  137. package/dist/lib/auth/oauth/server/index.js +105 -0
  138. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  139. package/dist/lib/auth/whoami.d.ts +1 -0
  140. package/dist/lib/auth/whoami.js +41 -0
  141. package/dist/lib/auth/whoami.js.map +1 -0
  142. package/dist/lib/base-workflow.d.ts +10 -0
  143. package/dist/lib/base-workflow.js +22 -0
  144. package/dist/lib/base-workflow.js.map +1 -0
  145. package/dist/lib/config.d.ts +3 -2
  146. package/dist/lib/config.js +8 -7
  147. package/dist/lib/config.js.map +1 -1
  148. package/dist/lib/deployment.d.ts +70 -3
  149. package/dist/lib/deployment.js +121 -9
  150. package/dist/lib/deployment.js.map +1 -1
  151. package/dist/lib/environment-variable.d.ts +37 -0
  152. package/dist/lib/environment-variable.js +299 -0
  153. package/dist/lib/environment-variable.js.map +1 -0
  154. package/dist/lib/git.d.ts +12 -4
  155. package/dist/lib/git.js +52 -27
  156. package/dist/lib/git.js.map +1 -1
  157. package/dist/lib/global-store.d.ts +28 -0
  158. package/dist/lib/global-store.js +76 -0
  159. package/dist/lib/global-store.js.map +1 -0
  160. package/dist/lib/link.d.ts +83 -0
  161. package/dist/lib/link.js +387 -0
  162. package/dist/lib/link.js.map +1 -0
  163. package/dist/lib/logs.d.ts +20 -0
  164. package/dist/lib/logs.js +86 -0
  165. package/dist/lib/logs.js.map +1 -0
  166. package/dist/lib/publish.d.ts +22 -0
  167. package/dist/lib/publish.js +185 -0
  168. package/dist/lib/publish.js.map +1 -0
  169. package/dist/lib/resolve.d.ts +6 -0
  170. package/dist/lib/resolve.js +26 -0
  171. package/dist/lib/resolve.js.map +1 -0
  172. package/dist/lib/table.d.ts +8 -0
  173. package/dist/lib/table.js +27 -0
  174. package/dist/lib/table.js.map +1 -0
  175. package/dist/lib/telemetry.js +7 -7
  176. package/dist/lib/telemetry.js.map +1 -1
  177. package/dist/lib/utils.d.ts +4 -0
  178. package/dist/lib/utils.js +45 -0
  179. package/dist/lib/utils.js.map +1 -0
  180. package/dist/lib/utils.test.d.ts +1 -0
  181. package/dist/lib/utils.test.js +27 -0
  182. package/dist/lib/utils.test.js.map +1 -0
  183. package/dist/types.d.ts +1 -0
  184. package/package.json +35 -21
  185. package/dist/lib/auth.d.ts +0 -1
  186. package/dist/lib/auth.js +0 -10
  187. package/dist/lib/auth.js.map +0 -1
  188. package/dist/lib/global-config.d.ts +0 -9
  189. package/dist/lib/global-config.js +0 -48
  190. package/dist/lib/global-config.js.map +0 -1
  191. package/dist/lib/project.d.ts +0 -67
  192. package/dist/lib/project.js +0 -285
  193. package/dist/lib/project.js.map +0 -1
@@ -1,7 +1,10 @@
1
1
  import type { RouterOutput } from "@alpic-ai/api";
2
- import { type ApiCall } from "./mock-server";
2
+ import type { ApiCall, MockApiServer } from "./mock-server.js";
3
3
  type Expectable = string | RegExp;
4
4
  type ProjectGetV1 = RouterOutput["projects"]["get"]["v1"];
5
+ type DeploymentGetV1 = RouterOutput["deployments"]["get"]["v1"];
6
+ type ProductionEnvironment = NonNullable<ProjectGetV1["productionEnvironment"]>;
7
+ type ProductionEnvironmentDomains = ProductionEnvironment["domains"];
5
8
  export type CliSessionOptions = {
6
9
  cwd?: string;
7
10
  env?: Record<string, string | undefined>;
@@ -25,7 +28,7 @@ export type CliController = {
25
28
  /** End session (SIGTERM) */
26
29
  stop: () => void;
27
30
  };
28
- export declare function cliSession(cmd: string, args: string[], options: CliSessionOptions, fn: (cli: CliController) => Promise<void>): Promise<{
31
+ export declare function cliSession(cmd: string, args: string[], options: CliSessionOptions, fn?: (cli: CliController) => Promise<void> | void): Promise<{
29
32
  exitCode: number | null;
30
33
  output: string;
31
34
  }>;
@@ -37,11 +40,11 @@ export type BuildMockProjectParams = {
37
40
  environmentName: string;
38
41
  sourceRepository?: string | null;
39
42
  sourceBranch?: string | null;
43
+ domains?: ProductionEnvironmentDomains;
40
44
  };
41
45
  export declare function buildMockProject(params: BuildMockProjectParams): ProjectGetV1;
46
+ export declare function buildMockDeployment(overrides?: Partial<DeploymentGetV1>): DeploymentGetV1;
42
47
  export type SetupTestDirectoryOptions = {
43
- /** Temp directory prefix (default: "alpic-cli-e2e") */
44
- prefix?: string;
45
48
  /** If true, run git init and add origin/upstream remotes */
46
49
  initGit?: boolean;
47
50
  };
@@ -49,7 +52,22 @@ export declare function setupTestDirectory(options?: SetupTestDirectoryOptions):
49
52
  cwd: string;
50
53
  binPath: string;
51
54
  }>;
52
- export declare function createConfigFile(cwd: string, projectId: string, teamId: string, projectName: string, environmentId: string, environmentName: string): void;
55
+ export declare function createConfigFile(cwd: string, projectId: string, teamId: string, projectName: string, environmentId: string, environmentName: string, teamName?: string): void;
53
56
  export declare function runGit(args: string[], cwd: string): void;
54
57
  export declare function expectSuccessfulApiCall(call: ApiCall | undefined, customAssertions?: (call: ApiCall) => void): asserts call is ApiCall;
58
+ /**
59
+ * Create OAuth credentials in a temp config dir and return env for CLI subprocess.
60
+ * Use this to run commands with OAuth auth (no ALPIC_API_KEY).
61
+ * Caller must pass serverUrl so userinfo can be pointed at the mock server.
62
+ */
63
+ export declare function createOAuthEnv(cwd: string, serverUrl: string): Record<string, string>;
64
+ export declare function verifyConfigFile(cwd: string, expected: {
65
+ projectName: string;
66
+ projectId?: string;
67
+ teamId?: string;
68
+ teamName?: string;
69
+ environmentId?: string;
70
+ environmentName?: string;
71
+ }): Promise<void>;
72
+ export declare function verifyDeploymentFlow(cli: CliController, mockServer: MockApiServer): Promise<void>;
55
73
  export {};
@@ -1,19 +1,21 @@
1
- import pty from "node-pty";
2
1
  import { execFileSync } from "node:child_process";
3
2
  import { randomUUID } from "node:crypto";
4
3
  import { mkdirSync, writeFileSync } from "node:fs";
5
- import { cp, mkdtemp } from "node:fs/promises";
4
+ import { cp, mkdtemp, readFile, rm } from "node:fs/promises";
6
5
  import { tmpdir } from "node:os";
7
6
  import { dirname, join } from "node:path";
8
7
  import { fileURLToPath } from "node:url";
8
+ import { stripVTControlCharacters } from "node:util";
9
+ import pty from "node-pty";
9
10
  import { expect } from "vitest";
10
- import {} from "./mock-server";
11
11
  const __testDirname = dirname(fileURLToPath(import.meta.url));
12
- export async function cliSession(cmd, args, options, fn) {
12
+ export async function cliSession(cmd, args, options, fn = async () => { }) {
13
13
  const { cwd, env, cols = 100, rows = 30, timeoutMs = 8000 } = options;
14
+ const createdConfigDir = env?.ALPIC_GLOBAL_CONFIG_DIR === undefined;
15
+ const globalConfigDir = env?.ALPIC_GLOBAL_CONFIG_DIR ?? (await mkdtemp(join(tmpdir(), "alpic-cli-config-")));
14
16
  const mergedEnv = {
15
17
  ...process.env,
16
- NO_COLOR: "1",
18
+ ALPIC_GLOBAL_CONFIG_DIR: globalConfigDir,
17
19
  // Resolve @alpic-ai/api to TypeScript source via the "development" export condition,
18
20
  // so e2e tests run without building the api package first.
19
21
  NODE_OPTIONS: [process.env.NODE_OPTIONS, "--conditions=development"].filter(Boolean).join(" "),
@@ -47,10 +49,10 @@ export async function cliSession(cmd, args, options, fn) {
47
49
  const controller = {
48
50
  expect: (pattern, opts) => waitFor(() => matches(buf, pattern), opts?.timeoutMs ?? timeoutMs, () => buf, pattern),
49
51
  send: async (line) => {
50
- term.write(line + "\r");
52
+ term.write(`${line}\r`);
51
53
  },
52
54
  write: (data) => term.write(data),
53
- output: () => buf,
55
+ output: () => stripVTControlCharacters(buf),
54
56
  clear: () => {
55
57
  buf = "";
56
58
  },
@@ -67,16 +69,23 @@ export async function cliSession(cmd, args, options, fn) {
67
69
  await fn(controller);
68
70
  }
69
71
  finally {
70
- await Promise.race([exitPromise, sleep(1500)]);
71
- controller.stop();
72
- await Promise.race([exitPromise, sleep(200)]);
72
+ const didExitGracefully = await waitForExit(exitPromise, timeoutMs);
73
+ if (!didExitGracefully) {
74
+ controller.stop();
75
+ await Promise.race([exitPromise, sleep(200)]);
76
+ }
77
+ if (createdConfigDir) {
78
+ await rm(globalConfigDir, { recursive: true, force: true });
79
+ }
73
80
  }
74
- return { exitCode, output: buf };
81
+ return { exitCode, output: stripVTControlCharacters(buf) };
75
82
  }
76
83
  function matches(text, pattern) {
77
- if (typeof pattern === "string")
78
- return text.includes(pattern);
79
- return pattern.test(text);
84
+ const normalizedText = stripVTControlCharacters(text);
85
+ if (typeof pattern === "string") {
86
+ return normalizedText.includes(pattern);
87
+ }
88
+ return pattern.test(normalizedText);
80
89
  }
81
90
  async function waitFor(predicate, timeoutMs, getOutput, pattern) {
82
91
  const start = Date.now();
@@ -97,8 +106,11 @@ function patternToString(p) {
97
106
  function sleep(ms) {
98
107
  return new Promise((r) => setTimeout(r, ms));
99
108
  }
109
+ async function waitForExit(exitPromise, timeoutMs) {
110
+ return Promise.race([exitPromise.then(() => true), sleep(timeoutMs).then(() => false)]);
111
+ }
100
112
  export function buildMockProject(params) {
101
- const { projectId, teamId, projectName, environmentId, environmentName, sourceRepository = null, sourceBranch = null, } = params;
113
+ const { projectId, teamId, projectName, environmentId, environmentName, sourceRepository = null, sourceBranch = null, domains = [], } = params;
102
114
  const mcpServerUrl = `https://mcp-${projectId}.alpic.ai`;
103
115
  return {
104
116
  id: projectId,
@@ -119,6 +131,7 @@ export function buildMockProject(params) {
119
131
  id: environmentId,
120
132
  name: environmentName,
121
133
  mcpServerUrl,
134
+ domains,
122
135
  latestDeployment: null,
123
136
  },
124
137
  sourceRepository,
@@ -132,10 +145,27 @@ export function buildMockProject(params) {
132
145
  createdAt: new Date(),
133
146
  };
134
147
  }
148
+ export function buildMockDeployment(overrides) {
149
+ const now = new Date();
150
+ const base = {
151
+ id: "dpl_base",
152
+ status: "deployed",
153
+ sourceRef: "main",
154
+ sourceCommitId: "abc1234",
155
+ sourceCommitMessage: "Deploy production",
156
+ authorUsername: "harijoe",
157
+ authorAvatarUrl: null,
158
+ startedAt: now,
159
+ completedAt: now,
160
+ isCurrent: true,
161
+ deploymentPageUrl: null,
162
+ };
163
+ return { ...base, ...overrides };
164
+ }
135
165
  export async function setupTestDirectory(options = {}) {
136
- const { prefix = "alpic-cli-e2e", initGit = false } = options;
166
+ const { initGit = false } = options;
137
167
  const uniqueId = randomUUID();
138
- const cwd = await mkdtemp(join(tmpdir(), `${prefix}-${uniqueId}-`));
168
+ const cwd = await mkdtemp(join(tmpdir(), `alpic-cli-e2e-${uniqueId}-`));
139
169
  const fixturePath = join(__testDirname, "fixtures", "demo-project");
140
170
  await cp(fixturePath, cwd, { recursive: true });
141
171
  if (initGit) {
@@ -146,17 +176,21 @@ export async function setupTestDirectory(options = {}) {
146
176
  const binPath = join(process.cwd(), "bin", "dev.js");
147
177
  return { cwd, binPath };
148
178
  }
149
- export function createConfigFile(cwd, projectId, teamId, projectName, environmentId, environmentName) {
179
+ export function createConfigFile(cwd, projectId, teamId, projectName, environmentId, environmentName, teamName) {
150
180
  const configDir = join(cwd, ".alpic");
151
181
  mkdirSync(configDir, { recursive: true });
152
182
  const configPath = join(configDir, "project.json");
153
- writeFileSync(configPath, JSON.stringify({
183
+ const configData = {
154
184
  projectId,
155
185
  teamId,
156
186
  projectName,
157
187
  environmentId,
158
188
  environmentName,
159
- }));
189
+ };
190
+ if (teamName) {
191
+ configData.teamName = teamName;
192
+ }
193
+ writeFileSync(configPath, JSON.stringify(configData));
160
194
  }
161
195
  export function runGit(args, cwd) {
162
196
  execFileSync("git", args, {
@@ -171,4 +205,74 @@ export function expectSuccessfulApiCall(call, customAssertions) {
171
205
  customAssertions(call);
172
206
  }
173
207
  }
208
+ /**
209
+ * Create OAuth credentials in a temp config dir and return env for CLI subprocess.
210
+ * Use this to run commands with OAuth auth (no ALPIC_API_KEY).
211
+ * Caller must pass serverUrl so userinfo can be pointed at the mock server.
212
+ */
213
+ export function createOAuthEnv(cwd, serverUrl) {
214
+ const alpicConfigDir = join(cwd, ".config", "alpic");
215
+ mkdirSync(alpicConfigDir, { recursive: true });
216
+ const credentialsPath = join(alpicConfigDir, "credentials.json");
217
+ const expiresAt = Math.floor(Date.now() / 1000) + 3600; // seconds
218
+ writeFileSync(credentialsPath, JSON.stringify({
219
+ access_token: "test-oauth-token",
220
+ refresh_token: "test-refresh-token",
221
+ expires_at: expiresAt,
222
+ sub: "test-sub",
223
+ }), "utf-8");
224
+ return {
225
+ ALPIC_GLOBAL_CONFIG_DIR: alpicConfigDir,
226
+ ALPIC_COGNITO_URL: serverUrl,
227
+ ALPIC_API_BASE_URL: serverUrl,
228
+ };
229
+ }
230
+ export async function verifyConfigFile(cwd, expected) {
231
+ const cfgPath = join(cwd, ".alpic", "project.json");
232
+ const cfg = await readFile(cfgPath, "utf8");
233
+ const config = JSON.parse(cfg);
234
+ expect(config.projectName).toBe(expected.projectName);
235
+ if (expected.projectId !== undefined) {
236
+ expect(config.projectId).toBe(expected.projectId);
237
+ }
238
+ else {
239
+ expect(config.projectId).toBeDefined();
240
+ }
241
+ if (expected.teamId !== undefined) {
242
+ expect(config.teamId).toBe(expected.teamId);
243
+ }
244
+ else {
245
+ expect(config.teamId).toBeDefined();
246
+ }
247
+ if (expected.teamName !== undefined) {
248
+ expect(config.teamName).toBe(expected.teamName);
249
+ }
250
+ if (expected.environmentId !== undefined) {
251
+ expect(config.environmentId).toBe(expected.environmentId);
252
+ }
253
+ else {
254
+ expect(config.environmentId).toBeDefined();
255
+ }
256
+ if (expected.environmentName !== undefined) {
257
+ expect(config.environmentName).toBe(expected.environmentName);
258
+ }
259
+ else {
260
+ expect(config.environmentName).toBeDefined();
261
+ }
262
+ }
263
+ export async function verifyDeploymentFlow(cli, mockServer) {
264
+ await cli.expect(/Collected \d+ file/);
265
+ await cli.expect("Upload complete");
266
+ const uploadCall = mockServer.getLastCall("POST", "/v1/deployments/upload");
267
+ expectSuccessfulApiCall(uploadCall);
268
+ await cli.expect("Deployment started");
269
+ const deployCall = mockServer.getLastCall("POST", /\/v1\/environments\/.*\/deploy/);
270
+ expectSuccessfulApiCall(deployCall);
271
+ await cli.expect("View deployment details:");
272
+ await cli.expect("Deployment summary:");
273
+ const deploymentStatusCalls = mockServer.getCalls("GET", /\/v1\/deployments\/.*/);
274
+ expect(deploymentStatusCalls.length).toBeGreaterThan(0);
275
+ const envCall = mockServer.getLastCall("GET", /\/v1\/environments\/.*/);
276
+ expectSuccessfulApiCall(envCall);
277
+ }
174
278
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/__tests__/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/__tests__/utils.ts"],"names":[],"mappings":"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"}
package/dist/api.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { ContractRouterClient } from "@orpc/contract";
2
1
  import { contract } from "@alpic-ai/api";
3
- export declare function getFrontendBaseUrl(): string;
2
+ import type { ContractRouterClient } from "@orpc/contract";
4
3
  export declare const api: ContractRouterClient<typeof contract>;
package/dist/api.js CHANGED
@@ -1,17 +1,13 @@
1
+ import { contract } from "@alpic-ai/api";
1
2
  import { createORPCClient } from "@orpc/client";
2
3
  import { ResponseValidationPlugin } from "@orpc/contract/plugins";
3
4
  import { OpenAPILink } from "@orpc/openapi-client/fetch";
4
- import { contract } from "@alpic-ai/api";
5
- function getApiBaseUrl() {
6
- return process.env.ALPIC_API_BASE_URL ?? "https://api.alpic.ai";
7
- }
8
- export function getFrontendBaseUrl() {
9
- return process.env.ALPIC_FRONTEND_BASE_URL ?? "https://app.alpic.ai";
10
- }
5
+ import { env } from "./env.js";
6
+ import { getApiToken } from "./lib/auth/auth.js";
11
7
  const link = new OpenAPILink(contract, {
12
- url: getApiBaseUrl(),
13
- headers: {
14
- Authorization: `Bearer ${process.env.ALPIC_API_KEY}`,
8
+ url: env.ALPIC_API_BASE_URL,
9
+ headers: async () => {
10
+ return getApiToken().then((token) => (token ? { Authorization: `Bearer ${token}` } : {}));
15
11
  },
16
12
  plugins: [new ResponseValidationPlugin(contract)],
17
13
  });
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,sBAAsB,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,sBAAsB,CAAC;AACvE,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE;IACrC,GAAG,EAAE,aAAa,EAAE;IACpB,OAAO,EAAE;QACP,aAAa,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;KACrD;IACD,OAAO,EAAE,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,GAAG,GAA0C,gBAAgB,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE;IACrC,GAAG,EAAE,GAAG,CAAC,kBAAkB;IAC3B,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,OAAO,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,GAAG,GAA0C,gBAAgB,CAAC,IAAI,CAAC,CAAC"}
@@ -2,8 +2,14 @@ import { AlpicCommand } from "../lib/alpic-command.js";
2
2
  export declare class Deploy extends AlpicCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
- static args: {
6
- directory: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
5
+ static flags: {
6
+ "non-interactive": import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ runtime: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ "root-dir": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "team-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
13
  };
8
14
  run(): Promise<void>;
9
15
  }
@@ -1,44 +1,75 @@
1
+ import { readFileSync, rmSync } from "node:fs";
1
2
  import * as p from "@clack/prompts";
2
- import { Args, Command } from "@oclif/core";
3
+ import { Flags } from "@oclif/core";
3
4
  import chalk from "chalk";
4
- import { readFileSync, rmSync } from "node:fs";
5
5
  import { api } from "../api.js";
6
6
  import { AlpicCommand } from "../lib/alpic-command.js";
7
7
  import { createTarArchive, getFilesToPack } from "../lib/archive.js";
8
- import { ensureApiKey } from "../lib/auth.js";
9
8
  import { deployAndWait, formatElapsed } from "../lib/deployment.js";
10
- import { resolveDeployDir, resolveProjectForDeploy } from "../lib/project.js";
9
+ import { LinkWorkflow, RUNTIMES } from "../lib/link.js";
11
10
  import { uploadToPresignedUrl } from "../lib/upload.js";
12
11
  export class Deploy extends AlpicCommand {
13
12
  static description = "Deploy a project to Alpic";
14
- static examples = ["<%= config.bin %> deploy", "<%= config.bin %> deploy ./my-app"];
15
- static args = {
16
- directory: Args.string({
17
- description: "Directory to deploy (default: current directory)",
13
+ static examples = [
14
+ "<%= config.bin %> deploy",
15
+ "<%= config.bin %> deploy --non-interactive --project-name my-app --runtime node24",
16
+ ];
17
+ static flags = {
18
+ "non-interactive": Flags.boolean({
19
+ description: "Skip all confirmation prompts",
20
+ required: false,
21
+ }),
22
+ runtime: Flags.string({
23
+ description: "New project runtime (node24, node22, python3.14, python3.13)",
24
+ required: false,
25
+ options: RUNTIMES,
26
+ }),
27
+ "root-dir": Flags.string({
28
+ description: "Path to the app root for builds and deployments",
29
+ required: false,
30
+ }),
31
+ "project-name": Flags.string({
32
+ description: "New project name",
33
+ required: false,
34
+ }),
35
+ "team-id": Flags.string({
36
+ description: "Team ID",
37
+ required: false,
38
+ }),
39
+ "project-id": Flags.string({
40
+ description: "Project ID to deploy to directly",
41
+ required: false,
42
+ }),
43
+ "environment-id": Flags.string({
44
+ description: "Environment ID to deploy to directly",
18
45
  required: false,
19
46
  }),
20
47
  };
21
48
  async run() {
22
- const { args } = await this.parse(Deploy);
49
+ const { flags } = await this.parse(Deploy);
50
+ const linkWorkflowFlags = {
51
+ "non-interactive": flags["non-interactive"],
52
+ projectName: flags["project-name"],
53
+ runtime: flags.runtime,
54
+ rootDir: flags["root-dir"],
55
+ teamId: flags["team-id"],
56
+ projectId: flags["project-id"],
57
+ environmentId: flags["environment-id"],
58
+ };
23
59
  p.intro("Deploying to Alpic");
24
- if (!ensureApiKey()) {
25
- this.exit(1);
26
- return;
27
- }
28
- const deployDir = resolveDeployDir(args.directory);
29
- const config = await resolveProjectForDeploy(deployDir);
30
- if (!config) {
31
- p.cancel("Deploy cancelled");
32
- this.exit(1);
33
- return;
60
+ await this.ensureAuthenticated();
61
+ const linkWorkflow = new LinkWorkflow(linkWorkflowFlags);
62
+ const projectConfig = await linkWorkflow.runLinkFlow();
63
+ if (!projectConfig) {
64
+ throw new Error("Deploy cancelled");
34
65
  }
35
66
  const spinner = p.spinner();
36
67
  let tmpDir;
37
68
  try {
38
69
  spinner.start("Collecting source files...");
39
- const files = getFilesToPack(deployDir);
70
+ const files = getFilesToPack();
40
71
  spinner.stop(`Collected ${files.length} file${files.length === 1 ? "" : "s"}`);
41
- const result = await createTarArchive(files, deployDir);
72
+ const result = await createTarArchive(files);
42
73
  tmpDir = result.tmpDir;
43
74
  const archivePath = result.archivePath;
44
75
  const { uploadUrl, token } = await api.deployments.uploadArtifact.v1();
@@ -48,33 +79,37 @@ export class Deploy extends AlpicCommand {
48
79
  spinner.stop("Upload complete");
49
80
  spinner.start("Triggering deployment...");
50
81
  const deployStartedAt = Date.now();
51
- const initialDeployment = await api.environments.deploy.v1({ environmentId: config.environmentId, token });
82
+ const initialDeployment = await api.environments.deploy.v1({
83
+ environmentId: projectConfig.environmentId,
84
+ token,
85
+ });
52
86
  spinner.stop("Deployment started");
53
87
  const { deployment, elapsedMs } = await deployAndWait({
54
88
  initial: initialDeployment,
55
89
  startedAt: deployStartedAt,
56
- teamId: config.teamId,
57
- projectId: config.projectId,
58
90
  });
59
91
  const elapsedStr = formatElapsed(elapsedMs);
60
92
  if (deployment.status !== "deployed") {
61
93
  throw new Error("Deployment failed");
62
94
  }
63
- const environment = await api.environments.get.v1({ environmentId: config.environmentId });
95
+ const environment = await api.environments.get.v1({ environmentId: projectConfig.environmentId });
64
96
  const urls = environment.mcpServerUrl ? [environment.mcpServerUrl] : environment.domains;
65
- p.box([...urls.map((url) => chalk.bold(`🔗 ${url}`)), "", `Completed in ${elapsedStr}`].join("\n"), "Deployment summary:", {
97
+ const teamLine = projectConfig.teamName ? chalk.dim(`Team: ${projectConfig.teamName}`) : null;
98
+ p.box([teamLine, ...urls.map((url) => chalk.bold(`🔗 ${url}`)), "", `Completed in ${elapsedStr}`]
99
+ .filter(Boolean)
100
+ .join("\n"), "Deployment summary:", {
66
101
  contentAlign: "center",
67
102
  titleAlign: "center",
68
103
  width: "auto",
69
104
  rounded: true,
70
105
  contentPadding: 3,
71
106
  });
107
+ p.log.info(`View build logs: ${chalk.cyan(`alpic deployment logs --deployment-id ${deployment.id}`)}`);
72
108
  }
73
109
  catch (error) {
74
110
  spinner.stop();
75
111
  const message = error instanceof Error ? error.message : String(error);
76
- p.cancel(`Error: ${message}`);
77
- this.exit(1);
112
+ throw new Error(`Error: ${message}`);
78
113
  }
79
114
  finally {
80
115
  if (tmpDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { AlpicCommand } from "../../lib/alpic-command.js";
2
+ export declare class DeploymentInspect extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "deployment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ wait: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
@@ -0,0 +1,91 @@
1
+ import { Flags } from "@oclif/core";
2
+ import chalk from "chalk";
3
+ import { AlpicCommand } from "../../lib/alpic-command.js";
4
+ import { calculateDeploymentDuration, colorizeDeploymentStatus, fetchDeployment, fetchLatestDeploymentForEnvironment, formatElapsed, waitForDeployment, } from "../../lib/deployment.js";
5
+ import { resolveEnvironmentId } from "../../lib/resolve.js";
6
+ import { formatTable } from "../../lib/table.js";
7
+ import { formatAgo } from "../../lib/utils.js";
8
+ export class DeploymentInspect extends AlpicCommand {
9
+ static description = "Show details of a deployment";
10
+ static examples = [
11
+ "<%= config.bin %> deployment inspect --deployment-id <deploymentId>",
12
+ "<%= config.bin %> deployment inspect --deployment-id <deploymentId> --wait",
13
+ "<%= config.bin %> deployment inspect --environment-id <environmentId>",
14
+ ];
15
+ static flags = {
16
+ "deployment-id": Flags.string({
17
+ description: "The ID of the deployment",
18
+ exclusive: ["environment-id"],
19
+ }),
20
+ "environment-id": Flags.string({
21
+ description: "Inspect the latest deployment for this environment",
22
+ exclusive: ["deployment-id"],
23
+ }),
24
+ wait: Flags.boolean({
25
+ description: "Wait for the deployment to reach a final state (deployed, failed, or canceled)",
26
+ default: false,
27
+ }),
28
+ };
29
+ async run() {
30
+ const { flags } = await this.parse(DeploymentInspect);
31
+ await this.ensureAuthenticated();
32
+ let deployment;
33
+ if (flags["deployment-id"]) {
34
+ deployment = await fetchDeployment(flags["deployment-id"]);
35
+ }
36
+ else {
37
+ const environmentId = resolveEnvironmentId(flags);
38
+ deployment = await fetchLatestDeploymentForEnvironment(environmentId);
39
+ }
40
+ if (flags.wait) {
41
+ deployment = await waitForDeployment(deployment);
42
+ }
43
+ const durationMs = calculateDeploymentDuration(deployment);
44
+ const rows = [
45
+ { label: "ID", value: chalk.cyan(deployment.id) },
46
+ {
47
+ label: "Status",
48
+ value: `${colorizeDeploymentStatus(deployment.status)("•")} ${deployment.status}`,
49
+ },
50
+ {
51
+ label: "Environment",
52
+ value: `${deployment.environmentName} ${chalk.gray(`(${deployment.environmentId})`)}`,
53
+ },
54
+ {
55
+ label: "Current",
56
+ value: deployment.isCurrent ? chalk.white("yes") : chalk.gray("no"),
57
+ },
58
+ {
59
+ label: "Started",
60
+ value: deployment.startedAt ? formatAgo(deployment.startedAt) : chalk.gray("-"),
61
+ },
62
+ {
63
+ label: "Duration",
64
+ value: durationMs !== null ? formatElapsed(durationMs) : chalk.gray("-"),
65
+ },
66
+ { label: "Author", value: deployment.authorUsername ?? chalk.gray("-") },
67
+ { label: "Branch / Ref", value: deployment.sourceRef ?? chalk.gray("-") },
68
+ {
69
+ label: "Commit",
70
+ value: deployment.sourceCommitId ? chalk.gray(deployment.sourceCommitId.slice(0, 7)) : chalk.gray("-"),
71
+ },
72
+ {
73
+ label: "Commit message",
74
+ value: deployment.sourceCommitMessage ?? chalk.gray("-"),
75
+ },
76
+ ...(deployment.deploymentPageUrl
77
+ ? [
78
+ {
79
+ label: "Details URL",
80
+ value: chalk.underline(deployment.deploymentPageUrl),
81
+ },
82
+ ]
83
+ : []),
84
+ ];
85
+ console.log(formatTable(rows, [
86
+ { key: "label", header: "", format: (value) => chalk.bold(value) },
87
+ { key: "value", header: "" },
88
+ ]));
89
+ }
90
+ }
91
+ //# sourceMappingURL=inspect.js.map