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,231 @@
|
|
|
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
|
+
/**
|
|
17
|
+
* Microsoft Graph API client for managing Azure AD app registrations
|
|
18
|
+
*/
|
|
19
|
+
export class GraphClient {
|
|
20
|
+
accessToken;
|
|
21
|
+
baseUrl = "https://graph.microsoft.com/v1.0";
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.accessToken = config.accessToken;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a new app registration in Azure AD
|
|
27
|
+
*/
|
|
28
|
+
async createAppRegistration(displayName) {
|
|
29
|
+
const response = await fetch(`${this.baseUrl}/applications`, {
|
|
30
|
+
method: "POST",
|
|
31
|
+
headers: {
|
|
32
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify({
|
|
36
|
+
displayName,
|
|
37
|
+
signInAudience: "AzureADMultipleOrgs",
|
|
38
|
+
requiredResourceAccess: [
|
|
39
|
+
{
|
|
40
|
+
// Microsoft Graph
|
|
41
|
+
resourceAppId: "00000003-0000-0000-c000-000000000000",
|
|
42
|
+
resourceAccess: [
|
|
43
|
+
{
|
|
44
|
+
// User.Read (delegated)
|
|
45
|
+
id: "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
|
|
46
|
+
type: "Scope",
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
}),
|
|
52
|
+
});
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
const error = await response.text();
|
|
55
|
+
throw new Error(`Failed to create app registration: ${response.status} ${error}`);
|
|
56
|
+
}
|
|
57
|
+
const app = (await response.json());
|
|
58
|
+
return app;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Find existing app registration by display name
|
|
62
|
+
*/
|
|
63
|
+
async findExistingApp(displayName) {
|
|
64
|
+
const response = await fetch(`${this.baseUrl}/applications?$filter=displayName eq '${encodeURIComponent(displayName)}'`, {
|
|
65
|
+
headers: {
|
|
66
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
if (!response.ok) {
|
|
70
|
+
const error = await response.text();
|
|
71
|
+
throw new Error(`Failed to search for app: ${response.status} ${error}`);
|
|
72
|
+
}
|
|
73
|
+
const data = (await response.json());
|
|
74
|
+
return data.value.length > 0 ? data.value[0] : null;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* List all app registrations the user owns or has access to
|
|
78
|
+
*/
|
|
79
|
+
async listAppRegistrations() {
|
|
80
|
+
const response = await fetch(`${this.baseUrl}/applications?$select=id,appId,displayName,signInAudience&$top=50&$orderby=displayName`, {
|
|
81
|
+
headers: {
|
|
82
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
const error = await response.text();
|
|
87
|
+
throw new Error(`Failed to list apps: ${response.status} ${error}`);
|
|
88
|
+
}
|
|
89
|
+
const data = (await response.json());
|
|
90
|
+
return data.value;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Add Dynamics CRM API permission to an app
|
|
94
|
+
*/
|
|
95
|
+
async addDynamicsPermission(appObjectId) {
|
|
96
|
+
// First, get the current app to preserve existing permissions
|
|
97
|
+
const getResponse = await fetch(`${this.baseUrl}/applications/${appObjectId}`, {
|
|
98
|
+
headers: {
|
|
99
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
if (!getResponse.ok) {
|
|
103
|
+
throw new Error(`Failed to get app: ${getResponse.status}`);
|
|
104
|
+
}
|
|
105
|
+
const currentApp = (await getResponse.json());
|
|
106
|
+
// Add Dynamics CRM permission
|
|
107
|
+
const dynamicsResourceId = "00000007-0000-0000-c000-000000000000"; // Dynamics CRM
|
|
108
|
+
const userImpersonationId = "78ce3f0f-a1ce-49c2-8cde-64b5c0896db4"; // user_impersonation
|
|
109
|
+
const existingPermissions = currentApp.requiredResourceAccess || [];
|
|
110
|
+
// Check if Dynamics permission already exists
|
|
111
|
+
const dynamicsPermission = existingPermissions.find((p) => p.resourceAppId === dynamicsResourceId);
|
|
112
|
+
if (dynamicsPermission) {
|
|
113
|
+
// Add user_impersonation if not present
|
|
114
|
+
if (!dynamicsPermission.resourceAccess.find((ra) => ra.id === userImpersonationId)) {
|
|
115
|
+
dynamicsPermission.resourceAccess.push({
|
|
116
|
+
id: userImpersonationId,
|
|
117
|
+
type: "Scope",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Add new Dynamics CRM permission
|
|
123
|
+
existingPermissions.push({
|
|
124
|
+
resourceAppId: dynamicsResourceId,
|
|
125
|
+
resourceAccess: [
|
|
126
|
+
{
|
|
127
|
+
id: userImpersonationId,
|
|
128
|
+
type: "Scope",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Update the app
|
|
134
|
+
const patchResponse = await fetch(`${this.baseUrl}/applications/${appObjectId}`, {
|
|
135
|
+
method: "PATCH",
|
|
136
|
+
headers: {
|
|
137
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
138
|
+
"Content-Type": "application/json",
|
|
139
|
+
},
|
|
140
|
+
body: JSON.stringify({
|
|
141
|
+
requiredResourceAccess: existingPermissions,
|
|
142
|
+
}),
|
|
143
|
+
});
|
|
144
|
+
if (!patchResponse.ok) {
|
|
145
|
+
const error = await patchResponse.text();
|
|
146
|
+
throw new Error(`Failed to add Dynamics permission: ${patchResponse.status} ${error}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Grant admin consent for app permissions
|
|
151
|
+
* Note: This requires admin privileges and may not work for all users
|
|
152
|
+
*/
|
|
153
|
+
async grantAdminConsent(appId) {
|
|
154
|
+
// Note: Admin consent typically requires interactive consent flow
|
|
155
|
+
// This is a placeholder - actual implementation would need OAuth consent URL
|
|
156
|
+
const consentUrl = `https://login.microsoftonline.com/organizations/v2.0/adminconsent?client_id=${appId}&scope=https://api.businesscentral.dynamics.com/.default`;
|
|
157
|
+
throw new Error(`Admin consent required. Please visit: ${consentUrl}\n\nOr ask your IT admin to grant consent.`);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Create a new client secret for the app
|
|
161
|
+
*/
|
|
162
|
+
async createClientSecret(appObjectId, description, validityMonths = 24) {
|
|
163
|
+
const endDate = new Date();
|
|
164
|
+
endDate.setMonth(endDate.getMonth() + validityMonths);
|
|
165
|
+
const response = await fetch(`${this.baseUrl}/applications/${appObjectId}/addPassword`, {
|
|
166
|
+
method: "POST",
|
|
167
|
+
headers: {
|
|
168
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
169
|
+
"Content-Type": "application/json",
|
|
170
|
+
},
|
|
171
|
+
body: JSON.stringify({
|
|
172
|
+
passwordCredential: {
|
|
173
|
+
displayName: description,
|
|
174
|
+
endDateTime: endDate.toISOString(),
|
|
175
|
+
},
|
|
176
|
+
}),
|
|
177
|
+
});
|
|
178
|
+
if (!response.ok) {
|
|
179
|
+
const error = await response.text();
|
|
180
|
+
throw new Error(`Failed to create client secret: ${response.status} ${error}`);
|
|
181
|
+
}
|
|
182
|
+
const result = (await response.json());
|
|
183
|
+
return {
|
|
184
|
+
secretId: result.keyId,
|
|
185
|
+
secretText: result.secretText,
|
|
186
|
+
displayName: result.displayName,
|
|
187
|
+
endDateTime: result.endDateTime,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get service principal for an app (needed for some operations)
|
|
192
|
+
*/
|
|
193
|
+
async getServicePrincipal(appId) {
|
|
194
|
+
const response = await fetch(`${this.baseUrl}/servicePrincipals?$filter=appId eq '${appId}'`, {
|
|
195
|
+
headers: {
|
|
196
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
if (!response.ok) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
const data = (await response.json());
|
|
203
|
+
return data.value.length > 0 ? data.value[0] : null;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Create service principal for an app if it doesn't exist
|
|
207
|
+
*/
|
|
208
|
+
async ensureServicePrincipal(appId) {
|
|
209
|
+
const existing = await this.getServicePrincipal(appId);
|
|
210
|
+
if (existing) {
|
|
211
|
+
return existing.id;
|
|
212
|
+
}
|
|
213
|
+
const response = await fetch(`${this.baseUrl}/servicePrincipals`, {
|
|
214
|
+
method: "POST",
|
|
215
|
+
headers: {
|
|
216
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
217
|
+
"Content-Type": "application/json",
|
|
218
|
+
},
|
|
219
|
+
body: JSON.stringify({
|
|
220
|
+
appId,
|
|
221
|
+
}),
|
|
222
|
+
});
|
|
223
|
+
if (!response.ok) {
|
|
224
|
+
const error = await response.text();
|
|
225
|
+
throw new Error(`Failed to create service principal: ${response.status} ${error}`);
|
|
226
|
+
}
|
|
227
|
+
const result = (await response.json());
|
|
228
|
+
return result.id;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=graph-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../../src/lib/graph-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared readline management.
|
|
3
|
+
*
|
|
4
|
+
* Node.js doesn't handle multiple readline interfaces on process.stdin well.
|
|
5
|
+
* This module provides a single, reusable readline so the REPL and
|
|
6
|
+
* interactive commands (like init) never fight over stdin.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Prompt the user for input. Safe to call from anywhere —
|
|
10
|
+
* reuses a single readline interface on process.stdin.
|
|
11
|
+
*/
|
|
12
|
+
export declare function question(prompt: string): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Prompt for sensitive input without echoing typed characters.
|
|
15
|
+
* Falls back to standard question() in non-interactive environments.
|
|
16
|
+
*/
|
|
17
|
+
export declare function questionHidden(prompt: string): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Close the shared readline (e.g. on exit).
|
|
20
|
+
*/
|
|
21
|
+
export declare function closeInput(): void;
|
|
22
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/lib/input.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4BH;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EpE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CASjC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared readline management.
|
|
3
|
+
*
|
|
4
|
+
* Node.js doesn't handle multiple readline interfaces on process.stdin well.
|
|
5
|
+
* This module provides a single, reusable readline so the REPL and
|
|
6
|
+
* interactive commands (like init) never fight over stdin.
|
|
7
|
+
*/
|
|
8
|
+
import { createInterface } from "node:readline/promises";
|
|
9
|
+
let rl = null;
|
|
10
|
+
// A timer that keeps the event loop alive while readline exists.
|
|
11
|
+
// Necessary because libraries (ora, dynamic imports) can unref/pause
|
|
12
|
+
// stdin between prompts, letting Node.js exit prematurely.
|
|
13
|
+
let keepAlive = null;
|
|
14
|
+
function get() {
|
|
15
|
+
if (!rl) {
|
|
16
|
+
rl = createInterface({
|
|
17
|
+
input: process.stdin,
|
|
18
|
+
output: process.stdout,
|
|
19
|
+
});
|
|
20
|
+
keepAlive = setInterval(() => { }, 2_147_483_647); // max safe interval
|
|
21
|
+
rl.once("close", () => {
|
|
22
|
+
rl = null;
|
|
23
|
+
if (keepAlive) {
|
|
24
|
+
clearInterval(keepAlive);
|
|
25
|
+
keepAlive = null;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return rl;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Prompt the user for input. Safe to call from anywhere —
|
|
33
|
+
* reuses a single readline interface on process.stdin.
|
|
34
|
+
*/
|
|
35
|
+
export async function question(prompt) {
|
|
36
|
+
return get().question(prompt);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Prompt for sensitive input without echoing typed characters.
|
|
40
|
+
* Falls back to standard question() in non-interactive environments.
|
|
41
|
+
*/
|
|
42
|
+
export async function questionHidden(prompt) {
|
|
43
|
+
if (!process.stdin.isTTY ||
|
|
44
|
+
typeof process.stdin.setRawMode !== "function") {
|
|
45
|
+
return question(prompt);
|
|
46
|
+
}
|
|
47
|
+
// If readline is currently active, close it before raw hidden input.
|
|
48
|
+
// Otherwise readline listeners can still echo typed characters.
|
|
49
|
+
if (rl) {
|
|
50
|
+
closeInput();
|
|
51
|
+
}
|
|
52
|
+
const stdin = process.stdin;
|
|
53
|
+
const stdout = process.stdout;
|
|
54
|
+
const wasRaw = !!stdin.isRaw;
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
let value = "";
|
|
57
|
+
const cleanup = () => {
|
|
58
|
+
stdin.off("data", onData);
|
|
59
|
+
if (!wasRaw) {
|
|
60
|
+
stdin.setRawMode(false);
|
|
61
|
+
}
|
|
62
|
+
stdin.pause();
|
|
63
|
+
};
|
|
64
|
+
const onData = (chunk) => {
|
|
65
|
+
const input = chunk.toString("utf8");
|
|
66
|
+
if (input.startsWith("\u001b")) {
|
|
67
|
+
return; // Ignore escape sequences (arrow keys, etc.)
|
|
68
|
+
}
|
|
69
|
+
for (const char of input) {
|
|
70
|
+
// Enter/Return
|
|
71
|
+
if (char === "\r" || char === "\n") {
|
|
72
|
+
stdout.write("\n");
|
|
73
|
+
cleanup();
|
|
74
|
+
resolve(value);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Ctrl+C
|
|
78
|
+
if (char === "\u0003") {
|
|
79
|
+
cleanup();
|
|
80
|
+
reject(new Error("Input cancelled"));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Backspace/Delete
|
|
84
|
+
if (char === "\u007f" || char === "\b" || char === "\x08") {
|
|
85
|
+
if (value.length > 0) {
|
|
86
|
+
value = value.slice(0, -1);
|
|
87
|
+
}
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
value += char;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
try {
|
|
94
|
+
stdout.write(prompt);
|
|
95
|
+
if (!wasRaw) {
|
|
96
|
+
stdin.setRawMode(true);
|
|
97
|
+
}
|
|
98
|
+
stdin.resume();
|
|
99
|
+
stdin.on("data", onData);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
cleanup();
|
|
103
|
+
reject(error);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Close the shared readline (e.g. on exit).
|
|
109
|
+
*/
|
|
110
|
+
export function closeInput() {
|
|
111
|
+
if (rl) {
|
|
112
|
+
rl.close();
|
|
113
|
+
rl = null;
|
|
114
|
+
}
|
|
115
|
+
if (keepAlive) {
|
|
116
|
+
clearInterval(keepAlive);
|
|
117
|
+
keepAlive = null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/lib/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 interface WizardResult {
|
|
17
|
+
configPath: string;
|
|
18
|
+
clientId: string;
|
|
19
|
+
tenantId: string;
|
|
20
|
+
success: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Run the interactive setup wizard
|
|
24
|
+
*/
|
|
25
|
+
export declare function runInteractiveWizard(configPath: string): Promise<WizardResult>;
|
|
26
|
+
//# sourceMappingURL=interactive-wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-wizard.d.ts","sourceRoot":"","sources":["../../src/lib/interactive-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAkED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAmhBpF"}
|