alpic 0.0.0-dev.f55bd3e → 0.0.0-dev.f590e2c

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 (97) 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 +101 -0
  6. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  7. package/dist/__tests__/deploy.e2e.test.js +37 -54
  8. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  9. package/dist/__tests__/fixtures/demo-project/index.js +1 -1
  10. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -1
  11. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  12. package/dist/__tests__/git-flags.e2e.test.js +124 -0
  13. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  14. package/dist/__tests__/git.e2e.test.js +61 -22
  15. package/dist/__tests__/git.e2e.test.js.map +1 -1
  16. package/dist/__tests__/mock-server.js +72 -3
  17. package/dist/__tests__/mock-server.js.map +1 -1
  18. package/dist/__tests__/utils.d.ts +16 -4
  19. package/dist/__tests__/utils.js +74 -5
  20. package/dist/__tests__/utils.js.map +1 -1
  21. package/dist/api.d.ts +0 -1
  22. package/dist/api.js +5 -9
  23. package/dist/api.js.map +1 -1
  24. package/dist/commands/deploy.d.ts +5 -2
  25. package/dist/commands/deploy.js +36 -20
  26. package/dist/commands/deploy.js.map +1 -1
  27. package/dist/commands/git/connect.d.ts +3 -2
  28. package/dist/commands/git/connect.js +24 -28
  29. package/dist/commands/git/connect.js.map +1 -1
  30. package/dist/commands/git/disconnect.d.ts +2 -2
  31. package/dist/commands/git/disconnect.js +14 -24
  32. package/dist/commands/git/disconnect.js.map +1 -1
  33. package/dist/commands/git.js +1 -1
  34. package/dist/commands/git.js.map +1 -1
  35. package/dist/commands/login.d.ts +6 -0
  36. package/dist/commands/login.js +32 -0
  37. package/dist/commands/login.js.map +1 -0
  38. package/dist/commands/logout.d.ts +6 -0
  39. package/dist/commands/logout.js +20 -0
  40. package/dist/commands/logout.js.map +1 -0
  41. package/dist/commands/whoami.d.ts +6 -0
  42. package/dist/commands/whoami.js +13 -0
  43. package/dist/commands/whoami.js.map +1 -0
  44. package/dist/env.d.ts +4 -0
  45. package/dist/env.js +10 -0
  46. package/dist/env.js.map +1 -0
  47. package/dist/lib/alpic-command.d.ts +2 -0
  48. package/dist/lib/alpic-command.js +12 -5
  49. package/dist/lib/alpic-command.js.map +1 -1
  50. package/dist/lib/archive.d.ts +3 -3
  51. package/dist/lib/archive.js +11 -15
  52. package/dist/lib/archive.js.map +1 -1
  53. package/dist/lib/auth/auth.d.ts +2 -0
  54. package/dist/lib/auth/auth.js +21 -0
  55. package/dist/lib/auth/auth.js.map +1 -0
  56. package/dist/lib/auth/oauth/client.d.ts +28 -0
  57. package/dist/lib/auth/oauth/client.js +110 -0
  58. package/dist/lib/auth/oauth/client.js.map +1 -0
  59. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  60. package/dist/lib/auth/oauth/constants.js +3 -0
  61. package/dist/lib/auth/oauth/constants.js.map +1 -0
  62. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  63. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  64. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  65. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  66. package/dist/lib/auth/oauth/server/index.js +102 -0
  67. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  68. package/dist/lib/auth/whoami.d.ts +1 -0
  69. package/dist/lib/auth/whoami.js +41 -0
  70. package/dist/lib/auth/whoami.js.map +1 -0
  71. package/dist/lib/base-workflow.d.ts +10 -0
  72. package/dist/lib/base-workflow.js +22 -0
  73. package/dist/lib/base-workflow.js.map +1 -0
  74. package/dist/lib/config.d.ts +2 -2
  75. package/dist/lib/config.js +7 -7
  76. package/dist/lib/config.js.map +1 -1
  77. package/dist/lib/deployment.d.ts +2 -3
  78. package/dist/lib/deployment.js +12 -8
  79. package/dist/lib/deployment.js.map +1 -1
  80. package/dist/lib/git.d.ts +11 -3
  81. package/dist/lib/git.js +49 -22
  82. package/dist/lib/git.js.map +1 -1
  83. package/dist/lib/global-store.d.ts +28 -0
  84. package/dist/lib/global-store.js +76 -0
  85. package/dist/lib/global-store.js.map +1 -0
  86. package/dist/lib/project.d.ts +65 -61
  87. package/dist/lib/project.js +266 -254
  88. package/dist/lib/project.js.map +1 -1
  89. package/dist/lib/telemetry.js +6 -6
  90. package/dist/lib/telemetry.js.map +1 -1
  91. package/package.json +23 -15
  92. package/dist/lib/auth.d.ts +0 -1
  93. package/dist/lib/auth.js +0 -10
  94. package/dist/lib/auth.js.map +0 -1
  95. package/dist/lib/global-config.d.ts +0 -9
  96. package/dist/lib/global-config.js +0 -48
  97. package/dist/lib/global-config.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/auth/oauth/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getWhoamiInfoMessage(): Promise<string>;
@@ -0,0 +1,41 @@
1
+ import chalk from "chalk";
2
+ import { api } from "../../api.js";
3
+ import { oAuthClient } from "./oauth/client.js";
4
+ export async function getWhoamiInfoMessage() {
5
+ const info = (await getWhoamiInfoFromApiKey()) ?? (await getWhoamiInfoFromOAuth());
6
+ if (info === null) {
7
+ return "Not logged in. Run `alpic login` or set ALPIC_API_KEY.";
8
+ }
9
+ if (info.method === "api_key") {
10
+ return `Authenticated via API key — Team: ${chalk.green(info.team?.name ?? "unknown")}`;
11
+ }
12
+ return `Authenticated as ${chalk.green(info.name)} (${chalk.cyan(info.email)})`;
13
+ }
14
+ async function getWhoamiInfoFromApiKey() {
15
+ if (process.env.ALPIC_API_KEY === undefined) {
16
+ return null;
17
+ }
18
+ const team = await getApiKeyTeam();
19
+ return {
20
+ method: "api_key",
21
+ team,
22
+ };
23
+ }
24
+ async function getWhoamiInfoFromOAuth() {
25
+ const token = await oAuthClient.getValidAccessToken();
26
+ if (!token)
27
+ return null;
28
+ const userInfo = await oAuthClient.fetchUserInfo(token);
29
+ if (!userInfo)
30
+ return null;
31
+ return {
32
+ method: "oauth",
33
+ email: userInfo.email ?? "unknown",
34
+ name: userInfo.name ?? "unknown",
35
+ };
36
+ }
37
+ async function getApiKeyTeam() {
38
+ const teams = await api.teams.list.v1();
39
+ return teams[0];
40
+ }
41
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/lib/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAahD,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,IAAI,GAAG,CAAC,MAAM,uBAAuB,EAAE,CAAC,IAAI,CAAC,MAAM,sBAAsB,EAAE,CAAC,CAAC;IAEnF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,wDAAwD,CAAC;IAClE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,qCAAqC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO,oBAAoB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,SAAS;QAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,SAAS;KACjC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as p from "@clack/prompts";
2
+ export type Flags = {
3
+ yes?: boolean;
4
+ };
5
+ export declare abstract class BaseWorkflow<F extends Flags = Flags> {
6
+ readonly flags: F;
7
+ constructor(flags: F);
8
+ protected confirm(options: p.ConfirmOptions, defaultValue?: boolean): Promise<boolean | symbol>;
9
+ protected isNonInteractive(): boolean;
10
+ }
@@ -0,0 +1,22 @@
1
+ import * as p from "@clack/prompts";
2
+ import * as ci from "ci-info";
3
+ export class BaseWorkflow {
4
+ flags;
5
+ constructor(flags) {
6
+ this.flags = flags;
7
+ }
8
+ confirm(options, defaultValue = true) {
9
+ if (this.isNonInteractive()) {
10
+ return Promise.resolve(defaultValue);
11
+ }
12
+ return p.confirm(options);
13
+ }
14
+ isNonInteractive() {
15
+ if (this.flags.yes)
16
+ return true;
17
+ if (process.env.VITEST)
18
+ return false;
19
+ return ci.isCI ?? false;
20
+ }
21
+ }
22
+ //# sourceMappingURL=base-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-workflow.js","sourceRoot":"","sources":["../../src/lib/base-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAM9B,MAAM,OAAgB,YAAY;IACJ;IAA5B,YAA4B,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAE9B,OAAO,CAAC,OAAyB,EAAE,eAAwB,IAAI;QACvE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAES,gBAAgB;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;IAC1B,CAAC;CACF"}
@@ -1,11 +1,11 @@
1
1
  import type { ProjectConfig } from "../types.js";
2
2
  export declare const config: {
3
- load: (deployDir: string) => {
3
+ load: () => {
4
4
  projectId: string;
5
5
  teamId: string;
6
6
  projectName: string;
7
7
  environmentId: string | undefined;
8
8
  environmentName: string | undefined;
9
9
  } | null;
10
- save: (config: ProjectConfig, deployDir: string) => void;
10
+ save: (projectConfig: ProjectConfig) => void;
11
11
  };
@@ -1,9 +1,9 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- const getProjectJsonPath = (deployDir) => join(deployDir, ".alpic", "project.json");
3
+ const getProjectJsonPath = () => join(process.cwd(), ".alpic", "project.json");
4
4
  export const config = {
5
- load: (deployDir) => {
6
- const path = getProjectJsonPath(deployDir);
5
+ load: () => {
6
+ const path = getProjectJsonPath();
7
7
  if (!existsSync(path)) {
8
8
  return null;
9
9
  }
@@ -22,10 +22,10 @@ export const config = {
22
22
  environmentName: raw.environmentName,
23
23
  };
24
24
  },
25
- save: (config, deployDir) => {
26
- const path = getProjectJsonPath(deployDir);
27
- mkdirSync(join(deployDir, ".alpic"), { recursive: true });
28
- writeFileSync(path, JSON.stringify(config, null, 2));
25
+ save: (projectConfig) => {
26
+ const path = getProjectJsonPath();
27
+ mkdirSync(join(process.cwd(), ".alpic"), { recursive: true });
28
+ writeFileSync(path, JSON.stringify(projectConfig, null, 2));
29
29
  },
30
30
  };
31
31
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,SAAiB,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAmE,CAAC;QACxE,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAG1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,MAAqB,EAAE,SAAiB,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,GAAG,EAAE;QACT,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAmE,CAAC;QACxE,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAG1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,aAA4B,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF,CAAC"}
@@ -1,10 +1,8 @@
1
1
  import type { RouterOutput } from "@alpic-ai/api";
2
2
  export declare function formatElapsed(ms: number): string;
3
- export declare function deployAndWait({ initial, startedAt, teamId, projectId, }: {
3
+ export declare function deployAndWait({ initial, startedAt, }: {
4
4
  initial: RouterOutput["deployments"]["get"]["v1"];
5
5
  startedAt: number;
6
- teamId: string;
7
- projectId: string;
8
6
  }): Promise<{
9
7
  deployment: {
10
8
  id: string;
@@ -16,6 +14,7 @@ export declare function deployAndWait({ initial, startedAt, teamId, projectId, }
16
14
  authorAvatarUrl: string | null;
17
15
  startedAt: Date | null;
18
16
  completedAt: Date | null;
17
+ deploymentPageUrl: string | null;
19
18
  };
20
19
  elapsedMs: number;
21
20
  }>;
@@ -1,31 +1,35 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import chalk from "chalk";
3
- import { api, getFrontendBaseUrl } from "../api.js";
3
+ import { api } from "../api.js";
4
4
  export function formatElapsed(ms) {
5
5
  const totalSeconds = Math.floor(ms / 1000);
6
6
  const minutes = Math.floor(totalSeconds / 60);
7
7
  const seconds = totalSeconds % 60;
8
8
  return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
9
9
  }
10
- export async function deployAndWait({ initial, startedAt, teamId, projectId, }) {
10
+ export async function deployAndWait({ initial, startedAt, }) {
11
11
  const spinner = p.spinner();
12
+ let deployment = initial;
13
+ const deploymentPageUrl = deployment.deploymentPageUrl;
14
+ if (deploymentPageUrl) {
15
+ p.note(`🔗 ${deploymentPageUrl}`, "View deployment details:", { format: (line) => line });
16
+ }
12
17
  spinner.start("Deployment in progress");
13
- const deploymentPageUrl = `${getFrontendBaseUrl()}/team/${teamId}/project/${projectId}/deployments/${initial.id}`;
14
- p.note(deploymentPageUrl, "View deployment details:", { format: (line) => line });
18
+ const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000; // 15 minutes
15
19
  const elapsedInterval = setInterval(() => {
16
20
  const elapsed = formatElapsed(Date.now() - startedAt);
17
21
  spinner.message(`Deployment in progress — ${elapsed}`);
18
22
  }, 1000);
19
- const timeoutMs = 15 * 60 * 1000; // 15 minutes
20
- let deployment = await api.deployments.get.v1({ deploymentId: initial.id });
21
23
  try {
22
24
  while (deployment.status === "ongoing") {
23
25
  const elapsedMs = Date.now() - startedAt;
24
- if (elapsedMs >= timeoutMs) {
26
+ if (elapsedMs >= FIFTEEN_MINUTES_IN_MS) {
25
27
  throw new Error(`Deployment aborted after 15 minutes. View status: ${deploymentPageUrl}`);
26
28
  }
27
29
  deployment = await api.deployments.get.v1({ deploymentId: deployment.id });
28
- await new Promise((resolve) => setTimeout(resolve, 10_000));
30
+ if (deployment.status === "ongoing") {
31
+ await new Promise((resolve) => setTimeout(resolve, 10_000));
32
+ }
29
33
  }
30
34
  return { deployment, elapsedMs: Date.now() - startedAt };
31
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,OAAO,EACP,SAAS,EACT,MAAM,EACN,SAAS,GAMV;IACC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAE5B,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAExC,MAAM,iBAAiB,GAAG,GAAG,kBAAkB,EAAE,SAAS,MAAM,YAAY,SAAS,gBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC;IAClH,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAElF,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAC/C,IAAI,UAAU,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACzC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,qDAAqD,iBAAiB,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,UAAU,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3E,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,GACX,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC1G,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,aAAa,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,OAAO,EACP,SAAS,GAIV;IACC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAE5B,IAAI,UAAU,GAAG,OAAO,CAAC;IACzB,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;IACvD,IAAI,iBAAiB,EAAE,CAAC;QACtB,CAAC,CAAC,IAAI,CAAC,MAAM,iBAAiB,EAAE,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAC3D,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC,EAAE,IAAI,CAAC,CAAC;IACT,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACzC,IAAI,SAAS,IAAI,qBAAqB,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,qDAAqD,iBAAiB,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,UAAU,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3E,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,GACX,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC1G,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,aAAa,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
package/dist/lib/git.d.ts CHANGED
@@ -1,14 +1,22 @@
1
+ import { BaseWorkflow } from "./base-workflow.js";
1
2
  export type GitRemote = {
2
3
  name: string;
3
4
  url: string;
4
5
  sourceRepository: string;
5
6
  };
6
- export declare function isGitRepository(cwd: string): boolean;
7
- export declare function listGithubRemotes(cwd: string): GitRemote[];
7
+ export declare function isGitRepository(): boolean;
8
+ export declare function listGithubRemotes(): GitRemote[];
8
9
  export type ProjectWithSourceRepository = {
9
10
  name: string;
10
11
  sourceRepository: string | null;
11
12
  };
12
13
  export declare function confirmLinkAnotherIfAlreadyConnected(project: ProjectWithSourceRepository): Promise<boolean>;
13
- export declare function selectRemoteSourceRepository(remotes: GitRemote[]): Promise<string | null>;
14
+ export type GitFlags = {
15
+ yes?: boolean;
16
+ remoteName?: string;
17
+ };
18
+ export declare class GitWorkflow extends BaseWorkflow<GitFlags> {
19
+ confirmDisconnect(sourceRepository: string, projectName: string): Promise<boolean>;
20
+ selectRemoteSourceRepository(remotes: GitRemote[]): Promise<string | null>;
21
+ }
14
22
  export declare function showGitSetupInstructions(): void;
package/dist/lib/git.js CHANGED
@@ -1,25 +1,25 @@
1
1
  import * as p from "@clack/prompts";
2
2
  import chalk from "chalk";
3
3
  import { execFileSync } from "node:child_process";
4
- function runGit(args, cwd) {
4
+ import { BaseWorkflow } from "./base-workflow.js";
5
+ function runGit(args) {
5
6
  return execFileSync("git", args, {
6
- cwd,
7
7
  encoding: "utf8",
8
8
  stdio: ["ignore", "pipe", "pipe"],
9
9
  }).trim();
10
10
  }
11
- export function isGitRepository(cwd) {
11
+ export function isGitRepository() {
12
12
  try {
13
- return runGit(["rev-parse", "--is-inside-work-tree"], cwd) === "true";
13
+ return runGit(["rev-parse", "--is-inside-work-tree"]) === "true";
14
14
  }
15
15
  catch {
16
16
  return false;
17
17
  }
18
18
  }
19
- export function listGithubRemotes(cwd) {
19
+ export function listGithubRemotes() {
20
20
  let output;
21
21
  try {
22
- output = runGit(["remote", "-v"], cwd);
22
+ output = runGit(["remote", "-v"]);
23
23
  }
24
24
  catch {
25
25
  return [];
@@ -63,24 +63,51 @@ export async function confirmLinkAnotherIfAlreadyConnected(project) {
63
63
  }
64
64
  return true;
65
65
  }
66
- export async function selectRemoteSourceRepository(remotes) {
67
- if (remotes.length === 1) {
68
- p.log.info(`Using remote source repository "${remotes[0].sourceRepository}" (${remotes[0].name}).`);
69
- return remotes[0].sourceRepository;
66
+ export class GitWorkflow extends BaseWorkflow {
67
+ async confirmDisconnect(sourceRepository, projectName) {
68
+ const confirmed = await this.confirm({
69
+ message: `Are you sure you want to disconnect ${chalk.bold(sourceRepository)} from project ${chalk.bold(projectName)}?`,
70
+ initialValue: false,
71
+ });
72
+ if (p.isCancel(confirmed))
73
+ return false;
74
+ return confirmed === true;
70
75
  }
71
- const selected = await p.select({
72
- message: chalk.bold("Choose the remote source to connect"),
73
- options: remotes.map((remote) => ({
74
- value: remote.sourceRepository,
75
- label: `${remote.sourceRepository} (${remote.name})`,
76
- hint: remote.url,
77
- })),
78
- });
79
- if (p.isCancel(selected)) {
80
- p.cancel("Git connect cancelled");
81
- return null;
76
+ async selectRemoteSourceRepository(remotes) {
77
+ if (remotes.length === 0) {
78
+ return null;
79
+ }
80
+ if (this.flags.remoteName) {
81
+ const remote = remotes.find((remote) => remote.name === this.flags.remoteName);
82
+ if (!remote) {
83
+ const available = remotes.map((remote) => remote.name).join(", ");
84
+ throw new Error(`Remote "${this.flags.remoteName}" not found. Available remotes: ${available}`);
85
+ }
86
+ return remote.sourceRepository;
87
+ }
88
+ if (this.isNonInteractive()) {
89
+ if (remotes.length !== 1) {
90
+ throw new Error("Multiple remotes found. Use --remote-name to select a specific remote.");
91
+ }
92
+ const singleRemote = remotes.at(0);
93
+ if (!singleRemote) {
94
+ throw new Error("No remote found.");
95
+ }
96
+ return singleRemote.sourceRepository;
97
+ }
98
+ const selected = await p.select({
99
+ message: chalk.bold("Choose the remote source to connect"),
100
+ options: remotes.map((remote) => ({
101
+ value: remote.sourceRepository,
102
+ label: `${remote.sourceRepository} (${remote.name})`,
103
+ hint: remote.url,
104
+ })),
105
+ });
106
+ if (p.isCancel(selected)) {
107
+ return null;
108
+ }
109
+ return selected;
82
110
  }
83
- return selected;
84
111
  }
85
112
  export function showGitSetupInstructions() {
86
113
  p.note([
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface Credentials {
2
+ access_token: string;
3
+ refresh_token: string;
4
+ expires_at: number;
5
+ sub: string;
6
+ }
7
+ export interface Config {
8
+ machineId: string;
9
+ telemetry: {
10
+ enabled: boolean;
11
+ };
12
+ }
13
+ export declare class GlobalStore {
14
+ private readonly configDir;
15
+ constructor();
16
+ getCredentials(): Credentials | null;
17
+ saveCredentials(credentials: Credentials): void;
18
+ clearCredentials(): void;
19
+ getConfig(): Config;
20
+ saveConfig(config: Config): void;
21
+ clearConfig(): void;
22
+ private getCredentialsFilePath;
23
+ private getConfigFilePath;
24
+ private parseJsonFile;
25
+ private saveJsonFile;
26
+ private clear;
27
+ }
28
+ export declare const globalStore: GlobalStore;
@@ -0,0 +1,76 @@
1
+ import envPaths from "env-paths";
2
+ import crypto from "node:crypto";
3
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ export class GlobalStore {
6
+ configDir;
7
+ constructor() {
8
+ const configDirOverride = process.env["ALPIC_GLOBAL_CONFIG_DIR"];
9
+ this.configDir = configDirOverride ?? envPaths("alpic", { suffix: "" }).config;
10
+ }
11
+ getCredentials() {
12
+ const token = this.parseJsonFile(this.getCredentialsFilePath());
13
+ if (!token) {
14
+ return null;
15
+ }
16
+ return token;
17
+ }
18
+ saveCredentials(credentials) {
19
+ this.saveJsonFile(this.getCredentialsFilePath(), credentials);
20
+ }
21
+ clearCredentials() {
22
+ this.clear(this.getCredentialsFilePath());
23
+ }
24
+ getConfig() {
25
+ const existing = this.parseJsonFile(this.getConfigFilePath());
26
+ if (existing?.machineId && existing?.telemetry !== undefined) {
27
+ return existing;
28
+ }
29
+ const config = {
30
+ machineId: existing?.machineId ?? crypto.randomUUID(),
31
+ telemetry: {
32
+ enabled: existing?.telemetry?.enabled ?? true,
33
+ },
34
+ };
35
+ this.saveConfig(config);
36
+ return config;
37
+ }
38
+ saveConfig(config) {
39
+ this.saveJsonFile(this.getConfigFilePath(), config);
40
+ }
41
+ clearConfig() {
42
+ this.clear(this.getConfigFilePath());
43
+ }
44
+ getCredentialsFilePath() {
45
+ return join(this.configDir, "credentials.json");
46
+ }
47
+ getConfigFilePath() {
48
+ return join(this.configDir, "config.json");
49
+ }
50
+ parseJsonFile(filePath) {
51
+ if (!existsSync(filePath)) {
52
+ return null;
53
+ }
54
+ try {
55
+ return JSON.parse(readFileSync(filePath, "utf-8"));
56
+ }
57
+ catch {
58
+ this.clear(filePath);
59
+ return null;
60
+ }
61
+ }
62
+ saveJsonFile(filePath, data) {
63
+ mkdirSync(this.configDir, { recursive: true });
64
+ writeFileSync(filePath, JSON.stringify(data, null, 2), {
65
+ encoding: "utf-8",
66
+ mode: 0o600,
67
+ });
68
+ }
69
+ clear(filePath) {
70
+ if (existsSync(filePath)) {
71
+ unlinkSync(filePath);
72
+ }
73
+ }
74
+ }
75
+ export const globalStore = new GlobalStore();
76
+ //# sourceMappingURL=global-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-store.js","sourceRoot":"","sources":["../../src/lib/global-store.ts"],"names":[],"mappings":"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"}
@@ -1,67 +1,71 @@
1
- import type { RouterOutput } from "@alpic-ai/api";
1
+ import type { RouterOutput, Runtime } from "@alpic-ai/api";
2
2
  import type { ProjectConfig } from "../types.js";
3
- export declare function resolveDeployDir(raw: string | undefined): string;
4
- export declare function confirmDeployWithExistingConfig(existingConfig: ProjectConfig): Promise<boolean | null>;
5
- export declare function selectEnvironmentFromList(environments: RouterOutput["projects"]["get"]["v1"]["environments"]): Promise<{
6
- id: string;
7
- name: string;
8
- sourceBranch: string | null;
9
- mcpServerUrl: string;
10
- createdAt: Date;
11
- projectId: string;
12
- latestDeployment: {
13
- id: string;
14
- status: "ongoing" | "deployed" | "failed" | "canceled";
15
- sourceCommitId: string | null;
16
- sourceCommitMessage: string | null;
17
- completedAt: Date | null;
18
- } | null;
19
- } | null>;
20
- export declare function confirmDeployDirectory(deployDir: string): Promise<boolean>;
21
- export declare function confirmLinkExisting(): Promise<boolean>;
22
- export declare function confirmLinkToAnotherProject(): Promise<boolean>;
23
- export declare function selectProjectFromList(projects: RouterOutput["projects"]["list"]["v1"]): Promise<{
24
- id: string;
25
- name: string;
26
- teamId: string;
27
- sourceRepository: string | null;
28
- runtime: "python3.13" | "python3.14" | "node22" | "node24";
29
- transport: "stdio" | "sse" | "streamablehttp" | null;
30
- rootDirectory: string | null;
31
- buildCommand: string | null;
32
- buildOutputDir: string | null;
33
- installCommand: string | null;
34
- startCommand: string | null;
35
- createdAt: Date;
36
- productionEnvironment: {
37
- id: string;
38
- name: string;
39
- mcpServerUrl: string;
40
- latestDeployment: {
41
- id: string;
42
- status: "ongoing" | "deployed" | "failed" | "canceled";
43
- sourceCommitId: string | null;
44
- sourceCommitMessage: string | null;
45
- completedAt: Date | null;
46
- } | null;
47
- } | null;
48
- environments: {
3
+ import { BaseWorkflow } from "./base-workflow.js";
4
+ export type ProjectFlags = {
5
+ yes?: boolean;
6
+ projectName?: string;
7
+ runtime?: Runtime;
8
+ rootDir?: string;
9
+ };
10
+ export declare class ProjectWorkflow extends BaseWorkflow<ProjectFlags> {
11
+ selectEnvironmentFromList(environments: RouterOutput["projects"]["get"]["v1"]["environments"]): Promise<(typeof environments)[number] | null>;
12
+ selectProjectFromList(projects: RouterOutput["projects"]["list"]["v1"]): Promise<{
49
13
  id: string;
50
14
  name: string;
51
- sourceBranch: string | null;
52
- mcpServerUrl: string;
15
+ teamId: string;
16
+ sourceRepository: string | null;
17
+ runtime: "python3.13" | "python3.14" | "node22" | "node24";
18
+ transport: "stdio" | "sse" | "streamablehttp" | null;
19
+ rootDirectory: string | null;
20
+ buildCommand: string | null;
21
+ buildOutputDir: string | null;
22
+ installCommand: string | null;
23
+ startCommand: string | null;
53
24
  createdAt: Date;
54
- projectId: string;
55
- latestDeployment: {
25
+ productionEnvironment: {
56
26
  id: string;
57
- status: "ongoing" | "deployed" | "failed" | "canceled";
58
- sourceCommitId: string | null;
59
- sourceCommitMessage: string | null;
60
- completedAt: Date | null;
27
+ name: string;
28
+ mcpServerUrl: string;
29
+ domains: {
30
+ domain: string;
31
+ status: "ongoing" | "deployed" | "failed";
32
+ createdAt: Date;
33
+ }[];
34
+ latestDeployment: {
35
+ id: string;
36
+ status: "ongoing" | "deployed" | "failed" | "canceled";
37
+ sourceCommitId: string | null;
38
+ sourceCommitMessage: string | null;
39
+ completedAt: Date | null;
40
+ } | null;
61
41
  } | null;
62
- }[];
63
- } | null>;
64
- export declare function promptRootDirectory(deployDir: string): Promise<string | null | undefined>;
65
- export declare function resolveProjectForDeploy(deployDir: string): Promise<(ProjectConfig & {
66
- environmentId: string;
67
- }) | null>;
42
+ environments: {
43
+ id: string;
44
+ name: string;
45
+ sourceBranch: string | null;
46
+ mcpServerUrl: string;
47
+ createdAt: Date;
48
+ projectId: string;
49
+ latestDeployment: {
50
+ id: string;
51
+ status: "ongoing" | "deployed" | "failed" | "canceled";
52
+ sourceCommitId: string | null;
53
+ sourceCommitMessage: string | null;
54
+ completedAt: Date | null;
55
+ } | null;
56
+ }[];
57
+ } | null>;
58
+ promptRootDirectory(): Promise<string | null>;
59
+ private directoryExists;
60
+ private detectRuntime;
61
+ confirmDeployWithExistingConfig(existingConfig: ProjectConfig): Promise<boolean | null>;
62
+ confirmDeployDirectory(): Promise<boolean>;
63
+ confirmLinkExisting(): Promise<boolean>;
64
+ confirmLinkToAnotherProject(): Promise<boolean>;
65
+ resolveProjectForDeploy(): Promise<(ProjectConfig & {
66
+ environmentId: string;
67
+ }) | null>;
68
+ private resolveEnvironmentForProject;
69
+ private runCreateProjectFlow;
70
+ private runLinkingFlow;
71
+ }