@guaracloud/cli 0.1.0

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 (160) hide show
  1. package/bin/dev.js +4 -0
  2. package/bin/run.js +4 -0
  3. package/dist/commands/config/get.d.ts +10 -0
  4. package/dist/commands/config/get.d.ts.map +1 -0
  5. package/dist/commands/config/get.js +21 -0
  6. package/dist/commands/config/get.js.map +1 -0
  7. package/dist/commands/config/list.d.ts +7 -0
  8. package/dist/commands/config/list.d.ts.map +1 -0
  9. package/dist/commands/config/list.js +31 -0
  10. package/dist/commands/config/list.js.map +1 -0
  11. package/dist/commands/config/reset.d.ts +7 -0
  12. package/dist/commands/config/reset.d.ts.map +1 -0
  13. package/dist/commands/config/reset.js +25 -0
  14. package/dist/commands/config/reset.js.map +1 -0
  15. package/dist/commands/config/set.d.ts +11 -0
  16. package/dist/commands/config/set.d.ts.map +1 -0
  17. package/dist/commands/config/set.js +29 -0
  18. package/dist/commands/config/set.js.map +1 -0
  19. package/dist/commands/deploy.d.ts +25 -0
  20. package/dist/commands/deploy.d.ts.map +1 -0
  21. package/dist/commands/deploy.js +115 -0
  22. package/dist/commands/deploy.js.map +1 -0
  23. package/dist/commands/deployments/list.d.ts +7 -0
  24. package/dist/commands/deployments/list.d.ts.map +1 -0
  25. package/dist/commands/deployments/list.js +40 -0
  26. package/dist/commands/deployments/list.js.map +1 -0
  27. package/dist/commands/domains/add.d.ts +17 -0
  28. package/dist/commands/domains/add.d.ts.map +1 -0
  29. package/dist/commands/domains/add.js +41 -0
  30. package/dist/commands/domains/add.js.map +1 -0
  31. package/dist/commands/domains/list.d.ts +7 -0
  32. package/dist/commands/domains/list.d.ts.map +1 -0
  33. package/dist/commands/domains/list.js +32 -0
  34. package/dist/commands/domains/list.js.map +1 -0
  35. package/dist/commands/domains/remove.d.ts +17 -0
  36. package/dist/commands/domains/remove.d.ts.map +1 -0
  37. package/dist/commands/domains/remove.js +60 -0
  38. package/dist/commands/domains/remove.js.map +1 -0
  39. package/dist/commands/env/list.d.ts +7 -0
  40. package/dist/commands/env/list.d.ts.map +1 -0
  41. package/dist/commands/env/list.js +32 -0
  42. package/dist/commands/env/list.js.map +1 -0
  43. package/dist/commands/env/set.d.ts +18 -0
  44. package/dist/commands/env/set.d.ts.map +1 -0
  45. package/dist/commands/env/set.js +70 -0
  46. package/dist/commands/env/set.js.map +1 -0
  47. package/dist/commands/env/unset.d.ts +8 -0
  48. package/dist/commands/env/unset.d.ts.map +1 -0
  49. package/dist/commands/env/unset.js +36 -0
  50. package/dist/commands/env/unset.js.map +1 -0
  51. package/dist/commands/link.d.ts +16 -0
  52. package/dist/commands/link.d.ts.map +1 -0
  53. package/dist/commands/link.js +123 -0
  54. package/dist/commands/link.js.map +1 -0
  55. package/dist/commands/login.d.ts +28 -0
  56. package/dist/commands/login.d.ts.map +1 -0
  57. package/dist/commands/login.js +190 -0
  58. package/dist/commands/login.js.map +1 -0
  59. package/dist/commands/logout.d.ts +7 -0
  60. package/dist/commands/logout.d.ts.map +1 -0
  61. package/dist/commands/logout.js +33 -0
  62. package/dist/commands/logout.js.map +1 -0
  63. package/dist/commands/logs.d.ts +24 -0
  64. package/dist/commands/logs.d.ts.map +1 -0
  65. package/dist/commands/logs.js +174 -0
  66. package/dist/commands/logs.js.map +1 -0
  67. package/dist/commands/open.d.ts +17 -0
  68. package/dist/commands/open.d.ts.map +1 -0
  69. package/dist/commands/open.js +78 -0
  70. package/dist/commands/open.js.map +1 -0
  71. package/dist/commands/projects/create.d.ts +19 -0
  72. package/dist/commands/projects/create.d.ts.map +1 -0
  73. package/dist/commands/projects/create.js +79 -0
  74. package/dist/commands/projects/create.js.map +1 -0
  75. package/dist/commands/projects/info.d.ts +7 -0
  76. package/dist/commands/projects/info.d.ts.map +1 -0
  77. package/dist/commands/projects/info.js +39 -0
  78. package/dist/commands/projects/info.js.map +1 -0
  79. package/dist/commands/projects/list.d.ts +7 -0
  80. package/dist/commands/projects/list.d.ts.map +1 -0
  81. package/dist/commands/projects/list.js +38 -0
  82. package/dist/commands/projects/list.js.map +1 -0
  83. package/dist/commands/rollback.d.ts +17 -0
  84. package/dist/commands/rollback.d.ts.map +1 -0
  85. package/dist/commands/rollback.js +63 -0
  86. package/dist/commands/rollback.js.map +1 -0
  87. package/dist/commands/scale.d.ts +18 -0
  88. package/dist/commands/scale.d.ts.map +1 -0
  89. package/dist/commands/scale.js +96 -0
  90. package/dist/commands/scale.js.map +1 -0
  91. package/dist/commands/services/create.d.ts +23 -0
  92. package/dist/commands/services/create.d.ts.map +1 -0
  93. package/dist/commands/services/create.js +146 -0
  94. package/dist/commands/services/create.js.map +1 -0
  95. package/dist/commands/services/delete.d.ts +7 -0
  96. package/dist/commands/services/delete.d.ts.map +1 -0
  97. package/dist/commands/services/delete.js +41 -0
  98. package/dist/commands/services/delete.js.map +1 -0
  99. package/dist/commands/services/info.d.ts +7 -0
  100. package/dist/commands/services/info.d.ts.map +1 -0
  101. package/dist/commands/services/info.js +46 -0
  102. package/dist/commands/services/info.js.map +1 -0
  103. package/dist/commands/services/list.d.ts +7 -0
  104. package/dist/commands/services/list.d.ts.map +1 -0
  105. package/dist/commands/services/list.js +40 -0
  106. package/dist/commands/services/list.js.map +1 -0
  107. package/dist/commands/services/restart.d.ts +7 -0
  108. package/dist/commands/services/restart.d.ts.map +1 -0
  109. package/dist/commands/services/restart.js +27 -0
  110. package/dist/commands/services/restart.js.map +1 -0
  111. package/dist/commands/services/start.d.ts +7 -0
  112. package/dist/commands/services/start.d.ts.map +1 -0
  113. package/dist/commands/services/start.js +27 -0
  114. package/dist/commands/services/start.js.map +1 -0
  115. package/dist/commands/services/stop.d.ts +7 -0
  116. package/dist/commands/services/stop.d.ts.map +1 -0
  117. package/dist/commands/services/stop.js +27 -0
  118. package/dist/commands/services/stop.js.map +1 -0
  119. package/dist/commands/status.d.ts +11 -0
  120. package/dist/commands/status.d.ts.map +1 -0
  121. package/dist/commands/status.js +87 -0
  122. package/dist/commands/status.js.map +1 -0
  123. package/dist/commands/unlink.d.ts +7 -0
  124. package/dist/commands/unlink.d.ts.map +1 -0
  125. package/dist/commands/unlink.js +43 -0
  126. package/dist/commands/unlink.js.map +1 -0
  127. package/dist/commands/whoami.d.ts +7 -0
  128. package/dist/commands/whoami.d.ts.map +1 -0
  129. package/dist/commands/whoami.js +46 -0
  130. package/dist/commands/whoami.js.map +1 -0
  131. package/dist/index.d.ts +2 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +2 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/lib/api-client.d.ts +96 -0
  136. package/dist/lib/api-client.d.ts.map +1 -0
  137. package/dist/lib/api-client.js +256 -0
  138. package/dist/lib/api-client.js.map +1 -0
  139. package/dist/lib/auth.d.ts +68 -0
  140. package/dist/lib/auth.d.ts.map +1 -0
  141. package/dist/lib/auth.js +180 -0
  142. package/dist/lib/auth.js.map +1 -0
  143. package/dist/lib/base-command.d.ts +94 -0
  144. package/dist/lib/base-command.d.ts.map +1 -0
  145. package/dist/lib/base-command.js +184 -0
  146. package/dist/lib/base-command.js.map +1 -0
  147. package/dist/lib/context.d.ts +58 -0
  148. package/dist/lib/context.d.ts.map +1 -0
  149. package/dist/lib/context.js +147 -0
  150. package/dist/lib/context.js.map +1 -0
  151. package/dist/lib/errors.d.ts +34 -0
  152. package/dist/lib/errors.d.ts.map +1 -0
  153. package/dist/lib/errors.js +143 -0
  154. package/dist/lib/errors.js.map +1 -0
  155. package/dist/lib/output.d.ts +19 -0
  156. package/dist/lib/output.d.ts.map +1 -0
  157. package/dist/lib/output.js +75 -0
  158. package/dist/lib/output.js.map +1 -0
  159. package/oclif.manifest.json +2880 -0
  160. package/package.json +92 -0
package/bin/dev.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { execute } from '@oclif/core';
4
+ await execute({ development: true, dir: import.meta.url });
package/bin/run.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { execute } from '@oclif/core';
4
+ await execute({ dir: import.meta.url });
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ConfigGet extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/config/get.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,OAAgB,WAAW,SAAoC;IAE/D,OAAgB,QAAQ,WAA2C;IAEnE,OAAgB,IAAI;;MAElB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAa3B"}
@@ -0,0 +1,21 @@
1
+ import { Args } from '@oclif/core';
2
+ import { getConfigValue } from '../../lib/auth.js';
3
+ import { BaseCommand } from '../../lib/base-command.js';
4
+ export default class ConfigGet extends BaseCommand {
5
+ static description = 'Get a CLI configuration value.';
6
+ static examples = ['<%= config.bin %> config get apiUrl'];
7
+ static args = {
8
+ key: Args.string({ description: 'Configuration key (e.g., apiUrl).', required: true }),
9
+ };
10
+ async run() {
11
+ const { args, flags } = await this.parse(ConfigGet);
12
+ const typedFlags = flags;
13
+ const value = getConfigValue(args.key) ?? '';
14
+ if (typedFlags.json) {
15
+ this.outputJson({ [args.key]: value });
16
+ return;
17
+ }
18
+ this.log(value);
19
+ }
20
+ }
21
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/config/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAU,WAAW,GAAG,gCAAgC,CAAC;IAE/D,MAAM,CAAU,QAAQ,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnE,MAAM,CAAU,IAAI,GAAG;QACrB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACvF,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAE7C,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ConfigList extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/config/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,OAAgB,WAAW,SAAwC;IAEnE,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B3B"}
@@ -0,0 +1,31 @@
1
+ import { getAllConfig } from '../../lib/auth.js';
2
+ import { BaseCommand } from '../../lib/base-command.js';
3
+ import { formatTable } from '../../lib/output.js';
4
+ export default class ConfigList extends BaseCommand {
5
+ static description = 'List all CLI configuration values.';
6
+ static examples = [
7
+ '<%= config.bin %> config list',
8
+ '<%= config.bin %> config list --json',
9
+ ];
10
+ async run() {
11
+ const { flags } = await this.parse(ConfigList);
12
+ const typedFlags = flags;
13
+ const configData = getAllConfig();
14
+ if (typedFlags.json) {
15
+ this.outputJson(configData);
16
+ return;
17
+ }
18
+ if (typedFlags.quiet) {
19
+ const entries = Object.entries(configData).filter(([, v]) => v !== undefined);
20
+ this.outputQuiet(entries.map(([k, v]) => `${k}=${String(v)}`));
21
+ return;
22
+ }
23
+ const entries = Object.entries(configData).filter(([, v]) => v !== undefined);
24
+ if (entries.length === 0) {
25
+ this.log(' No configuration set.');
26
+ return;
27
+ }
28
+ this.log(formatTable(['Key', 'Value'], entries.map(([k, v]) => [k, String(v)])));
29
+ }
30
+ }
31
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/config/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAC;IAEnE,MAAM,CAAU,QAAQ,GAAG;QACzB,+BAA+B;QAC/B,sCAAsC;KACvC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;QAElC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CACN,WAAW,CACT,CAAC,KAAK,EAAE,OAAO,CAAC,EAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACxC,CACF,CAAC;IACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ConfigReset extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../../src/commands/config/reset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,OAAgB,WAAW,SAA0C;IAErE,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB3B"}
@@ -0,0 +1,25 @@
1
+ import { resetConfig } from '../../lib/auth.js';
2
+ import { BaseCommand } from '../../lib/base-command.js';
3
+ import { successMessage } from '../../lib/output.js';
4
+ export default class ConfigReset extends BaseCommand {
5
+ static description = 'Reset CLI configuration to defaults.';
6
+ static examples = [
7
+ '<%= config.bin %> config reset',
8
+ '<%= config.bin %> config reset --json',
9
+ ];
10
+ async run() {
11
+ const { flags } = await this.parse(ConfigReset);
12
+ const typedFlags = flags;
13
+ resetConfig();
14
+ if (typedFlags.json) {
15
+ this.outputJson({ message: 'Configuration reset to defaults.' });
16
+ return;
17
+ }
18
+ if (typedFlags.quiet) {
19
+ this.outputQuiet('ok');
20
+ return;
21
+ }
22
+ this.log(successMessage('Configuration reset to defaults.'));
23
+ }
24
+ }
25
+ //# sourceMappingURL=reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../../src/commands/config/reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAU,WAAW,GAAG,sCAAsC,CAAC;IAErE,MAAM,CAAU,QAAQ,GAAG;QACzB,gCAAgC;QAChC,uCAAuC;KACxC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,WAAW,EAAE,CAAC;QAEd,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC/D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ConfigSet extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ value: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ run(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/commands/config/set.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,OAAgB,WAAW,SAAoC;IAE/D,OAAgB,QAAQ,WAEtB;IAEF,OAAgB,IAAI;;;MAGlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB3B"}
@@ -0,0 +1,29 @@
1
+ import { Args } from '@oclif/core';
2
+ import { setConfigValue } from '../../lib/auth.js';
3
+ import { BaseCommand } from '../../lib/base-command.js';
4
+ import { successMessage } from '../../lib/output.js';
5
+ export default class ConfigSet extends BaseCommand {
6
+ static description = 'Set a CLI configuration value.';
7
+ static examples = [
8
+ '<%= config.bin %> config set apiUrl https://api.staging.guaracloud.com',
9
+ ];
10
+ static args = {
11
+ key: Args.string({ description: 'Configuration key (e.g., apiUrl).', required: true }),
12
+ value: Args.string({ description: 'Value to set.', required: true }),
13
+ };
14
+ async run() {
15
+ const { args, flags } = await this.parse(ConfigSet);
16
+ const typedFlags = flags;
17
+ setConfigValue(args.key, args.value);
18
+ if (typedFlags.json) {
19
+ this.outputJson({ [args.key]: args.value });
20
+ return;
21
+ }
22
+ if (typedFlags.quiet) {
23
+ this.outputQuiet(args.value);
24
+ return;
25
+ }
26
+ this.log(successMessage(`Set ${args.key} = ${args.value}`));
27
+ }
28
+ }
29
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/commands/config/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAU,WAAW,GAAG,gCAAgC,CAAC;IAE/D,MAAM,CAAU,QAAQ,GAAG;QACzB,wEAAwE;KACzE,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACrB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACrE,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from '../lib/base-command.js';
2
+ export default class Deploy extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ branch: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ commit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ service: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ /** Delay between poll iterations. Protected to allow test overrides. */
18
+ protected pollIntervalMs: number;
19
+ /** Maximum time to poll before giving up. Protected to allow test overrides. */
20
+ protected pollTimeoutMs: number;
21
+ private pollDeployment;
22
+ /** Sleep helper. Protected to allow test overrides. */
23
+ protected sleep(ms: number): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AAiBvE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,OAAgB,WAAW,SAA6C;IAExE,OAAgB,QAAQ,WAMtB;IAEF,OAAgB,KAAK;;;;;;;;;;MAUnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAsE1B,wEAAwE;IACxE,SAAS,CAAC,cAAc,SAAoB;IAE5C,gFAAgF;IAChF,SAAS,CAAC,aAAa,SAAmB;YAE5B,cAAc;IAyB5B,uDAAuD;IACvD,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3C"}
@@ -0,0 +1,115 @@
1
+ import { Flags } from '@oclif/core';
2
+ import ora from 'ora';
3
+ import { BaseCommand } from '../lib/base-command.js';
4
+ import { errorMessage, successMessage } from '../lib/output.js';
5
+ // ─── Constants ──────────────────────────────────────────────────────────────
6
+ const POLL_INTERVAL_MS = 3_000;
7
+ const POLL_TIMEOUT_MS = 10 * 60 * 1_000; // 10 minutes
8
+ const TERMINAL_STATUSES = new Set([
9
+ 'healthy',
10
+ 'failed',
11
+ 'rolled_back',
12
+ 'superseded',
13
+ ]);
14
+ // ─── Deploy command ─────────────────────────────────────────────────────────
15
+ export default class Deploy extends BaseCommand {
16
+ static description = 'Trigger a new deployment for a service.';
17
+ static examples = [
18
+ '<%= config.bin %> deploy',
19
+ '<%= config.bin %> deploy --branch develop',
20
+ '<%= config.bin %> deploy --commit abc123f',
21
+ '<%= config.bin %> deploy --json',
22
+ '<%= config.bin %> deploy --quiet',
23
+ ];
24
+ static flags = {
25
+ ...BaseCommand.baseFlags,
26
+ branch: Flags.string({
27
+ char: 'b',
28
+ description: 'Git branch to deploy.',
29
+ }),
30
+ commit: Flags.string({
31
+ char: 'c',
32
+ description: 'Specific commit SHA to deploy.',
33
+ }),
34
+ };
35
+ async run() {
36
+ const { flags } = await this.parse(Deploy);
37
+ const typedFlags = flags;
38
+ const client = await this.initApiClient(typedFlags);
39
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
40
+ const dto = {};
41
+ if (typedFlags.branch)
42
+ dto.branch = typedFlags.branch;
43
+ if (typedFlags.commit)
44
+ dto.commit_sha = typedFlags.commit;
45
+ const { data: deployment } = await client.createDeployment(projectId, serviceId, dto);
46
+ // ── Quiet mode: output ID immediately ─────────────────────────────
47
+ if (typedFlags.quiet) {
48
+ this.outputQuiet(deployment.id);
49
+ return;
50
+ }
51
+ // ── JSON mode: poll then output final state ───────────────────────
52
+ if (typedFlags.json) {
53
+ const final = await this.pollDeployment(client, projectId, serviceId, deployment.id);
54
+ this.outputJson(final);
55
+ return;
56
+ }
57
+ // ── Interactive mode: spinner with elapsed timer ──────────────────
58
+ const spinner = ora(`Deploying (${deployment.trigger})...`).start();
59
+ const startTime = Date.now();
60
+ const final = await this.pollDeployment(client, projectId, serviceId, deployment.id, (status) => {
61
+ const elapsed = Math.round((Date.now() - startTime) / 1000);
62
+ switch (status) {
63
+ case 'pending': {
64
+ spinner.text = `Queued... (${String(elapsed)}s)`;
65
+ break;
66
+ }
67
+ case 'building': {
68
+ spinner.text = `Building... (${String(elapsed)}s)`;
69
+ break;
70
+ }
71
+ case 'deploying': {
72
+ spinner.text = `Deploying... (${String(elapsed)}s)`;
73
+ break;
74
+ }
75
+ }
76
+ });
77
+ if (final.status === 'healthy') {
78
+ spinner.succeed(successMessage(`Live at ${final.url ?? 'deployment complete'}`));
79
+ }
80
+ else if (final.status === 'failed') {
81
+ spinner.fail(errorMessage(`Deployment failed: ${final.error_message ?? 'unknown error'}`));
82
+ this.exit(1);
83
+ }
84
+ else {
85
+ spinner.stop();
86
+ this.log(` Deployment status: ${final.status}. Check with \`guara deployments list\`.`);
87
+ }
88
+ }
89
+ // ─── Polling logic ──────────────────────────────────────────────────────
90
+ /** Delay between poll iterations. Protected to allow test overrides. */
91
+ pollIntervalMs = POLL_INTERVAL_MS;
92
+ /** Maximum time to poll before giving up. Protected to allow test overrides. */
93
+ pollTimeoutMs = POLL_TIMEOUT_MS;
94
+ async pollDeployment(client, projectId, serviceId, deploymentId, onStatus) {
95
+ const deadline = Date.now() + this.pollTimeoutMs;
96
+ while (Date.now() < deadline) {
97
+ const { data } = await client.getDeployment(projectId, serviceId, deploymentId);
98
+ if (TERMINAL_STATUSES.has(data.status)) {
99
+ return data;
100
+ }
101
+ onStatus?.(data.status);
102
+ await this.sleep(this.pollIntervalMs);
103
+ }
104
+ // Timeout: fetch one final time to get the latest state
105
+ const { data: lastState } = await client.getDeployment(projectId, serviceId, deploymentId);
106
+ return lastState;
107
+ }
108
+ /** Sleep helper. Protected to allow test overrides. */
109
+ sleep(ms) {
110
+ return new Promise((resolve) => {
111
+ setTimeout(resolve, ms);
112
+ });
113
+ }
114
+ }
115
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class DeploymentsList extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/deployments/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,OAAgB,WAAW,SAA4C;IAEvE,OAAgB,QAAQ,WAKtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC3B"}
@@ -0,0 +1,40 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ import { formatTable, statusColor } from '../../lib/output.js';
3
+ export default class DeploymentsList extends BaseCommand {
4
+ static description = 'List deployment history for a service.';
5
+ static examples = [
6
+ '<%= config.bin %> deployments list',
7
+ '<%= config.bin %> deployments list --project my-project --service my-api',
8
+ '<%= config.bin %> deployments list --json',
9
+ '<%= config.bin %> deployments list --quiet',
10
+ ];
11
+ async run() {
12
+ const { flags } = await this.parse(DeploymentsList);
13
+ const typedFlags = flags;
14
+ const client = await this.initApiClient(typedFlags);
15
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
16
+ const response = await client.listDeployments(projectId, serviceId, { limit: 100 });
17
+ const deployments = response.data;
18
+ if (typedFlags.json) {
19
+ this.outputJson(deployments);
20
+ return;
21
+ }
22
+ if (typedFlags.quiet) {
23
+ this.outputQuiet(deployments.map((d) => d.id));
24
+ return;
25
+ }
26
+ if (deployments.length === 0) {
27
+ this.log('No deployments found. Trigger one with `guara deploy`.');
28
+ return;
29
+ }
30
+ this.log(formatTable(['ID', 'Status', 'Trigger', 'Branch', 'Commit', 'Created'], deployments.map((d) => [
31
+ d.id.slice(0, 8),
32
+ statusColor(d.status),
33
+ d.trigger,
34
+ d.branch ?? '\u2014',
35
+ d.commit_sha?.slice(0, 7) ?? '\u2014',
36
+ d.created_at,
37
+ ])));
38
+ }
39
+ }
40
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/deployments/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,MAAM,CAAU,WAAW,GAAG,wCAAwC,CAAC;IAEvE,MAAM,CAAU,QAAQ,GAAG;QACzB,oCAAoC;QACpC,0EAA0E;QAC1E,2CAA2C;QAC3C,4CAA4C;KAC7C,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;QAElC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CACN,WAAW,CACT,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAC1D,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAChB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,MAAM,IAAI,QAAQ;YACpB,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ;YACrC,CAAC,CAAC,UAAU;SACb,CAAC,CACH,CACF,CAAC;IACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class DomainsAdd extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ domain: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ service: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/domains/add.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,OAAgB,WAAW,SAAuC;IAElE,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;;;;;;MAMnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B3B"}
@@ -0,0 +1,41 @@
1
+ import { Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { BaseCommand } from '../../lib/base-command.js';
4
+ import { successMessage } from '../../lib/output.js';
5
+ export default class DomainsAdd extends BaseCommand {
6
+ static description = 'Add a custom domain to a service.';
7
+ static examples = [
8
+ '<%= config.bin %> domains add --domain api.myapp.com --project my-project --service my-api',
9
+ '<%= config.bin %> domains add --domain api.myapp.com --json',
10
+ ];
11
+ static flags = {
12
+ ...BaseCommand.baseFlags,
13
+ domain: Flags.string({
14
+ description: 'Domain name to add.',
15
+ required: true,
16
+ }),
17
+ };
18
+ async run() {
19
+ const { flags } = await this.parse(DomainsAdd);
20
+ const typedFlags = flags;
21
+ const client = await this.initApiClient(typedFlags);
22
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
23
+ const response = await client.createDomain(projectId, serviceId, {
24
+ domain: typedFlags.domain,
25
+ });
26
+ const domain = response.data;
27
+ if (typedFlags.json) {
28
+ this.outputJson(domain);
29
+ return;
30
+ }
31
+ if (typedFlags.quiet) {
32
+ this.outputQuiet(domain.id);
33
+ return;
34
+ }
35
+ this.log(successMessage(`Domain "${chalk.bold(domain.domain)}" added (${domain.status}).`));
36
+ if (domain.cname_target) {
37
+ this.log(` Add a CNAME record: ${chalk.bold(domain.domain)} ${chalk.dim('->')} ${chalk.bold(domain.cname_target)}`);
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/domains/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAU,WAAW,GAAG,mCAAmC,CAAC;IAElE,MAAM,CAAU,QAAQ,GAAG;QACzB,4FAA4F;QAC5F,6DAA6D;KAC9D,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,KAAyC,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE;YAC/D,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE7B,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAC5F,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CACN,yBAAyB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAC3G,CAAC;QACJ,CAAC;IACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class DomainsList extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/domains/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,OAAgB,WAAW,SAAiC;IAE5D,OAAgB,QAAQ,WAItB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B3B"}
@@ -0,0 +1,32 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ import { formatTable, statusColor } from '../../lib/output.js';
3
+ export default class DomainsList extends BaseCommand {
4
+ static description = 'List domains for a service.';
5
+ static examples = [
6
+ '<%= config.bin %> domains list --project my-project --service my-api',
7
+ '<%= config.bin %> domains list --json',
8
+ '<%= config.bin %> domains list --quiet',
9
+ ];
10
+ async run() {
11
+ const { flags } = await this.parse(DomainsList);
12
+ const typedFlags = flags;
13
+ const client = await this.initApiClient(typedFlags);
14
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
15
+ const response = await client.listDomains(projectId, serviceId);
16
+ const domains = response.data;
17
+ if (typedFlags.json) {
18
+ this.outputJson(domains);
19
+ return;
20
+ }
21
+ if (typedFlags.quiet) {
22
+ this.outputQuiet(domains.map((d) => d.domain));
23
+ return;
24
+ }
25
+ if (domains.length === 0) {
26
+ this.log('No domains found. Add one with `guara domains add --domain example.com`.');
27
+ return;
28
+ }
29
+ this.log(formatTable(['Domain', 'Type', 'Status'], domains.map((d) => [d.domain, d.type, statusColor(d.status)])));
30
+ }
31
+ }
32
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/domains/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAU,WAAW,GAAG,6BAA6B,CAAC;IAE5D,MAAM,CAAU,QAAQ,GAAG;QACzB,sEAAsE;QACtE,uCAAuC;QACvC,wCAAwC;KACzC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE9B,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CACN,WAAW,CACT,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAC9D,CACF,CAAC;IACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class DomainsRemove extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ domain: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ service: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/domains/remove.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAI1E,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,OAAgB,WAAW,SAA4C;IAEvE,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;;;;;;MAMnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyD3B"}
@@ -0,0 +1,60 @@
1
+ import * as clack from '@clack/prompts';
2
+ import { Flags } from '@oclif/core';
3
+ import chalk from 'chalk';
4
+ import { BaseCommand } from '../../lib/base-command.js';
5
+ import { CliError } from '../../lib/errors.js';
6
+ import { successMessage } from '../../lib/output.js';
7
+ export default class DomainsRemove extends BaseCommand {
8
+ static description = 'Remove a custom domain from a service.';
9
+ static examples = [
10
+ '<%= config.bin %> domains remove --domain api.myapp.com --project my-project --service my-api --yes',
11
+ '<%= config.bin %> domains remove --domain api.myapp.com --json --yes',
12
+ ];
13
+ static flags = {
14
+ ...BaseCommand.baseFlags,
15
+ domain: Flags.string({
16
+ description: 'Domain name to remove.',
17
+ required: true,
18
+ }),
19
+ };
20
+ async run() {
21
+ const { flags } = await this.parse(DomainsRemove);
22
+ const typedFlags = flags;
23
+ const client = await this.initApiClient(typedFlags);
24
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
25
+ // ── Confirmation ──────────────────────────────────────────────────────
26
+ if (!typedFlags.yes) {
27
+ if (typedFlags.json || typedFlags.quiet) {
28
+ throw new CliError('Confirmation required.', 1, 'Pass --yes to confirm removal when using --json or --quiet.');
29
+ }
30
+ const confirmed = await clack.confirm({
31
+ message: `Remove domain "${typedFlags.domain}"?`,
32
+ });
33
+ if (clack.isCancel(confirmed) || !confirmed) {
34
+ throw new CliError('Removal cancelled.', 0);
35
+ }
36
+ }
37
+ // ── Look up domain ID by name ─────────────────────────────────────────
38
+ const { data: domains } = await client.listDomains(projectId, serviceId);
39
+ const target = domains.find((d) => d.domain === typedFlags.domain);
40
+ if (!target) {
41
+ throw new CliError(`Domain "${typedFlags.domain}" not found.`, 1, 'Check existing domains with `guara domains list`.');
42
+ }
43
+ await client.deleteDomain(projectId, serviceId, target.id);
44
+ if (typedFlags.json) {
45
+ this.outputJson({
46
+ project: projectId,
47
+ service: serviceId,
48
+ domain: typedFlags.domain,
49
+ action: 'remove',
50
+ });
51
+ return;
52
+ }
53
+ if (typedFlags.quiet) {
54
+ this.outputQuiet(typedFlags.domain);
55
+ return;
56
+ }
57
+ this.log(successMessage(`Domain ${chalk.bold(typedFlags.domain)} removed.`));
58
+ }
59
+ }
60
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/domains/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAU,WAAW,GAAG,wCAAwC,CAAC;IAEvE,MAAM,CAAU,QAAQ,GAAG;QACzB,qGAAqG;QACrG,sEAAsE;KACvE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,wBAAwB;YACrC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,KAAyC,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE7E,yEAAyE;QACzE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACpB,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACxC,MAAM,IAAI,QAAQ,CAChB,wBAAwB,EACxB,CAAC,EACD,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;gBACpC,OAAO,EAAE,kBAAkB,UAAU,CAAC,MAAM,IAAI;aACjD,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5C,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAChB,WAAW,UAAU,CAAC,MAAM,cAAc,EAC1C,CAAC,EACD,mDAAmD,CACpD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3D,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC;gBACd,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/E,CAAC"}