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.
- package/LICENSE +200 -0
- package/README.md +659 -0
- package/demo-data/solutions/ProductQADemo_1_0_0_2_managed.zip +0 -0
- package/dist/commands/analyze.d.ts +28 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +571 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/auth.d.ts +18 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +171 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +34 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +299 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/demo.d.ts +33 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +362 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/deploy.d.ts +18 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +1186 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/deployments/helpers.d.ts +68 -0
- package/dist/commands/deployments/helpers.d.ts.map +1 -0
- package/dist/commands/deployments/helpers.js +414 -0
- package/dist/commands/deployments/helpers.js.map +1 -0
- package/dist/commands/deployments/index.d.ts +24 -0
- package/dist/commands/deployments/index.d.ts.map +1 -0
- package/dist/commands/deployments/index.js +47 -0
- package/dist/commands/deployments/index.js.map +1 -0
- package/dist/commands/deployments/list.d.ts +18 -0
- package/dist/commands/deployments/list.d.ts.map +1 -0
- package/dist/commands/deployments/list.js +97 -0
- package/dist/commands/deployments/list.js.map +1 -0
- package/dist/commands/deployments/show.d.ts +18 -0
- package/dist/commands/deployments/show.d.ts.map +1 -0
- package/dist/commands/deployments/show.js +81 -0
- package/dist/commands/deployments/show.js.map +1 -0
- package/dist/commands/deployments/undo.d.ts +18 -0
- package/dist/commands/deployments/undo.d.ts.map +1 -0
- package/dist/commands/deployments/undo.js +295 -0
- package/dist/commands/deployments/undo.js.map +1 -0
- package/dist/commands/export.d.ts +18 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +133 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +18 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +129 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init-config.d.ts +26 -0
- package/dist/commands/init-config.d.ts.map +1 -0
- package/dist/commands/init-config.js +123 -0
- package/dist/commands/init-config.js.map +1 -0
- package/dist/commands/init-validation.d.ts +47 -0
- package/dist/commands/init-validation.d.ts.map +1 -0
- package/dist/commands/init-validation.js +339 -0
- package/dist/commands/init-validation.js.map +1 -0
- package/dist/commands/init-wizard.d.ts +25 -0
- package/dist/commands/init-wizard.d.ts.map +1 -0
- package/dist/commands/init-wizard.js +433 -0
- package/dist/commands/init-wizard.js.map +1 -0
- package/dist/commands/init.d.ts +18 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/resolve-url.d.ts +18 -0
- package/dist/commands/resolve-url.d.ts.map +1 -0
- package/dist/commands/resolve-url.js +126 -0
- package/dist/commands/resolve-url.js.map +1 -0
- package/dist/commands/setup.d.ts +18 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +239 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/solutions/drift-analysis.d.ts +73 -0
- package/dist/commands/solutions/drift-analysis.d.ts.map +1 -0
- package/dist/commands/solutions/drift-analysis.js +416 -0
- package/dist/commands/solutions/drift-analysis.js.map +1 -0
- package/dist/commands/solutions/drift.d.ts +32 -0
- package/dist/commands/solutions/drift.d.ts.map +1 -0
- package/dist/commands/solutions/drift.js +641 -0
- package/dist/commands/solutions/drift.js.map +1 -0
- package/dist/commands/solutions/fix-planner.d.ts +48 -0
- package/dist/commands/solutions/fix-planner.d.ts.map +1 -0
- package/dist/commands/solutions/fix-planner.js +43 -0
- package/dist/commands/solutions/fix-planner.js.map +1 -0
- package/dist/commands/solutions/helpers.d.ts +35 -0
- package/dist/commands/solutions/helpers.d.ts.map +1 -0
- package/dist/commands/solutions/helpers.js +54 -0
- package/dist/commands/solutions/helpers.js.map +1 -0
- package/dist/commands/solutions/index.d.ts +18 -0
- package/dist/commands/solutions/index.d.ts.map +1 -0
- package/dist/commands/solutions/index.js +30 -0
- package/dist/commands/solutions/index.js.map +1 -0
- package/dist/commands/solutions/list.d.ts +18 -0
- package/dist/commands/solutions/list.d.ts.map +1 -0
- package/dist/commands/solutions/list.js +174 -0
- package/dist/commands/solutions/list.js.map +1 -0
- package/dist/commands/solutions/remove.d.ts +18 -0
- package/dist/commands/solutions/remove.d.ts.map +1 -0
- package/dist/commands/solutions/remove.js +137 -0
- package/dist/commands/solutions/remove.js.map +1 -0
- package/dist/commands/solutions/risk-calculator.d.ts +33 -0
- package/dist/commands/solutions/risk-calculator.d.ts.map +1 -0
- package/dist/commands/solutions/risk-calculator.js +79 -0
- package/dist/commands/solutions/risk-calculator.js.map +1 -0
- package/dist/commands/solutions/show.d.ts +18 -0
- package/dist/commands/solutions/show.d.ts.map +1 -0
- package/dist/commands/solutions/show.js +165 -0
- package/dist/commands/solutions/show.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +573 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/telemetry.d.ts +18 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +85 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/tenants/health.d.ts +18 -0
- package/dist/commands/tenants/health.d.ts.map +1 -0
- package/dist/commands/tenants/health.js +172 -0
- package/dist/commands/tenants/health.js.map +1 -0
- package/dist/commands/tenants/helpers.d.ts +44 -0
- package/dist/commands/tenants/helpers.d.ts.map +1 -0
- package/dist/commands/tenants/helpers.js +72 -0
- package/dist/commands/tenants/helpers.js.map +1 -0
- package/dist/commands/tenants/index.d.ts +19 -0
- package/dist/commands/tenants/index.d.ts.map +1 -0
- package/dist/commands/tenants/index.js +39 -0
- package/dist/commands/tenants/index.js.map +1 -0
- package/dist/commands/tenants/inspect.d.ts +18 -0
- package/dist/commands/tenants/inspect.d.ts.map +1 -0
- package/dist/commands/tenants/inspect.js +176 -0
- package/dist/commands/tenants/inspect.js.map +1 -0
- package/dist/commands/tenants/list.d.ts +18 -0
- package/dist/commands/tenants/list.d.ts.map +1 -0
- package/dist/commands/tenants/list.js +144 -0
- package/dist/commands/tenants/list.js.map +1 -0
- package/dist/commands/tenants/manage.d.ts +20 -0
- package/dist/commands/tenants/manage.d.ts.map +1 -0
- package/dist/commands/tenants/manage.js +206 -0
- package/dist/commands/tenants/manage.js.map +1 -0
- package/dist/commands/tenants/show.d.ts +18 -0
- package/dist/commands/tenants/show.d.ts.map +1 -0
- package/dist/commands/tenants/show.js +191 -0
- package/dist/commands/tenants/show.js.map +1 -0
- package/dist/commands/validate.d.ts +18 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +536 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +51 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +153 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/banner.d.ts +19 -0
- package/dist/lib/banner.d.ts.map +1 -0
- package/dist/lib/banner.js +78 -0
- package/dist/lib/banner.js.map +1 -0
- package/dist/lib/command-wrapper.d.ts +56 -0
- package/dist/lib/command-wrapper.d.ts.map +1 -0
- package/dist/lib/command-wrapper.js +71 -0
- package/dist/lib/command-wrapper.js.map +1 -0
- package/dist/lib/credentials.d.ts +56 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +146 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/demo-banner.d.ts +15 -0
- package/dist/lib/demo-banner.d.ts.map +1 -0
- package/dist/lib/demo-banner.js +33 -0
- package/dist/lib/demo-banner.js.map +1 -0
- package/dist/lib/error-handler.d.ts +51 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +458 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/errors.d.ts +61 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +168 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/formatters.d.ts +55 -0
- package/dist/lib/formatters.d.ts.map +1 -0
- package/dist/lib/formatters.js +163 -0
- package/dist/lib/formatters.js.map +1 -0
- package/dist/lib/graph-client.d.ts +74 -0
- package/dist/lib/graph-client.d.ts.map +1 -0
- package/dist/lib/graph-client.js +231 -0
- package/dist/lib/graph-client.js.map +1 -0
- package/dist/lib/input.d.ts +22 -0
- package/dist/lib/input.d.ts.map +1 -0
- package/dist/lib/input.js +120 -0
- package/dist/lib/input.js.map +1 -0
- package/dist/lib/interactive-wizard.d.ts +26 -0
- package/dist/lib/interactive-wizard.d.ts.map +1 -0
- package/dist/lib/interactive-wizard.js +550 -0
- package/dist/lib/interactive-wizard.js.map +1 -0
- package/dist/lib/oss-surface.d.ts +21 -0
- package/dist/lib/oss-surface.d.ts.map +1 -0
- package/dist/lib/oss-surface.js +29 -0
- package/dist/lib/oss-surface.js.map +1 -0
- package/dist/lib/output.d.ts +74 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +156 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/picker.d.ts +75 -0
- package/dist/lib/picker.d.ts.map +1 -0
- package/dist/lib/picker.js +115 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/lib/repl.d.ts +19 -0
- package/dist/lib/repl.d.ts.map +1 -0
- package/dist/lib/repl.js +158 -0
- package/dist/lib/repl.js.map +1 -0
- package/dist/lib/spinner.d.ts +41 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +126 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/telemetry.d.ts +96 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +367 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,126 @@
|
|
|
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, join } from "node:path";
|
|
18
|
+
import chalk from "chalk";
|
|
19
|
+
import { createSpinner } from "../lib/spinner.js";
|
|
20
|
+
import Table from "cli-table3";
|
|
21
|
+
import { loadConfig, TokenManager, DataverseClient, SolutionOperations, AgentResolver, } from "@pax8-cta/core";
|
|
22
|
+
import { getClientSecretWithFallback } from "../lib/credentials.js";
|
|
23
|
+
import { handleCommandError } from "../lib/errors.js";
|
|
24
|
+
export const resolveUrlCommand = new Command("resolve-url")
|
|
25
|
+
.description("Find which solution contains a given M365 agent URL")
|
|
26
|
+
.requiredOption("-u, --url <url>", "M365 agent URL (e.g., https://m365.cloud.microsoft/chat/?titleId=...)")
|
|
27
|
+
.option("-o, --output <path>", "Output directory for the solution", "./agent packages")
|
|
28
|
+
.option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
|
|
29
|
+
.option("--unmanaged", "Export as unmanaged solution (default: managed)")
|
|
30
|
+
.option("--list-bots", "List all bots in the environment instead of resolving")
|
|
31
|
+
.option("--dry-run", "Parse URL and show info without exporting")
|
|
32
|
+
.action(async (options) => {
|
|
33
|
+
const spinner = createSpinner("Loading configuration...").start();
|
|
34
|
+
try {
|
|
35
|
+
// Load config
|
|
36
|
+
const configPath = resolve(process.cwd(), options.config);
|
|
37
|
+
const config = await loadConfig(configPath);
|
|
38
|
+
spinner.succeed("Configuration loaded");
|
|
39
|
+
// Authenticate
|
|
40
|
+
spinner.start("Authenticating...");
|
|
41
|
+
const clientSecret = await getClientSecretWithFallback();
|
|
42
|
+
const tokenManager = new TokenManager({
|
|
43
|
+
tenantId: config.partner.tenantId,
|
|
44
|
+
clientId: config.partner.clientId,
|
|
45
|
+
clientSecret,
|
|
46
|
+
});
|
|
47
|
+
const dataverseClient = new DataverseClient({
|
|
48
|
+
environmentUrl: config.source.environmentUrl,
|
|
49
|
+
tokenManager,
|
|
50
|
+
});
|
|
51
|
+
const resolver = new AgentResolver(dataverseClient);
|
|
52
|
+
spinner.succeed("Connected to source environment");
|
|
53
|
+
// List bots mode
|
|
54
|
+
if (options.listBots) {
|
|
55
|
+
spinner.start("Fetching bots...");
|
|
56
|
+
const botsWithSolutions = await resolver.listBotsWithSolutions();
|
|
57
|
+
spinner.succeed(`Found ${botsWithSolutions.length} bot(s)`);
|
|
58
|
+
console.log();
|
|
59
|
+
const table = new Table({
|
|
60
|
+
head: ["Bot Name", "Bot ID", "Solution", "Status", "Modified"],
|
|
61
|
+
style: { head: ["cyan"] },
|
|
62
|
+
});
|
|
63
|
+
for (const { bot, solution } of botsWithSolutions) {
|
|
64
|
+
table.push([
|
|
65
|
+
bot.name || "(unnamed)",
|
|
66
|
+
bot.botid.slice(0, 8) + "...",
|
|
67
|
+
solution?.uniquename || chalk.gray("(no solution)"),
|
|
68
|
+
bot.statecode === 0 ? chalk.green("Active") : chalk.gray("Inactive"),
|
|
69
|
+
new Date(bot.modifiedon).toLocaleDateString(),
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
console.log(table.toString());
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Parse URL
|
|
76
|
+
spinner.start("Parsing agent URL...");
|
|
77
|
+
const parsed = resolver.parseAgentUrl(options.url);
|
|
78
|
+
spinner.succeed("URL parsed");
|
|
79
|
+
console.log();
|
|
80
|
+
console.log(chalk.bold("Parsed URL Info:"));
|
|
81
|
+
console.log(` Title ID: ${chalk.cyan(parsed.titleId)}`);
|
|
82
|
+
console.log(` Prefix: ${parsed.prefix || "(none)"}`);
|
|
83
|
+
console.log(` Possible Bot: ${parsed.possibleBotId || "(not a direct GUID)"}`);
|
|
84
|
+
console.log();
|
|
85
|
+
if (options.dryRun) {
|
|
86
|
+
console.log(chalk.yellow("Dry run - not resolving or exporting"));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Resolve to solution
|
|
90
|
+
spinner.start("Resolving agent to solution...");
|
|
91
|
+
const resolved = await resolver.resolveUrlToSolution(options.url);
|
|
92
|
+
spinner.succeed("Agent resolved");
|
|
93
|
+
console.log(chalk.bold("Resolved Agent:"));
|
|
94
|
+
console.log(` Bot Name: ${chalk.green(resolved.bot.name)}`);
|
|
95
|
+
console.log(` Bot ID: ${resolved.bot.botid}`);
|
|
96
|
+
console.log(` Solution: ${chalk.cyan(resolved.solution.uniquename)}`);
|
|
97
|
+
console.log(` Version: ${resolved.solution.version}`);
|
|
98
|
+
console.log(` Managed: ${resolved.solution.ismanaged ? "Yes" : "No"}`);
|
|
99
|
+
console.log();
|
|
100
|
+
// Export solution
|
|
101
|
+
const solutionOps = new SolutionOperations(dataverseClient);
|
|
102
|
+
const managed = !options.unmanaged;
|
|
103
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
104
|
+
const suffix = managed ? "managed" : "unmanaged";
|
|
105
|
+
const outputDir = resolve(options.output);
|
|
106
|
+
const outputPath = join(outputDir, `${resolved.solution.uniquename}_${timestamp}_${suffix}.zip`);
|
|
107
|
+
spinner.start(`Exporting solution '${resolved.solution.uniquename}'...`);
|
|
108
|
+
const metadata = await solutionOps.exportSolution(resolved.solution.uniquename, {
|
|
109
|
+
managed,
|
|
110
|
+
outputPath,
|
|
111
|
+
});
|
|
112
|
+
spinner.succeed(`Solution exported: ${chalk.green(metadata.friendlyName)} v${metadata.version}`);
|
|
113
|
+
console.log();
|
|
114
|
+
console.log(chalk.bold("Export Complete:"));
|
|
115
|
+
console.log(` Solution: ${metadata.friendlyName}`);
|
|
116
|
+
console.log(` Version: ${metadata.version}`);
|
|
117
|
+
console.log(` Type: ${managed ? "Managed" : "Unmanaged"}`);
|
|
118
|
+
console.log(` Output: ${chalk.cyan(outputPath)}`);
|
|
119
|
+
console.log();
|
|
120
|
+
console.log(chalk.gray(`Use 'deploy <solution> --all' to deploy to your tenants`));
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
handleCommandError(error, spinner, "URL resolution failed");
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=resolve-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-url.js","sourceRoot":"","sources":["../../src/commands/resolve-url.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 setupCommand: Command;
|
|
18
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,YAAY,SA+MrB,CAAC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
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 Table from "cli-table3";
|
|
21
|
+
import { loadConfig, TokenManager, DataverseClient, environmentSetupService, } from "@pax8-cta/core";
|
|
22
|
+
import { getClientSecretWithFallback } from "../lib/credentials.js";
|
|
23
|
+
import { UsageError, CliError, handleCommandError } from "../lib/errors.js";
|
|
24
|
+
import { isInteractivePrompt, pickFromList, printRunningCommand } from "../lib/picker.js";
|
|
25
|
+
export const setupCommand = new Command("setup")
|
|
26
|
+
.description("Register your app as an application user in tenant environments")
|
|
27
|
+
.option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
|
|
28
|
+
.option("--check", "Check setup status without making changes")
|
|
29
|
+
.option("--all", "Setup all environments")
|
|
30
|
+
.option("-t, --tenant <name>", "Setup specific environment by name")
|
|
31
|
+
.addHelpText("after", `
|
|
32
|
+
Examples:
|
|
33
|
+
setup --check Check setup status without making changes
|
|
34
|
+
setup --all Register app user in all environments
|
|
35
|
+
setup -t Pax8CTA-Test2 Setup a specific tenant environment
|
|
36
|
+
`)
|
|
37
|
+
.action(async (options, cmd) => {
|
|
38
|
+
// Pull global flags (--json, --quiet) so the interactive picker check
|
|
39
|
+
// doesn't fire when the caller explicitly opted out of prompts.
|
|
40
|
+
const globalOpts = cmd?.optsWithGlobals?.() ?? {};
|
|
41
|
+
const interactiveOpts = { json: globalOpts.json, quiet: globalOpts.quiet };
|
|
42
|
+
const spinner = createSpinner("Loading configuration...").start();
|
|
43
|
+
try {
|
|
44
|
+
const configPath = resolve(process.cwd(), options.config);
|
|
45
|
+
let config;
|
|
46
|
+
// No selector flag in an interactive terminal? Try to load the config
|
|
47
|
+
// and offer a picker drawn from the enabled tenants. Scripts (--json,
|
|
48
|
+
// --quiet, non-TTY) fall through to the existing UsageError below so
|
|
49
|
+
// they fail fast instead of hanging on stdin.
|
|
50
|
+
if (!options.check &&
|
|
51
|
+
!options.all &&
|
|
52
|
+
!options.tenant &&
|
|
53
|
+
isInteractivePrompt(interactiveOpts)) {
|
|
54
|
+
try {
|
|
55
|
+
config = await loadConfig(configPath);
|
|
56
|
+
spinner.succeed("Configuration loaded");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// No config available — let validation below produce the friendly
|
|
60
|
+
// UsageError instead of a config-not-found error.
|
|
61
|
+
spinner.stop();
|
|
62
|
+
}
|
|
63
|
+
if (config) {
|
|
64
|
+
const enabledTenants = config.tenants.filter((t) => t.enabled);
|
|
65
|
+
const picked = await pickFromList(enabledTenants, {
|
|
66
|
+
prompt: "Pick a tenant to set up:",
|
|
67
|
+
label: (t) => t.name,
|
|
68
|
+
hint: (t) => (t.tags?.length ? t.tags.join(", ") : undefined),
|
|
69
|
+
});
|
|
70
|
+
if (picked) {
|
|
71
|
+
options.tenant = picked.name;
|
|
72
|
+
printRunningCommand(["setup", "--tenant", picked.name]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Validate options (after the picker has had a chance to populate them).
|
|
77
|
+
if (!options.check && !options.all && !options.tenant) {
|
|
78
|
+
spinner.stop();
|
|
79
|
+
throw new UsageError("Must specify --check, --all, or --tenant <name>. Run 'setup --help' for usage.");
|
|
80
|
+
}
|
|
81
|
+
// Load config if the picker didn't already.
|
|
82
|
+
if (!config) {
|
|
83
|
+
config = await loadConfig(configPath);
|
|
84
|
+
spinner.succeed("Configuration loaded");
|
|
85
|
+
}
|
|
86
|
+
// Get target tenants
|
|
87
|
+
let targets;
|
|
88
|
+
if (options.all) {
|
|
89
|
+
targets = config.tenants.filter((t) => t.enabled);
|
|
90
|
+
}
|
|
91
|
+
else if (options.tenant) {
|
|
92
|
+
const tenant = config.tenants.find((t) => t.name.toLowerCase() === options.tenant.toLowerCase());
|
|
93
|
+
if (!tenant) {
|
|
94
|
+
spinner.stop();
|
|
95
|
+
throw new CliError(`Tenant '${options.tenant}' not found in configuration. Run 'tenants list' to see available tenants.`);
|
|
96
|
+
}
|
|
97
|
+
targets = [tenant];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Check mode - check all enabled tenants
|
|
101
|
+
targets = config.tenants.filter((t) => t.enabled);
|
|
102
|
+
}
|
|
103
|
+
if (targets.length === 0) {
|
|
104
|
+
spinner.fail(chalk.red("No environments matched the selection criteria"));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
// Verify client secret is available
|
|
108
|
+
await getClientSecretWithFallback();
|
|
109
|
+
console.log();
|
|
110
|
+
console.log(chalk.bold(`Checking ${targets.length} environment(s)...`));
|
|
111
|
+
console.log();
|
|
112
|
+
// Check setup status for each tenant
|
|
113
|
+
const clientSecret = await getClientSecretWithFallback();
|
|
114
|
+
const statuses = [];
|
|
115
|
+
for (const tenant of targets) {
|
|
116
|
+
const tokenManager = new TokenManager({
|
|
117
|
+
tenantId: tenant.tenantId,
|
|
118
|
+
clientId: config.partner.clientId,
|
|
119
|
+
clientSecret,
|
|
120
|
+
});
|
|
121
|
+
const client = new DataverseClient({
|
|
122
|
+
environmentUrl: tenant.environmentUrl,
|
|
123
|
+
tokenManager,
|
|
124
|
+
});
|
|
125
|
+
const status = await environmentSetupService.checkSetupStatus(client, config.partner.clientId, tenant.name, tenant.environmentUrl);
|
|
126
|
+
statuses.push(status);
|
|
127
|
+
}
|
|
128
|
+
// Display results
|
|
129
|
+
displaySetupStatus(statuses);
|
|
130
|
+
// If in check mode, we're done
|
|
131
|
+
if (options.check) {
|
|
132
|
+
const needsSetup = statuses.filter((s) => s.status === "needs_setup" || s.status === "partial").length;
|
|
133
|
+
if (needsSetup > 0) {
|
|
134
|
+
console.log();
|
|
135
|
+
console.log(chalk.yellow(`${needsSetup} environment(s) need setup. Run 'setup --all' to configure them.`));
|
|
136
|
+
}
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// Setup environments that need it
|
|
140
|
+
const needsSetup = statuses.filter((s) => s.status === "needs_setup" || s.status === "partial");
|
|
141
|
+
if (needsSetup.length === 0) {
|
|
142
|
+
console.log();
|
|
143
|
+
console.log(chalk.green("All environments are properly configured!"));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
console.log();
|
|
147
|
+
console.log(chalk.bold(`Setting up ${needsSetup.length} environment(s)...`));
|
|
148
|
+
console.log();
|
|
149
|
+
let successCount = 0;
|
|
150
|
+
let errorCount = 0;
|
|
151
|
+
for (const status of needsSetup) {
|
|
152
|
+
const tenant = targets.find((t) => t.name === status.tenantName);
|
|
153
|
+
if (!tenant)
|
|
154
|
+
continue;
|
|
155
|
+
const setupSpinner = createSpinner(`Setting up ${status.tenantName}...`).start();
|
|
156
|
+
try {
|
|
157
|
+
const tokenManager = new TokenManager({
|
|
158
|
+
tenantId: tenant.tenantId,
|
|
159
|
+
clientId: config.partner.clientId,
|
|
160
|
+
clientSecret,
|
|
161
|
+
});
|
|
162
|
+
const client = new DataverseClient({
|
|
163
|
+
environmentUrl: tenant.environmentUrl,
|
|
164
|
+
tokenManager,
|
|
165
|
+
});
|
|
166
|
+
await environmentSetupService.setupTenant(client, config.partner.clientId, tenant.environmentUrl, status);
|
|
167
|
+
setupSpinner.succeed(chalk.green(`Setup completed: ${status.tenantName}`));
|
|
168
|
+
successCount++;
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
setupSpinner.fail(chalk.red(`Setup failed: ${status.tenantName}`));
|
|
172
|
+
console.error(chalk.red(` Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
173
|
+
errorCount++;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
console.log();
|
|
177
|
+
console.log(chalk.bold("Setup Summary:"));
|
|
178
|
+
console.log(` ${chalk.green(`✓ ${successCount} successful`)}`);
|
|
179
|
+
if (errorCount > 0) {
|
|
180
|
+
console.log(` ${chalk.red(`✗ ${errorCount} failed`)}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
handleCommandError(error, spinner, "Setup failed");
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
/**
|
|
188
|
+
* Display setup status in a table
|
|
189
|
+
*/
|
|
190
|
+
function displaySetupStatus(statuses) {
|
|
191
|
+
const table = new Table({
|
|
192
|
+
head: ["Environment", "App Registered", "Role", "Status"],
|
|
193
|
+
style: { head: ["cyan"] },
|
|
194
|
+
});
|
|
195
|
+
for (const status of statuses) {
|
|
196
|
+
const appRegistered = status.appRegistered ? chalk.green("✓") : chalk.red("✗");
|
|
197
|
+
const roleAssigned = status.roleAssigned
|
|
198
|
+
? chalk.green("System Admin")
|
|
199
|
+
: status.appRegistered
|
|
200
|
+
? chalk.yellow("None")
|
|
201
|
+
: chalk.gray("-");
|
|
202
|
+
let statusText;
|
|
203
|
+
if (status.status === "ready") {
|
|
204
|
+
statusText = chalk.green("Ready");
|
|
205
|
+
}
|
|
206
|
+
else if (status.status === "needs_setup") {
|
|
207
|
+
statusText = chalk.yellow("Needs setup");
|
|
208
|
+
}
|
|
209
|
+
else if (status.status === "partial") {
|
|
210
|
+
statusText = chalk.yellow("Needs role");
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
statusText = chalk.red("Error");
|
|
214
|
+
}
|
|
215
|
+
const row = [status.tenantName, appRegistered, roleAssigned, statusText];
|
|
216
|
+
table.push(row);
|
|
217
|
+
}
|
|
218
|
+
console.log(table.toString());
|
|
219
|
+
// Show errors if any
|
|
220
|
+
const errors = statuses.filter((s) => s.error);
|
|
221
|
+
if (errors.length > 0) {
|
|
222
|
+
console.log();
|
|
223
|
+
console.log(chalk.bold("Notes:"));
|
|
224
|
+
for (const status of errors) {
|
|
225
|
+
console.log(chalk.yellow(` ${status.tenantName}: ${status.error}`));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Show bootstrap message if needed
|
|
229
|
+
const needsBootstrap = statuses.filter((s) => s.status === "needs_setup" && s.error?.includes("bootstrap"));
|
|
230
|
+
if (needsBootstrap.length > 0) {
|
|
231
|
+
console.log();
|
|
232
|
+
console.log(chalk.bold("Bootstrap Required:"));
|
|
233
|
+
console.log(chalk.gray(" Some environments require manual app user setup first (one-time bootstrap)."));
|
|
234
|
+
console.log(chalk.gray(" Go to: https://admin.powerplatform.microsoft.com"));
|
|
235
|
+
console.log(chalk.gray(" → Environment → Settings → Users + permissions → Application users"));
|
|
236
|
+
console.log(chalk.gray(` → Add app: ${statuses[0]?.environmentUrl ? "your app ID" : ""}`));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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 type { FleetDriftAnalysis, TenantConfig, TenantDeploymentHistory, TenantDriftAnalysis, TenantVersionStatus, VersionChecker, VersionDriftSummary } from "@pax8-cta/core";
|
|
17
|
+
import type { UnmanagedCustomizationResult } from "@pax8-cta/core";
|
|
18
|
+
/**
|
|
19
|
+
* The set of tenants in a fleet drift analysis that are "outdated" — i.e. the
|
|
20
|
+
* report's actionable rows. We treat anything that isn't `current` as
|
|
21
|
+
* outdated; this matches what the table-mode renderer surfaces and what
|
|
22
|
+
* `--fix` would touch.
|
|
23
|
+
*/
|
|
24
|
+
export declare function selectOutdated(fleet: FleetDriftAnalysis): TenantDriftAnalysis[];
|
|
25
|
+
/**
|
|
26
|
+
* Build the after-action hint shown beneath the drift table.
|
|
27
|
+
*
|
|
28
|
+
* Mirrors the analyze → test-deploy nudge: a one-paragraph "what should I do
|
|
29
|
+
* about this?" string driven by the result shape. Returns an empty string
|
|
30
|
+
* when there is nothing to suggest, so the caller can `if (hint) console.log`.
|
|
31
|
+
*
|
|
32
|
+
* Pure / side-effect-free so the unit tests can pin the wording without
|
|
33
|
+
* shelling out.
|
|
34
|
+
*
|
|
35
|
+
* @param solutionLabel The solution name to interpolate into per-tenant
|
|
36
|
+
* suggestions. When the drift run wasn't scoped to a
|
|
37
|
+
* single solution we fall back to `<solution>` so the
|
|
38
|
+
* user knows to substitute.
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildAfterActionHint(outdated: TenantDriftAnalysis[], solutionLabel?: string): string;
|
|
41
|
+
export declare function displayTenantStatus(status: TenantVersionStatus): void;
|
|
42
|
+
export declare function buildSummary(statuses: TenantVersionStatus[], expectedSolutions: Array<{
|
|
43
|
+
uniqueName: string;
|
|
44
|
+
friendlyName: string;
|
|
45
|
+
version: string;
|
|
46
|
+
}>): VersionDriftSummary;
|
|
47
|
+
export declare function displayTenantRiskAnalysis(analysis: TenantDriftAnalysis): void;
|
|
48
|
+
export declare function displayFleetRiskAnalysis(fleet: FleetDriftAnalysis, riskFilter?: string | true): void;
|
|
49
|
+
export declare function generateDemoDeployHistory(tenantId: string): TenantDeploymentHistory;
|
|
50
|
+
export declare function displayFleetSummary(summary: VersionDriftSummary, options: {
|
|
51
|
+
agent?: string;
|
|
52
|
+
outdated?: boolean;
|
|
53
|
+
}, tenants: TenantConfig[], statuses: TenantVersionStatus[], _checker: VersionChecker, _expectedSolutions: Array<{
|
|
54
|
+
uniqueName: string;
|
|
55
|
+
friendlyName: string;
|
|
56
|
+
version: string;
|
|
57
|
+
}>): void;
|
|
58
|
+
/**
|
|
59
|
+
* Display unmanaged customization details for a single tenant
|
|
60
|
+
*/
|
|
61
|
+
export declare function displayCustomizationDetails(result: UnmanagedCustomizationResult): void;
|
|
62
|
+
/**
|
|
63
|
+
* Display fleet-wide unmanaged customization summary
|
|
64
|
+
*/
|
|
65
|
+
export declare function displayCustomizationFleetSummary(summary: {
|
|
66
|
+
totalTenants: number;
|
|
67
|
+
tenantsWithCustomizations: number;
|
|
68
|
+
tenantsClean: number;
|
|
69
|
+
totalCustomizations: number;
|
|
70
|
+
highRiskTenants: string[];
|
|
71
|
+
results: UnmanagedCustomizationResult[];
|
|
72
|
+
}): void;
|
|
73
|
+
//# sourceMappingURL=drift-analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift-analysis.d.ts","sourceRoot":"","sources":["../../../src/commands/solutions/drift-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAEV,kBAAkB,EAElB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAGnE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,EAAE,CAE/E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,aAAa,GAAE,MAAqB,GACnC,MAAM,CAyBR;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAmCrE;AAiBD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,iBAAiB,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACtF,mBAAmB,CAsCrB;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAsD7E;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,kBAAkB,EACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,IAAI,CAiEN;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,uBAAuB,CAuCnF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAC/C,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,QAAQ,EAAE,cAAc,EACxB,kBAAkB,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACvF,IAAI,CAqEN;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,4BAA4B,GAAG,IAAI,CA+CtF;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB,EAAE,MAAM,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,4BAA4B,EAAE,CAAC;CACzC,GAAG,IAAI,CA4CP"}
|