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,176 @@
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 { Command } from "commander";
17
+ import chalk from "chalk";
18
+ import { createSpinner, isQuietMode } from "../../lib/spinner.js";
19
+ import { GdapClient } from "@pax8-cta/core";
20
+ import { getClientSecretWithFallback } from "../../lib/credentials.js";
21
+ import { handleCommandError } from "../../lib/errors.js";
22
+ import { withResolvedDestinations } from "../../lib/command-wrapper.js";
23
+ import { showDemoBanner } from "../../lib/demo-banner.js";
24
+ export const inspectCommand = new Command("inspect")
25
+ .alias("validate")
26
+ .description("Validate connectivity and permissions for each tenant")
27
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
28
+ .option("-t, --tag <tags...>", "Filter by tags")
29
+ .addHelpText("after", `
30
+ Examples:
31
+ tenants inspect Validate all enabled tenants
32
+ tenants inspect -t production Validate only tenants tagged "production"
33
+ `)
34
+ .action(async (options) => {
35
+ const spinner = createSpinner("Loading fleet manifest...").start();
36
+ try {
37
+ // Issue #385: route through withResolvedDestinations so demo mode
38
+ // doesn't try to load ./config/tenants.yaml (would throw
39
+ // ERROR_CONFIG_NOT_FOUND). In demo mode we synthesize GDAP/connectivity
40
+ // status from each tenant's riskProfile metadata.
41
+ await withResolvedDestinations(options, (destinations) => runDemoInspection(spinner, destinations), ({ config, destinations }) => runRealInspection(spinner, destinations, config.partner));
42
+ }
43
+ catch (error) {
44
+ handleCommandError(error, spinner, "Inspection failed");
45
+ }
46
+ });
47
+ function printReport(results) {
48
+ console.log();
49
+ console.log(chalk.bold("📋 Inspection Report"));
50
+ console.log("─".repeat(60));
51
+ const sameTenantRoutes = results.filter((r) => r.sameTenant).length;
52
+ const clearRoutes = results.filter((r) => r.hasPowerPlatformAccess && !r.sameTenant).length;
53
+ const missingClearance = results.filter((r) => r.hasRelationship && !r.hasPowerPlatformAccess && !r.sameTenant).length;
54
+ const noRoute = results.filter((r) => !r.hasRelationship && !r.error && !r.sameTenant).length;
55
+ const errors = results.filter((r) => r.error).length;
56
+ if (sameTenantRoutes > 0) {
57
+ console.log(` ${chalk.green("✓")} Same-Tenant Auth: ${sameTenantRoutes}`);
58
+ }
59
+ console.log(` ${chalk.green("✓")} Routes Clear: ${clearRoutes}`);
60
+ console.log(` ${chalk.yellow("⚠")} Missing Clearance: ${missingClearance}`);
61
+ console.log(` ${chalk.red("✗")} No Route: ${noRoute}`);
62
+ console.log(` ${chalk.red("✗")} Inspection Errors: ${errors}`);
63
+ console.log();
64
+ const passingRoutes = clearRoutes + sameTenantRoutes;
65
+ if (passingRoutes === results.length) {
66
+ console.log(chalk.green("✅ All tenants inspected and ready for deployment!"));
67
+ }
68
+ else {
69
+ console.log(chalk.yellow(`⚠️ ${results.length - passingRoutes} tenant(s) have connectivity issues.`));
70
+ }
71
+ }
72
+ /**
73
+ * Demo inspection — uses each demo tenant's riskProfile/gdapStatus metadata
74
+ * to synthesize a plausible inspection report without any network I/O.
75
+ */
76
+ function runDemoInspection(spinner, destinations) {
77
+ spinner.succeed(`Loaded ${destinations.length} destinations to inspect`);
78
+ if (!isQuietMode()) {
79
+ showDemoBanner();
80
+ }
81
+ console.log();
82
+ console.log(chalk.bold("🔍 Inspecting Tenant Connectivity"));
83
+ console.log("─".repeat(60));
84
+ const results = destinations.map((tenant) => {
85
+ // Pull the demo metadata that drives the synthetic report. The shape
86
+ // matches DemoTenantMetadata in core/src/mock/demo-data.ts.
87
+ const meta = (tenant.metadata ?? {});
88
+ // "valid" GDAP → route clear; anything else → degraded in some way.
89
+ const hasRelationship = meta.gdapStatus !== undefined && meta.gdapStatus !== "expired";
90
+ const hasPowerPlatformAccess = meta.gdapStatus === "valid" || meta.gdapStatus === "expiring_soon";
91
+ if (hasPowerPlatformAccess) {
92
+ console.log(`✔ ${tenant.name}: ${chalk.green("Route clear ✓")}`);
93
+ }
94
+ else if (hasRelationship) {
95
+ console.log(`⚠ ${tenant.name}: ${chalk.yellow("Missing customs clearance (Power Platform Admin role)")}`);
96
+ }
97
+ else {
98
+ console.log(`✖ ${tenant.name}: ${chalk.red("No GDAP relationship configured")}`);
99
+ }
100
+ return {
101
+ name: tenant.name,
102
+ tenantId: tenant.tenantId,
103
+ sameTenant: false,
104
+ hasRelationship,
105
+ hasPowerPlatformAccess,
106
+ };
107
+ });
108
+ printReport(results);
109
+ }
110
+ async function runRealInspection(spinner, destinations, partner) {
111
+ spinner.succeed(`Loaded ${destinations.length} destinations to inspect`);
112
+ // Get client secret
113
+ const clientSecret = await getClientSecretWithFallback();
114
+ // Create GDAP client
115
+ const gdapClient = new GdapClient({
116
+ tenantId: partner.tenantId,
117
+ clientId: partner.clientId,
118
+ clientSecret,
119
+ });
120
+ console.log();
121
+ console.log(chalk.bold("🔍 Inspecting Tenant Connectivity"));
122
+ console.log("─".repeat(60));
123
+ const results = [];
124
+ for (const tenant of destinations) {
125
+ spinner.start(`Inspecting route to ${tenant.name}...`);
126
+ // Same-tenant auth: GDAP is not required when the destination tenant
127
+ // is the partner's own tenant.
128
+ if (tenant.tenantId === partner.tenantId) {
129
+ results.push({
130
+ name: tenant.name,
131
+ tenantId: tenant.tenantId,
132
+ sameTenant: true,
133
+ hasRelationship: true,
134
+ hasPowerPlatformAccess: true,
135
+ });
136
+ spinner.succeed(`${tenant.name}: ${chalk.green("Same-tenant auth (GDAP not required)")}`);
137
+ continue;
138
+ }
139
+ try {
140
+ const hasRelationship = await gdapClient.hasActiveRelationship(tenant.tenantId);
141
+ const hasPowerPlatformAccess = hasRelationship
142
+ ? await gdapClient.validatePowerPlatformAccess(tenant.tenantId)
143
+ : false;
144
+ results.push({
145
+ name: tenant.name,
146
+ tenantId: tenant.tenantId,
147
+ sameTenant: false,
148
+ hasRelationship,
149
+ hasPowerPlatformAccess,
150
+ });
151
+ if (hasPowerPlatformAccess) {
152
+ spinner.succeed(`${tenant.name}: ${chalk.green("Route clear ✓")}`);
153
+ }
154
+ else if (hasRelationship) {
155
+ spinner.warn(`${tenant.name}: ${chalk.yellow("Missing customs clearance (Power Platform Admin role)")}`);
156
+ }
157
+ else {
158
+ spinner.fail(`${tenant.name}: ${chalk.red("No GDAP relationship configured")}`);
159
+ }
160
+ }
161
+ catch (error) {
162
+ const errorMsg = error instanceof Error ? error.message : String(error);
163
+ results.push({
164
+ name: tenant.name,
165
+ tenantId: tenant.tenantId,
166
+ sameTenant: false,
167
+ hasRelationship: false,
168
+ hasPowerPlatformAccess: false,
169
+ error: errorMsg,
170
+ });
171
+ spinner.fail(`${tenant.name}: ${chalk.red(errorMsg)}`);
172
+ }
173
+ }
174
+ printReport(results);
175
+ }
176
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/tenants/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
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 { Command } from "commander";
17
+ export declare const listCommand: Command;
18
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/tenants/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,eAAO,MAAM,WAAW,SAgCpB,CAAC"}
@@ -0,0 +1,144 @@
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 { Command } from "commander";
17
+ import { resolve } from "node:path";
18
+ import chalk from "chalk";
19
+ import { createSpinner } from "../../lib/spinner.js";
20
+ import { loadConfig, DEMO_TENANTS } from "@pax8-cta/core";
21
+ import { withDemoMode } from "../../lib/command-wrapper.js";
22
+ import { handleCommandError } from "../../lib/errors.js";
23
+ import { output, resolveFormat } from "../../lib/output.js";
24
+ import { isQuietMode } from "../../lib/spinner.js";
25
+ import { showDemoBanner } from "../../lib/demo-banner.js";
26
+ const COLUMNS = [
27
+ { key: "name", header: "Destination" },
28
+ { key: "tenantIdShort", header: "Tenant ID" },
29
+ { key: "environmentUrl", header: "Port (Environment)" },
30
+ { key: "tags", header: "Tags" },
31
+ {
32
+ key: "active",
33
+ header: "Active",
34
+ format: (v) => (v === "Yes" ? chalk.green("Yes") : chalk.red("No")),
35
+ },
36
+ ];
37
+ export const listCommand = new Command("list")
38
+ .alias("ls")
39
+ .description("List all configured target tenants")
40
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
41
+ .option("-t, --tag <tags...>", "Filter by tags")
42
+ .option("-s, --search <query>", "Search by name, ID, or environment URL")
43
+ .option("--status <status>", "Filter by status (enabled|disabled|all)", "all")
44
+ .option("--json", "Output as JSON")
45
+ .option("--quiet", "Suppress all output")
46
+ .addHelpText("after", `
47
+ Examples:
48
+ tenants list List all configured tenants
49
+ tenants list -s enabled Show only enabled tenants
50
+ tenants list -t production --json Filter by tag and output as JSON
51
+ tenants list --ids-only | xargs -I{} deployments list --tenant {}
52
+ `)
53
+ .action(async (options, cmd) => {
54
+ // Merge local options with global flags (e.g. --ids-only, --json from root program)
55
+ const opts = { ...options, ...cmd.optsWithGlobals() };
56
+ const spinner = createSpinner("Loading fleet manifest...").start();
57
+ try {
58
+ await withDemoMode(() => listDemo(spinner, opts), () => listReal(spinner, opts));
59
+ }
60
+ catch (error) {
61
+ handleCommandError(error, spinner, "Failed to load fleet manifest");
62
+ }
63
+ });
64
+ function applyFilters(destinations, options) {
65
+ let filtered = [...destinations];
66
+ if (options.search) {
67
+ const q = options.search.toLowerCase();
68
+ filtered = filtered.filter((t) => t.name.toLowerCase().includes(q) ||
69
+ t.tenantId.toLowerCase().includes(q) ||
70
+ t.environmentUrl.toLowerCase().includes(q));
71
+ }
72
+ if (options.tag && options.tag.length > 0) {
73
+ filtered = filtered.filter((t) => options.tag.every((tag) => t.tags?.includes(tag)));
74
+ }
75
+ if (options.status === "enabled") {
76
+ filtered = filtered.filter((t) => t.enabled);
77
+ }
78
+ else if (options.status === "disabled") {
79
+ filtered = filtered.filter((t) => !t.enabled);
80
+ }
81
+ return filtered;
82
+ }
83
+ // resolveFormat is imported from output.ts — see that module for precedence rules.
84
+ function renderOutput(destinations, options, totalActive) {
85
+ const fmt = resolveFormat(options);
86
+ if (fmt === "json") {
87
+ // Keep existing JSON envelope shape for backwards compatibility
88
+ console.log(JSON.stringify({
89
+ tenants: destinations,
90
+ total: destinations.length,
91
+ active: destinations.filter((t) => t.enabled).length,
92
+ }, null, 2));
93
+ return;
94
+ }
95
+ if (fmt === "quiet")
96
+ return;
97
+ const rows = destinations.map((tenant) => ({
98
+ name: tenant.name,
99
+ // tenantId (full) is the idKey for --ids-only; xargs pipelines consume tenant IDs
100
+ tenantId: tenant.tenantId,
101
+ tenantIdShort: tenant.tenantId.slice(0, 8) + "...",
102
+ environmentUrl: tenant.environmentUrl,
103
+ tags: tenant.tags?.join(", ") || "-",
104
+ active: tenant.enabled ? "Yes" : "No",
105
+ }));
106
+ if (fmt === "ids-only") {
107
+ output(rows, { format: "ids-only", columns: COLUMNS, idKey: "tenantId" });
108
+ return;
109
+ }
110
+ // table (default)
111
+ console.log();
112
+ output(rows, { format: "table", columns: COLUMNS });
113
+ console.log();
114
+ const filterInfo = [];
115
+ if (options.search)
116
+ filterInfo.push(`matching "${options.search}"`);
117
+ if (options.tag?.length)
118
+ filterInfo.push(`with tags: ${options.tag.join(" AND ")}`);
119
+ if (options.status !== "all")
120
+ filterInfo.push(`status: ${options.status}`);
121
+ if (filterInfo.length > 0) {
122
+ console.log(chalk.gray(`${destinations.length} tenants ${filterInfo.join(", ")}`));
123
+ }
124
+ else {
125
+ console.log(chalk.gray(`Fleet size: ${destinations.length} destinations (${totalActive} active)`));
126
+ }
127
+ }
128
+ function listDemo(spinner, options) {
129
+ spinner.succeed(`Loaded ${DEMO_TENANTS.length} destinations from demo fleet`);
130
+ // Suppress informational hint in quiet mode; errors still go to stderr via handleCommandError.
131
+ if (!isQuietMode()) {
132
+ showDemoBanner();
133
+ }
134
+ const destinations = applyFilters(DEMO_TENANTS, options);
135
+ renderOutput(destinations, options, DEMO_TENANTS.filter((t) => t.enabled).length);
136
+ }
137
+ async function listReal(spinner, options) {
138
+ const configPath = resolve(process.cwd(), options.config);
139
+ const config = await loadConfig(configPath);
140
+ spinner.succeed(`Loaded ${config.tenants.length} destinations from manifest`);
141
+ const destinations = applyFilters(config.tenants, options);
142
+ renderOutput(destinations, options, config.tenants.filter((t) => t.enabled).length);
143
+ }
144
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/tenants/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
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 { Command } from "commander";
17
+ export declare const enableCommand: Command;
18
+ export declare const disableCommand: Command;
19
+ export declare const tagCommand: Command;
20
+ //# sourceMappingURL=manage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../../src/commands/tenants/manage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,aAAa,SAyDtB,CAAC;AAML,eAAO,MAAM,cAAc,SA+DvB,CAAC;AAML,eAAO,MAAM,UAAU,SA8FnB,CAAC"}
@@ -0,0 +1,206 @@
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 { Command } from "commander";
17
+ import chalk from "chalk";
18
+ import { createSpinner, isQuietMode } from "../../lib/spinner.js";
19
+ import { DEMO_TENANTS } from "@pax8-cta/core";
20
+ import { withDemoMode } from "../../lib/command-wrapper.js";
21
+ import { findTenant } from "./helpers.js";
22
+ import { handleCommandError } from "../../lib/errors.js";
23
+ import { showDemoBanner } from "../../lib/demo-banner.js";
24
+ // ============================================================================
25
+ // tenants enable
26
+ // ============================================================================
27
+ export const enableCommand = new Command("enable")
28
+ .argument("<tenant>", "Tenant name, ID, or URL fragment")
29
+ .description("Enable a tenant for deployments")
30
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
31
+ .option("--json", "Output as JSON")
32
+ .action(async (tenantQuery, options) => {
33
+ const spinner = createSpinner("Enabling tenant...").start();
34
+ try {
35
+ await withDemoMode(() => {
36
+ spinner.stop();
37
+ if (!isQuietMode()) {
38
+ showDemoBanner();
39
+ }
40
+ const tenant = findTenant(DEMO_TENANTS, tenantQuery);
41
+ if (!tenant) {
42
+ console.log(chalk.red(`Tenant '${tenantQuery}' not found`));
43
+ process.exit(1);
44
+ }
45
+ if (tenant.enabled) {
46
+ console.log(chalk.yellow(`${tenant.name} is already enabled`));
47
+ return;
48
+ }
49
+ if (options.json) {
50
+ console.log(JSON.stringify({
51
+ success: true,
52
+ tenant: tenant.name,
53
+ tenantId: tenant.tenantId,
54
+ enabled: true,
55
+ }, null, 2));
56
+ return;
57
+ }
58
+ console.log(chalk.green(`✔ ${tenant.name} enabled`));
59
+ console.log();
60
+ console.log(chalk.gray("This tenant will be included in future deployments."));
61
+ }, () => {
62
+ // Production mode - would update config file
63
+ spinner.fail(chalk.yellow("Production mode not yet implemented"));
64
+ console.log(chalk.gray("\nEnable demo mode with 'demo on' to test this command."));
65
+ });
66
+ }
67
+ catch (error) {
68
+ handleCommandError(error, spinner, "Failed to enable tenant");
69
+ }
70
+ });
71
+ // ============================================================================
72
+ // tenants disable
73
+ // ============================================================================
74
+ export const disableCommand = new Command("disable")
75
+ .argument("<tenant>", "Tenant name, ID, or URL fragment")
76
+ .description("Disable a tenant from deployments")
77
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
78
+ .option("-r, --reason <text>", "Reason for disabling")
79
+ .option("--json", "Output as JSON")
80
+ .action(async (tenantQuery, options) => {
81
+ const spinner = createSpinner("Disabling tenant...").start();
82
+ try {
83
+ await withDemoMode(() => {
84
+ spinner.stop();
85
+ if (!isQuietMode()) {
86
+ showDemoBanner();
87
+ }
88
+ const tenant = findTenant(DEMO_TENANTS, tenantQuery);
89
+ if (!tenant) {
90
+ console.log(chalk.red(`Tenant '${tenantQuery}' not found`));
91
+ process.exit(1);
92
+ }
93
+ if (!tenant.enabled) {
94
+ console.log(chalk.yellow(`${tenant.name} is already disabled`));
95
+ return;
96
+ }
97
+ if (options.json) {
98
+ console.log(JSON.stringify({
99
+ success: true,
100
+ tenant: tenant.name,
101
+ tenantId: tenant.tenantId,
102
+ enabled: false,
103
+ reason: options.reason || null,
104
+ }, null, 2));
105
+ return;
106
+ }
107
+ console.log(chalk.green(`✔ ${tenant.name} disabled`));
108
+ if (options.reason) {
109
+ console.log(chalk.gray(` Reason: ${options.reason}`));
110
+ }
111
+ console.log();
112
+ console.log(chalk.gray("This tenant will be excluded from future deployments."));
113
+ console.log(chalk.gray(`Use 'tenants enable ${tenantQuery}' to re-enable.`));
114
+ }, () => {
115
+ // Production mode - would update config file
116
+ spinner.fail(chalk.yellow("Production mode not yet implemented"));
117
+ console.log(chalk.gray("\nEnable demo mode with 'demo on' to test this command."));
118
+ });
119
+ }
120
+ catch (error) {
121
+ handleCommandError(error, spinner, "Failed to disable tenant");
122
+ }
123
+ });
124
+ // ============================================================================
125
+ // tenants tag
126
+ // ============================================================================
127
+ export const tagCommand = new Command("tag")
128
+ .argument("<tenant>", "Tenant name, ID, or URL fragment")
129
+ .description("Manage tenant tags")
130
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
131
+ .option("--add <tags...>", "Add tags")
132
+ .option("--remove <tags...>", "Remove tags")
133
+ .option("--set <tags>", "Replace all tags (comma-separated)")
134
+ .option("--json", "Output as JSON")
135
+ .action(async (tenantQuery, options) => {
136
+ const spinner = createSpinner("Updating tags...").start();
137
+ try {
138
+ await withDemoMode(() => {
139
+ spinner.stop();
140
+ if (!isQuietMode()) {
141
+ showDemoBanner();
142
+ }
143
+ const tenant = findTenant(DEMO_TENANTS, tenantQuery);
144
+ if (!tenant) {
145
+ console.log(chalk.red(`Tenant '${tenantQuery}' not found`));
146
+ process.exit(1);
147
+ }
148
+ // Validate that at least one operation is specified
149
+ if (!options.add && !options.remove && !options.set) {
150
+ console.log(chalk.yellow("No tag operation specified."));
151
+ console.log();
152
+ console.log("Usage:");
153
+ console.log(chalk.gray(" --add <tags...> Add tags"));
154
+ console.log(chalk.gray(" --remove <tags...> Remove tags"));
155
+ console.log(chalk.gray(" --set <tags> Replace all tags (comma-separated)"));
156
+ console.log();
157
+ console.log(`Current tags for ${tenant.name}: ${tenant.tags?.join(", ") || "(none)"}`);
158
+ return;
159
+ }
160
+ const beforeTags = [...(tenant.tags || [])];
161
+ let afterTags = [...beforeTags];
162
+ // Handle --set (replaces all)
163
+ if (options.set) {
164
+ afterTags = options.set
165
+ .split(",")
166
+ .map((t) => t.trim())
167
+ .filter(Boolean);
168
+ }
169
+ else {
170
+ // Handle --add
171
+ if (options.add) {
172
+ for (const tag of options.add) {
173
+ if (!afterTags.includes(tag)) {
174
+ afterTags.push(tag);
175
+ }
176
+ }
177
+ }
178
+ // Handle --remove
179
+ if (options.remove) {
180
+ afterTags = afterTags.filter((t) => !options.remove.includes(t));
181
+ }
182
+ }
183
+ if (options.json) {
184
+ console.log(JSON.stringify({
185
+ success: true,
186
+ tenant: tenant.name,
187
+ tenantId: tenant.tenantId,
188
+ before: beforeTags,
189
+ after: afterTags,
190
+ }, null, 2));
191
+ return;
192
+ }
193
+ console.log(chalk.green(`✔ Updated tags for ${tenant.name}`));
194
+ console.log(` Before: ${beforeTags.join(", ") || "(none)"}`);
195
+ console.log(` After: ${afterTags.join(", ") || "(none)"}`);
196
+ }, () => {
197
+ // Production mode - would update config file
198
+ spinner.fail(chalk.yellow("Production mode not yet implemented"));
199
+ console.log(chalk.gray("\nEnable demo mode with 'demo on' to test this command."));
200
+ });
201
+ }
202
+ catch (error) {
203
+ handleCommandError(error, spinner, "Failed to update tags");
204
+ }
205
+ });
206
+ //# sourceMappingURL=manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../../src/commands/tenants/manage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
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 { Command } from "commander";
17
+ export declare const showCommand: Command;
18
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/tenants/show.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC,eAAO,MAAM,WAAW,SAiLpB,CAAC"}