alpic 0.0.0-dev.fdfada2 → 0.0.0-dev.fe18813

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 (138) hide show
  1. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  2. package/dist/__tests__/auth.e2e.test.js +142 -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__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +250 -0
  12. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  13. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +121 -0
  15. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  16. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +139 -0
  18. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  19. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +294 -0
  21. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +19 -0
  24. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  25. package/dist/__tests__/fixtures/demo-project/index.d.ts +1 -0
  26. package/dist/__tests__/fixtures/demo-project/index.js +4 -0
  27. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -0
  28. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  29. package/dist/__tests__/git-flags.e2e.test.js +124 -0
  30. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  31. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  32. package/dist/__tests__/git.e2e.test.js +221 -0
  33. package/dist/__tests__/git.e2e.test.js.map +1 -0
  34. package/dist/__tests__/mock-server.d.ts +23 -0
  35. package/dist/__tests__/mock-server.js +573 -0
  36. package/dist/__tests__/mock-server.js.map +1 -0
  37. package/dist/__tests__/utils.d.ts +67 -0
  38. package/dist/__tests__/utils.js +255 -0
  39. package/dist/__tests__/utils.js.map +1 -0
  40. package/dist/api.d.ts +0 -1
  41. package/dist/api.js +5 -9
  42. package/dist/api.js.map +1 -1
  43. package/dist/commands/deploy.d.ts +7 -4
  44. package/dist/commands/deploy.js +39 -25
  45. package/dist/commands/deploy.js.map +1 -1
  46. package/dist/commands/environment-variable/add.d.ts +14 -0
  47. package/dist/commands/environment-variable/add.js +46 -0
  48. package/dist/commands/environment-variable/add.js.map +1 -0
  49. package/dist/commands/environment-variable/list.d.ts +9 -0
  50. package/dist/commands/environment-variable/list.js +48 -0
  51. package/dist/commands/environment-variable/list.js.map +1 -0
  52. package/dist/commands/environment-variable/remove.d.ts +11 -0
  53. package/dist/commands/environment-variable/remove.js +32 -0
  54. package/dist/commands/environment-variable/remove.js.map +1 -0
  55. package/dist/commands/environment-variable/update.d.ts +13 -0
  56. package/dist/commands/environment-variable/update.js +40 -0
  57. package/dist/commands/environment-variable/update.js.map +1 -0
  58. package/dist/commands/git/connect.d.ts +10 -0
  59. package/dist/commands/git/connect.js +58 -0
  60. package/dist/commands/git/connect.js.map +1 -0
  61. package/dist/commands/git/disconnect.d.ts +9 -0
  62. package/dist/commands/git/disconnect.js +41 -0
  63. package/dist/commands/git/disconnect.js.map +1 -0
  64. package/dist/commands/git.d.ts +6 -0
  65. package/dist/commands/git.js +17 -0
  66. package/dist/commands/git.js.map +1 -0
  67. package/dist/commands/login.d.ts +6 -0
  68. package/dist/commands/login.js +32 -0
  69. package/dist/commands/login.js.map +1 -0
  70. package/dist/commands/logout.d.ts +6 -0
  71. package/dist/commands/logout.js +20 -0
  72. package/dist/commands/logout.js.map +1 -0
  73. package/dist/commands/whoami.d.ts +6 -0
  74. package/dist/commands/whoami.js +13 -0
  75. package/dist/commands/whoami.js.map +1 -0
  76. package/dist/env.d.ts +4 -0
  77. package/dist/env.js +10 -0
  78. package/dist/env.js.map +1 -0
  79. package/dist/lib/alpic-command.d.ts +6 -0
  80. package/dist/lib/alpic-command.js +27 -0
  81. package/dist/lib/alpic-command.js.map +1 -0
  82. package/dist/lib/archive.d.ts +3 -3
  83. package/dist/lib/archive.js +11 -15
  84. package/dist/lib/archive.js.map +1 -1
  85. package/dist/lib/auth/auth.d.ts +2 -0
  86. package/dist/lib/auth/auth.js +21 -0
  87. package/dist/lib/auth/auth.js.map +1 -0
  88. package/dist/lib/auth/oauth/client.d.ts +28 -0
  89. package/dist/lib/auth/oauth/client.js +110 -0
  90. package/dist/lib/auth/oauth/client.js.map +1 -0
  91. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  92. package/dist/lib/auth/oauth/constants.js +3 -0
  93. package/dist/lib/auth/oauth/constants.js.map +1 -0
  94. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  95. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  96. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  97. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  98. package/dist/lib/auth/oauth/server/index.js +102 -0
  99. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  100. package/dist/lib/auth/whoami.d.ts +1 -0
  101. package/dist/lib/auth/whoami.js +41 -0
  102. package/dist/lib/auth/whoami.js.map +1 -0
  103. package/dist/lib/base-workflow.d.ts +10 -0
  104. package/dist/lib/base-workflow.js +22 -0
  105. package/dist/lib/base-workflow.js.map +1 -0
  106. package/dist/lib/config.d.ts +2 -2
  107. package/dist/lib/config.js +7 -7
  108. package/dist/lib/config.js.map +1 -1
  109. package/dist/lib/deployment.d.ts +2 -3
  110. package/dist/lib/deployment.js +12 -8
  111. package/dist/lib/deployment.js.map +1 -1
  112. package/dist/lib/environment-variable.d.ts +35 -0
  113. package/dist/lib/environment-variable.js +277 -0
  114. package/dist/lib/environment-variable.js.map +1 -0
  115. package/dist/lib/git.d.ts +22 -0
  116. package/dist/lib/git.js +131 -0
  117. package/dist/lib/git.js.map +1 -0
  118. package/dist/lib/global-store.d.ts +28 -0
  119. package/dist/lib/global-store.js +76 -0
  120. package/dist/lib/global-store.js.map +1 -0
  121. package/dist/lib/project.d.ts +65 -61
  122. package/dist/lib/project.js +264 -250
  123. package/dist/lib/project.js.map +1 -1
  124. package/dist/lib/table.d.ts +8 -0
  125. package/dist/lib/table.js +27 -0
  126. package/dist/lib/table.js.map +1 -0
  127. package/dist/lib/telemetry.js +6 -6
  128. package/dist/lib/telemetry.js.map +1 -1
  129. package/dist/lib/utils.d.ts +1 -0
  130. package/dist/lib/utils.js +17 -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 +14 -0
  134. package/dist/lib/utils.test.js.map +1 -0
  135. package/package.json +29 -28
  136. package/dist/lib/global-config.d.ts +0 -9
  137. package/dist/lib/global-config.js +0 -48
  138. package/dist/lib/global-config.js.map +0 -1
@@ -0,0 +1,67 @@
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
+ export type CliSessionOptions = {
6
+ cwd?: string;
7
+ env?: Record<string, string | undefined>;
8
+ cols?: number;
9
+ rows?: number;
10
+ timeoutMs?: number;
11
+ };
12
+ export type CliController = {
13
+ /** Wait until stdout/stderr contains a string or matches a regex */
14
+ expect: (pattern: Expectable, opts?: {
15
+ timeoutMs?: number;
16
+ }) => Promise<void>;
17
+ /** Send a line (adds newline) */
18
+ send: (line: string) => Promise<void>;
19
+ /** Send raw data (no newline) */
20
+ write: (data: string) => void;
21
+ /** Current accumulated output */
22
+ output: () => string;
23
+ /** Clear accumulated output (handy between phases) */
24
+ clear: () => void;
25
+ /** End session (SIGTERM) */
26
+ stop: () => void;
27
+ };
28
+ export declare function cliSession(cmd: string, args: string[], options: CliSessionOptions, fn?: (cli: CliController) => Promise<void> | void): Promise<{
29
+ exitCode: number | null;
30
+ output: string;
31
+ }>;
32
+ export type BuildMockProjectParams = {
33
+ projectId: string;
34
+ teamId: string;
35
+ projectName: string;
36
+ environmentId: string;
37
+ environmentName: string;
38
+ sourceRepository?: string | null;
39
+ sourceBranch?: string | null;
40
+ };
41
+ export declare function buildMockProject(params: BuildMockProjectParams): ProjectGetV1;
42
+ export type SetupTestDirectoryOptions = {
43
+ /** If true, run git init and add origin/upstream remotes */
44
+ initGit?: boolean;
45
+ };
46
+ export declare function setupTestDirectory(options?: SetupTestDirectoryOptions): Promise<{
47
+ cwd: string;
48
+ binPath: string;
49
+ }>;
50
+ export declare function createConfigFile(cwd: string, projectId: string, teamId: string, projectName: string, environmentId: string, environmentName: string): void;
51
+ export declare function runGit(args: string[], cwd: string): void;
52
+ export declare function expectSuccessfulApiCall(call: ApiCall | undefined, customAssertions?: (call: ApiCall) => void): asserts call is ApiCall;
53
+ /**
54
+ * Create OAuth credentials in a temp config dir and return env for CLI subprocess.
55
+ * Use this to run commands with OAuth auth (no ALPIC_API_KEY).
56
+ * Caller must pass serverUrl so userinfo can be pointed at the mock server.
57
+ */
58
+ export declare function createOAuthEnv(cwd: string, serverUrl: string): Record<string, string>;
59
+ export declare function verifyConfigFile(cwd: string, output: string, expected: {
60
+ projectName: string;
61
+ projectId?: string;
62
+ teamId?: string;
63
+ environmentId?: string;
64
+ environmentName?: string;
65
+ }): Promise<void>;
66
+ export declare function verifyDeploymentFlow(cli: CliController, mockServer: MockApiServer): Promise<void>;
67
+ export {};
@@ -0,0 +1,255 @@
1
+ import pty from "node-pty";
2
+ import { execFileSync } from "node:child_process";
3
+ import { randomUUID } from "node:crypto";
4
+ import { mkdirSync, writeFileSync } from "node:fs";
5
+ import { cp, mkdtemp, readFile, rm } from "node:fs/promises";
6
+ import { tmpdir } from "node:os";
7
+ import { dirname, join } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { stripVTControlCharacters } from "node:util";
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, } = 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 async function setupTestDirectory(options = {}) {
149
+ const { initGit = false } = options;
150
+ const uniqueId = randomUUID();
151
+ const cwd = await mkdtemp(join(tmpdir(), `alpic-cli-e2e-${uniqueId}-`));
152
+ const fixturePath = join(__testDirname, "fixtures", "demo-project");
153
+ await cp(fixturePath, cwd, { recursive: true });
154
+ if (initGit) {
155
+ runGit(["init"], cwd);
156
+ runGit(["remote", "add", "origin", "git@github.com:acme/frontend.git"], cwd);
157
+ runGit(["remote", "add", "upstream", "https://github.com/acme/backend.git"], cwd);
158
+ }
159
+ const binPath = join(process.cwd(), "bin", "dev.js");
160
+ return { cwd, binPath };
161
+ }
162
+ export function createConfigFile(cwd, projectId, teamId, projectName, environmentId, environmentName) {
163
+ const configDir = join(cwd, ".alpic");
164
+ mkdirSync(configDir, { recursive: true });
165
+ const configPath = join(configDir, "project.json");
166
+ writeFileSync(configPath, JSON.stringify({
167
+ projectId,
168
+ teamId,
169
+ projectName,
170
+ environmentId,
171
+ environmentName,
172
+ }));
173
+ }
174
+ export function runGit(args, cwd) {
175
+ execFileSync("git", args, {
176
+ cwd,
177
+ stdio: ["ignore", "pipe", "pipe"],
178
+ });
179
+ }
180
+ export function expectSuccessfulApiCall(call, customAssertions) {
181
+ expect(call).toBeDefined();
182
+ expect(call?.responseStatus).toBe(200);
183
+ if (customAssertions && call) {
184
+ customAssertions(call);
185
+ }
186
+ }
187
+ /**
188
+ * Create OAuth credentials in a temp config dir and return env for CLI subprocess.
189
+ * Use this to run commands with OAuth auth (no ALPIC_API_KEY).
190
+ * Caller must pass serverUrl so userinfo can be pointed at the mock server.
191
+ */
192
+ export function createOAuthEnv(cwd, serverUrl) {
193
+ const alpicConfigDir = join(cwd, ".config", "alpic");
194
+ mkdirSync(alpicConfigDir, { recursive: true });
195
+ const credentialsPath = join(alpicConfigDir, "credentials.json");
196
+ const expiresAt = Math.floor(Date.now() / 1000) + 3600; // seconds
197
+ writeFileSync(credentialsPath, JSON.stringify({
198
+ access_token: "test-oauth-token",
199
+ refresh_token: "test-refresh-token",
200
+ expires_at: expiresAt,
201
+ sub: "test-sub",
202
+ }), "utf-8");
203
+ return {
204
+ ALPIC_GLOBAL_CONFIG_DIR: alpicConfigDir,
205
+ ALPIC_COGNITO_URL: serverUrl,
206
+ ALPIC_API_BASE_URL: serverUrl,
207
+ };
208
+ }
209
+ export async function verifyConfigFile(cwd, output, expected) {
210
+ const cfgPath = join(cwd, ".alpic", "project.json");
211
+ const cfg = await readFile(cfgPath, "utf8");
212
+ const config = JSON.parse(cfg);
213
+ expect(config.projectName).toBe(expected.projectName);
214
+ if (expected.projectId !== undefined) {
215
+ expect(config.projectId).toBe(expected.projectId);
216
+ }
217
+ else {
218
+ expect(config.projectId).toBeDefined();
219
+ }
220
+ if (expected.teamId !== undefined) {
221
+ expect(config.teamId).toBe(expected.teamId);
222
+ }
223
+ else {
224
+ expect(config.teamId).toBeDefined();
225
+ }
226
+ if (expected.environmentId !== undefined) {
227
+ expect(config.environmentId).toBe(expected.environmentId);
228
+ }
229
+ else {
230
+ expect(config.environmentId).toBeDefined();
231
+ }
232
+ if (expected.environmentName !== undefined) {
233
+ expect(config.environmentName).toBe(expected.environmentName);
234
+ }
235
+ else {
236
+ expect(config.environmentName).toBeDefined();
237
+ }
238
+ expect(output).toMatch(/Deployment completed|Deployment summary/);
239
+ }
240
+ export async function verifyDeploymentFlow(cli, mockServer) {
241
+ await cli.expect(/Collected \d+ file/);
242
+ await cli.expect("Upload complete");
243
+ const uploadCall = mockServer.getLastCall("POST", "/v1/deployments/upload");
244
+ expectSuccessfulApiCall(uploadCall);
245
+ await cli.expect("Deployment started");
246
+ const deployCall = mockServer.getLastCall("POST", /\/v1\/environments\/.*\/deploy/);
247
+ expectSuccessfulApiCall(deployCall);
248
+ await cli.expect("View deployment details:");
249
+ await cli.expect("Deployment summary:");
250
+ const deploymentStatusCalls = mockServer.getCalls("GET", /\/v1\/deployments\/.*/);
251
+ expect(deploymentStatusCalls.length).toBeGreaterThan(0);
252
+ const envCall = mockServer.getLastCall("GET", /\/v1\/environments\/.*/);
253
+ expectSuccessfulApiCall(envCall);
254
+ }
255
+ //# 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
1
  import type { ContractRouterClient } from "@orpc/contract";
2
2
  import { contract } from "@alpic-ai/api";
3
- export declare function getFrontendBaseUrl(): string;
4
3
  export declare const api: ContractRouterClient<typeof contract>;
package/dist/api.js CHANGED
@@ -2,16 +2,12 @@ import { createORPCClient } from "@orpc/client";
2
2
  import { ResponseValidationPlugin } from "@orpc/contract/plugins";
3
3
  import { OpenAPILink } from "@orpc/openapi-client/fetch";
4
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,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,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
1
  import * as p from "@clack/prompts";
2
- import { Args, Command } from "@oclif/core";
2
+ import { Flags } from "@oclif/core";
3
3
  import chalk from "chalk";
4
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();
@@ -53,8 +70,6 @@ export class Deploy extends Command {
53
70
  const { deployment, elapsedMs } = await deployAndWait({
54
71
  initial: initialDeployment,
55
72
  startedAt: deployStartedAt,
56
- teamId: config.teamId,
57
- projectId: config.projectId,
58
73
  });
59
74
  const elapsedStr = formatElapsed(elapsedMs);
60
75
  if (deployment.status !== "deployed") {
@@ -73,8 +88,7 @@ export class Deploy extends Command {
73
88
  catch (error) {
74
89
  spinner.stop();
75
90
  const message = error instanceof Error ? error.message : String(error);
76
- p.cancel(`Error: ${message}`);
77
- this.exit(1);
91
+ throw new Error(`Error: ${message}`);
78
92
  }
79
93
  finally {
80
94
  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,14 @@
1
+ import { AlpicCommand } from "../../lib/alpic-command.js";
2
+ export declare class EnvironmentVariableAdd extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ key: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ value: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ secret: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ "env-file": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ "non-interactive": import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,46 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { AlpicCommand } from "../../lib/alpic-command.js";
3
+ import { EnvironmentVariableWorkflow, resolveEnvironmentId } from "../../lib/environment-variable.js";
4
+ export class EnvironmentVariableAdd extends AlpicCommand {
5
+ static description = "Add one or more environment variables to an environment";
6
+ static examples = [
7
+ "<%= config.bin %> environment-variable add",
8
+ "<%= config.bin %> environment-variable add --key DATABASE_URL --value postgres://localhost/db",
9
+ "<%= config.bin %> environment-variable add --key PORT --value 3000 --no-secret",
10
+ "<%= config.bin %> environment-variable add --env-file .env",
11
+ "<%= config.bin %> environment-variable add --env-file .env --environment-id <environmentId>",
12
+ ];
13
+ static flags = {
14
+ "environment-id": Flags.string({
15
+ description: "The ID of the environment",
16
+ required: false,
17
+ }),
18
+ key: Flags.string({
19
+ description: "The environment variable key",
20
+ required: false,
21
+ }),
22
+ value: Flags.string({
23
+ description: "The environment variable value",
24
+ required: false,
25
+ }),
26
+ secret: Flags.boolean({
27
+ description: "Mark the variable as secret. Defaults to true when not specified.",
28
+ allowNo: true,
29
+ }),
30
+ "env-file": Flags.string({
31
+ description: "Path to a .env file to import variables from (mutually exclusive with --key/--value)",
32
+ required: false,
33
+ }),
34
+ "non-interactive": Flags.boolean({
35
+ description: "Disable interactive prompts. Requires --key and --value (or --env-file).",
36
+ default: false,
37
+ }),
38
+ };
39
+ async run() {
40
+ const { flags } = await this.parse(EnvironmentVariableAdd);
41
+ await this.ensureAuthenticated();
42
+ const environmentId = resolveEnvironmentId(flags);
43
+ await new EnvironmentVariableWorkflow(flags).add(environmentId);
44
+ }
45
+ }
46
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/environment-variable/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEtG,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,MAAM,CAAU,WAAW,GAAG,yDAAyD,CAAC;IAExF,MAAM,CAAU,QAAQ,GAAG;QACzB,4CAA4C;QAC5C,+FAA+F;QAC/F,gFAAgF;QAChF,4DAA4D;QAC5D,6FAA6F;KAC9F,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC;YAC7B,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,mEAAmE;YAChF,OAAO,EAAE,IAAI;SACd,CAAC;QACF,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC;YACvB,WAAW,EAAE,sFAAsF;YACnG,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,0EAA0E;YACvF,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAElD,MAAM,IAAI,2BAA2B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { AlpicCommand } from "../../lib/alpic-command.js";
2
+ export declare class EnvironmentVariableList extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
@@ -0,0 +1,48 @@
1
+ import * as p from "@clack/prompts";
2
+ import { Flags } from "@oclif/core";
3
+ import chalk from "chalk";
4
+ import { api } from "../../api.js";
5
+ import { AlpicCommand } from "../../lib/alpic-command.js";
6
+ import { resolveEnvironmentId } from "../../lib/environment-variable.js";
7
+ import { formatTable } from "../../lib/table.js";
8
+ import { formatAgo } from "../../lib/utils.js";
9
+ export class EnvironmentVariableList extends AlpicCommand {
10
+ static description = "List all environment variables for an environment";
11
+ static examples = [
12
+ "<%= config.bin %> environment-variable list",
13
+ "<%= config.bin %> environment-variable list --environment-id <environmentId>",
14
+ ];
15
+ static flags = {
16
+ "environment-id": Flags.string({
17
+ description: "The ID of the environment",
18
+ required: false,
19
+ }),
20
+ };
21
+ async run() {
22
+ const { flags } = await this.parse(EnvironmentVariableList);
23
+ await this.ensureAuthenticated();
24
+ const environmentId = resolveEnvironmentId(flags);
25
+ const spinner = p.spinner();
26
+ spinner.start("Fetching environment variables...");
27
+ const environmentVariables = await api.environmentVariables.list.v1({ environmentId });
28
+ spinner.stop(`Found ${environmentVariables.length} environment variable${environmentVariables.length === 1 ? "" : "s"}`);
29
+ if (environmentVariables.length === 0) {
30
+ p.log.info("No environment variables defined.");
31
+ return;
32
+ }
33
+ const rows = environmentVariables.map((variable) => ({
34
+ ...variable,
35
+ createdAt: formatAgo(variable.createdAt),
36
+ }));
37
+ console.log(formatTable(rows, [
38
+ { key: "key", header: "key", format: (value) => chalk.cyan(value) },
39
+ {
40
+ key: "value",
41
+ header: "value",
42
+ format: (value, row) => (row.isSecret ? chalk.gray.italic("<secret>") : chalk.bold(value)),
43
+ },
44
+ { key: "createdAt", header: "created at" },
45
+ ]));
46
+ }
47
+ }
48
+ //# sourceMappingURL=list.js.map