alpic 0.0.0-dev.f861645 → 0.0.0-dev.f8fa5ec

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 (180) hide show
  1. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  2. package/dist/__tests__/auth.e2e.test.js +158 -0
  3. package/dist/__tests__/auth.e2e.test.js.map +1 -0
  4. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  5. package/dist/__tests__/deploy-flags.e2e.test.js +111 -0
  6. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  7. package/dist/__tests__/deploy.e2e.test.d.ts +1 -0
  8. package/dist/__tests__/deploy.e2e.test.js +168 -0
  9. package/dist/__tests__/deploy.e2e.test.js.map +1 -0
  10. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/deployment-inspect.e2e.test.js +113 -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 +260 -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 +140 -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 +151 -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 +343 -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.d.ts +1 -0
  35. package/dist/__tests__/fixtures/demo-project/index.js +4 -0
  36. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -0
  37. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  38. package/dist/__tests__/git-flags.e2e.test.js +124 -0
  39. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  40. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  41. package/dist/__tests__/git.e2e.test.js +221 -0
  42. package/dist/__tests__/git.e2e.test.js.map +1 -0
  43. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  44. package/dist/__tests__/logs.e2e.test.js +227 -0
  45. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  46. package/dist/__tests__/mock-server.d.ts +38 -0
  47. package/dist/__tests__/mock-server.js +728 -0
  48. package/dist/__tests__/mock-server.js.map +1 -0
  49. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  50. package/dist/__tests__/publish.e2e.test.js +505 -0
  51. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  52. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  53. package/dist/__tests__/tunnel.e2e.test.js +64 -0
  54. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  55. package/dist/__tests__/utils.d.ts +72 -0
  56. package/dist/__tests__/utils.js +272 -0
  57. package/dist/__tests__/utils.js.map +1 -0
  58. package/dist/api.d.ts +1 -2
  59. package/dist/api.js +6 -10
  60. package/dist/api.js.map +1 -1
  61. package/dist/commands/deploy.d.ts +7 -4
  62. package/dist/commands/deploy.js +47 -28
  63. package/dist/commands/deploy.js.map +1 -1
  64. package/dist/commands/deployment/inspect.d.ts +11 -0
  65. package/dist/commands/deployment/inspect.js +91 -0
  66. package/dist/commands/deployment/inspect.js.map +1 -0
  67. package/dist/commands/deployment/list.d.ts +11 -0
  68. package/dist/commands/deployment/list.js +97 -0
  69. package/dist/commands/deployment/list.js.map +1 -0
  70. package/dist/commands/deployment/logs.d.ts +12 -0
  71. package/dist/commands/deployment/logs.js +50 -0
  72. package/dist/commands/deployment/logs.js.map +1 -0
  73. package/dist/commands/environment-variable/add.d.ts +14 -0
  74. package/dist/commands/environment-variable/add.js +46 -0
  75. package/dist/commands/environment-variable/add.js.map +1 -0
  76. package/dist/commands/environment-variable/list.d.ts +9 -0
  77. package/dist/commands/environment-variable/list.js +44 -0
  78. package/dist/commands/environment-variable/list.js.map +1 -0
  79. package/dist/commands/environment-variable/remove.d.ts +11 -0
  80. package/dist/commands/environment-variable/remove.js +32 -0
  81. package/dist/commands/environment-variable/remove.js.map +1 -0
  82. package/dist/commands/environment-variable/update.d.ts +13 -0
  83. package/dist/commands/environment-variable/update.js +40 -0
  84. package/dist/commands/environment-variable/update.js.map +1 -0
  85. package/dist/commands/git/connect.d.ts +10 -0
  86. package/dist/commands/git/connect.js +60 -0
  87. package/dist/commands/git/connect.js.map +1 -0
  88. package/dist/commands/git/disconnect.d.ts +9 -0
  89. package/dist/commands/git/disconnect.js +45 -0
  90. package/dist/commands/git/disconnect.js.map +1 -0
  91. package/dist/commands/git.d.ts +6 -0
  92. package/dist/commands/git.js +17 -0
  93. package/dist/commands/git.js.map +1 -0
  94. package/dist/commands/login.d.ts +6 -0
  95. package/dist/commands/login.js +34 -0
  96. package/dist/commands/login.js.map +1 -0
  97. package/dist/commands/logout.d.ts +6 -0
  98. package/dist/commands/logout.js +20 -0
  99. package/dist/commands/logout.js.map +1 -0
  100. package/dist/commands/logs.d.ts +16 -0
  101. package/dist/commands/logs.js +96 -0
  102. package/dist/commands/logs.js.map +1 -0
  103. package/dist/commands/publish.d.ts +15 -0
  104. package/dist/commands/publish.js +51 -0
  105. package/dist/commands/publish.js.map +1 -0
  106. package/dist/commands/tunnel.d.ts +9 -0
  107. package/dist/commands/tunnel.js +53 -0
  108. package/dist/commands/tunnel.js.map +1 -0
  109. package/dist/commands/whoami.d.ts +6 -0
  110. package/dist/commands/whoami.js +13 -0
  111. package/dist/commands/whoami.js.map +1 -0
  112. package/dist/env.d.ts +4 -0
  113. package/dist/env.js +10 -0
  114. package/dist/env.js.map +1 -0
  115. package/dist/lib/alpic-command.d.ts +6 -0
  116. package/dist/lib/alpic-command.js +27 -0
  117. package/dist/lib/alpic-command.js.map +1 -0
  118. package/dist/lib/archive.d.ts +3 -3
  119. package/dist/lib/archive.js +11 -15
  120. package/dist/lib/archive.js.map +1 -1
  121. package/dist/lib/auth/auth.d.ts +2 -0
  122. package/dist/lib/auth/auth.js +21 -0
  123. package/dist/lib/auth/auth.js.map +1 -0
  124. package/dist/lib/auth/oauth/client.d.ts +28 -0
  125. package/dist/lib/auth/oauth/client.js +110 -0
  126. package/dist/lib/auth/oauth/client.js.map +1 -0
  127. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  128. package/dist/lib/auth/oauth/constants.js +3 -0
  129. package/dist/lib/auth/oauth/constants.js.map +1 -0
  130. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  131. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  132. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  133. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  134. package/dist/lib/auth/oauth/server/index.js +105 -0
  135. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  136. package/dist/lib/auth/whoami.d.ts +1 -0
  137. package/dist/lib/auth/whoami.js +41 -0
  138. package/dist/lib/auth/whoami.js.map +1 -0
  139. package/dist/lib/base-workflow.d.ts +10 -0
  140. package/dist/lib/base-workflow.js +22 -0
  141. package/dist/lib/base-workflow.js.map +1 -0
  142. package/dist/lib/config.d.ts +2 -2
  143. package/dist/lib/config.js +7 -7
  144. package/dist/lib/config.js.map +1 -1
  145. package/dist/lib/deployment.d.ts +70 -3
  146. package/dist/lib/deployment.js +121 -9
  147. package/dist/lib/deployment.js.map +1 -1
  148. package/dist/lib/environment-variable.d.ts +41 -0
  149. package/dist/lib/environment-variable.js +311 -0
  150. package/dist/lib/environment-variable.js.map +1 -0
  151. package/dist/lib/git.d.ts +22 -0
  152. package/dist/lib/git.js +131 -0
  153. package/dist/lib/git.js.map +1 -0
  154. package/dist/lib/global-store.d.ts +28 -0
  155. package/dist/lib/global-store.js +76 -0
  156. package/dist/lib/global-store.js.map +1 -0
  157. package/dist/lib/logs.d.ts +20 -0
  158. package/dist/lib/logs.js +86 -0
  159. package/dist/lib/logs.js.map +1 -0
  160. package/dist/lib/project.d.ts +68 -61
  161. package/dist/lib/project.js +275 -250
  162. package/dist/lib/project.js.map +1 -1
  163. package/dist/lib/publish.d.ts +22 -0
  164. package/dist/lib/publish.js +188 -0
  165. package/dist/lib/publish.js.map +1 -0
  166. package/dist/lib/table.d.ts +8 -0
  167. package/dist/lib/table.js +27 -0
  168. package/dist/lib/table.js.map +1 -0
  169. package/dist/lib/telemetry.js +7 -7
  170. package/dist/lib/telemetry.js.map +1 -1
  171. package/dist/lib/utils.d.ts +4 -0
  172. package/dist/lib/utils.js +45 -0
  173. package/dist/lib/utils.js.map +1 -0
  174. package/dist/lib/utils.test.d.ts +1 -0
  175. package/dist/lib/utils.test.js +27 -0
  176. package/dist/lib/utils.test.js.map +1 -0
  177. package/package.json +36 -26
  178. package/dist/lib/global-config.d.ts +0 -9
  179. package/dist/lib/global-config.js +0 -48
  180. package/dist/lib/global-config.js.map +0 -1
@@ -0,0 +1,64 @@
1
+ import { rmSync } from "node:fs";
2
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
3
+ import { MockApiServer } from "./mock-server.js";
4
+ import { cliSession, setupTestDirectory } from "./utils.js";
5
+ describe("alpic tunnel (E2E)", () => {
6
+ let mockServer;
7
+ let serverUrl;
8
+ let cwd;
9
+ let binPath;
10
+ beforeEach(async () => {
11
+ mockServer = new MockApiServer();
12
+ serverUrl = await mockServer.start();
13
+ const setup = await setupTestDirectory();
14
+ cwd = setup.cwd;
15
+ binPath = setup.binPath;
16
+ });
17
+ afterEach(async () => {
18
+ await mockServer.stop();
19
+ if (cwd) {
20
+ rmSync(cwd, { recursive: true, force: true });
21
+ }
22
+ });
23
+ it("requires authentication", async () => {
24
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "tunnel", "--port", "3000"], {
25
+ cwd,
26
+ env: {
27
+ ALPIC_API_BASE_URL: serverUrl,
28
+ },
29
+ }, async (cli) => {
30
+ await cli.expect("Not authenticated");
31
+ });
32
+ expect(exitCode).toBe(1);
33
+ expect(output).toContain("Not authenticated");
34
+ });
35
+ it("requires --port flag", async () => {
36
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "tunnel"], {
37
+ cwd,
38
+ env: {
39
+ ALPIC_API_BASE_URL: serverUrl,
40
+ ALPIC_API_KEY: "test-api-key",
41
+ },
42
+ }, async (cli) => {
43
+ await cli.expect(/port|Missing required flag/);
44
+ });
45
+ expect(exitCode).toBe(1);
46
+ expect(output).toMatch(/port|Missing required flag/);
47
+ });
48
+ it("requests a tunnel ticket from the API", async () => {
49
+ await cliSession(process.execPath, [binPath, "tunnel", "--port", "3000"], {
50
+ cwd,
51
+ env: {
52
+ ALPIC_API_BASE_URL: serverUrl,
53
+ ALPIC_API_KEY: "test-api-key",
54
+ },
55
+ timeoutMs: 12000,
56
+ }, async (cli) => {
57
+ await cli.expect("Opening tunnel");
58
+ cli.stop();
59
+ });
60
+ const ticketCall = mockServer.getCalls().find((call) => call.path.includes("tunnels"));
61
+ expect(ticketCall).toBeDefined();
62
+ });
63
+ });
64
+ //# sourceMappingURL=tunnel.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/tunnel.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { RouterOutput } from "@alpic-ai/api";
2
+ import type { ApiCall, MockApiServer } from "./mock-server.js";
3
+ type Expectable = string | RegExp;
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"];
8
+ export type CliSessionOptions = {
9
+ cwd?: string;
10
+ env?: Record<string, string | undefined>;
11
+ cols?: number;
12
+ rows?: number;
13
+ timeoutMs?: number;
14
+ };
15
+ export type CliController = {
16
+ /** Wait until stdout/stderr contains a string or matches a regex */
17
+ expect: (pattern: Expectable, opts?: {
18
+ timeoutMs?: number;
19
+ }) => Promise<void>;
20
+ /** Send a line (adds newline) */
21
+ send: (line: string) => Promise<void>;
22
+ /** Send raw data (no newline) */
23
+ write: (data: string) => void;
24
+ /** Current accumulated output */
25
+ output: () => string;
26
+ /** Clear accumulated output (handy between phases) */
27
+ clear: () => void;
28
+ /** End session (SIGTERM) */
29
+ stop: () => void;
30
+ };
31
+ export declare function cliSession(cmd: string, args: string[], options: CliSessionOptions, fn?: (cli: CliController) => Promise<void> | void): Promise<{
32
+ exitCode: number | null;
33
+ output: string;
34
+ }>;
35
+ export type BuildMockProjectParams = {
36
+ projectId: string;
37
+ teamId: string;
38
+ projectName: string;
39
+ environmentId: string;
40
+ environmentName: string;
41
+ sourceRepository?: string | null;
42
+ sourceBranch?: string | null;
43
+ domains?: ProductionEnvironmentDomains;
44
+ };
45
+ export declare function buildMockProject(params: BuildMockProjectParams): ProjectGetV1;
46
+ export declare function buildMockDeployment(overrides?: Partial<DeploymentGetV1>): DeploymentGetV1;
47
+ export type SetupTestDirectoryOptions = {
48
+ /** If true, run git init and add origin/upstream remotes */
49
+ initGit?: boolean;
50
+ };
51
+ export declare function setupTestDirectory(options?: SetupTestDirectoryOptions): Promise<{
52
+ cwd: string;
53
+ binPath: string;
54
+ }>;
55
+ export declare function createConfigFile(cwd: string, projectId: string, teamId: string, projectName: string, environmentId: string, environmentName: string): void;
56
+ export declare function runGit(args: string[], cwd: string): void;
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, output: string, expected: {
65
+ projectName: string;
66
+ projectId?: string;
67
+ teamId?: string;
68
+ environmentId?: string;
69
+ environmentName?: string;
70
+ }): Promise<void>;
71
+ export declare function verifyDeploymentFlow(cli: CliController, mockServer: MockApiServer): Promise<void>;
72
+ export {};
@@ -0,0 +1,272 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { mkdirSync, writeFileSync } from "node:fs";
4
+ import { cp, mkdtemp, readFile, rm } from "node:fs/promises";
5
+ import { tmpdir } from "node:os";
6
+ import { dirname, join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { stripVTControlCharacters } from "node:util";
9
+ import pty from "node-pty";
10
+ import { expect } from "vitest";
11
+ const __testDirname = dirname(fileURLToPath(import.meta.url));
12
+ export async function cliSession(cmd, args, options, fn = async () => { }) {
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-")));
16
+ const mergedEnv = {
17
+ ...process.env,
18
+ ALPIC_GLOBAL_CONFIG_DIR: globalConfigDir,
19
+ // Resolve @alpic-ai/api to TypeScript source via the "development" export condition,
20
+ // so e2e tests run without building the api package first.
21
+ NODE_OPTIONS: [process.env.NODE_OPTIONS, "--conditions=development"].filter(Boolean).join(" "),
22
+ ...Object.fromEntries(Object.entries(env ?? {}).filter(([, v]) => v !== undefined)),
23
+ };
24
+ for (const [k, v] of Object.entries(mergedEnv)) {
25
+ if (typeof v !== "string") {
26
+ console.error("[pty] bad env entry:", k, v, typeof v);
27
+ throw new Error(`env value for ${k} is not a string`);
28
+ }
29
+ }
30
+ const term = pty.spawn(cmd, args, {
31
+ cwd,
32
+ env: mergedEnv,
33
+ name: "xterm-256color",
34
+ cols,
35
+ rows,
36
+ });
37
+ let buf = "";
38
+ const append = (data) => {
39
+ buf += data;
40
+ };
41
+ term.onData(append);
42
+ let exitCode = null;
43
+ const exitPromise = new Promise((resolve) => {
44
+ term.onExit((e) => {
45
+ exitCode = e.exitCode ?? null;
46
+ resolve();
47
+ });
48
+ });
49
+ const controller = {
50
+ expect: (pattern, opts) => waitFor(() => matches(buf, pattern), opts?.timeoutMs ?? timeoutMs, () => buf, pattern),
51
+ send: async (line) => {
52
+ term.write(`${line}\r`);
53
+ },
54
+ write: (data) => term.write(data),
55
+ output: () => stripVTControlCharacters(buf),
56
+ clear: () => {
57
+ buf = "";
58
+ },
59
+ stop: () => {
60
+ try {
61
+ term.kill();
62
+ }
63
+ catch {
64
+ // ignore
65
+ }
66
+ },
67
+ };
68
+ try {
69
+ await fn(controller);
70
+ }
71
+ finally {
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
+ }
80
+ }
81
+ return { exitCode, output: stripVTControlCharacters(buf) };
82
+ }
83
+ function matches(text, pattern) {
84
+ const normalizedText = stripVTControlCharacters(text);
85
+ if (typeof pattern === "string") {
86
+ return normalizedText.includes(pattern);
87
+ }
88
+ return pattern.test(normalizedText);
89
+ }
90
+ async function waitFor(predicate, timeoutMs, getOutput, pattern) {
91
+ const start = Date.now();
92
+ while (true) {
93
+ if (predicate())
94
+ return;
95
+ if (Date.now() - start > timeoutMs) {
96
+ const out = getOutput();
97
+ throw new Error(`Timed out after ${timeoutMs}ms waiting for: ${patternToString(pattern)}\n\n` +
98
+ `--- current output ---\n${out}\n--- end output ---\n`);
99
+ }
100
+ await sleep(20);
101
+ }
102
+ }
103
+ function patternToString(p) {
104
+ return typeof p === "string" ? JSON.stringify(p) : `/${p.source}/${p.flags}`;
105
+ }
106
+ function sleep(ms) {
107
+ return new Promise((r) => setTimeout(r, ms));
108
+ }
109
+ async function waitForExit(exitPromise, timeoutMs) {
110
+ return Promise.race([exitPromise.then(() => true), sleep(timeoutMs).then(() => false)]);
111
+ }
112
+ export function buildMockProject(params) {
113
+ const { projectId, teamId, projectName, environmentId, environmentName, sourceRepository = null, sourceBranch = null, domains = [], } = params;
114
+ const mcpServerUrl = `https://mcp-${projectId}.alpic.ai`;
115
+ return {
116
+ id: projectId,
117
+ name: projectName,
118
+ teamId,
119
+ environments: [
120
+ {
121
+ id: environmentId,
122
+ name: environmentName,
123
+ sourceBranch,
124
+ mcpServerUrl,
125
+ createdAt: new Date(),
126
+ projectId,
127
+ latestDeployment: null,
128
+ },
129
+ ],
130
+ productionEnvironment: {
131
+ id: environmentId,
132
+ name: environmentName,
133
+ mcpServerUrl,
134
+ domains,
135
+ latestDeployment: null,
136
+ },
137
+ sourceRepository,
138
+ runtime: "node24",
139
+ transport: null,
140
+ rootDirectory: null,
141
+ buildCommand: null,
142
+ buildOutputDir: null,
143
+ installCommand: null,
144
+ startCommand: null,
145
+ createdAt: new Date(),
146
+ };
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
+ }
165
+ export async function setupTestDirectory(options = {}) {
166
+ const { initGit = false } = options;
167
+ const uniqueId = randomUUID();
168
+ const cwd = await mkdtemp(join(tmpdir(), `alpic-cli-e2e-${uniqueId}-`));
169
+ const fixturePath = join(__testDirname, "fixtures", "demo-project");
170
+ await cp(fixturePath, cwd, { recursive: true });
171
+ if (initGit) {
172
+ runGit(["init"], cwd);
173
+ runGit(["remote", "add", "origin", "git@github.com:acme/frontend.git"], cwd);
174
+ runGit(["remote", "add", "upstream", "https://github.com/acme/backend.git"], cwd);
175
+ }
176
+ const binPath = join(process.cwd(), "bin", "dev.js");
177
+ return { cwd, binPath };
178
+ }
179
+ export function createConfigFile(cwd, projectId, teamId, projectName, environmentId, environmentName) {
180
+ const configDir = join(cwd, ".alpic");
181
+ mkdirSync(configDir, { recursive: true });
182
+ const configPath = join(configDir, "project.json");
183
+ writeFileSync(configPath, JSON.stringify({
184
+ projectId,
185
+ teamId,
186
+ projectName,
187
+ environmentId,
188
+ environmentName,
189
+ }));
190
+ }
191
+ export function runGit(args, cwd) {
192
+ execFileSync("git", args, {
193
+ cwd,
194
+ stdio: ["ignore", "pipe", "pipe"],
195
+ });
196
+ }
197
+ export function expectSuccessfulApiCall(call, customAssertions) {
198
+ expect(call).toBeDefined();
199
+ expect(call?.responseStatus).toBe(200);
200
+ if (customAssertions && call) {
201
+ customAssertions(call);
202
+ }
203
+ }
204
+ /**
205
+ * Create OAuth credentials in a temp config dir and return env for CLI subprocess.
206
+ * Use this to run commands with OAuth auth (no ALPIC_API_KEY).
207
+ * Caller must pass serverUrl so userinfo can be pointed at the mock server.
208
+ */
209
+ export function createOAuthEnv(cwd, serverUrl) {
210
+ const alpicConfigDir = join(cwd, ".config", "alpic");
211
+ mkdirSync(alpicConfigDir, { recursive: true });
212
+ const credentialsPath = join(alpicConfigDir, "credentials.json");
213
+ const expiresAt = Math.floor(Date.now() / 1000) + 3600; // seconds
214
+ writeFileSync(credentialsPath, JSON.stringify({
215
+ access_token: "test-oauth-token",
216
+ refresh_token: "test-refresh-token",
217
+ expires_at: expiresAt,
218
+ sub: "test-sub",
219
+ }), "utf-8");
220
+ return {
221
+ ALPIC_GLOBAL_CONFIG_DIR: alpicConfigDir,
222
+ ALPIC_COGNITO_URL: serverUrl,
223
+ ALPIC_API_BASE_URL: serverUrl,
224
+ };
225
+ }
226
+ export async function verifyConfigFile(cwd, output, expected) {
227
+ const cfgPath = join(cwd, ".alpic", "project.json");
228
+ const cfg = await readFile(cfgPath, "utf8");
229
+ const config = JSON.parse(cfg);
230
+ expect(config.projectName).toBe(expected.projectName);
231
+ if (expected.projectId !== undefined) {
232
+ expect(config.projectId).toBe(expected.projectId);
233
+ }
234
+ else {
235
+ expect(config.projectId).toBeDefined();
236
+ }
237
+ if (expected.teamId !== undefined) {
238
+ expect(config.teamId).toBe(expected.teamId);
239
+ }
240
+ else {
241
+ expect(config.teamId).toBeDefined();
242
+ }
243
+ if (expected.environmentId !== undefined) {
244
+ expect(config.environmentId).toBe(expected.environmentId);
245
+ }
246
+ else {
247
+ expect(config.environmentId).toBeDefined();
248
+ }
249
+ if (expected.environmentName !== undefined) {
250
+ expect(config.environmentName).toBe(expected.environmentName);
251
+ }
252
+ else {
253
+ expect(config.environmentName).toBeDefined();
254
+ }
255
+ expect(output).toMatch(/Deployment completed|Deployment summary/);
256
+ }
257
+ export async function verifyDeploymentFlow(cli, mockServer) {
258
+ await cli.expect(/Collected \d+ file/);
259
+ await cli.expect("Upload complete");
260
+ const uploadCall = mockServer.getLastCall("POST", "/v1/deployments/upload");
261
+ expectSuccessfulApiCall(uploadCall);
262
+ await cli.expect("Deployment started");
263
+ const deployCall = mockServer.getLastCall("POST", /\/v1\/environments\/.*\/deploy/);
264
+ expectSuccessfulApiCall(deployCall);
265
+ await cli.expect("View deployment details:");
266
+ await cli.expect("Deployment summary:");
267
+ const deploymentStatusCalls = mockServer.getCalls("GET", /\/v1\/deployments\/.*/);
268
+ expect(deploymentStatusCalls.length).toBeGreaterThan(0);
269
+ const envCall = mockServer.getLastCall("GET", /\/v1\/environments\/.*/);
270
+ expectSuccessfulApiCall(envCall);
271
+ }
272
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
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"}
@@ -1,9 +1,12 @@
1
- import { Command } from "@oclif/core";
2
- export declare class Deploy extends Command {
1
+ import { AlpicCommand } from "../lib/alpic-command.js";
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>;
7
10
  };
8
11
  run(): Promise<void>;
9
12
  }
@@ -1,44 +1,61 @@
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
+ import { AlpicCommand } from "../lib/alpic-command.js";
6
7
  import { createTarArchive, getFilesToPack } from "../lib/archive.js";
7
8
  import { deployAndWait, formatElapsed } from "../lib/deployment.js";
8
- import { resolveDeployDir, resolveProjectForDeploy } from "../lib/project.js";
9
+ import { ProjectWorkflow } from "../lib/project.js";
9
10
  import { uploadToPresignedUrl } from "../lib/upload.js";
10
- export class Deploy extends Command {
11
+ const RUNTIMES = ["node24", "node22", "python3.14", "python3.13"];
12
+ export class Deploy extends AlpicCommand {
11
13
  static description = "Deploy a project to Alpic";
12
- static examples = ["<%= config.bin %> deploy", "<%= config.bin %> deploy ./my-app"];
13
- static args = {
14
- directory: Args.string({
15
- description: "Directory to deploy (default: current directory)",
14
+ static examples = [
15
+ "<%= config.bin %> deploy",
16
+ "<%= config.bin %> deploy --non-interactive --project-name my-app --runtime node24",
17
+ ];
18
+ static flags = {
19
+ "non-interactive": Flags.boolean({
20
+ description: "Skip all confirmation prompts",
21
+ required: false,
22
+ }),
23
+ runtime: Flags.string({
24
+ description: "New project runtime (node24, node22, python3.14, python3.13)",
25
+ required: false,
26
+ options: RUNTIMES,
27
+ }),
28
+ "root-dir": Flags.string({
29
+ description: "New project root directory (useful for monorepos)",
30
+ required: false,
31
+ }),
32
+ "project-name": Flags.string({
33
+ description: "New project name",
16
34
  required: false,
17
35
  }),
18
36
  };
19
37
  async run() {
20
- const { args } = await this.parse(Deploy);
38
+ const { flags } = await this.parse(Deploy);
39
+ const projectFlags = {
40
+ "non-interactive": flags["non-interactive"],
41
+ projectName: flags["project-name"],
42
+ runtime: flags.runtime,
43
+ rootDir: flags["root-dir"],
44
+ };
21
45
  p.intro("Deploying to Alpic");
22
- const apiKey = process.env.ALPIC_API_KEY;
23
- if (!apiKey) {
24
- p.cancel("ALPIC_API_KEY environment variable is required. Get your API key from Team settings in the Alpic dashboard.");
25
- this.exit(1);
26
- return;
27
- }
28
- const deployDir = resolveDeployDir(args.directory);
29
- const config = await resolveProjectForDeploy(deployDir);
46
+ await this.ensureAuthenticated();
47
+ const workflow = new ProjectWorkflow(projectFlags);
48
+ const config = await workflow.resolveProjectForDeploy();
30
49
  if (!config) {
31
- p.cancel("Deploy cancelled");
32
- this.exit(1);
33
- return;
50
+ throw new Error("Deploy cancelled");
34
51
  }
35
52
  const spinner = p.spinner();
36
53
  let tmpDir;
37
54
  try {
38
55
  spinner.start("Collecting source files...");
39
- const files = getFilesToPack(deployDir);
56
+ const files = getFilesToPack();
40
57
  spinner.stop(`Collected ${files.length} file${files.length === 1 ? "" : "s"}`);
41
- const result = await createTarArchive(files, deployDir);
58
+ const result = await createTarArchive(files);
42
59
  tmpDir = result.tmpDir;
43
60
  const archivePath = result.archivePath;
44
61
  const { uploadUrl, token } = await api.deployments.uploadArtifact.v1();
@@ -48,19 +65,22 @@ export class Deploy extends Command {
48
65
  spinner.stop("Upload complete");
49
66
  spinner.start("Triggering deployment...");
50
67
  const deployStartedAt = Date.now();
51
- const initialDeployment = await api.environments.deploy.v1({ environmentId: config.environmentId, token });
68
+ const initialDeployment = await api.environments.deploy.v1({
69
+ environmentId: config.environmentId,
70
+ token,
71
+ });
52
72
  spinner.stop("Deployment started");
53
73
  const { deployment, elapsedMs } = await deployAndWait({
54
74
  initial: initialDeployment,
55
75
  startedAt: deployStartedAt,
56
- teamId: config.teamId,
57
- projectId: config.projectId,
58
76
  });
59
77
  const elapsedStr = formatElapsed(elapsedMs);
60
78
  if (deployment.status !== "deployed") {
61
79
  throw new Error("Deployment failed");
62
80
  }
63
- const environment = await api.environments.get.v1({ environmentId: config.environmentId });
81
+ const environment = await api.environments.get.v1({
82
+ environmentId: config.environmentId,
83
+ });
64
84
  const urls = environment.mcpServerUrl ? [environment.mcpServerUrl] : environment.domains;
65
85
  p.box([...urls.map((url) => chalk.bold(`🔗 ${url}`)), "", `Completed in ${elapsedStr}`].join("\n"), "Deployment summary:", {
66
86
  contentAlign: "center",
@@ -73,8 +93,7 @@ export class Deploy extends Command {
73
93
  catch (error) {
74
94
  spinner.stop();
75
95
  const message = error instanceof Error ? error.message : String(error);
76
- p.cancel(`Error: ${message}`);
77
- this.exit(1);
96
+ throw new Error(`Error: ${message}`);
78
97
  }
79
98
  finally {
80
99
  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
+ }