alpic 0.0.0-dev.gfbdef08 → 0.0.0-dev.gfbf0e1a

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 (70) hide show
  1. package/dist/__tests__/alpic-command.test.js +8 -4
  2. package/dist/__tests__/alpic-command.test.js.map +1 -1
  3. package/dist/__tests__/auth.e2e.test.js +3 -1
  4. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  5. package/dist/__tests__/environment-list.e2e.test.js +1 -1
  6. package/dist/__tests__/environment-list.e2e.test.js.map +1 -1
  7. package/dist/__tests__/mock-api.d.ts +6 -0
  8. package/dist/__tests__/mock-api.js +8 -3
  9. package/dist/__tests__/mock-api.js.map +1 -1
  10. package/dist/__tests__/tunnel.e2e.test.js +60 -0
  11. package/dist/__tests__/tunnel.e2e.test.js.map +1 -1
  12. package/dist/__tests__/utils.js +2 -2
  13. package/dist/__tests__/utils.js.map +1 -1
  14. package/dist/api.d.ts +1 -1
  15. package/dist/api.js +2 -21
  16. package/dist/api.js.map +1 -1
  17. package/dist/commands/deploy.js +66 -52
  18. package/dist/commands/deploy.js.map +1 -1
  19. package/dist/commands/login.js +7 -5
  20. package/dist/commands/login.js.map +1 -1
  21. package/dist/commands/logout.js +1 -1
  22. package/dist/commands/logout.js.map +1 -1
  23. package/dist/commands/tunnel.js +27 -59
  24. package/dist/commands/tunnel.js.map +1 -1
  25. package/dist/commands/whoami.js +1 -1
  26. package/dist/commands/whoami.js.map +1 -1
  27. package/dist/lib/alpic-command.js +5 -3
  28. package/dist/lib/alpic-command.js.map +1 -1
  29. package/dist/lib/alpic-sdk.d.ts +2 -0
  30. package/dist/lib/alpic-sdk.js +9 -0
  31. package/dist/lib/alpic-sdk.js.map +1 -0
  32. package/dist/lib/deployment.d.ts +0 -21
  33. package/dist/lib/deployment.js +9 -58
  34. package/dist/lib/deployment.js.map +1 -1
  35. package/dist/lib/telemetry.js +1 -1
  36. package/dist/lib/telemetry.js.map +1 -1
  37. package/dist/lib/whoami.js +17 -0
  38. package/dist/lib/whoami.js.map +1 -0
  39. package/package.json +19 -23
  40. package/dist/lib/archive.d.ts +0 -7
  41. package/dist/lib/archive.js +0 -57
  42. package/dist/lib/archive.js.map +0 -1
  43. package/dist/lib/auth/auth.d.ts +0 -5
  44. package/dist/lib/auth/auth.js +0 -50
  45. package/dist/lib/auth/auth.js.map +0 -1
  46. package/dist/lib/auth/oauth/client.d.ts +0 -28
  47. package/dist/lib/auth/oauth/client.js +0 -116
  48. package/dist/lib/auth/oauth/client.js.map +0 -1
  49. package/dist/lib/auth/oauth/constants.d.ts +0 -2
  50. package/dist/lib/auth/oauth/constants.js +0 -3
  51. package/dist/lib/auth/oauth/constants.js.map +0 -1
  52. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  53. package/dist/lib/auth/oauth/server/assets/authorize.html +0 -234
  54. package/dist/lib/auth/oauth/server/assets/callback.html +0 -88
  55. package/dist/lib/auth/oauth/server/index.d.ts +0 -9
  56. package/dist/lib/auth/oauth/server/index.js +0 -128
  57. package/dist/lib/auth/oauth/server/index.js.map +0 -1
  58. package/dist/lib/auth/whoami.js +0 -47
  59. package/dist/lib/auth/whoami.js.map +0 -1
  60. package/dist/lib/global-store.d.ts +0 -28
  61. package/dist/lib/global-store.js +0 -76
  62. package/dist/lib/global-store.js.map +0 -1
  63. package/dist/lib/upload.d.ts +0 -1
  64. package/dist/lib/upload.js +0 -13
  65. package/dist/lib/upload.js.map +0 -1
  66. package/dist/lib/vendor/pipenet.d.ts +0 -1
  67. package/dist/lib/vendor/pipenet.js +0 -15626
  68. package/dist/lib/vendor/pipenet.js.LEGAL.txt +0 -17
  69. package/dist/lib/vendor/pipenet.js.map +0 -7
  70. /package/dist/lib/{auth/whoami.d.ts → whoami.d.ts} +0 -0
@@ -1,13 +1,10 @@
1
- import { readFileSync, rmSync } from "node:fs";
2
1
  import * as p from "@clack/prompts";
3
2
  import { Flags } from "@oclif/core";
4
3
  import chalk from "chalk";
5
- import { api } from "../api.js";
6
4
  import { AlpicCommand } from "../lib/alpic-command.js";
7
- import { createTarArchive, getFilesToPack } from "../lib/archive.js";
8
- import { deployAndWait, formatElapsed } from "../lib/deployment.js";
5
+ import { alpic } from "../lib/alpic-sdk.js";
6
+ import { formatElapsed } from "../lib/deployment.js";
9
7
  import { LinkWorkflow, RUNTIMES } from "../lib/link.js";
10
- import { uploadToPresignedUrl } from "../lib/upload.js";
11
8
  export class Deploy extends AlpicCommand {
12
9
  static description = "Deploy a project to Alpic";
13
10
  static examples = [
@@ -65,54 +62,48 @@ export class Deploy extends AlpicCommand {
65
62
  throw new Error("Deploy cancelled");
66
63
  }
67
64
  const spinner = this.spinner();
68
- let tmpDir;
65
+ let elapsedInterval;
66
+ let deployingStarted = false;
67
+ let result;
69
68
  try {
70
- spinner.start("Collecting source files...");
71
- const files = getFilesToPack();
72
- spinner.stop(`Collected ${files.length} file${files.length === 1 ? "" : "s"}`);
73
- const result = await createTarArchive(files);
74
- tmpDir = result.tmpDir;
75
- const archivePath = result.archivePath;
76
- const { uploadUrl, token } = await api.deployments.uploadArtifact.v1({ teamId: projectConfig.teamId });
77
- spinner.start("Uploading source...");
78
- const buffer = readFileSync(archivePath);
79
- await uploadToPresignedUrl(uploadUrl, buffer);
80
- spinner.stop("Upload complete");
81
- spinner.start("Triggering deployment...");
82
- const deployStartedAt = Date.now();
83
- const initialDeployment = await api.environments.deploy.v1({
69
+ result = await alpic.deployments.deploy({
84
70
  environmentId: projectConfig.environmentId,
85
- token,
71
+ teamId: projectConfig.teamId,
72
+ onProgress: (event) => {
73
+ switch (event.type) {
74
+ case "collecting":
75
+ spinner.start("Collecting source files...");
76
+ break;
77
+ case "collected":
78
+ spinner.stop(`Collected ${event.fileCount} file${event.fileCount === 1 ? "" : "s"}`);
79
+ break;
80
+ case "uploading":
81
+ spinner.start("Uploading source...");
82
+ break;
83
+ case "triggering":
84
+ spinner.stop("Upload complete");
85
+ spinner.start("Triggering deployment...");
86
+ break;
87
+ case "deploying":
88
+ if (deployingStarted) {
89
+ break;
90
+ }
91
+ deployingStarted = true;
92
+ spinner.stop("Deployment started");
93
+ if (event.deploymentPageUrl) {
94
+ p.note(`🔗 ${event.deploymentPageUrl}`, "View deployment details:", { format: (line) => line });
95
+ }
96
+ spinner.start("Deployment in progress");
97
+ {
98
+ const startedAt = Date.now() - event.elapsedMs;
99
+ elapsedInterval = setInterval(() => {
100
+ spinner.message(`Deployment in progress — ${formatElapsed(Date.now() - startedAt)}`);
101
+ }, 1000);
102
+ }
103
+ break;
104
+ }
105
+ },
86
106
  });
87
- spinner.stop("Deployment started");
88
- const { deployment, elapsedMs } = await deployAndWait({
89
- initial: initialDeployment,
90
- startedAt: deployStartedAt,
91
- });
92
- const elapsedStr = formatElapsed(elapsedMs);
93
- if (deployment.status !== "deployed") {
94
- throw new Error("Deployment failed");
95
- }
96
- const environment = await api.environments.get.v1({ environmentId: projectConfig.environmentId });
97
- const urls = environment.mcpServerUrl ? [environment.mcpServerUrl] : environment.domains;
98
- const playgroundUrl = environment.mcpServerUrl ? `${environment.mcpServerUrl.replace(/\/$/, "")}/try` : null;
99
- const teamLine = projectConfig.teamName ? chalk.dim(`Team: ${projectConfig.teamName}`) : null;
100
- p.box([
101
- teamLine,
102
- ...urls.map((url) => chalk.bold(`🔗 ${url}`)),
103
- playgroundUrl ? `\n${chalk.dim("Playground:")} ${chalk.cyan(playgroundUrl)}` : null,
104
- "",
105
- `Completed in ${elapsedStr}`,
106
- ]
107
- .filter(Boolean)
108
- .join("\n"), "Deployment summary:", {
109
- contentAlign: "center",
110
- titleAlign: "center",
111
- width: "auto",
112
- rounded: true,
113
- contentPadding: 3,
114
- });
115
- p.log.info(`View build logs: ${chalk.cyan(`alpic deployment logs --deployment-id ${deployment.id}`)}`);
116
107
  }
117
108
  catch (error) {
118
109
  spinner.stop();
@@ -120,10 +111,33 @@ export class Deploy extends AlpicCommand {
120
111
  throw new Error(`Error: ${message}`);
121
112
  }
122
113
  finally {
123
- if (tmpDir) {
124
- rmSync(tmpDir, { recursive: true, force: true });
114
+ if (elapsedInterval) {
115
+ clearInterval(elapsedInterval);
125
116
  }
126
117
  }
118
+ spinner.stop(result.status === "deployed" ? chalk.green("Deployment completed") : chalk.red("Deployment failed"));
119
+ if (result.status !== "deployed") {
120
+ throw new Error("Deployment failed");
121
+ }
122
+ const urls = result.mcpServerUrl ? [result.mcpServerUrl] : result.domains;
123
+ const playgroundUrl = result.mcpServerUrl ? `${result.mcpServerUrl.replace(/\/$/, "")}/try` : null;
124
+ const teamLine = projectConfig.teamName ? chalk.dim(`Team: ${projectConfig.teamName}`) : null;
125
+ p.box([
126
+ teamLine,
127
+ ...urls.map((url) => chalk.bold(`🔗 ${url}`)),
128
+ playgroundUrl ? `\n${chalk.dim("Playground:")} ${chalk.cyan(playgroundUrl)}` : null,
129
+ "",
130
+ `Completed in ${formatElapsed(result.elapsedMs)}`,
131
+ ]
132
+ .filter(Boolean)
133
+ .join("\n"), "Deployment summary:", {
134
+ contentAlign: "center",
135
+ titleAlign: "center",
136
+ width: "auto",
137
+ rounded: true,
138
+ contentPadding: 3,
139
+ });
140
+ p.log.info(`View build logs: ${chalk.cyan(`alpic deployment logs --deployment-id ${result.deploymentId}`)}`);
127
141
  }
128
142
  }
129
143
  //# sourceMappingURL=deploy.js.map
@@ -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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"}
@@ -1,20 +1,22 @@
1
1
  import * as p from "@clack/prompts";
2
+ import chalk from "chalk";
2
3
  import { AlpicCommand } from "../lib/alpic-command.js";
3
- import { oauthLogin } from "../lib/auth/auth.js";
4
- import { getOAuthClient } from "../lib/auth/oauth/client.js";
5
- import { getWhoamiInfoMessage } from "../lib/auth/whoami.js";
4
+ import { alpic } from "../lib/alpic-sdk.js";
5
+ import { getWhoamiInfoMessage } from "../lib/whoami.js";
6
6
  export class Login extends AlpicCommand {
7
7
  static description = "Log in to Alpic (opens browser, stores tokens)";
8
8
  static examples = ["<%= config.bin %> login"];
9
9
  async run() {
10
10
  await this.parse(Login);
11
11
  p.intro("Log in to Alpic");
12
- const token = await getOAuthClient().getValidAccessToken();
12
+ const token = await alpic.auth.getValidAccessToken();
13
13
  if (token) {
14
14
  p.outro("Already logged in.");
15
15
  return;
16
16
  }
17
- await oauthLogin();
17
+ await alpic.auth.login({
18
+ onLoginUrl: (url) => p.log.message(`Opening browser to log in…\n\nIf the browser does not open, copy this URL: ${chalk.cyan(url)}`),
19
+ });
18
20
  p.outro(await getWhoamiInfoMessage());
19
21
  }
20
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,OAAO,KAAM,SAAQ,YAAY;IACrC,MAAM,CAAU,WAAW,GAAG,gDAAgD,CAAC;IAE/E,MAAM,CAAU,QAAQ,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExB,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC,mBAAmB,EAAE,CAAC;QAC3D,IAAI,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,UAAU,EAAE,CAAC;QAEnB,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,OAAO,KAAM,SAAQ,YAAY;IACrC,MAAM,CAAU,WAAW,GAAG,gDAAgD,CAAC;IAE/E,MAAM,CAAU,QAAQ,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExB,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAE3B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACrD,IAAI,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACrB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAClB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8EAA8E,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;SACjH,CAAC,CAAC;QAEH,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
@@ -1,6 +1,6 @@
1
+ import { globalStore } from "@alpic-ai/sdk";
1
2
  import * as p from "@clack/prompts";
2
3
  import { AlpicCommand } from "../lib/alpic-command.js";
3
- import { globalStore } from "../lib/global-store.js";
4
4
  export class Logout extends AlpicCommand {
5
5
  static description = "Log out from Alpic (removes stored OAuth credentials)";
6
6
  static examples = ["<%= config.bin %> logout"];
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,MAAM,CAAU,WAAW,GAAG,uDAAuD,CAAC;IAEtF,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzB,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAE9B,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;QAE7D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAE/B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAEhD,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjC,CAAC"}
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,MAAM,CAAU,WAAW,GAAG,uDAAuD,CAAC;IAEtF,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzB,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAE9B,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;QAE7D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAE/B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAEhD,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjC,CAAC"}
@@ -1,11 +1,8 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import { Flags } from "@oclif/core";
3
3
  import chalk from "chalk";
4
- import { api } from "../api.js";
5
4
  import { AlpicCommand } from "../lib/alpic-command.js";
6
- import { oauthLogin } from "../lib/auth/auth.js";
7
- import { getOAuthClient } from "../lib/auth/oauth/client.js";
8
- import { pipenet } from "../lib/vendor/pipenet.js";
5
+ import { alpic } from "../lib/alpic-sdk.js";
9
6
  export class Tunnel extends AlpicCommand {
10
7
  static description = "Expose a local server to the internet through an Alpic tunnel";
11
8
  static examples = ["<%= config.bin %> tunnel --port 3000"];
@@ -23,20 +20,18 @@ export class Tunnel extends AlpicCommand {
23
20
  async run() {
24
21
  const { flags } = await this.parse(Tunnel);
25
22
  const isPlain = flags.plain;
26
- let token = await getOAuthClient().getValidAccessToken();
27
- if (!token) {
28
- const msg = "You need to be logged in to use the Alpic tunnel";
29
- if (isPlain) {
30
- console.log(msg);
31
- }
32
- else {
33
- p.log.step(msg);
34
- }
35
- await oauthLogin({ isPlain });
36
- token = await getOAuthClient().getValidAccessToken();
37
- }
38
- if (!token) {
39
- throw new Error("Cannot get valid access token");
23
+ // Authenticate before opening (tunnel.open requires a token) so we control the
24
+ // login messaging. Check the OAuth token specifically (not isAuthenticated):
25
+ // tunnels require user OAuth, and an ALPIC_API_KEY alone cannot open one.
26
+ if (!(await alpic.auth.getValidAccessToken())) {
27
+ const loginMsg = "You need to be logged in to use the Alpic tunnel";
28
+ isPlain ? console.log(loginMsg) : p.log.step(loginMsg);
29
+ await alpic.auth.login({
30
+ onLoginUrl: (url) => {
31
+ const msg = `Opening browser to log in: ${url}`;
32
+ isPlain ? console.log(msg) : p.log.step(msg);
33
+ },
34
+ });
40
35
  }
41
36
  let spinner;
42
37
  const intro = "Opening tunnel...";
@@ -47,49 +42,18 @@ export class Tunnel extends AlpicCommand {
47
42
  spinner = this.spinner();
48
43
  spinner.start(intro);
49
44
  }
50
- let tunnel;
51
- let tunnelHost;
52
- let subdomain;
53
- let proto;
45
+ let handle;
54
46
  try {
55
- const ticketInfo = await api.tunnels.getTicket.v1(undefined, {
56
- context: {
57
- request: {
58
- headers: {
59
- Authorization: `Bearer ${token?.access_token}`,
60
- },
61
- },
62
- },
47
+ handle = await alpic.tunnel.open({
48
+ port: flags.port,
63
49
  });
64
- tunnelHost = ticketInfo.tunnelHost;
65
- subdomain = ticketInfo.subdomain;
66
- proto = tunnelHost.startsWith("localhost") ? "http" : "https";
67
- tunnel = await Promise.race([
68
- pipenet({
69
- port: flags.port,
70
- host: `${proto}://${tunnelHost}`,
71
- subdomain: subdomain,
72
- headers: { Authorization: `Bearer ${ticketInfo.ticket}` },
73
- // Idle before TCP keepalive probes start. Paired with offlineTimeoutMs below.
74
- keepAliveDelayMs: 30_000,
75
- // Give-up window once all tunnel sockets are dead — pipenet emits 'close'
76
- // and our `tunnel.on('close', ...)` exits the CLI.
77
- offlineTimeoutMs: 30_000,
78
- }),
79
- new Promise((_, reject) => {
80
- const id = setTimeout(() => reject(new Error("Failed to connect to tunnel server")), 10_000);
81
- id.unref?.(); // don't keep the event loop alive just for this timer
82
- }),
83
- ]);
84
50
  }
85
51
  catch (err) {
86
- // Stop the spinner before the error propagates so the base class's p.cancel()
87
- // can render cleanly instead of colliding with the spinner's render loop.
88
52
  spinner?.stop(intro);
89
53
  throw err;
90
54
  }
91
- const url = `${proto}://${subdomain}.${tunnelHost}`;
92
- const message = `Forwarding: ${proto}://${subdomain}.${tunnelHost} -> http://localhost:${flags.port}`;
55
+ const url = handle.url;
56
+ const message = `Forwarding: ${url} -> http://localhost:${flags.port}`;
93
57
  if (isPlain) {
94
58
  console.log(message);
95
59
  }
@@ -127,24 +91,28 @@ export class Tunnel extends AlpicCommand {
127
91
  process.exit(0);
128
92
  }
129
93
  closing = true;
130
- tunnel.close();
94
+ handle.close();
131
95
  resolve();
132
96
  };
133
97
  process.on("SIGINT", shutdown);
134
98
  process.on("SIGTERM", shutdown);
135
- tunnel.on("request", (req) => {
99
+ handle.on("request", (req) => {
136
100
  const message = `${req.method} ${req.path}`;
137
101
  isPlain ? console.log(message) : pushActivity(message);
138
102
  });
139
- tunnel.on("error", (err) => {
103
+ handle.on("error", (err) => {
140
104
  lastError = err;
141
105
  const message = err.message;
142
106
  isPlain ? console.error(message) : pushActivity(chalk.red(message));
143
107
  });
144
108
  // If the tunnel dies without a user-initiated shutdown, surface the
145
109
  // captured error so it reaches `catch` (and telemetry) instead of
146
- // silently exiting 0.
147
- tunnel.on("close", () => {
110
+ // silently exiting 0. The SDK reports `displaced` when a newer tunnel takes over.
111
+ handle.on("close", (info) => {
112
+ if (info?.displaced) {
113
+ const message = "Tunnel closed: a new tunnel was opened for this account";
114
+ isPlain ? console.log(message) : pushActivity(message);
115
+ }
148
116
  if (!closing && lastError) {
149
117
  reject(lastError);
150
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import { AlpicCommand } from "../lib/alpic-command.js";
3
- import { getWhoamiInfoMessage } from "../lib/auth/whoami.js";
3
+ import { getWhoamiInfoMessage } from "../lib/whoami.js";
4
4
  export class Whoami extends AlpicCommand {
5
5
  static description = "Show the current Alpic identity (API key or logged-in user)";
6
6
  static examples = ["<%= config.bin %> whoami"];
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAC;IAE5F,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzB,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE1C,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAC;IAE5F,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzB,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE1C,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
@@ -2,7 +2,7 @@ import * as p from "@clack/prompts";
2
2
  import { Command, Errors, Flags } from "@oclif/core";
3
3
  import { ORPCError } from "@orpc/client";
4
4
  import { createSpinner } from "./agent-mode.js";
5
- import { isAuthenticated, oauthLogin } from "./auth/auth.js";
5
+ import { alpic } from "./alpic-sdk.js";
6
6
  import { config } from "./config.js";
7
7
  export class AlpicCommand extends Command {
8
8
  static baseFlags = {
@@ -25,12 +25,14 @@ export class AlpicCommand extends Command {
25
25
  this.exitWithErrorMessage(String(error), error);
26
26
  }
27
27
  async ensureAuthenticated(flags) {
28
- if (!(await isAuthenticated())) {
28
+ if (!(await alpic.auth.isAuthenticated())) {
29
29
  if (flags["non-interactive"]) {
30
30
  this.exitWithErrorMessage("Not authenticated. Set ALPIC_API_KEY or run `alpic login` interactively.");
31
31
  }
32
32
  p.log.warn("Not authenticated. Starting login…");
33
- await oauthLogin();
33
+ await alpic.auth.login({
34
+ onLoginUrl: (url) => p.log.message(`Opening browser to log in…\n\nIf the browser does not open, copy this URL: ${url}`),
35
+ });
34
36
  }
35
37
  }
36
38
  spinner() {
@@ -1 +1 @@
1
- {"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAgB,YAAa,SAAQ,OAAO;IAChD,MAAM,CAAU,SAAS,GAAG;QAC1B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;SAC/B,CAAC;KACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAc;QACjC,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAG,gDAAgD,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,OAAO,IAAI,qFAAqF,CAAC;YACnG,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAsC;QAC9D,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,oBAAoB,CAAC,0EAA0E,CAAC,CAAC;YACxG,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAES,OAAO;QACf,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAES,oBAAoB,CAAC,OAAe,EAAE,KAAe;QAC7D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,SAAS,CAAC;IAClB,CAAC"}
1
+ {"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAgB,YAAa,SAAQ,OAAO;IAChD,MAAM,CAAU,SAAS,GAAG;QAC1B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;SAC/B,CAAC;KACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAc;QACjC,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAG,gDAAgD,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,OAAO,IAAI,qFAAqF,CAAC;YACnG,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAsC;QAC9D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,oBAAoB,CAAC,0EAA0E,CAAC,CAAC;YACxG,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBACrB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAClB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8EAA8E,GAAG,EAAE,CAAC;aACrG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAES,OAAO;QACf,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAES,oBAAoB,CAAC,OAAe,EAAE,KAAe;QAC7D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,SAAS,CAAC;IAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Alpic } from "@alpic-ai/sdk";
2
+ export declare const alpic: Alpic;
@@ -0,0 +1,9 @@
1
+ import { Alpic } from "@alpic-ai/sdk";
2
+ import { aliasMachineToUser } from "./telemetry.js";
3
+ export const alpic = new Alpic();
4
+ // The SDK is telemetry-free; the CLI owns transport. Alias the machine to the
5
+ // user on every authentication (explicit login + auto-login from any command).
6
+ alpic.auth.on("authenticated", ({ sub }) => {
7
+ void aliasMachineToUser(sub);
8
+ });
9
+ //# sourceMappingURL=alpic-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alpic-sdk.js","sourceRoot":"","sources":["../../src/lib/alpic-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAEjC,8EAA8E;AAC9E,+EAA+E;AAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACzC,KAAK,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC"}
@@ -67,25 +67,4 @@ export declare function printDeploymentLog(log: DeploymentLogEntry, { noColor }?
67
67
  export declare function followDeploymentLogs(deploymentId: string, initialLogs: DeploymentLogEntry[], { noColor }?: {
68
68
  noColor?: boolean;
69
69
  }): Promise<void>;
70
- export declare function deployAndWait({ initial, startedAt, }: {
71
- initial: RouterOutput["deployments"]["get"]["v1"];
72
- startedAt: number;
73
- }): Promise<{
74
- deployment: {
75
- id: string;
76
- status: "failed" | "ongoing" | "deployed" | "canceled";
77
- sourceRef: string | null;
78
- sourceCommitId: string | null;
79
- sourceCommitMessage: string | null;
80
- authorUsername: string | null;
81
- authorAvatarUrl: string | null;
82
- startedAt: Date | null;
83
- completedAt: Date | null;
84
- environmentId: string;
85
- environmentName: string;
86
- isCurrent: boolean;
87
- deploymentPageUrl: string | null;
88
- };
89
- elapsedMs: number;
90
- }>;
91
70
  export {};
@@ -1,8 +1,8 @@
1
1
  import { stripVTControlCharacters } from "node:util";
2
- import * as p from "@clack/prompts";
3
2
  import chalk from "chalk";
4
3
  import { api } from "../api.js";
5
4
  import { createSpinner } from "./agent-mode.js";
5
+ import { alpic } from "./alpic-sdk.js";
6
6
  import { formatLogTimestamp } from "./logs.js";
7
7
  import { resolveEnvironmentId } from "./resolve.js";
8
8
  import { pollIntervalMs } from "./utils.js";
@@ -21,7 +21,6 @@ export const colorizeDeploymentStatus = (text) => {
21
21
  }
22
22
  };
23
23
  const FINAL_STATUSES = new Set(["deployed", "failed", "canceled"]);
24
- const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000;
25
24
  export const FORMAT_ELAPSED_PATTERN = /\b\d+m \d+s\b|\b\d+s\b/g;
26
25
  export function formatElapsed(ms) {
27
26
  const totalSeconds = Math.floor(ms / 1000);
@@ -45,18 +44,15 @@ export async function fetchDeployment(deploymentId) {
45
44
  export async function fetchLatestDeploymentForEnvironment(environmentId) {
46
45
  const spinner = createSpinner();
47
46
  spinner.start("Fetching latest deployment...");
48
- const environment = await api.environments.get.v1({ environmentId });
49
- const deployments = await api.deployments.list.v1({
50
- projectId: environment.projectId,
51
- environmentId,
52
- });
53
- const latest = deployments[0];
54
- if (!latest) {
47
+ try {
48
+ const latest = await alpic.deployments.getLatestForEnvironment(environmentId);
49
+ spinner.stop(`Using latest deployment ${chalk.dim(latest.id)} for environment ${chalk.dim(environmentId)}`);
50
+ return latest;
51
+ }
52
+ catch (error) {
55
53
  spinner.stop("No deployments found");
56
- throw new Error(`No deployments found for environment ${environmentId}.`);
54
+ throw error;
57
55
  }
58
- spinner.stop(`Using latest deployment ${chalk.dim(latest.id)} for environment ${chalk.dim(environmentId)}`);
59
- return latest;
60
56
  }
61
57
  export async function resolveDeploymentId(flags) {
62
58
  if (flags["deployment-id"]) {
@@ -71,23 +67,13 @@ export async function waitForDeployment(deployment) {
71
67
  return deployment;
72
68
  }
73
69
  const startedAt = deployment.startedAt?.getTime() ?? Date.now();
74
- const waitStartedAt = Date.now();
75
- let current = deployment;
76
70
  const spinner = createSpinner();
77
71
  spinner.start("Waiting for deployment to complete");
78
72
  const elapsedInterval = setInterval(() => {
79
73
  spinner.message(`Waiting for deployment to complete — ${formatElapsed(Date.now() - startedAt)}`);
80
74
  }, 1000);
81
75
  try {
82
- while (!FINAL_STATUSES.has(current.status)) {
83
- if (Date.now() - waitStartedAt >= FIFTEEN_MINUTES_IN_MS) {
84
- throw new Error("Deployment did not reach a final state within 15 minutes.");
85
- }
86
- current = await api.deployments.get.v1({ deploymentId: current.id });
87
- if (!FINAL_STATUSES.has(current.status)) {
88
- await new Promise((resolve) => setTimeout(resolve, pollIntervalMs(3_000)));
89
- }
90
- }
76
+ const current = await alpic.deployments.watch(deployment.id);
91
77
  spinner.stop(`Deployment is ${colorizeDeploymentStatus(current.status)(current.status)}`);
92
78
  return current;
93
79
  }
@@ -116,39 +102,4 @@ export async function followDeploymentLogs(deploymentId, initialLogs, { noColor
116
102
  }
117
103
  }
118
104
  }
119
- export async function deployAndWait({ initial, startedAt, }) {
120
- const spinner = createSpinner();
121
- let deployment = initial;
122
- const deploymentPageUrl = deployment.deploymentPageUrl;
123
- if (deploymentPageUrl) {
124
- p.note(`🔗 ${deploymentPageUrl}`, "View deployment details:", {
125
- format: (line) => line,
126
- });
127
- }
128
- spinner.start("Deployment in progress");
129
- const elapsedInterval = setInterval(() => {
130
- const elapsed = formatElapsed(Date.now() - startedAt);
131
- spinner.message(`Deployment in progress — ${elapsed}`);
132
- }, 1000);
133
- try {
134
- while (deployment.status === "ongoing") {
135
- const elapsedMs = Date.now() - startedAt;
136
- if (elapsedMs >= FIFTEEN_MINUTES_IN_MS) {
137
- throw new Error(`Deployment aborted after 15 minutes. View status: ${deploymentPageUrl}`);
138
- }
139
- deployment = await api.deployments.get.v1({
140
- deploymentId: deployment.id,
141
- });
142
- if (deployment.status === "ongoing") {
143
- await new Promise((resolve) => setTimeout(resolve, pollIntervalMs(10_000)));
144
- }
145
- }
146
- return { deployment, elapsedMs: Date.now() - startedAt };
147
- }
148
- finally {
149
- const message = deployment.status === "deployed" ? chalk.green("Deployment completed") : chalk.red("Deployment failed");
150
- spinner.stop(message);
151
- clearInterval(elapsedInterval);
152
- }
153
- }
154
105
  //# sourceMappingURL=deployment.js.map