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
package/dist/index.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2024 Pax8, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
// Set default log level for CLI
|
|
18
|
+
process.env.LOG_LEVEL = process.env.LOG_LEVEL || "error";
|
|
19
|
+
// Load .env file from CWD (if it exists) so commands can find PARTNER_CLIENT_SECRET etc.
|
|
20
|
+
// Skip keys the CLI manages independently (demo mode via ~/.pax8-cta/cli-config.json,
|
|
21
|
+
// log level set above, and web-app-only keys).
|
|
22
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
23
|
+
import { resolve } from "node:path";
|
|
24
|
+
const ENV_SKIP_KEYS = new Set([
|
|
25
|
+
"DEMO_MODE",
|
|
26
|
+
"NEXT_PUBLIC_DEMO_MODE",
|
|
27
|
+
"LOG_LEVEL",
|
|
28
|
+
"NODE_ENV",
|
|
29
|
+
"NEXTAUTH_URL",
|
|
30
|
+
"NEXTAUTH_SECRET",
|
|
31
|
+
]);
|
|
32
|
+
const envPath = resolve(process.cwd(), ".env");
|
|
33
|
+
if (existsSync(envPath)) {
|
|
34
|
+
const envContent = readFileSync(envPath, "utf-8");
|
|
35
|
+
for (const line of envContent.split(/\r?\n/)) {
|
|
36
|
+
const trimmed = line.trim();
|
|
37
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
38
|
+
continue;
|
|
39
|
+
const eqIdx = trimmed.indexOf("=");
|
|
40
|
+
if (eqIdx === -1)
|
|
41
|
+
continue;
|
|
42
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
43
|
+
if (ENV_SKIP_KEYS.has(key))
|
|
44
|
+
continue;
|
|
45
|
+
const value = trimmed
|
|
46
|
+
.slice(eqIdx + 1)
|
|
47
|
+
.trim()
|
|
48
|
+
.replace(/^["']|["']$/g, "");
|
|
49
|
+
if (!process.env[key]) {
|
|
50
|
+
process.env[key] = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Detect TTY early so subcommands can read getDefaultFormat() consistently.
|
|
55
|
+
// Unit tests run in non-TTY vitest workers but should still default to "table";
|
|
56
|
+
// only set this when actually invoked as a CLI binary subprocess.
|
|
57
|
+
if (!process.env.PAX8_CTA_DEFAULT_FORMAT) {
|
|
58
|
+
process.env.PAX8_CTA_DEFAULT_FORMAT = process.stdout.isTTY ? "table" : "json";
|
|
59
|
+
}
|
|
60
|
+
import { Command } from "commander";
|
|
61
|
+
import { exportCommand } from "./commands/export.js";
|
|
62
|
+
import { importCommand } from "./commands/import.js";
|
|
63
|
+
import { analyzeCommand } from "./commands/analyze.js";
|
|
64
|
+
import { deployCommand } from "./commands/deploy.js";
|
|
65
|
+
import { tenantsCommand } from "./commands/tenants/index.js";
|
|
66
|
+
import { deploymentsCommand } from "./commands/deployments/index.js";
|
|
67
|
+
import { solutionsCommand } from "./commands/solutions/index.js";
|
|
68
|
+
import { initCommand } from "./commands/init.js";
|
|
69
|
+
import { demoCommand } from "./commands/demo.js";
|
|
70
|
+
import { telemetryCommand } from "./commands/telemetry.js";
|
|
71
|
+
import { configCommand } from "./commands/config.js";
|
|
72
|
+
import { setupCommand } from "./commands/setup.js";
|
|
73
|
+
import { authCommand } from "./commands/auth.js";
|
|
74
|
+
import { validateCommand } from "./commands/validate.js";
|
|
75
|
+
import { statusCommand } from "./commands/status.js";
|
|
76
|
+
import { showBanner, showWelcome } from "./lib/banner.js";
|
|
77
|
+
import { startRepl } from "./lib/repl.js";
|
|
78
|
+
import { isTelemetryEnabled, hasShownFirstRunNotice, markFirstRunNoticeShown, getFirstRunNotice, trackCommand, trackFirstRun, shutdownTelemetry, } from "./lib/telemetry.js";
|
|
79
|
+
import { isQuietMode } from "./lib/spinner.js";
|
|
80
|
+
import chalk from "chalk";
|
|
81
|
+
const VERSION = "0.1.0";
|
|
82
|
+
// Factory function to create a program instance
|
|
83
|
+
export function createProgram() {
|
|
84
|
+
const program = new Command();
|
|
85
|
+
program
|
|
86
|
+
.name("pax8-cta")
|
|
87
|
+
.description("Pax8 CTA - Deploy and manage Power Platform agents across tenants")
|
|
88
|
+
.version(VERSION)
|
|
89
|
+
.option("--verbose", "Enable verbose output for debugging")
|
|
90
|
+
.option("--json", "Output as JSON (default when stdout is not a TTY)")
|
|
91
|
+
.option("--quiet", "Suppress all output (exit code only)")
|
|
92
|
+
.option("--ids-only", "Print one ID per line (for shell pipelines and LLM agent flows)")
|
|
93
|
+
.hook("preAction", (thisCommand) => {
|
|
94
|
+
if (thisCommand.opts().verbose) {
|
|
95
|
+
process.env.LOG_LEVEL = "debug";
|
|
96
|
+
}
|
|
97
|
+
// --ids-only is mutually exclusive with --json and --csv
|
|
98
|
+
const opts = thisCommand.optsWithGlobals();
|
|
99
|
+
if (opts.idsOnly) {
|
|
100
|
+
if (opts.json) {
|
|
101
|
+
console.error("Error: --ids-only and --json are mutually exclusive");
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
if (opts.csv) {
|
|
105
|
+
console.error("Error: --ids-only and --csv are mutually exclusive");
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Getting started
|
|
111
|
+
program.addCommand(initCommand);
|
|
112
|
+
program.addCommand(authCommand);
|
|
113
|
+
program.addCommand(validateCommand);
|
|
114
|
+
// Day-to-day workflow
|
|
115
|
+
program.addCommand(solutionsCommand);
|
|
116
|
+
program.addCommand(exportCommand);
|
|
117
|
+
program.addCommand(importCommand);
|
|
118
|
+
program.addCommand(deployCommand);
|
|
119
|
+
program.addCommand(deploymentsCommand);
|
|
120
|
+
program.addCommand(statusCommand);
|
|
121
|
+
// Environment management
|
|
122
|
+
program.addCommand(tenantsCommand);
|
|
123
|
+
program.addCommand(setupCommand);
|
|
124
|
+
program.addCommand(analyzeCommand);
|
|
125
|
+
// Utilities
|
|
126
|
+
program.addCommand(demoCommand);
|
|
127
|
+
program.addCommand(telemetryCommand);
|
|
128
|
+
program.addCommand(configCommand);
|
|
129
|
+
return program;
|
|
130
|
+
}
|
|
131
|
+
// Strip a leading "--" token from argv. POSIX shells already drop the first
|
|
132
|
+
// "--", but `pnpm cli -- <args>` (and similar nested-script wrappers) forward
|
|
133
|
+
// the literal "--" through to us, where Commander would otherwise treat it as
|
|
134
|
+
// an unknown command (issue #383).
|
|
135
|
+
if (process.argv[2] === "--") {
|
|
136
|
+
process.argv.splice(2, 1);
|
|
137
|
+
}
|
|
138
|
+
// Show banner if no arguments provided OR showing top-level help (not command-specific help)
|
|
139
|
+
const args = process.argv.slice(2);
|
|
140
|
+
const knownCommands = createProgram().commands.flatMap((cmd) => [cmd.name(), ...cmd.aliases()]);
|
|
141
|
+
const hasCommand = args.some((arg) => knownCommands.includes(arg));
|
|
142
|
+
const isTopLevelHelp = (args.includes("--help") || args.includes("-h")) && !hasCommand;
|
|
143
|
+
const shouldShowBanner = args.length === 0 || isTopLevelHelp;
|
|
144
|
+
if (shouldShowBanner) {
|
|
145
|
+
showBanner(VERSION);
|
|
146
|
+
if (args.length === 0) {
|
|
147
|
+
showWelcome();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Show first-run telemetry notice (once, unless in quiet mode or no args).
|
|
151
|
+
if (args.length > 0 && !isQuietMode()) {
|
|
152
|
+
let shouldShowFirstRunNotice = false;
|
|
153
|
+
try {
|
|
154
|
+
shouldShowFirstRunNotice = !hasShownFirstRunNotice();
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// If config storage is not writable/readable, skip persistence without crashing.
|
|
158
|
+
shouldShowFirstRunNotice = false;
|
|
159
|
+
}
|
|
160
|
+
if (shouldShowFirstRunNotice) {
|
|
161
|
+
console.log(chalk.gray(getFirstRunNotice()));
|
|
162
|
+
try {
|
|
163
|
+
markFirstRunNoticeShown();
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Non-fatal: telemetry preference persistence should never break CLI usage.
|
|
167
|
+
}
|
|
168
|
+
if (isTelemetryEnabled()) {
|
|
169
|
+
trackFirstRun();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Graceful shutdown handling
|
|
174
|
+
let isShuttingDown = false;
|
|
175
|
+
async function gracefulShutdown(signal) {
|
|
176
|
+
if (isShuttingDown)
|
|
177
|
+
return;
|
|
178
|
+
isShuttingDown = true;
|
|
179
|
+
console.log(chalk.gray(`\n${signal} received. Shutting down gracefully...`));
|
|
180
|
+
try {
|
|
181
|
+
// Flush telemetry before exit
|
|
182
|
+
await shutdownTelemetry();
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// Ignore errors during shutdown
|
|
186
|
+
}
|
|
187
|
+
process.exit(0);
|
|
188
|
+
}
|
|
189
|
+
// Register signal handlers for graceful shutdown
|
|
190
|
+
process.on("SIGINT", () => gracefulShutdown("SIGINT"));
|
|
191
|
+
if (process.platform !== "win32") {
|
|
192
|
+
process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
|
|
193
|
+
}
|
|
194
|
+
// If no arguments provided, enter interactive mode
|
|
195
|
+
if (args.length === 0) {
|
|
196
|
+
await startRepl(createProgram);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const startTime = Date.now();
|
|
200
|
+
const program = createProgram();
|
|
201
|
+
// Track command execution
|
|
202
|
+
program.hook("postAction", (thisCommand) => {
|
|
203
|
+
const durationMs = Date.now() - startTime;
|
|
204
|
+
const command = thisCommand.parent?.name() || thisCommand.name();
|
|
205
|
+
const subcommand = thisCommand.parent ? thisCommand.name() : undefined;
|
|
206
|
+
// Extract flags (without values for privacy)
|
|
207
|
+
const flags = Object.keys(thisCommand.opts());
|
|
208
|
+
trackCommand({
|
|
209
|
+
command,
|
|
210
|
+
subcommand,
|
|
211
|
+
flags,
|
|
212
|
+
success: true,
|
|
213
|
+
durationMs,
|
|
214
|
+
demoMode: process.env.DEMO_MODE === "true",
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
// Handle exit for telemetry tracking
|
|
218
|
+
process.on("exit", (code) => {
|
|
219
|
+
if (code !== 0 && !isShuttingDown) {
|
|
220
|
+
const durationMs = Date.now() - startTime;
|
|
221
|
+
const command = args[0] || "unknown";
|
|
222
|
+
trackCommand({
|
|
223
|
+
command,
|
|
224
|
+
success: false,
|
|
225
|
+
durationMs,
|
|
226
|
+
errorType: "exit_code_" + code,
|
|
227
|
+
demoMode: process.env.DEMO_MODE === "true",
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
// Handle uncaught errors gracefully
|
|
232
|
+
process.on("uncaughtException", async (error) => {
|
|
233
|
+
console.error(chalk.red("\nUnexpected error:"), error.message);
|
|
234
|
+
trackCommand({
|
|
235
|
+
command: args[0] || "unknown",
|
|
236
|
+
success: false,
|
|
237
|
+
durationMs: Date.now() - startTime,
|
|
238
|
+
errorType: "uncaught_exception",
|
|
239
|
+
demoMode: process.env.DEMO_MODE === "true",
|
|
240
|
+
});
|
|
241
|
+
await shutdownTelemetry();
|
|
242
|
+
process.exit(1);
|
|
243
|
+
});
|
|
244
|
+
process.on("unhandledRejection", async (reason) => {
|
|
245
|
+
console.error(chalk.red("\nUnhandled promise rejection:"), reason);
|
|
246
|
+
trackCommand({
|
|
247
|
+
command: args[0] || "unknown",
|
|
248
|
+
success: false,
|
|
249
|
+
durationMs: Date.now() - startTime,
|
|
250
|
+
errorType: "unhandled_rejection",
|
|
251
|
+
demoMode: process.env.DEMO_MODE === "true",
|
|
252
|
+
});
|
|
253
|
+
await shutdownTelemetry();
|
|
254
|
+
process.exit(1);
|
|
255
|
+
});
|
|
256
|
+
program.parse();
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 { DeviceCodeLoginResult } from "@pax8-cta/core";
|
|
17
|
+
export type InteractiveLoginResult = DeviceCodeLoginResult;
|
|
18
|
+
/**
|
|
19
|
+
* Perform interactive device code login for Microsoft authentication
|
|
20
|
+
* Opens user's browser for authentication
|
|
21
|
+
*/
|
|
22
|
+
export declare function interactiveLogin(options?: {
|
|
23
|
+
clientId?: string;
|
|
24
|
+
tenantId?: string;
|
|
25
|
+
scopes?: string[];
|
|
26
|
+
openBrowser?: boolean;
|
|
27
|
+
}): Promise<InteractiveLoginResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Store credentials securely in the OS keychain.
|
|
30
|
+
*
|
|
31
|
+
* Writes the client secret to the canonical keychain entry used by
|
|
32
|
+
* `getClientSecretWithFallback()` (via `storeSecret` from credentials.ts)
|
|
33
|
+
* as well as the per-clientId entry for tenant-specific lookup.
|
|
34
|
+
*/
|
|
35
|
+
export declare function storeCredentials(clientId: string, clientSecret: string, tenantId?: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Retrieve stored credentials from the OS keychain
|
|
38
|
+
*/
|
|
39
|
+
export declare function getStoredCredentials(clientId: string): Promise<{
|
|
40
|
+
clientSecret: string;
|
|
41
|
+
tenantId?: string;
|
|
42
|
+
} | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Remove credentials from the OS keychain
|
|
45
|
+
*/
|
|
46
|
+
export declare function clearCredentials(clientId: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Check if credentials exist in the keychain
|
|
49
|
+
*/
|
|
50
|
+
export declare function hasStoredCredentials(clientId: string): Promise<boolean>;
|
|
51
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAsC5D,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA2BlC;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqB7D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7E"}
|
package/dist/lib/auth.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
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 { deviceCodeLogin } from "@pax8-cta/core";
|
|
17
|
+
import open from "open";
|
|
18
|
+
import chalk from "chalk";
|
|
19
|
+
import { storeSecret } from "./credentials.js";
|
|
20
|
+
const KEYTAR_SERVICE = "pax8-cta-cli";
|
|
21
|
+
async function getKeytar() {
|
|
22
|
+
try {
|
|
23
|
+
const mod = (await import("keytar"));
|
|
24
|
+
const keytar = (mod.default || mod);
|
|
25
|
+
if (typeof keytar.getPassword === "function" &&
|
|
26
|
+
typeof keytar.setPassword === "function" &&
|
|
27
|
+
typeof keytar.deletePassword === "function") {
|
|
28
|
+
return keytar;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Open a URL in the default browser
|
|
38
|
+
*/
|
|
39
|
+
function openBrowser(url) {
|
|
40
|
+
open(url);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Perform interactive device code login for Microsoft authentication
|
|
44
|
+
* Opens user's browser for authentication
|
|
45
|
+
*/
|
|
46
|
+
export async function interactiveLogin(options) {
|
|
47
|
+
const shouldOpenBrowser = options?.openBrowser ?? false;
|
|
48
|
+
try {
|
|
49
|
+
return await deviceCodeLogin({
|
|
50
|
+
clientId: options?.clientId,
|
|
51
|
+
tenantId: options?.tenantId,
|
|
52
|
+
scopes: options?.scopes,
|
|
53
|
+
deviceCodeCallback: (response) => {
|
|
54
|
+
if (shouldOpenBrowser) {
|
|
55
|
+
openBrowser(response.verificationUri);
|
|
56
|
+
console.log(` ✓ Browser opened`);
|
|
57
|
+
console.log(` Enter code: ${chalk.bold(response.userCode)}`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log(` 1. Open: ${response.verificationUri}`);
|
|
61
|
+
console.log(` 2. Enter code: ${chalk.bold(response.userCode)}`);
|
|
62
|
+
}
|
|
63
|
+
console.log();
|
|
64
|
+
console.log(" Waiting for you to sign in...");
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error instanceof Error) {
|
|
70
|
+
throw new Error(`Authentication failed: ${error.message}`);
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Store credentials securely in the OS keychain.
|
|
77
|
+
*
|
|
78
|
+
* Writes the client secret to the canonical keychain entry used by
|
|
79
|
+
* `getClientSecretWithFallback()` (via `storeSecret` from credentials.ts)
|
|
80
|
+
* as well as the per-clientId entry for tenant-specific lookup.
|
|
81
|
+
*/
|
|
82
|
+
export async function storeCredentials(clientId, clientSecret, tenantId) {
|
|
83
|
+
// Store in the canonical location so getClientSecretWithFallback() can find it
|
|
84
|
+
await storeSecret(clientSecret);
|
|
85
|
+
const keytar = await getKeytar();
|
|
86
|
+
if (keytar) {
|
|
87
|
+
try {
|
|
88
|
+
// Also store per-clientId for tenant-specific retrieval
|
|
89
|
+
await keytar.setPassword(KEYTAR_SERVICE, `clientSecret:${clientId}`, clientSecret);
|
|
90
|
+
// Store tenant ID if provided
|
|
91
|
+
if (tenantId) {
|
|
92
|
+
await keytar.setPassword(KEYTAR_SERVICE, `tenantId:${clientId}`, tenantId);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (error instanceof Error) {
|
|
97
|
+
throw new Error(`Failed to store credentials: ${error.message}`);
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Retrieve stored credentials from the OS keychain
|
|
105
|
+
*/
|
|
106
|
+
export async function getStoredCredentials(clientId) {
|
|
107
|
+
try {
|
|
108
|
+
const keytar = await getKeytar();
|
|
109
|
+
if (!keytar)
|
|
110
|
+
return null;
|
|
111
|
+
const clientSecret = await keytar.getPassword(KEYTAR_SERVICE, `clientSecret:${clientId}`);
|
|
112
|
+
if (!clientSecret) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const tenantId = await keytar.getPassword(KEYTAR_SERVICE, `tenantId:${clientId}`);
|
|
116
|
+
return {
|
|
117
|
+
clientSecret,
|
|
118
|
+
tenantId: tenantId || undefined,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Return null if keychain is not available (e.g., in some CI environments)
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Remove credentials from the OS keychain
|
|
128
|
+
*/
|
|
129
|
+
export async function clearCredentials(clientId) {
|
|
130
|
+
try {
|
|
131
|
+
const keytar = await getKeytar();
|
|
132
|
+
if (!keytar)
|
|
133
|
+
return;
|
|
134
|
+
await keytar.deletePassword(KEYTAR_SERVICE, `clientSecret:${clientId}`);
|
|
135
|
+
await keytar.deletePassword(KEYTAR_SERVICE, `tenantId:${clientId}`);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Ignore errors when clearing (credential may not exist)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if credentials exist in the keychain
|
|
143
|
+
*/
|
|
144
|
+
export async function hasStoredCredentials(clientId) {
|
|
145
|
+
try {
|
|
146
|
+
const creds = await getStoredCredentials(clientId);
|
|
147
|
+
return creds !== null;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export declare function showBanner(version?: string): void;
|
|
17
|
+
export declare function showWelcome(): void;
|
|
18
|
+
export declare function showCompactBanner(): void;
|
|
19
|
+
//# sourceMappingURL=banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/lib/banner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,wBAAgB,UAAU,CAAC,OAAO,GAAE,MAAgB,QA6CnD;AAED,wBAAgB,WAAW,SAY1B;AAED,wBAAgB,iBAAiB,SAWhC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
export function showBanner(version = "0.1.0") {
|
|
18
|
+
const W = 63;
|
|
19
|
+
const border = chalk.cyan.bold("═".repeat(W));
|
|
20
|
+
const row = (text, visibleLen, color) => chalk.cyan.bold("║") + color(text) + " ".repeat(W - visibleLen) + chalk.cyan.bold("║");
|
|
21
|
+
const empty = row("", 0, (s) => s);
|
|
22
|
+
const pax8Art = [
|
|
23
|
+
[" ██████╗ █████╗ ██╗ ██╗ █████╗", 36],
|
|
24
|
+
[" ██╔══██╗██╔══██╗╚██╗██╔╝██╔══██╗", 37],
|
|
25
|
+
[" ██████╔╝███████║ ╚███╔╝ ╚█████╔╝", 37],
|
|
26
|
+
[" ██╔═══╝ ██╔══██║ ██╔██╗ ██╔══██╗", 37],
|
|
27
|
+
[" ██║ ██║ ██║██╔╝ ██╗╚█████╔╝", 37],
|
|
28
|
+
[" ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚════╝", 36],
|
|
29
|
+
];
|
|
30
|
+
const ctaArt = [
|
|
31
|
+
[" ██████╗████████╗ █████╗", 32],
|
|
32
|
+
[" ██╔════╝╚══██╔══╝██╔══██╗", 33],
|
|
33
|
+
[" ██║ ██║ ███████║", 33],
|
|
34
|
+
[" ██║ ██║ ██╔══██║", 33],
|
|
35
|
+
[" ╚██████╗ ██║ ██║ ██║", 33],
|
|
36
|
+
[" ╚═════╝ ╚═╝ ╚═╝ ╚═╝", 33],
|
|
37
|
+
];
|
|
38
|
+
const subtitle = " Cross Tenant Agents";
|
|
39
|
+
const tagline = " Deploy Copilot Studio agents to customer tenants via GDAP";
|
|
40
|
+
const versionLine = ` Version ${version}`;
|
|
41
|
+
const lines = [
|
|
42
|
+
chalk.cyan.bold("╔" + border + "╗"),
|
|
43
|
+
empty,
|
|
44
|
+
...pax8Art.map(([text, len]) => row(text, len, chalk.blue.bold)),
|
|
45
|
+
empty,
|
|
46
|
+
...ctaArt.map(([text, len]) => row(text, len, chalk.magenta.bold)),
|
|
47
|
+
empty,
|
|
48
|
+
row(subtitle, subtitle.length, chalk.white.bold),
|
|
49
|
+
empty,
|
|
50
|
+
row(tagline, tagline.length, chalk.white),
|
|
51
|
+
row(versionLine, versionLine.length, chalk.gray),
|
|
52
|
+
empty,
|
|
53
|
+
chalk.cyan.bold("╚" + border + "╝"),
|
|
54
|
+
];
|
|
55
|
+
console.log("\n" + lines.join("\n"));
|
|
56
|
+
}
|
|
57
|
+
export function showWelcome() {
|
|
58
|
+
console.log();
|
|
59
|
+
console.log(chalk.cyan.bold("🚀 Quick Start:"));
|
|
60
|
+
console.log();
|
|
61
|
+
console.log(chalk.white(" Deploy to all tenants: ") + chalk.gray("deploy --all --solution ./agent.zip"));
|
|
62
|
+
console.log(chalk.white(" View deployment history: ") + chalk.gray("deployments list"));
|
|
63
|
+
console.log(chalk.white(" List your tenants: ") + chalk.gray("tenants list"));
|
|
64
|
+
console.log();
|
|
65
|
+
console.log(chalk.cyan(" Need help? ") + chalk.gray("Type: help"));
|
|
66
|
+
console.log();
|
|
67
|
+
}
|
|
68
|
+
export function showCompactBanner() {
|
|
69
|
+
console.log();
|
|
70
|
+
console.log(chalk.cyan.bold(" ╔═══════════════════════════════════════╗"));
|
|
71
|
+
console.log(chalk.cyan.bold(" ║ ") +
|
|
72
|
+
chalk.blue.bold("Pax8") +
|
|
73
|
+
chalk.magenta.bold(" CTA") +
|
|
74
|
+
chalk.cyan.bold(" • Multi-Tenant Deployment ║"));
|
|
75
|
+
console.log(chalk.cyan.bold(" ╚═══════════════════════════════════════╝"));
|
|
76
|
+
console.log();
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/lib/banner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
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 { loadConfig, type TenantConfig } from "@pax8-cta/core";
|
|
17
|
+
/**
|
|
18
|
+
* Check if demo mode is active from any source (CLI config, env var, or core).
|
|
19
|
+
* Consolidates the two checks (`isDemoModeEnabled() || isDemoModeCore()`) that
|
|
20
|
+
* were scattered across every command.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isDemo(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Execute `demoHandler` when demo mode is active, otherwise `realHandler`.
|
|
25
|
+
*
|
|
26
|
+
* Usage:
|
|
27
|
+
* ```ts
|
|
28
|
+
* .action(async (options) => {
|
|
29
|
+
* await withDemoMode(
|
|
30
|
+
* () => runDemo(options),
|
|
31
|
+
* () => runReal(options),
|
|
32
|
+
* );
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function withDemoMode<T>(demoHandler: () => T | Promise<T>, realHandler: () => T | Promise<T>): Promise<T>;
|
|
37
|
+
export type LoadedConfig = Awaited<ReturnType<typeof loadConfig>>;
|
|
38
|
+
export interface ConfigOptions {
|
|
39
|
+
config?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface TenantSelectionOptions extends ConfigOptions {
|
|
42
|
+
all?: boolean;
|
|
43
|
+
tag?: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve config once and branch by mode in a shared wrapper.
|
|
47
|
+
*/
|
|
48
|
+
export declare function withResolvedConfig<T>(options: ConfigOptions, demoHandler: () => T | Promise<T>, realHandler: (config: LoadedConfig) => T | Promise<T>): Promise<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Resolve destinations once and pass the resolved context to command handlers.
|
|
51
|
+
*/
|
|
52
|
+
export declare function withResolvedDestinations<T>(options: TenantSelectionOptions, demoHandler: (destinations: TenantConfig[]) => T | Promise<T>, realHandler: (context: {
|
|
53
|
+
config: LoadedConfig;
|
|
54
|
+
destinations: TenantConfig[];
|
|
55
|
+
}) => T | Promise<T>): Promise<T>;
|
|
56
|
+
//# sourceMappingURL=command-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-wrapper.d.ts","sourceRoot":"","sources":["../../src/lib/command-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAGL,UAAU,EACV,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAGxB;;;;GAIG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,WAAW,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACjC,WAAW,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC,CAKZ;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACjC,WAAW,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACpD,OAAO,CAAC,CAAC,CAAC,CAQZ;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAC7D,WAAW,EAAE,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,YAAY,EAAE,CAAA;CAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC/F,OAAO,CAAC,CAAC,CAAC,CAYZ"}
|