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,571 @@
|
|
|
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 { spawn } from "node:child_process";
|
|
18
|
+
import chalk from "chalk";
|
|
19
|
+
import { createSpinner, isQuietMode } from "../lib/spinner.js";
|
|
20
|
+
import Table from "cli-table3";
|
|
21
|
+
import { riskAnalyzer, DEMO_TENANTS, DEMO_SOLUTIONS, WaveService, confidenceQualifierLabel, } from "@pax8-cta/core";
|
|
22
|
+
import open from "open";
|
|
23
|
+
import { withResolvedDestinations } from "../lib/command-wrapper.js";
|
|
24
|
+
import { CliError, handleCommandError } from "../lib/errors.js";
|
|
25
|
+
import { isInteractivePrompt, pickFromList, printRunningCommand } from "../lib/picker.js";
|
|
26
|
+
import { showDemoBanner } from "../lib/demo-banner.js";
|
|
27
|
+
// Risk issue severity colors
|
|
28
|
+
const SEVERITY_COLORS = {
|
|
29
|
+
critical: chalk.red,
|
|
30
|
+
error: chalk.red,
|
|
31
|
+
warning: chalk.yellow,
|
|
32
|
+
info: chalk.blue,
|
|
33
|
+
};
|
|
34
|
+
const SEVERITY_ICONS = {
|
|
35
|
+
critical: "🚫",
|
|
36
|
+
error: "❌",
|
|
37
|
+
warning: "⚠️",
|
|
38
|
+
info: "ℹ️",
|
|
39
|
+
};
|
|
40
|
+
export const analyzeCommand = new Command("analyze")
|
|
41
|
+
.description("Analyze deployment risk for a solution across your tenants")
|
|
42
|
+
.argument("[solution]", "Solution name (e.g., TestDeploy) or path to solution zip file")
|
|
43
|
+
.option("-s, --solution <path>", "Solution name or path to zip (alternative to argument)")
|
|
44
|
+
.option("--agentPackage <path>", "Alias for --solution")
|
|
45
|
+
.option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
|
|
46
|
+
.option("-t, --tag <tags...>", "Analyze only tenants with these tags")
|
|
47
|
+
.option("--all", "Analyze all tenants (default when no --tag specified)")
|
|
48
|
+
.option("--json", "Output results as JSON")
|
|
49
|
+
.addHelpText("after", `
|
|
50
|
+
Examples:
|
|
51
|
+
analyze TestDeploy Analyze risk across all tenants
|
|
52
|
+
analyze TestDeploy --tag production Analyze production tenants only
|
|
53
|
+
analyze ./TestDeploy.zip Analyze a pre-exported zip
|
|
54
|
+
`)
|
|
55
|
+
.action(async (solutionArg, options, cmd) => {
|
|
56
|
+
const spinner = createSpinner("Loading configuration...").start();
|
|
57
|
+
// Merge global options (--json may be consumed by root program in Commander v12)
|
|
58
|
+
const allOpts = cmd.optsWithGlobals();
|
|
59
|
+
const jsonOutput = !!(allOpts.json || options.json);
|
|
60
|
+
// Allow solution as positional arg or --solution flag
|
|
61
|
+
if (solutionArg && !options.solution) {
|
|
62
|
+
options.solution = solutionArg;
|
|
63
|
+
}
|
|
64
|
+
if (!options.solution) {
|
|
65
|
+
spinner.fail(chalk.red("Solution name or path required."));
|
|
66
|
+
if (!isQuietMode()) {
|
|
67
|
+
console.error(chalk.gray(" Example: analyze TestDeploy"));
|
|
68
|
+
}
|
|
69
|
+
process.exit(2);
|
|
70
|
+
}
|
|
71
|
+
// Default to --all if no tag filter specified
|
|
72
|
+
if (!options.all && (!options.tag || options.tag.length === 0)) {
|
|
73
|
+
options.all = true;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
await withResolvedDestinations(options, async (destinations) => {
|
|
77
|
+
spinner.succeed("Demo fleet manifest loaded");
|
|
78
|
+
if (!isQuietMode()) {
|
|
79
|
+
showDemoBanner();
|
|
80
|
+
}
|
|
81
|
+
// Validate the solution argument against the demo catalog before we
|
|
82
|
+
// run a synthetic risk analysis. Without this, demo mode happily
|
|
83
|
+
// analyzes typo'd solution names (e.g. "CusteomrServiceAgent") and
|
|
84
|
+
// prints a confident "READY TO DEPLOY" verdict — which is dangerous
|
|
85
|
+
// during demos where a typo is the whole point of the exercise.
|
|
86
|
+
// Mirrors the deploy fix in #379. ZIP path inputs ("./foo.zip")
|
|
87
|
+
// still pretend-bypass without file existence checks (the existing
|
|
88
|
+
// demo contract for paths).
|
|
89
|
+
const solutionInput = options.agentPackage || options.solution;
|
|
90
|
+
const isFilePath = solutionInput.endsWith(".zip");
|
|
91
|
+
if (!isFilePath) {
|
|
92
|
+
const knownDemoNames = DEMO_SOLUTIONS.map((sol) => sol.uniqueName);
|
|
93
|
+
// Case-sensitive match — the CLI is case-sensitive about solution
|
|
94
|
+
// names elsewhere (export/import use the uniqueName verbatim).
|
|
95
|
+
if (!knownDemoNames.includes(solutionInput)) {
|
|
96
|
+
const preview = knownDemoNames.slice(0, 5);
|
|
97
|
+
const lines = [
|
|
98
|
+
`Solution '${solutionInput}' not found in the demo catalog.`,
|
|
99
|
+
"Available demo solutions:",
|
|
100
|
+
...preview.map((name) => ` - ${name}`),
|
|
101
|
+
"Run 'solutions list' to see all available demo solutions.",
|
|
102
|
+
];
|
|
103
|
+
throw new CliError(lines.join("\n"));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (destinations.length === 0) {
|
|
107
|
+
spinner.fail(chalk.red("No destinations matched the selection criteria"));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Display destinations
|
|
111
|
+
console.log(chalk.bold(`📊 Analyzing Risk for ${destinations.length} Destinations`));
|
|
112
|
+
console.log();
|
|
113
|
+
const table = new Table({
|
|
114
|
+
head: ["Destination", "Tenant ID", "Port", "Tags"],
|
|
115
|
+
style: { head: ["cyan"] },
|
|
116
|
+
});
|
|
117
|
+
destinations.forEach((tenant) => {
|
|
118
|
+
table.push([
|
|
119
|
+
tenant.name,
|
|
120
|
+
tenant.tenantId.slice(0, 8) + "...",
|
|
121
|
+
new URL(tenant.environmentUrl).hostname,
|
|
122
|
+
tenant.tags?.join(", ") || "-",
|
|
123
|
+
]);
|
|
124
|
+
});
|
|
125
|
+
console.log(table.toString());
|
|
126
|
+
console.log();
|
|
127
|
+
// Run risk analysis directly via core
|
|
128
|
+
spinner.start("Running risk analysis...");
|
|
129
|
+
// Demo mode has no Config to draw waves from. Use a single wave
|
|
130
|
+
// with the documented default parallelism (DEFAULT_MAX_PARALLEL=5)
|
|
131
|
+
// so the duration estimate models real deploys, not a sequential
|
|
132
|
+
// pessimization. Mirrors what `deploy --all` does at runtime when
|
|
133
|
+
// no waves are configured.
|
|
134
|
+
const context = {
|
|
135
|
+
tenants: destinations.map((t) => ({
|
|
136
|
+
id: t.tenantId,
|
|
137
|
+
name: t.name,
|
|
138
|
+
environmentUrl: t.environmentUrl,
|
|
139
|
+
tags: t.tags,
|
|
140
|
+
})),
|
|
141
|
+
solutionFile: options.agentPackage || options.solution,
|
|
142
|
+
isProduction: destinations.some((t) => t.tags?.includes("production")),
|
|
143
|
+
maxParallel: 5,
|
|
144
|
+
};
|
|
145
|
+
const analysis = await riskAnalyzer.analyze(context);
|
|
146
|
+
spinner.succeed(chalk.green("Risk analysis complete"));
|
|
147
|
+
console.log();
|
|
148
|
+
displayAnalysis(analysis, destinations.length, jsonOutput);
|
|
149
|
+
await maybePromptPreconditionFix(analysis.preconditions.failures, jsonOutput);
|
|
150
|
+
if (analysis.canProceed) {
|
|
151
|
+
await maybePromptTestDeploy({
|
|
152
|
+
solution: options.agentPackage || options.solution,
|
|
153
|
+
fullFleet: DEMO_TENANTS,
|
|
154
|
+
isDemo: true,
|
|
155
|
+
json: jsonOutput,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}, async ({ config, destinations }) => {
|
|
159
|
+
spinner.succeed("Manifest loaded");
|
|
160
|
+
if (destinations.length === 0) {
|
|
161
|
+
spinner.fail(chalk.red("No destinations matched the selection criteria"));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
// Display destinations
|
|
165
|
+
console.log();
|
|
166
|
+
console.log(chalk.bold(`📊 Analyzing Risk for ${destinations.length} Destinations:`));
|
|
167
|
+
const table = new Table({
|
|
168
|
+
head: ["Destination", "Tenant ID", "Port", "Tags"],
|
|
169
|
+
style: { head: ["cyan"] },
|
|
170
|
+
});
|
|
171
|
+
destinations.forEach((tenant) => {
|
|
172
|
+
table.push([
|
|
173
|
+
tenant.name,
|
|
174
|
+
tenant.tenantId.slice(0, 8) + "...",
|
|
175
|
+
new URL(tenant.environmentUrl).hostname,
|
|
176
|
+
tenant.tags?.join(", ") || "-",
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
console.log(table.toString());
|
|
180
|
+
console.log();
|
|
181
|
+
// Run risk analysis directly via core
|
|
182
|
+
spinner.start("Running risk analysis...");
|
|
183
|
+
const agentPackagePath = options.agentPackage || options.solution;
|
|
184
|
+
// Plumb the actual wave plan through so the duration estimate
|
|
185
|
+
// matches what `deploy` will run. Mirrors `deploy.ts`'s
|
|
186
|
+
// `runDryRunPreview` flow.
|
|
187
|
+
const waveService = new WaveService();
|
|
188
|
+
const waves = waveService.createExecutionPlan(config, destinations);
|
|
189
|
+
const context = {
|
|
190
|
+
tenants: destinations.map((t) => ({
|
|
191
|
+
id: t.tenantId,
|
|
192
|
+
name: t.name,
|
|
193
|
+
environmentUrl: t.environmentUrl,
|
|
194
|
+
tags: t.tags,
|
|
195
|
+
})),
|
|
196
|
+
solutionFile: agentPackagePath,
|
|
197
|
+
isProduction: destinations.some((t) => t.tags?.includes("production")),
|
|
198
|
+
waves,
|
|
199
|
+
};
|
|
200
|
+
const analysis = await riskAnalyzer.analyze(context);
|
|
201
|
+
spinner.succeed(chalk.green("Risk analysis complete"));
|
|
202
|
+
console.log();
|
|
203
|
+
displayAnalysis(analysis, destinations.length, jsonOutput);
|
|
204
|
+
await maybePromptPreconditionFix(analysis.preconditions.failures, jsonOutput);
|
|
205
|
+
if (analysis.canProceed) {
|
|
206
|
+
await maybePromptTestDeploy({
|
|
207
|
+
solution: agentPackagePath,
|
|
208
|
+
fullFleet: config.tenants,
|
|
209
|
+
isDemo: false,
|
|
210
|
+
json: jsonOutput,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
handleCommandError(error, spinner, "Risk analysis failed");
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
/**
|
|
220
|
+
* Offer to run a test deploy on a tenant tagged "test" right after a successful
|
|
221
|
+
* analysis. Skipped when output is non-interactive (--json, --quiet, non-TTY)
|
|
222
|
+
* so scripts and pipelines never hang waiting for input.
|
|
223
|
+
*/
|
|
224
|
+
async function maybePromptTestDeploy(opts) {
|
|
225
|
+
const interactive = isInteractivePrompt({ json: opts.json });
|
|
226
|
+
if (!interactive)
|
|
227
|
+
return;
|
|
228
|
+
const testTenants = opts.fullFleet.filter((t) => t.enabled && t.tags?.includes("test"));
|
|
229
|
+
if (testTenants.length === 0)
|
|
230
|
+
return;
|
|
231
|
+
// pickFromList collapses to a y/N confirm when the list has one item, so the
|
|
232
|
+
// single-test-tenant case and the multi-test-tenant case share one code path.
|
|
233
|
+
const target = await pickFromList(testTenants, {
|
|
234
|
+
prompt: "Try a test deploy first?",
|
|
235
|
+
label: (t) => t.name,
|
|
236
|
+
hint: (t) => (t.tags?.length ? t.tags.join(", ") : undefined),
|
|
237
|
+
isInteractive: interactive,
|
|
238
|
+
});
|
|
239
|
+
if (!target)
|
|
240
|
+
return;
|
|
241
|
+
printRunningCommand(["deploy", opts.solution, "--tenant", target.name]);
|
|
242
|
+
await runDeploy(opts.solution, target.name, opts.isDemo);
|
|
243
|
+
}
|
|
244
|
+
async function runDeploy(solution, tenantName, isDemo) {
|
|
245
|
+
return new Promise((resolve, reject) => {
|
|
246
|
+
const args = ["deploy", solution, "--tenant", tenantName];
|
|
247
|
+
const isBundled = !process.argv[1] || process.argv[1] === process.execPath;
|
|
248
|
+
const spawnArgs = isBundled ? args : [process.argv[1], ...args];
|
|
249
|
+
const env = { ...process.env };
|
|
250
|
+
if (isDemo)
|
|
251
|
+
env.DEMO_MODE = "true";
|
|
252
|
+
// stdin ignored so the subprocess doesn't fight with the parent REPL's
|
|
253
|
+
// shared readline; deploy doesn't need interactive input in the
|
|
254
|
+
// analyze → test-deploy flow.
|
|
255
|
+
const proc = spawn(process.execPath, spawnArgs, {
|
|
256
|
+
stdio: ["ignore", "inherit", "inherit"],
|
|
257
|
+
env,
|
|
258
|
+
});
|
|
259
|
+
proc.on("close", () => resolve());
|
|
260
|
+
proc.on("error", reject);
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function displayAnalysis(analysis, tenantCount, jsonOutput) {
|
|
264
|
+
if (jsonOutput) {
|
|
265
|
+
console.log(JSON.stringify(analysis, null, 2));
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
// Overall summary
|
|
269
|
+
const scoreColor = analysis.score === "critical" || analysis.score === "high"
|
|
270
|
+
? chalk.red
|
|
271
|
+
: analysis.score === "medium"
|
|
272
|
+
? chalk.yellow
|
|
273
|
+
: chalk.green;
|
|
274
|
+
console.log(chalk.bold("═".repeat(70)));
|
|
275
|
+
console.log(chalk.bold.cyan(" RISK ANALYSIS REPORT"));
|
|
276
|
+
console.log(chalk.bold("═".repeat(70)));
|
|
277
|
+
console.log();
|
|
278
|
+
// Surface the confidence qualifier next to the risk score so users see
|
|
279
|
+
// "LOW (limited data)" or "HIGH (high confidence)" rather than treating
|
|
280
|
+
// every risk score as equally trustworthy.
|
|
281
|
+
const qualifierLabel = confidenceQualifierLabel(analysis.confidenceQualifier);
|
|
282
|
+
const scoreLabel = `${analysis.score.toUpperCase()} (${qualifierLabel})`;
|
|
283
|
+
console.log(chalk.bold("📊 Overall Assessment"));
|
|
284
|
+
console.log("─".repeat(70));
|
|
285
|
+
console.log(` Risk Score: ${scoreColor(scoreLabel)}`);
|
|
286
|
+
console.log(` Confidence: ${analysis.confidence}%`);
|
|
287
|
+
console.log(` Success Probability: ${analysis.successProbability}%`);
|
|
288
|
+
console.log(` Estimated Duration: ${analysis.estimatedDuration.min}-${analysis.estimatedDuration.max} minutes`);
|
|
289
|
+
console.log(` Can Proceed: ${analysis.canProceed ? chalk.green("YES") : chalk.red("NO")}`);
|
|
290
|
+
console.log(` Requires Approval: ${analysis.requiresApproval ? chalk.yellow("YES") : chalk.green("NO")}`);
|
|
291
|
+
console.log(` Analyzed Tenants: ${tenantCount}`);
|
|
292
|
+
console.log();
|
|
293
|
+
// Blockers
|
|
294
|
+
if (analysis.blockers.length > 0) {
|
|
295
|
+
console.log(chalk.bold.red(`🚫 BLOCKERS (${analysis.blockers.length})`));
|
|
296
|
+
console.log(chalk.red("─".repeat(70)));
|
|
297
|
+
console.log(chalk.red("These issues prevent deployment and MUST be fixed first:"));
|
|
298
|
+
console.log();
|
|
299
|
+
analysis.blockers.forEach((blocker, idx) => {
|
|
300
|
+
console.log(chalk.red(`${idx + 1}. ${blocker.message}`));
|
|
301
|
+
if (blocker.affectedTenants && blocker.affectedTenants.length > 0) {
|
|
302
|
+
console.log(chalk.gray(` Affected: ${blocker.affectedTenants.join(", ")}`));
|
|
303
|
+
}
|
|
304
|
+
if (blocker.resolution) {
|
|
305
|
+
console.log(chalk.yellow(` 💡 ${blocker.resolution}`));
|
|
306
|
+
}
|
|
307
|
+
if (blocker.link) {
|
|
308
|
+
console.log(chalk.blue(` 🔗 ${blocker.link}`));
|
|
309
|
+
}
|
|
310
|
+
console.log();
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
// Critical & Error Issues — preflight failures get their own dedicated
|
|
314
|
+
// PRECONDITIONS section below, so exclude them here to avoid duplication.
|
|
315
|
+
const criticalIssues = analysis.issues.filter((i) => (i.severity === "critical" || i.severity === "error") && i.category !== "preconditions");
|
|
316
|
+
if (criticalIssues.length > 0 && analysis.blockers.length === 0) {
|
|
317
|
+
console.log(chalk.bold.red(`❌ CRITICAL ISSUES (${criticalIssues.length})`));
|
|
318
|
+
console.log(chalk.red("─".repeat(70)));
|
|
319
|
+
criticalIssues.forEach((issue, idx) => {
|
|
320
|
+
const icon = SEVERITY_ICONS[issue.severity];
|
|
321
|
+
const colorFn = SEVERITY_COLORS[issue.severity];
|
|
322
|
+
console.log(colorFn(`${icon} ${idx + 1}. ${issue.message}`));
|
|
323
|
+
if (issue.affectedTenants && issue.affectedTenants.length > 0) {
|
|
324
|
+
console.log(chalk.gray(` Affected: ${issue.affectedTenants.join(", ")}`));
|
|
325
|
+
}
|
|
326
|
+
if (issue.resolution) {
|
|
327
|
+
console.log(chalk.yellow(` 💡 ${issue.resolution}`));
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
console.log();
|
|
331
|
+
}
|
|
332
|
+
// Warnings — same exclusion, preflight has its own section.
|
|
333
|
+
const warnings = analysis.issues.filter((i) => i.severity === "warning" && i.category !== "preconditions");
|
|
334
|
+
if (warnings.length > 0) {
|
|
335
|
+
console.log(chalk.bold.yellow(`⚠️ WARNINGS (${warnings.length})`));
|
|
336
|
+
console.log(chalk.yellow("─".repeat(70)));
|
|
337
|
+
warnings.forEach((warning, idx) => {
|
|
338
|
+
console.log(chalk.yellow(`${idx + 1}. ${warning.message}`));
|
|
339
|
+
if (warning.affectedTenants && warning.affectedTenants.length > 0) {
|
|
340
|
+
console.log(chalk.gray(` Affected: ${warning.affectedTenants.join(", ")}`));
|
|
341
|
+
}
|
|
342
|
+
if (warning.resolution) {
|
|
343
|
+
console.log(chalk.gray(` 💡 ${warning.resolution}`));
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
console.log();
|
|
347
|
+
}
|
|
348
|
+
// Info — exclude preconditions; the PRECONDITIONS section below renders
|
|
349
|
+
// its own "manifest skipped" / "all clear" status line.
|
|
350
|
+
const infos = analysis.issues.filter((i) => i.severity === "info" && i.category !== "preconditions");
|
|
351
|
+
if (infos.length > 0) {
|
|
352
|
+
console.log(chalk.bold.blue(`ℹ️ INFORMATION (${infos.length})`));
|
|
353
|
+
console.log(chalk.blue("─".repeat(70)));
|
|
354
|
+
infos.forEach((info, idx) => {
|
|
355
|
+
console.log(chalk.blue(`${idx + 1}. ${info.message}`));
|
|
356
|
+
});
|
|
357
|
+
console.log();
|
|
358
|
+
}
|
|
359
|
+
// Recommendations
|
|
360
|
+
if (analysis.recommendations.length > 0) {
|
|
361
|
+
console.log(chalk.bold.cyan("💡 RECOMMENDATIONS"));
|
|
362
|
+
console.log(chalk.cyan("─".repeat(70)));
|
|
363
|
+
analysis.recommendations.forEach((rec, idx) => {
|
|
364
|
+
console.log(chalk.cyan(`${idx + 1}. ${rec}`));
|
|
365
|
+
});
|
|
366
|
+
console.log();
|
|
367
|
+
}
|
|
368
|
+
// Preflight (preconditions) — fifth analyze dimension. Renders structured
|
|
369
|
+
// remediation per failure (deep link / CLI command / manual steps).
|
|
370
|
+
displayPreconditions(analysis);
|
|
371
|
+
// Per-tenant breakdown — gives operators a fast scan over which
|
|
372
|
+
// tenants are driving the aggregate risk.
|
|
373
|
+
if (analysis.perTenantBreakdown && analysis.perTenantBreakdown.length > 0) {
|
|
374
|
+
console.log(chalk.bold("🏢 PER-TENANT BREAKDOWN"));
|
|
375
|
+
console.log("─".repeat(70));
|
|
376
|
+
const breakdownTable = new Table({
|
|
377
|
+
head: ["Tenant", "Risk", "Top Factor"],
|
|
378
|
+
style: { head: ["cyan"] },
|
|
379
|
+
colWidths: [28, 10, 32],
|
|
380
|
+
wordWrap: true,
|
|
381
|
+
});
|
|
382
|
+
for (const row of analysis.perTenantBreakdown) {
|
|
383
|
+
const rowColor = row.score === "critical" || row.score === "high"
|
|
384
|
+
? chalk.red
|
|
385
|
+
: row.score === "medium"
|
|
386
|
+
? chalk.yellow
|
|
387
|
+
: chalk.green;
|
|
388
|
+
const factor = row.topFactor
|
|
389
|
+
? `[${row.topFactor.severity}] ${row.topFactor.message}`
|
|
390
|
+
: "no issues";
|
|
391
|
+
breakdownTable.push([row.tenantName, rowColor(row.score.toUpperCase()), factor]);
|
|
392
|
+
}
|
|
393
|
+
console.log(breakdownTable.toString());
|
|
394
|
+
console.log();
|
|
395
|
+
}
|
|
396
|
+
// Final verdict
|
|
397
|
+
console.log(chalk.bold("═".repeat(70)));
|
|
398
|
+
if (analysis.canProceed) {
|
|
399
|
+
if (analysis.blockers.length === 0 && criticalIssues.length === 0 && warnings.length === 0) {
|
|
400
|
+
console.log(chalk.bold.green("✅ READY TO DEPLOY"));
|
|
401
|
+
console.log(chalk.green("All checks passed. You can proceed with deployment."));
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
console.log(chalk.bold.yellow("⚠️ PROCEED WITH CAUTION"));
|
|
405
|
+
console.log(chalk.yellow("Deployment can proceed, but there are warnings to consider."));
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
console.log(chalk.bold.red("❌ DEPLOYMENT BLOCKED"));
|
|
410
|
+
console.log(chalk.red(`Fix ${analysis.blockers.length} blocker(s) before proceeding.`));
|
|
411
|
+
}
|
|
412
|
+
console.log(chalk.bold("═".repeat(70)));
|
|
413
|
+
console.log();
|
|
414
|
+
// Next steps
|
|
415
|
+
if (analysis.canProceed) {
|
|
416
|
+
console.log(chalk.gray("Next step: deploy <solution> --all"));
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
console.log(chalk.gray("Fix the blockers listed above, then run 'analyze' again"));
|
|
420
|
+
}
|
|
421
|
+
console.log();
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Render the PRECONDITIONS block (Phase 1 preflight). Three states:
|
|
425
|
+
* - Manifest not found → single info line, deploy still proceeds.
|
|
426
|
+
* - Manifest found, no failures → "all clear" line.
|
|
427
|
+
* - Manifest found with failures → numbered list with structured
|
|
428
|
+
* remediation (link / command / manual).
|
|
429
|
+
*/
|
|
430
|
+
function displayPreconditions(analysis) {
|
|
431
|
+
const { preconditions } = analysis;
|
|
432
|
+
if (!preconditions.manifestFound) {
|
|
433
|
+
// Visible note about coverage — preflight skipped because no manifest.
|
|
434
|
+
console.log(chalk.bold("🔧 PRECONDITIONS"));
|
|
435
|
+
console.log("─".repeat(70));
|
|
436
|
+
console.log(chalk.gray("No precondition manifest for this solution; preflight skipped."));
|
|
437
|
+
console.log();
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
if (preconditions.failures.length === 0) {
|
|
441
|
+
console.log(chalk.bold("🔧 PRECONDITIONS"));
|
|
442
|
+
console.log("─".repeat(70));
|
|
443
|
+
console.log(chalk.green(`All preconditions passed for solution \`${preconditions.solution}\` (manifest v${preconditions.manifestVersion}).`));
|
|
444
|
+
console.log();
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
console.log(chalk.bold("🔧 PRECONDITIONS"));
|
|
448
|
+
console.log("─".repeat(70));
|
|
449
|
+
console.log(`${chalk.bold(preconditions.failures.length)} precondition${preconditions.failures.length === 1 ? "" : "s"} failed for solution \`${preconditions.solution}\`:`);
|
|
450
|
+
console.log();
|
|
451
|
+
preconditions.failures.forEach((failure, idx) => {
|
|
452
|
+
const headerColor = failure.severity === "error" ? chalk.red : chalk.yellow;
|
|
453
|
+
console.log(headerColor(` ${idx + 1}. ${failure.resourceType.split(".").pop() ?? failure.resourceType} \`${failure.resourceDisplayName}\` [${failure.tenantName}]`));
|
|
454
|
+
console.log(` ${chalk.gray("property:")} ${failure.failedProperty}`);
|
|
455
|
+
console.log(` ${chalk.gray("current:")} ${formatValue(failure.currentValue)}`);
|
|
456
|
+
console.log(` ${chalk.gray("required:")} ${formatValue(failure.requiredValue)} (${failure.comparisonOp})`);
|
|
457
|
+
console.log(` ${chalk.gray("why:")} ${failure.description}`);
|
|
458
|
+
console.log();
|
|
459
|
+
const subs = remediationSubstitutions(failure);
|
|
460
|
+
const remediation = failure.remediation;
|
|
461
|
+
console.log(` ${chalk.cyan("fix:")} ${substitute(remediation.title, subs)}`);
|
|
462
|
+
if (remediation.kind === "link") {
|
|
463
|
+
console.log(` ${chalk.cyan("→")} ${substitute(remediation.urlTemplate, subs)}`);
|
|
464
|
+
}
|
|
465
|
+
else if (remediation.kind === "command") {
|
|
466
|
+
console.log(` ${chalk.cyan("$")} ${substitute(remediation.cmd, subs)}`);
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
remediation.steps.forEach((step) => {
|
|
470
|
+
console.log(` ${chalk.cyan("·")} ${substitute(step, subs)}`);
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
console.log();
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Pretty-print a precondition value. Strings stay bare; everything else
|
|
478
|
+
* (booleans, arrays, objects, undefined) round-trips through JSON for a
|
|
479
|
+
* compact, unambiguous representation.
|
|
480
|
+
*/
|
|
481
|
+
function formatValue(value) {
|
|
482
|
+
if (typeof value === "string")
|
|
483
|
+
return `\`${value}\``;
|
|
484
|
+
if (value === undefined)
|
|
485
|
+
return "(missing)";
|
|
486
|
+
return JSON.stringify(value);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Substitution map for `urlTemplate`, `cmd`, and `manualSteps[*]`. Keys in
|
|
490
|
+
* the template are wrapped in single braces (e.g. `{tenantId}`) — same
|
|
491
|
+
* grammar as the existing analyze deep-link templating in the URL
|
|
492
|
+
* resolver.
|
|
493
|
+
*/
|
|
494
|
+
function remediationSubstitutions(failure) {
|
|
495
|
+
return {
|
|
496
|
+
tenantId: failure.tenantId,
|
|
497
|
+
tenantName: failure.tenantName,
|
|
498
|
+
resourceId: failure.resourceId,
|
|
499
|
+
resourceDisplayName: failure.resourceDisplayName,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
function substitute(template, subs) {
|
|
503
|
+
return template.replace(/\{(\w+)\}/g, (_, key) => subs[key] ?? `{${key}}`);
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* After-action picker for preflight failures. TTY-only (matches the
|
|
507
|
+
* drift-after-action UX from #404). Renders a numbered list of failures
|
|
508
|
+
* and dispatches based on remediation kind:
|
|
509
|
+
* - `link` → print URL, optionally `open` it.
|
|
510
|
+
* - `command` → print the command and spawn it.
|
|
511
|
+
* - `manual` → print the substituted steps.
|
|
512
|
+
*/
|
|
513
|
+
export async function maybePromptPreconditionFix(failures, jsonOutput) {
|
|
514
|
+
if (failures.length === 0)
|
|
515
|
+
return;
|
|
516
|
+
const interactive = isInteractivePrompt({ json: jsonOutput });
|
|
517
|
+
if (!interactive)
|
|
518
|
+
return;
|
|
519
|
+
const choice = await pickFromList(failures, {
|
|
520
|
+
prompt: "Fix a precondition?",
|
|
521
|
+
label: (f) => `${f.resourceDisplayName} on ${f.tenantName} (${f.failedProperty})`,
|
|
522
|
+
hint: (f) => f.severity,
|
|
523
|
+
isInteractive: interactive,
|
|
524
|
+
skipLabel: "skip",
|
|
525
|
+
});
|
|
526
|
+
if (!choice)
|
|
527
|
+
return;
|
|
528
|
+
await dispatchRemediation(choice);
|
|
529
|
+
}
|
|
530
|
+
async function dispatchRemediation(failure) {
|
|
531
|
+
const subs = remediationSubstitutions(failure);
|
|
532
|
+
const remediation = failure.remediation;
|
|
533
|
+
if (remediation.kind === "link") {
|
|
534
|
+
const url = substitute(remediation.urlTemplate, subs);
|
|
535
|
+
console.log(chalk.cyan(`\n→ ${url}\n`));
|
|
536
|
+
try {
|
|
537
|
+
await open(url);
|
|
538
|
+
}
|
|
539
|
+
catch {
|
|
540
|
+
// Non-fatal: user can copy the URL manually.
|
|
541
|
+
}
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
if (remediation.kind === "command") {
|
|
545
|
+
const cmd = substitute(remediation.cmd, subs);
|
|
546
|
+
printRunningCommand(cmd.split(/\s+/));
|
|
547
|
+
await runShellCommand(cmd);
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
console.log(chalk.cyan(`\n${remediation.title}`));
|
|
551
|
+
remediation.steps.forEach((step, idx) => {
|
|
552
|
+
console.log(` ${idx + 1}. ${substitute(step, subs)}`);
|
|
553
|
+
});
|
|
554
|
+
console.log();
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Spawn a remediation `command` directly. Mirrors `runDeploy` above —
|
|
558
|
+
* stdin ignored so we don't fight with the parent REPL's readline.
|
|
559
|
+
*/
|
|
560
|
+
async function runShellCommand(cmd) {
|
|
561
|
+
return new Promise((resolve, reject) => {
|
|
562
|
+
const parts = cmd.split(/\s+/);
|
|
563
|
+
const proc = spawn(parts[0], parts.slice(1), {
|
|
564
|
+
stdio: ["ignore", "inherit", "inherit"],
|
|
565
|
+
env: process.env,
|
|
566
|
+
});
|
|
567
|
+
proc.on("close", () => resolve());
|
|
568
|
+
proc.on("error", reject);
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.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 authCommand: Command;
|
|
18
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SAUrB,CAAC"}
|