pax8-cta 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 (224) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +659 -0
  3. package/demo-data/solutions/ProductQADemo_1_0_0_2_managed.zip +0 -0
  4. package/dist/commands/analyze.d.ts +28 -0
  5. package/dist/commands/analyze.d.ts.map +1 -0
  6. package/dist/commands/analyze.js +571 -0
  7. package/dist/commands/analyze.js.map +1 -0
  8. package/dist/commands/auth.d.ts +18 -0
  9. package/dist/commands/auth.d.ts.map +1 -0
  10. package/dist/commands/auth.js +171 -0
  11. package/dist/commands/auth.js.map +1 -0
  12. package/dist/commands/config.d.ts +34 -0
  13. package/dist/commands/config.d.ts.map +1 -0
  14. package/dist/commands/config.js +299 -0
  15. package/dist/commands/config.js.map +1 -0
  16. package/dist/commands/demo.d.ts +33 -0
  17. package/dist/commands/demo.d.ts.map +1 -0
  18. package/dist/commands/demo.js +362 -0
  19. package/dist/commands/demo.js.map +1 -0
  20. package/dist/commands/deploy.d.ts +18 -0
  21. package/dist/commands/deploy.d.ts.map +1 -0
  22. package/dist/commands/deploy.js +1186 -0
  23. package/dist/commands/deploy.js.map +1 -0
  24. package/dist/commands/deployments/helpers.d.ts +68 -0
  25. package/dist/commands/deployments/helpers.d.ts.map +1 -0
  26. package/dist/commands/deployments/helpers.js +414 -0
  27. package/dist/commands/deployments/helpers.js.map +1 -0
  28. package/dist/commands/deployments/index.d.ts +24 -0
  29. package/dist/commands/deployments/index.d.ts.map +1 -0
  30. package/dist/commands/deployments/index.js +47 -0
  31. package/dist/commands/deployments/index.js.map +1 -0
  32. package/dist/commands/deployments/list.d.ts +18 -0
  33. package/dist/commands/deployments/list.d.ts.map +1 -0
  34. package/dist/commands/deployments/list.js +97 -0
  35. package/dist/commands/deployments/list.js.map +1 -0
  36. package/dist/commands/deployments/show.d.ts +18 -0
  37. package/dist/commands/deployments/show.d.ts.map +1 -0
  38. package/dist/commands/deployments/show.js +81 -0
  39. package/dist/commands/deployments/show.js.map +1 -0
  40. package/dist/commands/deployments/undo.d.ts +18 -0
  41. package/dist/commands/deployments/undo.d.ts.map +1 -0
  42. package/dist/commands/deployments/undo.js +295 -0
  43. package/dist/commands/deployments/undo.js.map +1 -0
  44. package/dist/commands/export.d.ts +18 -0
  45. package/dist/commands/export.d.ts.map +1 -0
  46. package/dist/commands/export.js +133 -0
  47. package/dist/commands/export.js.map +1 -0
  48. package/dist/commands/import.d.ts +18 -0
  49. package/dist/commands/import.d.ts.map +1 -0
  50. package/dist/commands/import.js +129 -0
  51. package/dist/commands/import.js.map +1 -0
  52. package/dist/commands/init-config.d.ts +26 -0
  53. package/dist/commands/init-config.d.ts.map +1 -0
  54. package/dist/commands/init-config.js +123 -0
  55. package/dist/commands/init-config.js.map +1 -0
  56. package/dist/commands/init-validation.d.ts +47 -0
  57. package/dist/commands/init-validation.d.ts.map +1 -0
  58. package/dist/commands/init-validation.js +339 -0
  59. package/dist/commands/init-validation.js.map +1 -0
  60. package/dist/commands/init-wizard.d.ts +25 -0
  61. package/dist/commands/init-wizard.d.ts.map +1 -0
  62. package/dist/commands/init-wizard.js +433 -0
  63. package/dist/commands/init-wizard.js.map +1 -0
  64. package/dist/commands/init.d.ts +18 -0
  65. package/dist/commands/init.d.ts.map +1 -0
  66. package/dist/commands/init.js +46 -0
  67. package/dist/commands/init.js.map +1 -0
  68. package/dist/commands/resolve-url.d.ts +18 -0
  69. package/dist/commands/resolve-url.d.ts.map +1 -0
  70. package/dist/commands/resolve-url.js +126 -0
  71. package/dist/commands/resolve-url.js.map +1 -0
  72. package/dist/commands/setup.d.ts +18 -0
  73. package/dist/commands/setup.d.ts.map +1 -0
  74. package/dist/commands/setup.js +239 -0
  75. package/dist/commands/setup.js.map +1 -0
  76. package/dist/commands/solutions/drift-analysis.d.ts +73 -0
  77. package/dist/commands/solutions/drift-analysis.d.ts.map +1 -0
  78. package/dist/commands/solutions/drift-analysis.js +416 -0
  79. package/dist/commands/solutions/drift-analysis.js.map +1 -0
  80. package/dist/commands/solutions/drift.d.ts +32 -0
  81. package/dist/commands/solutions/drift.d.ts.map +1 -0
  82. package/dist/commands/solutions/drift.js +641 -0
  83. package/dist/commands/solutions/drift.js.map +1 -0
  84. package/dist/commands/solutions/fix-planner.d.ts +48 -0
  85. package/dist/commands/solutions/fix-planner.d.ts.map +1 -0
  86. package/dist/commands/solutions/fix-planner.js +43 -0
  87. package/dist/commands/solutions/fix-planner.js.map +1 -0
  88. package/dist/commands/solutions/helpers.d.ts +35 -0
  89. package/dist/commands/solutions/helpers.d.ts.map +1 -0
  90. package/dist/commands/solutions/helpers.js +54 -0
  91. package/dist/commands/solutions/helpers.js.map +1 -0
  92. package/dist/commands/solutions/index.d.ts +18 -0
  93. package/dist/commands/solutions/index.d.ts.map +1 -0
  94. package/dist/commands/solutions/index.js +30 -0
  95. package/dist/commands/solutions/index.js.map +1 -0
  96. package/dist/commands/solutions/list.d.ts +18 -0
  97. package/dist/commands/solutions/list.d.ts.map +1 -0
  98. package/dist/commands/solutions/list.js +174 -0
  99. package/dist/commands/solutions/list.js.map +1 -0
  100. package/dist/commands/solutions/remove.d.ts +18 -0
  101. package/dist/commands/solutions/remove.d.ts.map +1 -0
  102. package/dist/commands/solutions/remove.js +137 -0
  103. package/dist/commands/solutions/remove.js.map +1 -0
  104. package/dist/commands/solutions/risk-calculator.d.ts +33 -0
  105. package/dist/commands/solutions/risk-calculator.d.ts.map +1 -0
  106. package/dist/commands/solutions/risk-calculator.js +79 -0
  107. package/dist/commands/solutions/risk-calculator.js.map +1 -0
  108. package/dist/commands/solutions/show.d.ts +18 -0
  109. package/dist/commands/solutions/show.d.ts.map +1 -0
  110. package/dist/commands/solutions/show.js +165 -0
  111. package/dist/commands/solutions/show.js.map +1 -0
  112. package/dist/commands/status.d.ts +18 -0
  113. package/dist/commands/status.d.ts.map +1 -0
  114. package/dist/commands/status.js +573 -0
  115. package/dist/commands/status.js.map +1 -0
  116. package/dist/commands/telemetry.d.ts +18 -0
  117. package/dist/commands/telemetry.d.ts.map +1 -0
  118. package/dist/commands/telemetry.js +85 -0
  119. package/dist/commands/telemetry.js.map +1 -0
  120. package/dist/commands/tenants/health.d.ts +18 -0
  121. package/dist/commands/tenants/health.d.ts.map +1 -0
  122. package/dist/commands/tenants/health.js +172 -0
  123. package/dist/commands/tenants/health.js.map +1 -0
  124. package/dist/commands/tenants/helpers.d.ts +44 -0
  125. package/dist/commands/tenants/helpers.d.ts.map +1 -0
  126. package/dist/commands/tenants/helpers.js +72 -0
  127. package/dist/commands/tenants/helpers.js.map +1 -0
  128. package/dist/commands/tenants/index.d.ts +19 -0
  129. package/dist/commands/tenants/index.d.ts.map +1 -0
  130. package/dist/commands/tenants/index.js +39 -0
  131. package/dist/commands/tenants/index.js.map +1 -0
  132. package/dist/commands/tenants/inspect.d.ts +18 -0
  133. package/dist/commands/tenants/inspect.d.ts.map +1 -0
  134. package/dist/commands/tenants/inspect.js +176 -0
  135. package/dist/commands/tenants/inspect.js.map +1 -0
  136. package/dist/commands/tenants/list.d.ts +18 -0
  137. package/dist/commands/tenants/list.d.ts.map +1 -0
  138. package/dist/commands/tenants/list.js +144 -0
  139. package/dist/commands/tenants/list.js.map +1 -0
  140. package/dist/commands/tenants/manage.d.ts +20 -0
  141. package/dist/commands/tenants/manage.d.ts.map +1 -0
  142. package/dist/commands/tenants/manage.js +206 -0
  143. package/dist/commands/tenants/manage.js.map +1 -0
  144. package/dist/commands/tenants/show.d.ts +18 -0
  145. package/dist/commands/tenants/show.d.ts.map +1 -0
  146. package/dist/commands/tenants/show.js +191 -0
  147. package/dist/commands/tenants/show.js.map +1 -0
  148. package/dist/commands/validate.d.ts +18 -0
  149. package/dist/commands/validate.d.ts.map +1 -0
  150. package/dist/commands/validate.js +536 -0
  151. package/dist/commands/validate.js.map +1 -0
  152. package/dist/index.d.ts +19 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +258 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/auth.d.ts +51 -0
  157. package/dist/lib/auth.d.ts.map +1 -0
  158. package/dist/lib/auth.js +153 -0
  159. package/dist/lib/auth.js.map +1 -0
  160. package/dist/lib/banner.d.ts +19 -0
  161. package/dist/lib/banner.d.ts.map +1 -0
  162. package/dist/lib/banner.js +78 -0
  163. package/dist/lib/banner.js.map +1 -0
  164. package/dist/lib/command-wrapper.d.ts +56 -0
  165. package/dist/lib/command-wrapper.d.ts.map +1 -0
  166. package/dist/lib/command-wrapper.js +71 -0
  167. package/dist/lib/command-wrapper.js.map +1 -0
  168. package/dist/lib/credentials.d.ts +56 -0
  169. package/dist/lib/credentials.d.ts.map +1 -0
  170. package/dist/lib/credentials.js +146 -0
  171. package/dist/lib/credentials.js.map +1 -0
  172. package/dist/lib/demo-banner.d.ts +15 -0
  173. package/dist/lib/demo-banner.d.ts.map +1 -0
  174. package/dist/lib/demo-banner.js +33 -0
  175. package/dist/lib/demo-banner.js.map +1 -0
  176. package/dist/lib/error-handler.d.ts +51 -0
  177. package/dist/lib/error-handler.d.ts.map +1 -0
  178. package/dist/lib/error-handler.js +458 -0
  179. package/dist/lib/error-handler.js.map +1 -0
  180. package/dist/lib/errors.d.ts +61 -0
  181. package/dist/lib/errors.d.ts.map +1 -0
  182. package/dist/lib/errors.js +168 -0
  183. package/dist/lib/errors.js.map +1 -0
  184. package/dist/lib/formatters.d.ts +55 -0
  185. package/dist/lib/formatters.d.ts.map +1 -0
  186. package/dist/lib/formatters.js +163 -0
  187. package/dist/lib/formatters.js.map +1 -0
  188. package/dist/lib/graph-client.d.ts +74 -0
  189. package/dist/lib/graph-client.d.ts.map +1 -0
  190. package/dist/lib/graph-client.js +231 -0
  191. package/dist/lib/graph-client.js.map +1 -0
  192. package/dist/lib/input.d.ts +22 -0
  193. package/dist/lib/input.d.ts.map +1 -0
  194. package/dist/lib/input.js +120 -0
  195. package/dist/lib/input.js.map +1 -0
  196. package/dist/lib/interactive-wizard.d.ts +26 -0
  197. package/dist/lib/interactive-wizard.d.ts.map +1 -0
  198. package/dist/lib/interactive-wizard.js +550 -0
  199. package/dist/lib/interactive-wizard.js.map +1 -0
  200. package/dist/lib/oss-surface.d.ts +21 -0
  201. package/dist/lib/oss-surface.d.ts.map +1 -0
  202. package/dist/lib/oss-surface.js +29 -0
  203. package/dist/lib/oss-surface.js.map +1 -0
  204. package/dist/lib/output.d.ts +74 -0
  205. package/dist/lib/output.d.ts.map +1 -0
  206. package/dist/lib/output.js +156 -0
  207. package/dist/lib/output.js.map +1 -0
  208. package/dist/lib/picker.d.ts +75 -0
  209. package/dist/lib/picker.d.ts.map +1 -0
  210. package/dist/lib/picker.js +115 -0
  211. package/dist/lib/picker.js.map +1 -0
  212. package/dist/lib/repl.d.ts +19 -0
  213. package/dist/lib/repl.d.ts.map +1 -0
  214. package/dist/lib/repl.js +158 -0
  215. package/dist/lib/repl.js.map +1 -0
  216. package/dist/lib/spinner.d.ts +41 -0
  217. package/dist/lib/spinner.d.ts.map +1 -0
  218. package/dist/lib/spinner.js +126 -0
  219. package/dist/lib/spinner.js.map +1 -0
  220. package/dist/lib/telemetry.d.ts +96 -0
  221. package/dist/lib/telemetry.d.ts.map +1 -0
  222. package/dist/lib/telemetry.js +367 -0
  223. package/dist/lib/telemetry.js.map +1 -0
  224. package/package.json +68 -0
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import chalk from "chalk";
17
+ import { formatError, printError, CtaError } from "./error-handler.js";
18
+ /**
19
+ * Base CLI error with exit code.
20
+ * Exit code 1 = runtime error (config not found, network failure, etc.)
21
+ */
22
+ export class CliError extends Error {
23
+ exitCode;
24
+ constructor(message, exitCode = 1) {
25
+ super(message);
26
+ this.exitCode = exitCode;
27
+ this.name = "CliError";
28
+ }
29
+ }
30
+ /**
31
+ * Usage error — invalid options, missing required args, etc.
32
+ * Exit code 2.
33
+ */
34
+ export class UsageError extends CliError {
35
+ constructor(message) {
36
+ super(message, 2);
37
+ this.name = "UsageError";
38
+ }
39
+ }
40
+ /**
41
+ * Detect whether JSON output mode is active.
42
+ *
43
+ * Two signals (OR'd):
44
+ * 1. `--json` is present anywhere in process.argv (simple substring check).
45
+ * 2. stdout is not a TTY (piped/redirected).
46
+ *
47
+ * Exported so that issue #345 (proper Commander-driven --json flag) can replace
48
+ * this with a single authoritative source of truth once that flag lands.
49
+ */
50
+ export function isJsonOutputMode() {
51
+ return process.argv.includes("--json") || !process.stdout.isTTY;
52
+ }
53
+ /**
54
+ * Build the JSON error payload from any error value.
55
+ *
56
+ * Schema:
57
+ * ```json
58
+ * {
59
+ * "error": {
60
+ * "code": "...",
61
+ * "message": "...",
62
+ * "causes": [...],
63
+ * "recovery": [...],
64
+ * "context": { ... }
65
+ * }
66
+ * }
67
+ * ```
68
+ *
69
+ * Plain `Error` / unknown become `{ error: { message } }`.
70
+ * Stack traces are never included.
71
+ */
72
+ function buildJsonError(error) {
73
+ // ZodError — duck-typed so we don't need to import zod directly in the CLI package.
74
+ // ZodError instances always have an `errors` array of `{ path, message }` objects.
75
+ if (error instanceof Error && error.name === "ZodError" && Array.isArray(error.errors)) {
76
+ const zodErrors = error.errors;
77
+ return {
78
+ error: {
79
+ code: "ERROR_VALIDATION",
80
+ message: "Validation failed",
81
+ causes: zodErrors.map((e) => `${e.path.join(".")}: ${e.message}`),
82
+ recovery: ["Check the input values and retry"],
83
+ },
84
+ };
85
+ }
86
+ // CtaError (CLI structured error) — emit all fields directly
87
+ if (error instanceof CtaError) {
88
+ const payload = {
89
+ code: error.code,
90
+ message: error.message,
91
+ causes: error.causes,
92
+ recovery: error.recovery,
93
+ };
94
+ if (error.context && Object.keys(error.context).length > 0) {
95
+ payload.context = error.context;
96
+ }
97
+ return { error: payload };
98
+ }
99
+ // CliError / UsageError — already actionable (message authored by the
100
+ // caller). Emit the message verbatim instead of running it through the
101
+ // regex formatter, which can mis-classify "X not found" messages as a
102
+ // generic ERROR_CONFIG_NOT_FOUND. (Issue #360.)
103
+ if (error instanceof CliError) {
104
+ return {
105
+ error: {
106
+ code: error.exitCode === 2 ? "ERROR_USAGE" : "ERROR_CLI",
107
+ message: error.message,
108
+ },
109
+ };
110
+ }
111
+ // For any other error, run through the structured formatter and emit result
112
+ try {
113
+ const structured = formatError(error);
114
+ const payload = {
115
+ code: structured.code,
116
+ message: structured.message,
117
+ causes: structured.causes,
118
+ recovery: structured.recovery,
119
+ };
120
+ if (structured.context && Object.keys(structured.context).length > 0) {
121
+ payload.context = structured.context;
122
+ }
123
+ return { error: payload };
124
+ }
125
+ catch {
126
+ // Ultimate fallback — plain Error or unknown
127
+ const message = error instanceof Error ? error.message : String(error);
128
+ return { error: { message } };
129
+ }
130
+ }
131
+ /**
132
+ * Standard error handler for CLI commands.
133
+ *
134
+ * - Stops the spinner with a fail message
135
+ * - When JSON mode is active (--json flag or piped stdout), emits a single JSON
136
+ * object to stderr with structured `code`, `message`, `causes`, and `recovery`
137
+ * fields — suitable for LLM-agent consumption.
138
+ * - Otherwise, uses the human-formatted handler (formatError/printError).
139
+ * - Exits with the appropriate code (1=runtime, 2=usage).
140
+ */
141
+ export function handleCommandError(error, spinner, failMessage) {
142
+ // Stop the spinner before any output
143
+ if (spinner) {
144
+ spinner.fail(failMessage ? chalk.red(failMessage) : chalk.red("Command failed"));
145
+ }
146
+ if (isJsonOutputMode()) {
147
+ // JSON mode: emit structured payload to stderr, no human-formatted text
148
+ const payload = buildJsonError(error);
149
+ process.stderr.write(JSON.stringify(payload) + "\n");
150
+ process.exit(error instanceof CliError ? error.exitCode : 1);
151
+ }
152
+ // Human-readable mode (original behaviour preserved exactly)
153
+ if (error instanceof CliError) {
154
+ if (!spinner && failMessage) {
155
+ console.error(chalk.red(failMessage));
156
+ }
157
+ // CliError messages are already actionable — print directly
158
+ console.error(chalk.red(`\nError: ${error.message}`));
159
+ process.exit(error.exitCode);
160
+ }
161
+ if (!spinner && failMessage) {
162
+ console.error(chalk.red(failMessage));
163
+ }
164
+ const structured = formatError(error);
165
+ printError(structured);
166
+ process.exit(1);
167
+ }
168
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGxB;IAFT,YACE,OAAe,EACR,WAAmB,CAAC;QAE3B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,aAAQ,GAAR,QAAQ,CAAY;QAG3B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,QAAQ;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAUD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,cAAc,CAAC,KAAc;IACpC,oFAAoF;IACpF,mFAAmF;IACnF,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAE,KAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAChG,MAAM,SAAS,GAAI,KAAa,CAAC,MAG/B,CAAC;QACH,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,mBAAmB;gBAC5B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;gBACjE,QAAQ,EAAE,CAAC,kCAAkC,CAAC;aAC/C;SACF,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAA4B;YACvC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IACtE,gDAAgD;IAChD,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW;gBACxD,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;SACF,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,OAAO,GAA4B;YACvC,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,CAAC;QACF,IAAI,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;QAC7C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,OAA4B,EAC5B,WAAoB;IAEpB,qCAAqC;IACrC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACvB,wEAAwE;QACxE,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,6DAA6D;IAC7D,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,4DAA4D;QAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,UAAU,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Shared formatting utilities for CLI output
18
+ */
19
+ /**
20
+ * Format a date string as a human-readable "time ago" string
21
+ */
22
+ export declare function formatTimeAgo(dateString: string): string;
23
+ /**
24
+ * Format a duration in milliseconds as a human-readable string
25
+ */
26
+ export declare function formatDuration(ms: number): string;
27
+ /**
28
+ * Calculate and format duration between two date strings
29
+ */
30
+ export declare function calculateDuration(startedAt?: string, completedAt?: string): string;
31
+ /**
32
+ * Deployment status type
33
+ */
34
+ export type DeploymentStatus = "completed" | "failed" | "in_progress" | "pending" | "scheduled" | "awaiting_approval" | "approved" | "rejected" | "cancelled" | "rolling_back" | "rolled_back";
35
+ /**
36
+ * Format a deployment status with color and icon
37
+ * @param status - The deployment status
38
+ * @param style - 'default' for standard labels, 'tracking' for the per-deployment
39
+ * tracking view (slightly different verbiage / icons for the
40
+ * progress-oriented status table)
41
+ */
42
+ export declare function formatStatus(status: string, style?: "default" | "tracking"): string;
43
+ /**
44
+ * Truncate a string to a maximum length, adding ellipsis if needed
45
+ */
46
+ export declare function truncate(str: string, maxLength: number): string;
47
+ /**
48
+ * Truncate an ID string (defaults to 15 chars for UUIDs)
49
+ */
50
+ export declare function truncateId(id: string, maxLength?: number): string;
51
+ /**
52
+ * Safely format an error to a string
53
+ */
54
+ export declare function formatError(error: unknown): string;
55
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;GAEG;AAMH;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlF;AAMD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,aAAa,GACb,SAAS,GACT,WAAW,GACX,mBAAmB,GACnB,UAAU,GACV,UAAU,GACV,WAAW,GACX,cAAc,GACd,aAAa,CAAC;AAElB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,GAAG,UAAsB,GAAG,MAAM,CAyD9F;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAGrE;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIlD"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import chalk from "chalk";
17
+ /**
18
+ * Shared formatting utilities for CLI output
19
+ */
20
+ // ============================================================================
21
+ // Time Formatting
22
+ // ============================================================================
23
+ /**
24
+ * Format a date string as a human-readable "time ago" string
25
+ */
26
+ export function formatTimeAgo(dateString) {
27
+ const now = Date.now();
28
+ const then = new Date(dateString).getTime();
29
+ const diffMs = now - then;
30
+ const seconds = Math.floor(diffMs / 1000);
31
+ const minutes = Math.floor(seconds / 60);
32
+ const hours = Math.floor(minutes / 60);
33
+ const days = Math.floor(hours / 24);
34
+ if (days > 0)
35
+ return `${days}d ago`;
36
+ if (hours > 0)
37
+ return `${hours}h ago`;
38
+ if (minutes > 0)
39
+ return `${minutes}m ago`;
40
+ if (seconds > 0)
41
+ return `${seconds}s ago`;
42
+ return "just now";
43
+ }
44
+ /**
45
+ * Format a duration in milliseconds as a human-readable string
46
+ */
47
+ export function formatDuration(ms) {
48
+ if (ms < 1000)
49
+ return `${ms}ms`;
50
+ if (ms < 60000)
51
+ return `${Math.round(ms / 1000)}s`;
52
+ const minutes = Math.floor(ms / 60000);
53
+ const seconds = Math.round((ms % 60000) / 1000);
54
+ return `${minutes}m ${seconds}s`;
55
+ }
56
+ /**
57
+ * Calculate and format duration between two date strings
58
+ */
59
+ export function calculateDuration(startedAt, completedAt) {
60
+ if (!startedAt)
61
+ return "-";
62
+ const start = new Date(startedAt).getTime();
63
+ const end = completedAt ? new Date(completedAt).getTime() : Date.now();
64
+ const durationMs = end - start;
65
+ return formatDuration(durationMs);
66
+ }
67
+ /**
68
+ * Format a deployment status with color and icon
69
+ * @param status - The deployment status
70
+ * @param style - 'default' for standard labels, 'tracking' for the per-deployment
71
+ * tracking view (slightly different verbiage / icons for the
72
+ * progress-oriented status table)
73
+ */
74
+ export function formatStatus(status, style = "default") {
75
+ if (style === "tracking") {
76
+ switch (status) {
77
+ case "completed":
78
+ return chalk.green("✓ Completed");
79
+ case "failed":
80
+ return chalk.red("✗ Failed");
81
+ case "in_progress":
82
+ return chalk.yellow("● In Progress");
83
+ case "pending":
84
+ return chalk.gray("○ Queued");
85
+ case "scheduled":
86
+ return chalk.cyan("◷ Scheduled");
87
+ case "awaiting_approval":
88
+ return chalk.magenta("⊙ Awaiting Approval");
89
+ case "approved":
90
+ return chalk.green("✓ Approved");
91
+ case "rejected":
92
+ return chalk.red("✗ Rejected");
93
+ case "cancelled":
94
+ return chalk.gray("⊘ Cancelled");
95
+ case "rolling_back":
96
+ return chalk.yellow("↩ Rolling Back");
97
+ case "rolled_back":
98
+ return chalk.blue("↩ Rolled Back");
99
+ default:
100
+ return status;
101
+ }
102
+ }
103
+ // Default style
104
+ switch (status) {
105
+ case "completed":
106
+ return chalk.green("✓ Completed");
107
+ case "failed":
108
+ return chalk.red("✗ Failed");
109
+ case "in_progress":
110
+ return chalk.yellow("● In Progress");
111
+ case "pending":
112
+ return chalk.gray("○ Pending");
113
+ case "scheduled":
114
+ return chalk.cyan("◷ Scheduled");
115
+ case "awaiting_approval":
116
+ return chalk.magenta("⊙ Awaiting Approval");
117
+ case "approved":
118
+ return chalk.green("✓ Approved");
119
+ case "rejected":
120
+ return chalk.red("✗ Rejected");
121
+ case "cancelled":
122
+ return chalk.gray("⊘ Cancelled");
123
+ case "rolling_back":
124
+ return chalk.yellow("↩ Rolling Back");
125
+ case "rolled_back":
126
+ return chalk.blue("↩ Rolled Back");
127
+ default:
128
+ return status;
129
+ }
130
+ }
131
+ // ============================================================================
132
+ // String Truncation
133
+ // ============================================================================
134
+ /**
135
+ * Truncate a string to a maximum length, adding ellipsis if needed
136
+ */
137
+ export function truncate(str, maxLength) {
138
+ if (str.length <= maxLength)
139
+ return str;
140
+ return str.slice(0, maxLength - 3) + "...";
141
+ }
142
+ /**
143
+ * Truncate an ID string (defaults to 15 chars for UUIDs)
144
+ */
145
+ export function truncateId(id, maxLength = 15) {
146
+ if (id.length <= maxLength)
147
+ return id;
148
+ return id.slice(0, maxLength) + "...";
149
+ }
150
+ // ============================================================================
151
+ // Error Formatting
152
+ // ============================================================================
153
+ /**
154
+ * Safely format an error to a string
155
+ */
156
+ export function formatError(error) {
157
+ if (error instanceof Error)
158
+ return error.message;
159
+ if (typeof error === "string")
160
+ return error;
161
+ return String(error);
162
+ }
163
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export interface AppRegistration {
17
+ id: string;
18
+ appId: string;
19
+ displayName: string;
20
+ signInAudience: string;
21
+ }
22
+ export interface ClientSecretResult {
23
+ secretId: string;
24
+ secretText: string;
25
+ displayName: string;
26
+ endDateTime: string;
27
+ }
28
+ export interface GraphClientConfig {
29
+ accessToken: string;
30
+ }
31
+ /**
32
+ * Microsoft Graph API client for managing Azure AD app registrations
33
+ */
34
+ export declare class GraphClient {
35
+ private accessToken;
36
+ private readonly baseUrl;
37
+ constructor(config: GraphClientConfig);
38
+ /**
39
+ * Create a new app registration in Azure AD
40
+ */
41
+ createAppRegistration(displayName: string): Promise<AppRegistration>;
42
+ /**
43
+ * Find existing app registration by display name
44
+ */
45
+ findExistingApp(displayName: string): Promise<AppRegistration | null>;
46
+ /**
47
+ * List all app registrations the user owns or has access to
48
+ */
49
+ listAppRegistrations(): Promise<AppRegistration[]>;
50
+ /**
51
+ * Add Dynamics CRM API permission to an app
52
+ */
53
+ addDynamicsPermission(appObjectId: string): Promise<void>;
54
+ /**
55
+ * Grant admin consent for app permissions
56
+ * Note: This requires admin privileges and may not work for all users
57
+ */
58
+ grantAdminConsent(appId: string): Promise<void>;
59
+ /**
60
+ * Create a new client secret for the app
61
+ */
62
+ createClientSecret(appObjectId: string, description: string, validityMonths?: number): Promise<ClientSecretResult>;
63
+ /**
64
+ * Get service principal for an app (needed for some operations)
65
+ */
66
+ getServicePrincipal(appId: string): Promise<{
67
+ id: string;
68
+ } | null>;
69
+ /**
70
+ * Create service principal for an app if it doesn't exist
71
+ */
72
+ ensureServicePrincipal(appId: string): Promise<string>;
73
+ }
74
+ //# sourceMappingURL=graph-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../src/lib/graph-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAElD,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAmC1E;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAmB3E;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAmBxD;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqE/D;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrD;;OAEG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,MAAW,GAC1B,OAAO,CAAC,kBAAkB,CAAC;IAsC9B;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAexE;;OAEG;IACG,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB7D"}