alpic 0.0.0-dev.f1a6945 → 0.0.0-dev.f1f9e99

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 (179) hide show
  1. package/README.md +40 -0
  2. package/bin/run.js +5 -0
  3. package/dist/__tests__/audit.e2e.test.d.ts +1 -0
  4. package/dist/__tests__/audit.e2e.test.js +562 -0
  5. package/dist/__tests__/audit.e2e.test.js.map +1 -0
  6. package/dist/__tests__/auth.e2e.test.js +38 -18
  7. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  8. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  9. package/dist/__tests__/deploy-flags.e2e.test.js +228 -0
  10. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  11. package/dist/__tests__/deploy.e2e.test.js +34 -66
  12. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  13. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/deployment-inspect.e2e.test.js +119 -0
  15. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
  16. package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/deployment-list.e2e.test.js +121 -0
  18. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
  19. package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/deployment-logs.e2e.test.js +260 -0
  21. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +264 -0
  24. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  25. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  26. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +144 -0
  27. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  28. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  29. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +155 -0
  30. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  31. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  32. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +347 -0
  33. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  34. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  35. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  36. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  37. package/dist/__tests__/fixtures/demo-project/index.js +1 -1
  38. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -1
  39. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  40. package/dist/__tests__/git-flags.e2e.test.js +129 -0
  41. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  42. package/dist/__tests__/git.e2e.test.js +25 -17
  43. package/dist/__tests__/git.e2e.test.js.map +1 -1
  44. package/dist/__tests__/link.e2e.test.d.ts +1 -0
  45. package/dist/__tests__/link.e2e.test.js +284 -0
  46. package/dist/__tests__/link.e2e.test.js.map +1 -0
  47. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  48. package/dist/__tests__/logs.e2e.test.js +231 -0
  49. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  50. package/dist/__tests__/mock-server.d.ts +23 -0
  51. package/dist/__tests__/mock-server.js +330 -21
  52. package/dist/__tests__/mock-server.js.map +1 -1
  53. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  54. package/dist/__tests__/publish.e2e.test.js +510 -0
  55. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  56. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  57. package/dist/__tests__/tunnel.e2e.test.js +66 -0
  58. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  59. package/dist/__tests__/utils.d.ts +17 -5
  60. package/dist/__tests__/utils.js +118 -24
  61. package/dist/__tests__/utils.js.map +1 -1
  62. package/dist/api.d.ts +1 -1
  63. package/dist/api.js +10 -3
  64. package/dist/api.js.map +1 -1
  65. package/dist/commands/audit.d.ts +14 -0
  66. package/dist/commands/audit.js +49 -0
  67. package/dist/commands/audit.js.map +1 -0
  68. package/dist/commands/deploy.d.ts +8 -2
  69. package/dist/commands/deploy.js +64 -25
  70. package/dist/commands/deploy.js.map +1 -1
  71. package/dist/commands/deployment/inspect.d.ts +11 -0
  72. package/dist/commands/deployment/inspect.js +91 -0
  73. package/dist/commands/deployment/inspect.js.map +1 -0
  74. package/dist/commands/deployment/list.d.ts +11 -0
  75. package/dist/commands/deployment/list.js +97 -0
  76. package/dist/commands/deployment/list.js.map +1 -0
  77. package/dist/commands/deployment/logs.d.ts +12 -0
  78. package/dist/commands/deployment/logs.js +50 -0
  79. package/dist/commands/deployment/logs.js.map +1 -0
  80. package/dist/commands/environment-variable/add.d.ts +14 -0
  81. package/dist/commands/environment-variable/add.js +47 -0
  82. package/dist/commands/environment-variable/add.js.map +1 -0
  83. package/dist/commands/environment-variable/list.d.ts +9 -0
  84. package/dist/commands/environment-variable/list.js +45 -0
  85. package/dist/commands/environment-variable/list.js.map +1 -0
  86. package/dist/commands/environment-variable/remove.d.ts +11 -0
  87. package/dist/commands/environment-variable/remove.js +33 -0
  88. package/dist/commands/environment-variable/remove.js.map +1 -0
  89. package/dist/commands/environment-variable/update.d.ts +13 -0
  90. package/dist/commands/environment-variable/update.js +41 -0
  91. package/dist/commands/environment-variable/update.js.map +1 -0
  92. package/dist/commands/git/connect.d.ts +3 -2
  93. package/dist/commands/git/connect.js +29 -28
  94. package/dist/commands/git/connect.js.map +1 -1
  95. package/dist/commands/git/disconnect.d.ts +2 -2
  96. package/dist/commands/git/disconnect.js +20 -26
  97. package/dist/commands/git/disconnect.js.map +1 -1
  98. package/dist/commands/git.js +2 -2
  99. package/dist/commands/git.js.map +1 -1
  100. package/dist/commands/link.d.ts +17 -0
  101. package/dist/commands/link.js +101 -0
  102. package/dist/commands/link.js.map +1 -0
  103. package/dist/commands/login.js +4 -22
  104. package/dist/commands/login.js.map +1 -1
  105. package/dist/commands/logs.d.ts +16 -0
  106. package/dist/commands/logs.js +96 -0
  107. package/dist/commands/logs.js.map +1 -0
  108. package/dist/commands/publish.d.ts +15 -0
  109. package/dist/commands/publish.js +51 -0
  110. package/dist/commands/publish.js.map +1 -0
  111. package/dist/commands/tunnel.d.ts +10 -0
  112. package/dist/commands/tunnel.js +132 -0
  113. package/dist/commands/tunnel.js.map +1 -0
  114. package/dist/commands/whoami.js +2 -14
  115. package/dist/commands/whoami.js.map +1 -1
  116. package/dist/lib/alpic-command.d.ts +2 -0
  117. package/dist/lib/alpic-command.js +13 -5
  118. package/dist/lib/alpic-command.js.map +1 -1
  119. package/dist/lib/archive.d.ts +3 -3
  120. package/dist/lib/archive.js +21 -19
  121. package/dist/lib/archive.js.map +1 -1
  122. package/dist/lib/audit.d.ts +16 -0
  123. package/dist/lib/audit.js +245 -0
  124. package/dist/lib/audit.js.map +1 -0
  125. package/dist/lib/auth/auth.d.ts +3 -0
  126. package/dist/lib/auth/auth.js +23 -0
  127. package/dist/lib/auth/auth.js.map +1 -1
  128. package/dist/lib/auth/oauth/server/index.d.ts +2 -1
  129. package/dist/lib/auth/oauth/server/index.js +33 -7
  130. package/dist/lib/auth/oauth/server/index.js.map +1 -1
  131. package/dist/lib/auth/whoami.d.ts +1 -28
  132. package/dist/lib/auth/whoami.js +27 -17
  133. package/dist/lib/auth/whoami.js.map +1 -1
  134. package/dist/lib/base-workflow.d.ts +10 -0
  135. package/dist/lib/base-workflow.js +22 -0
  136. package/dist/lib/base-workflow.js.map +1 -0
  137. package/dist/lib/config.d.ts +3 -2
  138. package/dist/lib/config.js +8 -7
  139. package/dist/lib/config.js.map +1 -1
  140. package/dist/lib/deployment.d.ts +69 -1
  141. package/dist/lib/deployment.js +113 -5
  142. package/dist/lib/deployment.js.map +1 -1
  143. package/dist/lib/environment-variable.d.ts +37 -0
  144. package/dist/lib/environment-variable.js +299 -0
  145. package/dist/lib/environment-variable.js.map +1 -0
  146. package/dist/lib/git.d.ts +12 -4
  147. package/dist/lib/git.js +52 -26
  148. package/dist/lib/git.js.map +1 -1
  149. package/dist/lib/global-store.d.ts +1 -1
  150. package/dist/lib/global-store.js +4 -3
  151. package/dist/lib/global-store.js.map +1 -1
  152. package/dist/lib/link.d.ts +83 -0
  153. package/dist/lib/link.js +387 -0
  154. package/dist/lib/link.js.map +1 -0
  155. package/dist/lib/logs.d.ts +20 -0
  156. package/dist/lib/logs.js +87 -0
  157. package/dist/lib/logs.js.map +1 -0
  158. package/dist/lib/publish.d.ts +22 -0
  159. package/dist/lib/publish.js +185 -0
  160. package/dist/lib/publish.js.map +1 -0
  161. package/dist/lib/resolve.d.ts +6 -0
  162. package/dist/lib/resolve.js +26 -0
  163. package/dist/lib/resolve.js.map +1 -0
  164. package/dist/lib/table.d.ts +8 -0
  165. package/dist/lib/table.js +27 -0
  166. package/dist/lib/table.js.map +1 -0
  167. package/dist/lib/telemetry.js +1 -1
  168. package/dist/lib/telemetry.js.map +1 -1
  169. package/dist/lib/utils.d.ts +5 -0
  170. package/dist/lib/utils.js +53 -0
  171. package/dist/lib/utils.js.map +1 -0
  172. package/dist/lib/utils.test.d.ts +1 -0
  173. package/dist/lib/utils.test.js +27 -0
  174. package/dist/lib/utils.test.js.map +1 -0
  175. package/dist/types.d.ts +1 -0
  176. package/package.json +27 -20
  177. package/dist/lib/project.d.ts +0 -67
  178. package/dist/lib/project.js +0 -285
  179. package/dist/lib/project.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/git/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/git/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAClD,MAAM,CAAU,WAAW,GAAG,uDAAuD,CAAC;IAEtF,MAAM,CAAU,QAAQ,GAAG;QACzB,+BAA+B;QAC/B,iDAAiD;QACjD,oDAAoD;KACrD,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,4DAA4D;YACzE,OAAO,EAAE,KAAK;SACf,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,WAAW,EAAE,+BAA+B;SAC7C,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAE9C,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACvB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;YACzD,wBAAwB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;YAChE,wBAAwB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,MAAM,oCAAoC,CAAC,OAAO,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC;YAC/B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;YAC3C,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,wBAAwB,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAEtF,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,wBAAwB;SAC3C,CAAC,CAAC;QAEH,CAAC,CAAC,GAAG,CAAC,IAAI,CACR,oHAAoH,CACrH,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzG,CAAC"}
@@ -2,8 +2,8 @@ import { AlpicCommand } from "../../lib/alpic-command.js";
2
2
  export default class GitDisconnect extends AlpicCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
- static args: {
6
- directory: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
5
+ static flags: {
6
+ "non-interactive": import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
7
  };
8
8
  run(): Promise<void>;
9
9
  }
@@ -1,45 +1,39 @@
1
1
  import * as p from "@clack/prompts";
2
- import { Args } from "@oclif/core";
2
+ import { Flags } from "@oclif/core";
3
3
  import chalk from "chalk";
4
4
  import { api } from "../../api.js";
5
5
  import { AlpicCommand } from "../../lib/alpic-command.js";
6
- import { isAuthenticated } from "../../lib/auth/auth.js";
7
6
  import { config } from "../../lib/config.js";
8
- import { resolveDeployDir } from "../../lib/project.js";
7
+ import { GitWorkflow } from "../../lib/git.js";
9
8
  export default class GitDisconnect extends AlpicCommand {
10
9
  static description = "Disconnect a linked Alpic project from its git remote source";
11
- static examples = ["<%= config.bin %> git disconnect", "<%= config.bin %> git disconnect ./my-app"];
12
- static args = {
13
- directory: Args.string({
14
- description: "Directory to disconnect (default: current directory)",
15
- required: false,
10
+ static examples = ["<%= config.bin %> git disconnect", "<%= config.bin %> git disconnect --non-interactive"];
11
+ static flags = {
12
+ "non-interactive": Flags.boolean({
13
+ description: "Skip the confirmation prompt",
14
+ default: false,
16
15
  }),
17
16
  };
18
17
  async run() {
19
- const { args } = await this.parse(GitDisconnect);
18
+ const { flags } = await this.parse(GitDisconnect);
20
19
  p.intro("Disconnecting git repository from Alpic");
21
- if (!(await isAuthenticated())) {
22
- p.cancel("Not authenticated. Run `alpic login` or set ALPIC_API_KEY. Get an API key from Team settings in the Alpic dashboard.");
23
- return;
24
- }
25
- const deployDir = resolveDeployDir(args.directory);
26
- const linkedConfig = config.load(deployDir);
20
+ await this.ensureAuthenticated();
21
+ const linkedConfig = config.load();
27
22
  if (!linkedConfig) {
28
- p.cancel("This directory is not linked to an Alpic project. Link it first using `alpic deploy`.");
29
- return;
23
+ throw new Error("This directory is not linked to an Alpic project. Link it first using `alpic deploy`.");
30
24
  }
31
- const project = await api.projects.get.v1({ projectId: linkedConfig.projectId });
25
+ const project = await api.projects.get.v1({
26
+ projectId: linkedConfig.projectId,
27
+ });
32
28
  if (!project.sourceRepository) {
33
- p.cancel(`Project "${project.name}" is not connected to any repository.`);
34
- return;
29
+ throw new Error(`Project "${project.name}" is not connected to any repository.`);
35
30
  }
36
- const confirm = await p.confirm({
37
- message: `Are you sure you want to disconnect ${chalk.bold(project.sourceRepository)} from project ${chalk.bold(project.name)}?`,
38
- initialValue: false,
31
+ const workflow = new GitWorkflow({
32
+ "non-interactive": flags["non-interactive"],
39
33
  });
40
- if (p.isCancel(confirm) || !confirm) {
41
- p.cancel("Git disconnect cancelled");
42
- return;
34
+ const confirmed = await workflow.confirmDisconnect(project.sourceRepository, project.name);
35
+ if (!confirmed) {
36
+ throw new Error("Git disconnect cancelled");
43
37
  }
44
38
  await api.projects.update.v1({
45
39
  projectId: linkedConfig.projectId,
@@ -1 +1 @@
1
- {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/commands/git/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,MAAM,CAAU,WAAW,GAAG,8DAA8D,CAAC;IAE7F,MAAM,CAAU,QAAQ,GAAG,CAAC,kCAAkC,EAAE,2CAA2C,CAAC,CAAC;IAE7G,MAAM,CAAU,IAAI,GAAG;QACrB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;YACrB,WAAW,EAAE,sDAAsD;YACnE,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAEnD,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;YAC/B,CAAC,CAAC,MAAM,CACN,sHAAsH,CACvH,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,CAAC,CAAC,MAAM,CAAC,uFAAuF,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,CAAC,CAAC,MAAM,CAAC,YAAY,OAAO,CAAC,IAAI,uCAAuC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,uCAAuC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;YAChI,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9G,CAAC"}
1
+ {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../src/commands/git/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,MAAM,CAAU,WAAW,GAAG,8DAA8D,CAAC;IAE7F,MAAM,CAAU,QAAQ,GAAG,CAAC,kCAAkC,EAAE,oDAAoD,CAAC,CAAC;IAEtH,MAAM,CAAU,KAAK,GAAG;QACtB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAEnD,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS,EAAE,YAAY,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,uCAAuC,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC;YAC/B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,CAAC,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9G,CAAC"}
@@ -6,8 +6,8 @@ export default class Git extends Command {
6
6
  async run() {
7
7
  await this.parse(Git);
8
8
  this.log(chalk.bold("Usage:"));
9
- this.log(" alpic git connect [directory]");
10
- this.log(" alpic git disconnect [directory]");
9
+ this.log(" alpic git connect");
10
+ this.log(" alpic git disconnect");
11
11
  this.log("");
12
12
  this.log(chalk.bold("Commands:"));
13
13
  this.log(" connect Connect the linked Alpic project to a git remote source");
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,OAAO;IACtC,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAC;IAE5F,MAAM,CAAU,QAAQ,GAAG,CAAC,+BAA+B,EAAE,kCAAkC,CAAC,CAAC;IAEjG,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;IAC3F,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,OAAO;IACtC,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAC;IAE5F,MAAM,CAAU,QAAQ,GAAG,CAAC,+BAA+B,EAAE,kCAAkC,CAAC,CAAC;IAEjG,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;IAC3F,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { AlpicCommand } from "../lib/alpic-command.js";
2
+ export declare class Link extends AlpicCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ "non-interactive": import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ "team-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ "project-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ "environment-id": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ "project-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ runtime: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ "root-dir": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ private offerGithubRepositoryConnect;
16
+ private promptAndConnectGithubRepository;
17
+ }
@@ -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,11 +1,8 @@
1
1
  import * as p from "@clack/prompts";
2
- import chalk from "chalk";
3
- import open from "open";
4
2
  import { AlpicCommand } from "../lib/alpic-command.js";
3
+ import { oauthLogin } from "../lib/auth/auth.js";
5
4
  import { oAuthClient } from "../lib/auth/oauth/client.js";
6
- import { getLoginPageUrl, listenToOAuthCallback } from "../lib/auth/oauth/server/index.js";
7
- import { getWhoamiInfo } from "../lib/auth/whoami.js";
8
- import { globalStore } from "../lib/global-store.js";
5
+ import { getWhoamiInfoMessage } from "../lib/auth/whoami.js";
9
6
  export class Login extends AlpicCommand {
10
7
  static description = "Log in to Alpic (opens browser, stores tokens)";
11
8
  static examples = ["<%= config.bin %> login"];
@@ -17,23 +14,8 @@ export class Login extends AlpicCommand {
17
14
  p.outro("Already logged in.");
18
15
  return;
19
16
  }
20
- const { authorizeUrl, state, nonce, codeVerifier } = await oAuthClient.prepareOAuthConfig();
21
- p.log.message("Opening browser to log in…");
22
- await open(getLoginPageUrl());
23
- const storedToken = await listenToOAuthCallback({
24
- state,
25
- nonce,
26
- codeVerifier,
27
- authorizeUrl: authorizeUrl.toString(),
28
- });
29
- globalStore.saveCredentials(storedToken);
30
- const info = await getWhoamiInfo();
31
- if (!info) {
32
- p.cancel("Failed to get user information.");
33
- return;
34
- }
35
- const msg = `Authenticated as ${chalk.green(info.name)} (${chalk.cyan(info.email)})`;
36
- p.outro(msg);
17
+ await oauthLogin();
18
+ p.outro(await getWhoamiInfoMessage());
37
19
  }
38
20
  }
39
21
  //# sourceMappingURL=login.js.map
@@ -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,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,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,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,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,CAAC,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,oBAAoB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACrF,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACf,CAAC"}
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,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,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,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACtD,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"}
@@ -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,10 @@
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
+ plain: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ run(): Promise<void>;
10
+ }