alpic 0.0.0-dev.f74887d → 0.0.0-dev.f7f559c

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 (137) hide show
  1. package/dist/__tests__/auth.e2e.test.js +18 -3
  2. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  3. package/dist/__tests__/deploy-flags.e2e.test.js +92 -5
  4. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
  5. package/dist/__tests__/deploy.e2e.test.js +22 -10
  6. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  7. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  8. package/dist/__tests__/deployment-inspect.e2e.test.js +114 -0
  9. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
  10. package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/deployment-list.e2e.test.js +108 -0
  12. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
  13. package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/deployment-logs.e2e.test.js +180 -0
  15. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
  16. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +249 -0
  18. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  19. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +121 -0
  21. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +138 -0
  24. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  25. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  26. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +318 -0
  27. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  28. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  29. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  30. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  31. package/dist/__tests__/git-flags.e2e.test.js +6 -6
  32. package/dist/__tests__/git-flags.e2e.test.js.map +1 -1
  33. package/dist/__tests__/git.e2e.test.js +2 -2
  34. package/dist/__tests__/link.e2e.test.d.ts +1 -0
  35. package/dist/__tests__/link.e2e.test.js +279 -0
  36. package/dist/__tests__/link.e2e.test.js.map +1 -0
  37. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  38. package/dist/__tests__/logs.e2e.test.js +197 -0
  39. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  40. package/dist/__tests__/mock-server.d.ts +20 -0
  41. package/dist/__tests__/mock-server.js +250 -7
  42. package/dist/__tests__/mock-server.js.map +1 -1
  43. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  44. package/dist/__tests__/publish.e2e.test.js +485 -0
  45. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  46. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  47. package/dist/__tests__/tunnel.e2e.test.js +64 -0
  48. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  49. package/dist/__tests__/utils.d.ts +8 -2
  50. package/dist/__tests__/utils.js +53 -18
  51. package/dist/__tests__/utils.js.map +1 -1
  52. package/dist/commands/audit.d.ts +13 -0
  53. package/dist/commands/audit.js +138 -0
  54. package/dist/commands/audit.js.map +1 -0
  55. package/dist/commands/deploy.d.ts +4 -1
  56. package/dist/commands/deploy.js +36 -17
  57. package/dist/commands/deploy.js.map +1 -1
  58. package/dist/commands/deployment/inspect.d.ts +11 -0
  59. package/dist/commands/deployment/inspect.js +68 -0
  60. package/dist/commands/deployment/inspect.js.map +1 -0
  61. package/dist/commands/deployment/list.d.ts +11 -0
  62. package/dist/commands/deployment/list.js +85 -0
  63. package/dist/commands/deployment/list.js.map +1 -0
  64. package/dist/commands/deployment/logs.d.ts +12 -0
  65. package/dist/commands/deployment/logs.js +48 -0
  66. package/dist/commands/deployment/logs.js.map +1 -0
  67. package/dist/commands/environment-variable/add.d.ts +14 -0
  68. package/dist/commands/environment-variable/add.js +47 -0
  69. package/dist/commands/environment-variable/add.js.map +1 -0
  70. package/dist/commands/environment-variable/list.d.ts +9 -0
  71. package/dist/commands/environment-variable/list.js +45 -0
  72. package/dist/commands/environment-variable/list.js.map +1 -0
  73. package/dist/commands/environment-variable/remove.d.ts +11 -0
  74. package/dist/commands/environment-variable/remove.js +33 -0
  75. package/dist/commands/environment-variable/remove.js.map +1 -0
  76. package/dist/commands/environment-variable/update.d.ts +13 -0
  77. package/dist/commands/environment-variable/update.js +41 -0
  78. package/dist/commands/environment-variable/update.js.map +1 -0
  79. package/dist/commands/git/connect.d.ts +1 -1
  80. package/dist/commands/git/connect.js +7 -10
  81. package/dist/commands/git/connect.js.map +1 -1
  82. package/dist/commands/git/disconnect.d.ts +1 -1
  83. package/dist/commands/git/disconnect.js +6 -10
  84. package/dist/commands/git/disconnect.js.map +1 -1
  85. package/dist/commands/link.d.ts +17 -0
  86. package/dist/commands/link.js +101 -0
  87. package/dist/commands/link.js.map +1 -0
  88. package/dist/commands/login.js +4 -2
  89. package/dist/commands/login.js.map +1 -1
  90. package/dist/commands/logs.d.ts +16 -0
  91. package/dist/commands/logs.js +96 -0
  92. package/dist/commands/logs.js.map +1 -0
  93. package/dist/commands/publish.d.ts +15 -0
  94. package/dist/commands/publish.js +51 -0
  95. package/dist/commands/publish.js.map +1 -0
  96. package/dist/commands/tunnel.d.ts +9 -0
  97. package/dist/commands/tunnel.js +53 -0
  98. package/dist/commands/tunnel.js.map +1 -0
  99. package/dist/lib/base-workflow.d.ts +1 -1
  100. package/dist/lib/base-workflow.js +1 -1
  101. package/dist/lib/base-workflow.js.map +1 -1
  102. package/dist/lib/config.d.ts +1 -0
  103. package/dist/lib/config.js +1 -0
  104. package/dist/lib/config.js.map +1 -1
  105. package/dist/lib/deployment.d.ts +68 -0
  106. package/dist/lib/deployment.js +102 -1
  107. package/dist/lib/deployment.js.map +1 -1
  108. package/dist/lib/environment-variable.d.ts +37 -0
  109. package/dist/lib/environment-variable.js +292 -0
  110. package/dist/lib/environment-variable.js.map +1 -0
  111. package/dist/lib/git.d.ts +3 -3
  112. package/dist/lib/git.js +4 -6
  113. package/dist/lib/git.js.map +1 -1
  114. package/dist/lib/{project.d.ts → link.d.ts} +23 -11
  115. package/dist/lib/{project.js → link.js} +168 -81
  116. package/dist/lib/link.js.map +1 -0
  117. package/dist/lib/logs.d.ts +20 -0
  118. package/dist/lib/logs.js +86 -0
  119. package/dist/lib/logs.js.map +1 -0
  120. package/dist/lib/publish.d.ts +22 -0
  121. package/dist/lib/publish.js +181 -0
  122. package/dist/lib/publish.js.map +1 -0
  123. package/dist/lib/resolve.d.ts +6 -0
  124. package/dist/lib/resolve.js +26 -0
  125. package/dist/lib/resolve.js.map +1 -0
  126. package/dist/lib/table.d.ts +8 -0
  127. package/dist/lib/table.js +27 -0
  128. package/dist/lib/table.js.map +1 -0
  129. package/dist/lib/utils.d.ts +4 -0
  130. package/dist/lib/utils.js +21 -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 +21 -0
  134. package/dist/lib/utils.test.js.map +1 -0
  135. package/dist/types.d.ts +1 -0
  136. package/package.json +22 -17
  137. package/dist/lib/project.js.map +0 -1
@@ -0,0 +1,101 @@
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 { GitWorkflow, isGitRepository, listGithubRemotes } from "../lib/git.js";
7
+ import { LinkWorkflow, RUNTIMES } from "../lib/link.js";
8
+ export class Link extends AlpicCommand {
9
+ static description = "Link the current directory to an Alpic project";
10
+ static examples = [
11
+ "<%= config.bin %> link",
12
+ "<%= config.bin %> link --non-interactive --project-name my-app --runtime node24",
13
+ ];
14
+ static flags = {
15
+ "non-interactive": Flags.boolean({
16
+ description: "Skip all confirmation prompts",
17
+ required: false,
18
+ }),
19
+ "team-id": Flags.string({
20
+ description: "Team ID to use",
21
+ required: false,
22
+ }),
23
+ "project-id": Flags.string({
24
+ description: "Link to this existing project ID",
25
+ required: false,
26
+ }),
27
+ "environment-id": Flags.string({
28
+ description: "Use this environment ID",
29
+ required: false,
30
+ }),
31
+ "project-name": Flags.string({
32
+ description: "New project name",
33
+ required: false,
34
+ }),
35
+ runtime: Flags.string({
36
+ description: "New project runtime (node24, node22, python3.14, python3.13)",
37
+ required: false,
38
+ options: RUNTIMES,
39
+ }),
40
+ "root-dir": Flags.string({
41
+ description: "Path to the app root for builds and deployments",
42
+ required: false,
43
+ }),
44
+ };
45
+ async run() {
46
+ const { flags } = await this.parse(Link);
47
+ p.intro("Linking project to Alpic");
48
+ await this.ensureAuthenticated();
49
+ const workflow = new LinkWorkflow({
50
+ "non-interactive": flags["non-interactive"],
51
+ teamId: flags["team-id"],
52
+ projectId: flags["project-id"],
53
+ environmentId: flags["environment-id"],
54
+ projectName: flags["project-name"],
55
+ runtime: flags.runtime,
56
+ rootDir: flags["root-dir"],
57
+ });
58
+ const linkedConfig = await workflow.runLinkFlow();
59
+ if (!linkedConfig) {
60
+ p.cancel("Linking cancelled.");
61
+ this.exit(0);
62
+ return;
63
+ }
64
+ if (!flags["non-interactive"] && isGitRepository()) {
65
+ await this.offerGithubRepositoryConnect(linkedConfig);
66
+ }
67
+ p.outro(`Linked to project "${linkedConfig.projectName}", environment "${linkedConfig.environmentName}".`);
68
+ }
69
+ async offerGithubRepositoryConnect(linkedConfig) {
70
+ const project = await api.projects.get.v1({ projectId: linkedConfig.projectId });
71
+ if (project.sourceRepository) {
72
+ p.log.info(`Project "${project.name}" is already connected to "${project.sourceRepository}".`);
73
+ return;
74
+ }
75
+ await this.promptAndConnectGithubRepository(linkedConfig.projectId);
76
+ }
77
+ async promptAndConnectGithubRepository(projectId) {
78
+ const remotes = listGithubRemotes();
79
+ if (remotes.length === 0) {
80
+ return;
81
+ }
82
+ const connectGit = await p.confirm({
83
+ message: chalk.bold("Connect this project to a GitHub repository?"),
84
+ initialValue: true,
85
+ });
86
+ if (p.isCancel(connectGit) || !connectGit) {
87
+ return;
88
+ }
89
+ const gitWorkflow = new GitWorkflow({ "non-interactive": false });
90
+ const selectedRepo = await gitWorkflow.selectRemoteSourceRepository(remotes);
91
+ const spin = p.spinner();
92
+ spin.start("Connecting GitHub repository...");
93
+ await api.projects.update.v1({
94
+ projectId,
95
+ sourceRepository: selectedRepo,
96
+ });
97
+ spin.stop(`Connected to ${selectedRepo}.`);
98
+ p.log.info("To automatically trigger deployments on every push,\nmake sure to install the Alpic GitHub App on this repository.");
99
+ }
100
+ }
101
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import * as p from "@clack/prompts";
2
+ import chalk from "chalk";
2
3
  import open from "open";
3
4
  import { AlpicCommand } from "../lib/alpic-command.js";
4
5
  import { oAuthClient } from "../lib/auth/oauth/client.js";
@@ -17,8 +18,9 @@ export class Login extends AlpicCommand {
17
18
  return;
18
19
  }
19
20
  const { authorizeUrl, state, nonce, codeVerifier } = await oAuthClient.prepareOAuthConfig();
20
- p.log.message("Opening browser to log in…");
21
- await open(getLoginPageUrl());
21
+ const loginUrl = getLoginPageUrl();
22
+ p.log.message(`Opening browser to log in…\n\nIf the browser does not open, copy this URL: ${chalk.cyan(loginUrl)}`);
23
+ await open(loginUrl);
22
24
  const storedToken = await listenToOAuthCallback({
23
25
  state,
24
26
  nonce,
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,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,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,EAAE,CAAC;QAE5F,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAE9B,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC;YAC9C,KAAK;YACL,KAAK;YACL,YAAY;YACZ,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;SACtC,CAAC,CAAC;QAEH,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAEzC,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;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,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,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACV,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,EAAE,CAAC;QAE5F,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8EAA8E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErB,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC;YAC9C,KAAK;YACL,KAAK;YACL,YAAY;YACZ,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;SACtC,CAAC,CAAC;QAEH,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAEzC,CAAC,CAAC,KAAK,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IACxC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { AlpicCommand } from "../lib/alpic-command.js";
2
+ export declare class Logs 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
+ since: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ until: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ follow: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ level: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ search: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ "no-color": import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,96 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { api } from "../api.js";
3
+ import { AlpicCommand } from "../lib/alpic-command.js";
4
+ import { followEnvironmentLogs, parseLevel, printLog } from "../lib/logs.js";
5
+ import { resolveEnvironmentId } from "../lib/resolve.js";
6
+ export class Logs extends AlpicCommand {
7
+ static description = "Stream runtime logs for an environment";
8
+ static examples = [
9
+ "<%= config.bin %> logs --environment-id <environmentId>",
10
+ "<%= config.bin %> logs --environment-id <environmentId> --since 1h",
11
+ "<%= config.bin %> logs --environment-id <environmentId> --follow",
12
+ "<%= config.bin %> logs --environment-id <environmentId> --level ERROR --level WARNING",
13
+ "<%= config.bin %> logs --environment-id <environmentId> --search 'timeout' --limit 50",
14
+ "<%= config.bin %> logs --environment-id <environmentId> --no-color",
15
+ ];
16
+ static flags = {
17
+ "environment-id": Flags.string({
18
+ description: "The ID of the environment",
19
+ required: false,
20
+ }),
21
+ since: Flags.string({
22
+ description: "Show logs after this time (e.g. 1h, 30m, 2024-01-01T00:00:00Z)",
23
+ required: false,
24
+ }),
25
+ until: Flags.string({
26
+ description: "Show logs before this time (e.g. 1h, 30m, 2024-01-01T00:00:00Z). Cannot be used with --follow",
27
+ required: false,
28
+ }),
29
+ limit: Flags.integer({
30
+ char: "n",
31
+ description: "Maximum number of log entries to fetch. Cannot be used with --follow",
32
+ required: false,
33
+ min: 1,
34
+ max: 1000,
35
+ }),
36
+ follow: Flags.boolean({
37
+ char: "f",
38
+ description: "Poll for new logs continuously",
39
+ required: false,
40
+ default: false,
41
+ }),
42
+ level: Flags.string({
43
+ description: "Filter by log level (INFO, ERROR, WARNING, DEBUG)",
44
+ required: false,
45
+ multiple: true,
46
+ }),
47
+ search: Flags.string({
48
+ description: "Filter logs. Accepts a regex-style pattern or plain text",
49
+ required: false,
50
+ }),
51
+ "no-color": Flags.boolean({
52
+ description: "Disable colorized output and show log levels as text",
53
+ required: false,
54
+ default: false,
55
+ }),
56
+ };
57
+ async run() {
58
+ const { flags } = await this.parse(Logs);
59
+ await this.ensureAuthenticated();
60
+ const environmentId = resolveEnvironmentId(flags);
61
+ const level = flags.level !== undefined ? parseLevel(flags.level) : undefined;
62
+ if (flags.follow && flags.until !== undefined) {
63
+ throw new Error("--until cannot be used with --follow");
64
+ }
65
+ if (flags.follow && flags.limit !== undefined) {
66
+ throw new Error("--limit cannot be used with --follow");
67
+ }
68
+ const options = {
69
+ environmentId,
70
+ since: flags.since ?? (flags.follow ? "10m" : undefined),
71
+ until: flags.until,
72
+ limit: flags.limit,
73
+ level,
74
+ search: flags.search,
75
+ };
76
+ const { logs, nextToken } = await api.environments.getLogs.v1(options);
77
+ const onLog = (log) => {
78
+ printLog(log, { noColor: flags["no-color"] });
79
+ };
80
+ for (const log of logs) {
81
+ onLog(log);
82
+ }
83
+ if (!flags.follow)
84
+ return;
85
+ await followEnvironmentLogs({
86
+ environmentId,
87
+ limit: flags.limit,
88
+ level,
89
+ search: flags.search,
90
+ nextToken,
91
+ initialLogs: logs,
92
+ onLog,
93
+ });
94
+ }
95
+ }
96
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { AlpicCommand } from "../lib/alpic-command.js";
2
+ export declare class Publish extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "non-interactive": import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ domain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ title: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "website-url": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ "icon-src": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
@@ -0,0 +1,51 @@
1
+ import * as p from "@clack/prompts";
2
+ import { Flags } from "@oclif/core";
3
+ import { AlpicCommand } from "../lib/alpic-command.js";
4
+ import { PublishWorkflow } from "../lib/publish.js";
5
+ import { resolveProjectId } from "../lib/resolve.js";
6
+ export class Publish extends AlpicCommand {
7
+ static description = "Publish your MCP server to the MCP registry";
8
+ static examples = [
9
+ "<%= config.bin %> publish",
10
+ "<%= config.bin %> publish --non-interactive --domain my.domain.com --title 'My Server' --description 'Does things'",
11
+ ];
12
+ static flags = {
13
+ "non-interactive": Flags.boolean({
14
+ description: "Skip all prompts",
15
+ required: false,
16
+ }),
17
+ domain: Flags.string({
18
+ description: "Domain to publish for",
19
+ required: false,
20
+ }),
21
+ title: Flags.string({
22
+ description: "Server title (1-100 chars)",
23
+ required: false,
24
+ }),
25
+ description: Flags.string({
26
+ description: "Server description (1-100 chars)",
27
+ required: false,
28
+ }),
29
+ "website-url": Flags.string({
30
+ description: "Website URL",
31
+ required: false,
32
+ }),
33
+ "icon-src": Flags.string({
34
+ description: "Icon URL",
35
+ required: false,
36
+ }),
37
+ "project-id": Flags.string({
38
+ description: "Project ID",
39
+ required: false,
40
+ }),
41
+ };
42
+ async run() {
43
+ const { flags } = await this.parse(Publish);
44
+ p.intro("Publishing to MCP Registry");
45
+ await this.ensureAuthenticated();
46
+ const projectId = resolveProjectId(flags);
47
+ const workflow = new PublishWorkflow(flags);
48
+ await workflow.publish(projectId);
49
+ }
50
+ }
51
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,OAAO,OAAQ,SAAQ,YAAY;IACvC,MAAM,CAAU,WAAW,GAAG,6CAA6C,CAAC;IAE5E,MAAM,CAAU,QAAQ,GAAG;QACzB,2BAA2B;QAC3B,oHAAoH;KACrH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,4BAA4B;YACzC,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC;YACvB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5C,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAEtC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { AlpicCommand } from "../lib/alpic-command.js";
2
+ export declare class Tunnel extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ port: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
@@ -0,0 +1,53 @@
1
+ import * as p from "@clack/prompts";
2
+ import { Flags } from "@oclif/core";
3
+ import { pipenet } from "pipenet";
4
+ import { api } from "../api.js";
5
+ import { AlpicCommand } from "../lib/alpic-command.js";
6
+ export class Tunnel extends AlpicCommand {
7
+ static description = "Expose a local server to the internet through an Alpic tunnel";
8
+ static examples = ["<%= config.bin %> tunnel --port 3000"];
9
+ static flags = {
10
+ port: Flags.integer({
11
+ description: "Local port to tunnel",
12
+ required: true,
13
+ }),
14
+ };
15
+ async run() {
16
+ const { flags } = await this.parse(Tunnel);
17
+ await this.ensureAuthenticated();
18
+ const spinner = p.spinner();
19
+ spinner.start("Opening tunnel...");
20
+ const { ticket, tunnelHost, subdomain } = await api.tunnels.getTicket.v1();
21
+ // terrible ux but pipenet client retries forever on error
22
+ // I'll probably open an issue/pr on their repo once I'm sure about the fix
23
+ const tunnel = await Promise.race([
24
+ pipenet({
25
+ port: flags.port,
26
+ host: `https://${tunnelHost}`,
27
+ subdomain: subdomain,
28
+ headers: { Authorization: `Bearer ${ticket}` },
29
+ }),
30
+ new Promise((_, reject) => {
31
+ const id = setTimeout(() => reject(new Error("Failed to connect to tunnel server")), 10_000);
32
+ id.unref?.(); // don't keep the event loop alive just for this timer
33
+ }),
34
+ ]);
35
+ spinner.stop(`Forwarding: https://${subdomain}.${tunnelHost} -> http://localhost:${flags.port}`);
36
+ p.log.info("Press Ctrl+C to close the tunnel");
37
+ // Keep the process alive until Ctrl+C
38
+ await new Promise((resolve) => {
39
+ process.once("SIGINT", () => {
40
+ tunnel.close();
41
+ resolve();
42
+ });
43
+ process.once("SIGTERM", () => {
44
+ tunnel.close();
45
+ resolve();
46
+ });
47
+ tunnel.on("error", (err) => p.log.error(err.message));
48
+ tunnel.on("close", resolve);
49
+ });
50
+ p.outro("Tunnel closed");
51
+ }
52
+ }
53
+ //# sourceMappingURL=tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,MAAM,CAAU,WAAW,GAAG,+DAA+D,CAAC;IAE9F,MAAM,CAAU,QAAQ,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpE,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEnC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAE3E,0DAA0D;QAC1D,2EAA2E;QAC3E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,OAAO,CAAC;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,WAAW,UAAU,EAAE;gBAC7B,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;aAC/C,CAAC;YACF,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC7F,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,sDAAsD;YACtE,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,uBAAuB,SAAS,IAAI,UAAU,wBAAwB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAE/C,sCAAsC;QACtC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;gBAC3B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC3B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import * as p from "@clack/prompts";
2
2
  export type Flags = {
3
- yes?: boolean;
3
+ "non-interactive"?: boolean;
4
4
  };
5
5
  export declare abstract class BaseWorkflow<F extends Flags = Flags> {
6
6
  readonly flags: F;
@@ -12,7 +12,7 @@ export class BaseWorkflow {
12
12
  return p.confirm(options);
13
13
  }
14
14
  isNonInteractive() {
15
- if (this.flags.yes)
15
+ if (this.flags["non-interactive"])
16
16
  return true;
17
17
  if (process.env.VITEST)
18
18
  return false;
@@ -1 +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
+ {"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,iBAAiB,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAErC,OAAO,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;IAC1B,CAAC;CACF"}
@@ -3,6 +3,7 @@ export declare const config: {
3
3
  load: () => {
4
4
  projectId: string;
5
5
  teamId: string;
6
+ teamName: string | undefined;
6
7
  projectName: string;
7
8
  environmentId: string | undefined;
8
9
  environmentName: string | undefined;
@@ -17,6 +17,7 @@ export const config = {
17
17
  return {
18
18
  projectId: raw.projectId,
19
19
  teamId: raw.teamId,
20
+ teamName: raw.teamName,
20
21
  projectName: raw.projectName ?? raw.projectId,
21
22
  environmentId: raw.environmentId,
22
23
  environmentName: raw.environmentName,
@@ -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,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
+ {"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,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,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,5 +1,69 @@
1
1
  import type { RouterOutput } from "@alpic-ai/api";
2
+ export declare const colorizeDeploymentStatus: (text: string) => import("chalk").ChalkInstance | ((value: string) => string);
2
3
  export declare function formatElapsed(ms: number): string;
4
+ export declare function calculateDeploymentDuration(deployment: {
5
+ startedAt?: Date | null;
6
+ completedAt?: Date | null;
7
+ }): number | null;
8
+ export declare function fetchDeployment(deploymentId: string): Promise<{
9
+ id: string;
10
+ status: "ongoing" | "deployed" | "failed" | "canceled";
11
+ sourceRef: string | null;
12
+ sourceCommitId: string | null;
13
+ sourceCommitMessage: string | null;
14
+ authorUsername: string | null;
15
+ authorAvatarUrl: string | null;
16
+ startedAt: Date | null;
17
+ completedAt: Date | null;
18
+ environmentId: string;
19
+ environmentName: string;
20
+ isCurrent: boolean;
21
+ deploymentPageUrl: string | null;
22
+ }>;
23
+ export declare function fetchLatestDeploymentForEnvironment(environmentId: string): Promise<{
24
+ id: string;
25
+ status: "ongoing" | "deployed" | "failed" | "canceled";
26
+ sourceRef: string | null;
27
+ sourceCommitId: string | null;
28
+ sourceCommitMessage: string | null;
29
+ authorUsername: string | null;
30
+ authorAvatarUrl: string | null;
31
+ startedAt: Date | null;
32
+ completedAt: Date | null;
33
+ environmentId: string;
34
+ environmentName: string;
35
+ isCurrent: boolean;
36
+ deploymentPageUrl: string | null;
37
+ }>;
38
+ export declare function resolveDeploymentId(flags: {
39
+ "deployment-id"?: string;
40
+ "environment-id"?: string;
41
+ }): Promise<string>;
42
+ export declare function waitForDeployment(deployment: RouterOutput["deployments"]["get"]["v1"]): Promise<{
43
+ id: string;
44
+ status: "ongoing" | "deployed" | "failed" | "canceled";
45
+ sourceRef: string | null;
46
+ sourceCommitId: string | null;
47
+ sourceCommitMessage: string | null;
48
+ authorUsername: string | null;
49
+ authorAvatarUrl: string | null;
50
+ startedAt: Date | null;
51
+ completedAt: Date | null;
52
+ environmentId: string;
53
+ environmentName: string;
54
+ isCurrent: boolean;
55
+ deploymentPageUrl: string | null;
56
+ }>;
57
+ type DeploymentLogEntry = {
58
+ timestamp?: Date;
59
+ content?: string;
60
+ };
61
+ export declare function printDeploymentLog(log: DeploymentLogEntry, { noColor }?: {
62
+ noColor?: boolean;
63
+ }): void;
64
+ export declare function followDeploymentLogs(deploymentId: string, initialLogs: DeploymentLogEntry[], { noColor }?: {
65
+ noColor?: boolean;
66
+ }): Promise<void>;
3
67
  export declare function deployAndWait({ initial, startedAt, }: {
4
68
  initial: RouterOutput["deployments"]["get"]["v1"];
5
69
  startedAt: number;
@@ -14,7 +78,11 @@ export declare function deployAndWait({ initial, startedAt, }: {
14
78
  authorAvatarUrl: string | null;
15
79
  startedAt: Date | null;
16
80
  completedAt: Date | null;
81
+ environmentId: string;
82
+ environmentName: string;
83
+ isCurrent: boolean;
17
84
  deploymentPageUrl: string | null;
18
85
  };
19
86
  elapsedMs: number;
20
87
  }>;
88
+ export {};