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,550 @@
|
|
|
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 inquirer from "inquirer";
|
|
17
|
+
import chalk from "chalk";
|
|
18
|
+
import ora from "ora";
|
|
19
|
+
import { interactiveLogin, storeCredentials } from "./auth.js";
|
|
20
|
+
import { GraphClient } from "./graph-client.js";
|
|
21
|
+
import { TenantDiscoveryService, TokenManager, PowerPlatformAdminClient } from "@pax8-cta/core";
|
|
22
|
+
import { writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
23
|
+
import { dirname, resolve } from "node:path";
|
|
24
|
+
/**
|
|
25
|
+
* Validate the setup by checking app registration and permissions
|
|
26
|
+
*/
|
|
27
|
+
async function validateSetup(ctx) {
|
|
28
|
+
let appExists = false;
|
|
29
|
+
let permissionsConfigured = false;
|
|
30
|
+
try {
|
|
31
|
+
// Check if app still exists
|
|
32
|
+
const response = await fetch(`https://graph.microsoft.com/v1.0/applications/${ctx.appObjectId}`, {
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `Bearer ${ctx.accessToken}`,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
if (response.ok) {
|
|
38
|
+
appExists = true;
|
|
39
|
+
// Check permissions
|
|
40
|
+
const app = (await response.json());
|
|
41
|
+
const dynamicsResourceId = "00000007-0000-0000-c000-000000000000";
|
|
42
|
+
const userImpersonationId = "78ce3f0f-a1ce-49c2-8cde-64b5c0896db4";
|
|
43
|
+
const dynamicsPermission = app.requiredResourceAccess?.find((p) => p.resourceAppId === dynamicsResourceId);
|
|
44
|
+
if (dynamicsPermission) {
|
|
45
|
+
permissionsConfigured = dynamicsPermission.resourceAccess.some((ra) => ra.id === userImpersonationId);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Validation errors are not critical
|
|
51
|
+
}
|
|
52
|
+
return { appExists, permissionsConfigured };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Run the interactive setup wizard
|
|
56
|
+
*/
|
|
57
|
+
export async function runInteractiveWizard(configPath) {
|
|
58
|
+
console.log(chalk.cyan.bold("\n🚀 Pax8 CTA Interactive Setup Wizard\n"));
|
|
59
|
+
console.log(chalk.white("This wizard will help you set up Pax8 CTA by creating an Azure AD app registration"));
|
|
60
|
+
console.log(chalk.white("and discovering your Power Platform environments.\n"));
|
|
61
|
+
const ctx = {};
|
|
62
|
+
let spinner = null;
|
|
63
|
+
try {
|
|
64
|
+
// Step 1: Welcome and authentication
|
|
65
|
+
console.log(chalk.cyan.bold("Step 1: Authentication\n"));
|
|
66
|
+
const { shouldContinue } = await inquirer.prompt([
|
|
67
|
+
{
|
|
68
|
+
type: "confirm",
|
|
69
|
+
name: "shouldContinue",
|
|
70
|
+
message: "Ready to authenticate with Microsoft?",
|
|
71
|
+
default: true,
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
if (!shouldContinue) {
|
|
75
|
+
console.log(chalk.yellow("\nSetup cancelled."));
|
|
76
|
+
return { configPath, clientId: "", tenantId: "", success: false };
|
|
77
|
+
}
|
|
78
|
+
// Perform device code authentication
|
|
79
|
+
spinner = ora("Waiting for authentication...").start();
|
|
80
|
+
try {
|
|
81
|
+
const loginResult = await interactiveLogin({
|
|
82
|
+
scopes: ["https://graph.microsoft.com/.default"],
|
|
83
|
+
});
|
|
84
|
+
ctx.accessToken = loginResult.accessToken;
|
|
85
|
+
ctx.tenantId = loginResult.tenantId;
|
|
86
|
+
spinner.succeed(chalk.green("Authentication successful!"));
|
|
87
|
+
console.log(chalk.gray(` Tenant ID: ${ctx.tenantId}\n`));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
spinner.fail("Authentication failed");
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
// Step 2: App Registration
|
|
94
|
+
console.log(chalk.cyan.bold("Step 2: App Registration\n"));
|
|
95
|
+
const graphClient = new GraphClient({ accessToken: ctx.accessToken });
|
|
96
|
+
const appName = "Pax8 CTA CLI";
|
|
97
|
+
// Check for existing app
|
|
98
|
+
spinner = ora("Checking for existing app registration...").start();
|
|
99
|
+
const existingApp = await graphClient.findExistingApp(appName);
|
|
100
|
+
if (existingApp) {
|
|
101
|
+
spinner.info(chalk.yellow("Found existing app registration"));
|
|
102
|
+
console.log(chalk.gray(` App ID: ${existingApp.appId}`));
|
|
103
|
+
console.log(chalk.gray(` Object ID: ${existingApp.id}\n`));
|
|
104
|
+
const { useExisting } = await inquirer.prompt([
|
|
105
|
+
{
|
|
106
|
+
type: "confirm",
|
|
107
|
+
name: "useExisting",
|
|
108
|
+
message: "Use existing app registration?",
|
|
109
|
+
default: true,
|
|
110
|
+
},
|
|
111
|
+
]);
|
|
112
|
+
if (useExisting) {
|
|
113
|
+
ctx.appId = existingApp.appId;
|
|
114
|
+
ctx.appObjectId = existingApp.id;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
spinner = ora("Creating new app registration...").start();
|
|
118
|
+
const newApp = await graphClient.createAppRegistration(`${appName} ${Date.now()}`);
|
|
119
|
+
ctx.appId = newApp.appId;
|
|
120
|
+
ctx.appObjectId = newApp.id;
|
|
121
|
+
spinner.succeed(chalk.green("App registration created"));
|
|
122
|
+
console.log(chalk.gray(` App ID: ${ctx.appId}\n`));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
spinner.text = "Creating app registration...";
|
|
127
|
+
const newApp = await graphClient.createAppRegistration(appName);
|
|
128
|
+
ctx.appId = newApp.appId;
|
|
129
|
+
ctx.appObjectId = newApp.id;
|
|
130
|
+
spinner.succeed(chalk.green("App registration created"));
|
|
131
|
+
console.log(chalk.gray(` App ID: ${ctx.appId}\n`));
|
|
132
|
+
}
|
|
133
|
+
// Step 3: Add Dynamics CRM permission
|
|
134
|
+
console.log(chalk.cyan.bold("Step 3: API Permissions\n"));
|
|
135
|
+
spinner = ora("Adding Dynamics CRM permission...").start();
|
|
136
|
+
let permissionAddedSuccessfully = false;
|
|
137
|
+
try {
|
|
138
|
+
await graphClient.addDynamicsPermission(ctx.appObjectId);
|
|
139
|
+
await graphClient.ensureServicePrincipal(ctx.appId);
|
|
140
|
+
spinner.succeed(chalk.green("Dynamics CRM permission added"));
|
|
141
|
+
permissionAddedSuccessfully = true;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
spinner.warn(chalk.yellow("Could not add permission automatically"));
|
|
145
|
+
console.log(chalk.yellow("\nManual step required:"));
|
|
146
|
+
console.log(chalk.white(`1. Open: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/CallAnAPI/appId/${ctx.appId}/isMSAApp~/false`));
|
|
147
|
+
console.log(chalk.white('2. Click "Add a permission" → "Dynamics CRM" → "user_impersonation"'));
|
|
148
|
+
console.log(chalk.white('3. Click "Grant admin consent"'));
|
|
149
|
+
console.log(chalk.gray(`\nError details: ${error instanceof Error ? error.message : "Unknown error"}\n`));
|
|
150
|
+
}
|
|
151
|
+
// Admin consent notice
|
|
152
|
+
console.log();
|
|
153
|
+
console.log(chalk.yellow("⚠️ Admin Consent Required"));
|
|
154
|
+
console.log(chalk.gray("An IT admin needs to grant consent for API permissions."));
|
|
155
|
+
console.log(chalk.white(` Direct link: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/CallAnAPI/appId/${ctx.appId}/isMSAApp~/false\n`));
|
|
156
|
+
const { consentGranted } = await inquirer.prompt([
|
|
157
|
+
{
|
|
158
|
+
type: "confirm",
|
|
159
|
+
name: "consentGranted",
|
|
160
|
+
message: "Has admin consent been granted? (Skip if you're unsure)",
|
|
161
|
+
default: permissionAddedSuccessfully,
|
|
162
|
+
},
|
|
163
|
+
]);
|
|
164
|
+
// Step 4: Create client secret
|
|
165
|
+
console.log(chalk.cyan.bold("\nStep 4: Client Secret\n"));
|
|
166
|
+
spinner = ora("Creating client secret...").start();
|
|
167
|
+
try {
|
|
168
|
+
const secret = await graphClient.createClientSecret(ctx.appObjectId, "Pax8 CTA CLI Secret", 24);
|
|
169
|
+
ctx.clientSecret = secret.secretText;
|
|
170
|
+
spinner.succeed(chalk.green("Client secret created"));
|
|
171
|
+
console.log(chalk.yellow("\n⚠️ IMPORTANT: Save this secret - it won't be shown again!"));
|
|
172
|
+
console.log(chalk.white(` Secret: ${secret.secretText}`));
|
|
173
|
+
console.log(chalk.gray(` Expires: ${new Date(secret.endDateTime).toLocaleDateString()}\n`));
|
|
174
|
+
// Store credentials securely
|
|
175
|
+
const { shouldStore } = await inquirer.prompt([
|
|
176
|
+
{
|
|
177
|
+
type: "confirm",
|
|
178
|
+
name: "shouldStore",
|
|
179
|
+
message: "Store credentials securely in OS keychain?",
|
|
180
|
+
default: true,
|
|
181
|
+
},
|
|
182
|
+
]);
|
|
183
|
+
if (shouldStore) {
|
|
184
|
+
spinner = ora("Storing credentials...").start();
|
|
185
|
+
await storeCredentials(ctx.appId, ctx.clientSecret, ctx.tenantId);
|
|
186
|
+
spinner.succeed(chalk.green("Credentials stored securely"));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
spinner.fail("Failed to create client secret");
|
|
191
|
+
console.log(chalk.yellow("\nYou can create a client secret manually:"));
|
|
192
|
+
console.log(chalk.white(" 1. Go to portal.azure.com → Azure Active Directory"));
|
|
193
|
+
console.log(chalk.white(" 2. Find your app → Certificates & secrets"));
|
|
194
|
+
console.log(chalk.white(" 3. Create a new client secret"));
|
|
195
|
+
console.log(chalk.white(" 4. Save the secret value\n"));
|
|
196
|
+
const { manualSecret } = await inquirer.prompt([
|
|
197
|
+
{
|
|
198
|
+
type: "password",
|
|
199
|
+
name: "manualSecret",
|
|
200
|
+
message: "Enter client secret (if you created one):",
|
|
201
|
+
mask: "*",
|
|
202
|
+
},
|
|
203
|
+
]);
|
|
204
|
+
if (manualSecret) {
|
|
205
|
+
ctx.clientSecret = manualSecret;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Step 5: Discover Power Platform environments
|
|
209
|
+
console.log(chalk.cyan.bold("\nStep 5: Power Platform Discovery\n"));
|
|
210
|
+
if (!ctx.clientSecret) {
|
|
211
|
+
console.log(chalk.yellow("Skipping environment discovery - client secret required. You can add environments manually.\n"));
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
const { discoverNow } = await inquirer.prompt([
|
|
215
|
+
{
|
|
216
|
+
type: "confirm",
|
|
217
|
+
name: "discoverNow",
|
|
218
|
+
message: "Discover Power Platform environments now?",
|
|
219
|
+
default: true,
|
|
220
|
+
},
|
|
221
|
+
]);
|
|
222
|
+
if (discoverNow) {
|
|
223
|
+
spinner = ora("Discovering environments (this may take a minute)...").start();
|
|
224
|
+
try {
|
|
225
|
+
// Use PowerPlatformAdminClient for environment discovery
|
|
226
|
+
const tokenManager = new TokenManager({
|
|
227
|
+
tenantId: ctx.tenantId,
|
|
228
|
+
clientId: ctx.appId,
|
|
229
|
+
clientSecret: ctx.clientSecret,
|
|
230
|
+
});
|
|
231
|
+
const adminClient = new PowerPlatformAdminClient({ tokenManager });
|
|
232
|
+
ctx.powerPlatformEnvironments = await adminClient.listEnvironmentSummaries();
|
|
233
|
+
spinner.succeed(chalk.green(`Found ${ctx.powerPlatformEnvironments.length} Power Platform environment(s)`));
|
|
234
|
+
if (ctx.powerPlatformEnvironments.length === 0) {
|
|
235
|
+
console.log(chalk.yellow("\nNo environments found."));
|
|
236
|
+
console.log(chalk.gray("Create one at: https://admin.powerplatform.microsoft.com\n"));
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// Display discovered environments
|
|
240
|
+
console.log(chalk.cyan("\nDiscovered environments:\n"));
|
|
241
|
+
for (const env of ctx.powerPlatformEnvironments) {
|
|
242
|
+
console.log(chalk.white(` • ${env.displayName}`));
|
|
243
|
+
console.log(chalk.gray(` Type: ${env.type}`));
|
|
244
|
+
console.log(chalk.gray(` URL: ${env.instanceUrl}`));
|
|
245
|
+
console.log(chalk.gray(` Location: ${env.location}\n`));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Also try legacy tenant discovery for backward compatibility
|
|
249
|
+
try {
|
|
250
|
+
const discoveryService = new TenantDiscoveryService({
|
|
251
|
+
tenantId: ctx.tenantId,
|
|
252
|
+
clientId: ctx.appId,
|
|
253
|
+
clientSecret: ctx.clientSecret,
|
|
254
|
+
});
|
|
255
|
+
ctx.discoveredTenants = await discoveryService.discoverTenants();
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
// Legacy discovery failure is not critical
|
|
259
|
+
console.log(chalk.gray(`Note: Legacy tenant discovery skipped (${error instanceof Error ? error.message : "Unknown error"})`));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
spinner.fail("Failed to discover environments");
|
|
264
|
+
console.log(chalk.gray(` ${error instanceof Error ? error.message : "Unknown error"}\n`));
|
|
265
|
+
console.log(chalk.yellow("You can add environments manually to your configuration file after setup.\n"));
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Step 6: Select environments
|
|
270
|
+
let selectedTenants = [];
|
|
271
|
+
let selectedEnvironments = [];
|
|
272
|
+
let sourceTenant;
|
|
273
|
+
let sourceEnvironment;
|
|
274
|
+
// Use Power Platform environments if available, otherwise fall back to discovered tenants
|
|
275
|
+
if (ctx.powerPlatformEnvironments && ctx.powerPlatformEnvironments.length > 0) {
|
|
276
|
+
console.log(chalk.cyan.bold("\nStep 6: Environment Selection\n"));
|
|
277
|
+
// Select environments to add to config
|
|
278
|
+
const envChoices = ctx.powerPlatformEnvironments.map((env) => ({
|
|
279
|
+
name: `${env.displayName} (${env.type}) - ${env.instanceUrl}`,
|
|
280
|
+
value: env.id,
|
|
281
|
+
checked: true,
|
|
282
|
+
}));
|
|
283
|
+
const { selectedEnvIds } = await inquirer.prompt([
|
|
284
|
+
{
|
|
285
|
+
type: "checkbox",
|
|
286
|
+
name: "selectedEnvIds",
|
|
287
|
+
message: "Select environments to add to your configuration:",
|
|
288
|
+
choices: envChoices,
|
|
289
|
+
},
|
|
290
|
+
]);
|
|
291
|
+
selectedEnvironments = ctx.powerPlatformEnvironments.filter((env) => selectedEnvIds.includes(env.id));
|
|
292
|
+
if (selectedEnvironments.length > 0) {
|
|
293
|
+
// Ask if one should be marked as source
|
|
294
|
+
const { hasSource } = await inquirer.prompt([
|
|
295
|
+
{
|
|
296
|
+
type: "confirm",
|
|
297
|
+
name: "hasSource",
|
|
298
|
+
message: "Do you have a dedicated source environment for agent development?",
|
|
299
|
+
default: false,
|
|
300
|
+
},
|
|
301
|
+
]);
|
|
302
|
+
if (hasSource && selectedEnvironments.length > 1) {
|
|
303
|
+
const sourceChoices = selectedEnvironments.map((env) => ({
|
|
304
|
+
name: `${env.displayName} (${env.type})`,
|
|
305
|
+
value: env.id,
|
|
306
|
+
}));
|
|
307
|
+
const { sourceEnvId } = await inquirer.prompt([
|
|
308
|
+
{
|
|
309
|
+
type: "list",
|
|
310
|
+
name: "sourceEnvId",
|
|
311
|
+
message: "Select source environment (where agents are developed):",
|
|
312
|
+
choices: sourceChoices,
|
|
313
|
+
},
|
|
314
|
+
]);
|
|
315
|
+
sourceEnvironment = selectedEnvironments.find((env) => env.id === sourceEnvId);
|
|
316
|
+
selectedEnvironments = selectedEnvironments.filter((env) => env.id !== sourceEnvId);
|
|
317
|
+
}
|
|
318
|
+
ctx.partnerTenantId = ctx.tenantId;
|
|
319
|
+
ctx.partnerClientId = ctx.appId;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else if (ctx.discoveredTenants && ctx.discoveredTenants.length > 0) {
|
|
323
|
+
console.log(chalk.cyan.bold("\nStep 6: Environment Selection\n"));
|
|
324
|
+
// Filter tenants with environments
|
|
325
|
+
const tenantsWithEnvs = ctx.discoveredTenants.filter((t) => t.environments.length > 0 && !t.error);
|
|
326
|
+
if (tenantsWithEnvs.length > 0) {
|
|
327
|
+
// Select source environment
|
|
328
|
+
const sourceChoices = tenantsWithEnvs.map((t) => ({
|
|
329
|
+
name: `${t.displayName} (${t.environments.length} environment${t.environments.length > 1 ? "s" : ""})`,
|
|
330
|
+
value: t.tenantId,
|
|
331
|
+
}));
|
|
332
|
+
const { sourceTenantId } = await inquirer.prompt([
|
|
333
|
+
{
|
|
334
|
+
type: "list",
|
|
335
|
+
name: "sourceTenantId",
|
|
336
|
+
message: "Select source environment (where agents are developed):",
|
|
337
|
+
choices: sourceChoices,
|
|
338
|
+
},
|
|
339
|
+
]);
|
|
340
|
+
sourceTenant = tenantsWithEnvs.find((t) => t.tenantId === sourceTenantId);
|
|
341
|
+
// Select target environments
|
|
342
|
+
const targetChoices = tenantsWithEnvs
|
|
343
|
+
.filter((t) => t.tenantId !== sourceTenantId)
|
|
344
|
+
.map((t) => ({
|
|
345
|
+
name: `${t.displayName} (${t.environments.length} environment${t.environments.length > 1 ? "s" : ""})`,
|
|
346
|
+
value: t.tenantId,
|
|
347
|
+
checked: true,
|
|
348
|
+
}));
|
|
349
|
+
if (targetChoices.length > 0) {
|
|
350
|
+
const { targetTenantIds } = await inquirer.prompt([
|
|
351
|
+
{
|
|
352
|
+
type: "checkbox",
|
|
353
|
+
name: "targetTenantIds",
|
|
354
|
+
message: "Select target environments (where agents will be deployed):",
|
|
355
|
+
choices: targetChoices,
|
|
356
|
+
},
|
|
357
|
+
]);
|
|
358
|
+
selectedTenants = tenantsWithEnvs.filter((t) => targetTenantIds.includes(t.tenantId));
|
|
359
|
+
}
|
|
360
|
+
ctx.partnerTenantId = ctx.tenantId;
|
|
361
|
+
ctx.partnerClientId = ctx.appId;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// Step 7: Validation
|
|
365
|
+
console.log(chalk.cyan.bold("\nStep 7: Validation\n"));
|
|
366
|
+
spinner = ora("Validating setup...").start();
|
|
367
|
+
const validationResults = await validateSetup(ctx);
|
|
368
|
+
if (validationResults.appExists) {
|
|
369
|
+
spinner.succeed(chalk.green("App registration verified"));
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
spinner.warn(chalk.yellow("Could not verify app registration"));
|
|
373
|
+
}
|
|
374
|
+
console.log();
|
|
375
|
+
console.log(chalk.cyan("Setup Summary:\n"));
|
|
376
|
+
console.log(chalk.white(` App Registration: ${ctx.appId}`));
|
|
377
|
+
console.log(chalk.white(` Tenant ID: ${ctx.tenantId}`));
|
|
378
|
+
console.log(chalk.white(` API Permissions: ${validationResults.permissionsConfigured ? chalk.green("Configured") : chalk.yellow("Needs configuration")}`));
|
|
379
|
+
console.log(chalk.white(` Admin Consent: ${consentGranted ? chalk.green("Granted") : chalk.yellow("Pending")}`));
|
|
380
|
+
console.log(chalk.white(` Client Secret: ${ctx.clientSecret ? chalk.green("Created") : chalk.yellow("Not created")}`));
|
|
381
|
+
if (selectedEnvironments.length > 0) {
|
|
382
|
+
console.log(chalk.white(` Environments: ${selectedEnvironments.length} selected`));
|
|
383
|
+
if (sourceEnvironment) {
|
|
384
|
+
console.log(chalk.white(` Source Environment: ${sourceEnvironment.displayName}`));
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
else if (selectedTenants.length > 0) {
|
|
388
|
+
console.log(chalk.white(` Tenants: ${selectedTenants.length} selected`));
|
|
389
|
+
if (sourceTenant) {
|
|
390
|
+
console.log(chalk.white(` Source Tenant: ${sourceTenant.displayName}`));
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
console.log();
|
|
394
|
+
// Step 8: Generate configuration
|
|
395
|
+
console.log(chalk.cyan.bold("Step 8: Configuration\n"));
|
|
396
|
+
spinner = ora("Generating configuration...").start();
|
|
397
|
+
const configDir = dirname(resolve(process.cwd(), configPath));
|
|
398
|
+
if (!existsSync(configDir)) {
|
|
399
|
+
mkdirSync(configDir, { recursive: true });
|
|
400
|
+
}
|
|
401
|
+
const configContent = generateConfig({
|
|
402
|
+
tenantId: ctx.tenantId,
|
|
403
|
+
clientId: ctx.appId,
|
|
404
|
+
sourceTenant,
|
|
405
|
+
targetTenants: selectedTenants,
|
|
406
|
+
sourceEnvironment,
|
|
407
|
+
targetEnvironments: selectedEnvironments,
|
|
408
|
+
useEnvVar: true,
|
|
409
|
+
});
|
|
410
|
+
writeFileSync(resolve(process.cwd(), configPath), configContent);
|
|
411
|
+
spinner.succeed(chalk.green(`Configuration saved to ${configPath}`));
|
|
412
|
+
// Step 9: Success and next steps
|
|
413
|
+
console.log();
|
|
414
|
+
console.log(chalk.green.bold("✓ Setup Complete!\n"));
|
|
415
|
+
console.log(chalk.cyan("Next steps:\n"));
|
|
416
|
+
let stepNumber = 1;
|
|
417
|
+
if (!ctx.clientSecret) {
|
|
418
|
+
console.log(chalk.white(`${stepNumber}. Store your client secret securely:`));
|
|
419
|
+
console.log(chalk.gray(` auth login`));
|
|
420
|
+
console.log(chalk.gray(` (or set environment variable: export PAX8_CTA_CLIENT_SECRET="your-secret")\n`));
|
|
421
|
+
stepNumber++;
|
|
422
|
+
}
|
|
423
|
+
if (!consentGranted || !validationResults.permissionsConfigured) {
|
|
424
|
+
console.log(chalk.white(`${stepNumber}. Grant admin consent for API permissions:`));
|
|
425
|
+
console.log(chalk.gray(` ${chalk.underline(`https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/CallAnAPI/appId/${ctx.appId}/isMSAApp~/false`)}\n`));
|
|
426
|
+
stepNumber++;
|
|
427
|
+
}
|
|
428
|
+
if (selectedEnvironments.length === 0 && selectedTenants.length === 0) {
|
|
429
|
+
console.log(chalk.white(`${stepNumber}. Add target environments to your configuration:`));
|
|
430
|
+
console.log(chalk.gray(` Edit ${configPath}\n`));
|
|
431
|
+
stepNumber++;
|
|
432
|
+
}
|
|
433
|
+
console.log(chalk.white(`${stepNumber}. Test your setup:`));
|
|
434
|
+
console.log(chalk.gray(" tenants list\n"));
|
|
435
|
+
if (selectedEnvironments.length > 0 || selectedTenants.length > 0) {
|
|
436
|
+
console.log(chalk.white("You can now deploy agents with:"));
|
|
437
|
+
console.log(chalk.gray(" deploy <agent-name>\n"));
|
|
438
|
+
}
|
|
439
|
+
console.log(chalk.dim("Need help? Visit: https://github.com/pax8labs/pax8-cta\n"));
|
|
440
|
+
return {
|
|
441
|
+
configPath,
|
|
442
|
+
clientId: ctx.appId,
|
|
443
|
+
tenantId: ctx.tenantId,
|
|
444
|
+
success: true,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
if (spinner) {
|
|
449
|
+
spinner.fail("Setup failed");
|
|
450
|
+
}
|
|
451
|
+
if (error instanceof Error) {
|
|
452
|
+
if (error.message.includes("user cancelled") || error.message.includes("cancelled")) {
|
|
453
|
+
console.log(chalk.yellow("\n✖ Setup cancelled by user"));
|
|
454
|
+
return { configPath, clientId: "", tenantId: "", success: false };
|
|
455
|
+
}
|
|
456
|
+
console.error(chalk.red(`\n✖ Error: ${error.message}`));
|
|
457
|
+
}
|
|
458
|
+
throw error;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
function generateConfig(options) {
|
|
462
|
+
const { tenantId, clientId, sourceTenant, targetTenants, sourceEnvironment, targetEnvironments } = options;
|
|
463
|
+
let config = `# Pax8 CTA Configuration File
|
|
464
|
+
# Generated by interactive setup wizard
|
|
465
|
+
|
|
466
|
+
# Partner/MSP Credentials
|
|
467
|
+
partner:
|
|
468
|
+
tenantId: "${tenantId}"
|
|
469
|
+
clientId: "${clientId}"
|
|
470
|
+
# Client secret should be in PAX8_CTA_CLIENT_SECRET env var
|
|
471
|
+
|
|
472
|
+
# Settings
|
|
473
|
+
settings:
|
|
474
|
+
approval:
|
|
475
|
+
required: false
|
|
476
|
+
minApprovals: 1
|
|
477
|
+
timeout: "24h"
|
|
478
|
+
approvers:
|
|
479
|
+
- admin@partner.com
|
|
480
|
+
|
|
481
|
+
`;
|
|
482
|
+
// Use Power Platform environments if available
|
|
483
|
+
if (sourceEnvironment && targetEnvironments.length > 0) {
|
|
484
|
+
config += `# Source Environment\n`;
|
|
485
|
+
config += `source:\n`;
|
|
486
|
+
config += ` tenantId: "${tenantId}"\n`;
|
|
487
|
+
config += ` name: "${sourceEnvironment.displayName}"\n`;
|
|
488
|
+
config += ` environmentUrl: "${sourceEnvironment.instanceUrl}"\n`;
|
|
489
|
+
config += `\n`;
|
|
490
|
+
config += `# Target Environments\n`;
|
|
491
|
+
config += `tenants:\n`;
|
|
492
|
+
for (const env of targetEnvironments) {
|
|
493
|
+
config += ` - tenantId: "${tenantId}"\n`;
|
|
494
|
+
config += ` name: "${env.displayName}"\n`;
|
|
495
|
+
config += ` environmentUrl: "${env.instanceUrl}"\n`;
|
|
496
|
+
config += ` enabled: true\n`;
|
|
497
|
+
config += ` tags:\n`;
|
|
498
|
+
config += ` - ${env.type.toLowerCase()}\n`;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
else if (targetEnvironments.length > 0) {
|
|
502
|
+
// All environments as targets (no dedicated source)
|
|
503
|
+
config += `# Power Platform Environments\n`;
|
|
504
|
+
config += `tenants:\n`;
|
|
505
|
+
for (const env of targetEnvironments) {
|
|
506
|
+
config += ` - tenantId: "${tenantId}"\n`;
|
|
507
|
+
config += ` name: "${env.displayName}"\n`;
|
|
508
|
+
config += ` environmentUrl: "${env.instanceUrl}"\n`;
|
|
509
|
+
config += ` enabled: true\n`;
|
|
510
|
+
config += ` tags:\n`;
|
|
511
|
+
config += ` - ${env.type.toLowerCase()}\n`;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
else if (sourceTenant && targetTenants.length > 0) {
|
|
515
|
+
// Legacy tenant-based config
|
|
516
|
+
config += `# Source Environment\n`;
|
|
517
|
+
config += `source:\n`;
|
|
518
|
+
config += ` tenantId: "${sourceTenant.tenantId}"\n`;
|
|
519
|
+
config += ` name: "${sourceTenant.displayName}"\n`;
|
|
520
|
+
if (sourceTenant.defaultEnvironment) {
|
|
521
|
+
config += ` environmentUrl: "${sourceTenant.defaultEnvironment.instanceUrl}"\n`;
|
|
522
|
+
}
|
|
523
|
+
config += `\n`;
|
|
524
|
+
config += `# Target Environments\n`;
|
|
525
|
+
config += `tenants:\n`;
|
|
526
|
+
for (const tenant of targetTenants) {
|
|
527
|
+
config += ` - tenantId: "${tenant.tenantId}"\n`;
|
|
528
|
+
config += ` name: "${tenant.displayName}"\n`;
|
|
529
|
+
if (tenant.defaultEnvironment) {
|
|
530
|
+
config += ` environmentUrl: "${tenant.defaultEnvironment.instanceUrl}"\n`;
|
|
531
|
+
}
|
|
532
|
+
config += ` enabled: true\n`;
|
|
533
|
+
config += ` tags:\n`;
|
|
534
|
+
config += ` - production\n`;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
config += `# Your Tenants\n`;
|
|
539
|
+
config += `tenants:\n`;
|
|
540
|
+
config += ` # Add your tenants here:\n`;
|
|
541
|
+
config += ` # - tenantId: "tenant-guid-here"\n`;
|
|
542
|
+
config += ` # name: "Client Name"\n`;
|
|
543
|
+
config += ` # environmentUrl: "https://client.crm.dynamics.com"\n`;
|
|
544
|
+
config += ` # enabled: true\n`;
|
|
545
|
+
config += ` # tags:\n`;
|
|
546
|
+
config += ` # - production\n`;
|
|
547
|
+
}
|
|
548
|
+
return config;
|
|
549
|
+
}
|
|
550
|
+
//# sourceMappingURL=interactive-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-wizard.js","sourceRoot":"","sources":["../../src/lib/interactive-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
interface OssUnavailableOptions {
|
|
17
|
+
alternatives?: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function exitOssUnavailable(featureName: string, options?: OssUnavailableOptions): never;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=oss-surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oss-surface.d.ts","sourceRoot":"","sources":["../../src/lib/oss-surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,UAAU,qBAAqB;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,qBAA0B,GAClC,KAAK,CAaP"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 exitOssUnavailable(featureName, options = {}) {
|
|
18
|
+
const alternatives = options.alternatives ?? [];
|
|
19
|
+
console.error(chalk.red(`${featureName} is not available in the open-source CLI.`));
|
|
20
|
+
if (alternatives.length > 0) {
|
|
21
|
+
console.error();
|
|
22
|
+
console.error(chalk.gray("Available alternatives:"));
|
|
23
|
+
alternatives.forEach((alternative, index) => {
|
|
24
|
+
console.error(chalk.gray(` ${index + 1}. ${alternative}`));
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
process.exit(2);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=oss-surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oss-surface.js","sourceRoot":"","sources":["../../src/lib/oss-surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,UAAiC,EAAE;IAEnC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAEhD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,2CAA2C,CAAC,CAAC,CAAC;IACpF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;YAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|