@pax8-cta/core 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 +198 -0
- package/dist/auth/device-code-login.d.ts +40 -0
- package/dist/auth/device-code-login.d.ts.map +1 -0
- package/dist/auth/device-code-login.js +59 -0
- package/dist/auth/device-code-login.js.map +1 -0
- package/dist/auth/gdap-client.d.ts +81 -0
- package/dist/auth/gdap-client.d.ts.map +1 -0
- package/dist/auth/gdap-client.js +128 -0
- package/dist/auth/gdap-client.js.map +1 -0
- package/dist/auth/index.d.ts +19 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +19 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/token-manager.d.ts +54 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +150 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/client.d.ts +27 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +27 -0
- package/dist/client.js.map +1 -0
- package/dist/config/client.d.ts +24 -0
- package/dist/config/client.d.ts.map +1 -0
- package/dist/config/client.js +18 -0
- package/dist/config/client.js.map +1 -0
- package/dist/config/index.d.ts +18 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +18 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +81 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +271 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +751 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +556 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.d.ts +116 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +170 -0
- package/dist/constants.js.map +1 -0
- package/dist/dataverse/agent-resolver.d.ts +98 -0
- package/dist/dataverse/agent-resolver.d.ts.map +1 -0
- package/dist/dataverse/agent-resolver.js +185 -0
- package/dist/dataverse/agent-resolver.js.map +1 -0
- package/dist/dataverse/client.d.ts +104 -0
- package/dist/dataverse/client.d.ts.map +1 -0
- package/dist/dataverse/client.js +272 -0
- package/dist/dataverse/client.js.map +1 -0
- package/dist/dataverse/connection-refs.d.ts +115 -0
- package/dist/dataverse/connection-refs.d.ts.map +1 -0
- package/dist/dataverse/connection-refs.js +203 -0
- package/dist/dataverse/connection-refs.js.map +1 -0
- package/dist/dataverse/index.d.ts +20 -0
- package/dist/dataverse/index.d.ts.map +1 -0
- package/dist/dataverse/index.js +20 -0
- package/dist/dataverse/index.js.map +1 -0
- package/dist/dataverse/solution-ops.d.ts +100 -0
- package/dist/dataverse/solution-ops.d.ts.map +1 -0
- package/dist/dataverse/solution-ops.js +288 -0
- package/dist/dataverse/solution-ops.js.map +1 -0
- package/dist/errors.d.ts +171 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +178 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/mock/demo-data.d.ts +213 -0
- package/dist/mock/demo-data.d.ts.map +1 -0
- package/dist/mock/demo-data.js +1096 -0
- package/dist/mock/demo-data.js.map +1 -0
- package/dist/mock/demo-deployment-store.d.ts +77 -0
- package/dist/mock/demo-deployment-store.d.ts.map +1 -0
- package/dist/mock/demo-deployment-store.js +85 -0
- package/dist/mock/demo-deployment-store.js.map +1 -0
- package/dist/powerplatform/admin-client.d.ts +226 -0
- package/dist/powerplatform/admin-client.d.ts.map +1 -0
- package/dist/powerplatform/admin-client.js +315 -0
- package/dist/powerplatform/admin-client.js.map +1 -0
- package/dist/powerplatform/index.d.ts +18 -0
- package/dist/powerplatform/index.d.ts.map +1 -0
- package/dist/powerplatform/index.js +18 -0
- package/dist/powerplatform/index.js.map +1 -0
- package/dist/powerplatform/tenant-discovery.d.ts +100 -0
- package/dist/powerplatform/tenant-discovery.d.ts.map +1 -0
- package/dist/powerplatform/tenant-discovery.js +205 -0
- package/dist/powerplatform/tenant-discovery.js.map +1 -0
- package/dist/preconditions/check.d.ts +41 -0
- package/dist/preconditions/check.d.ts.map +1 -0
- package/dist/preconditions/check.js +173 -0
- package/dist/preconditions/check.js.map +1 -0
- package/dist/preconditions/index.d.ts +20 -0
- package/dist/preconditions/index.d.ts.map +1 -0
- package/dist/preconditions/index.js +20 -0
- package/dist/preconditions/index.js.map +1 -0
- package/dist/preconditions/loader.d.ts +33 -0
- package/dist/preconditions/loader.d.ts.map +1 -0
- package/dist/preconditions/loader.js +65 -0
- package/dist/preconditions/loader.js.map +1 -0
- package/dist/preconditions/schema.d.ts +103 -0
- package/dist/preconditions/schema.d.ts.map +1 -0
- package/dist/preconditions/schema.js +93 -0
- package/dist/preconditions/schema.js.map +1 -0
- package/dist/preconditions/types.d.ts +118 -0
- package/dist/preconditions/types.d.ts.map +1 -0
- package/dist/preconditions/types.js +17 -0
- package/dist/preconditions/types.js.map +1 -0
- package/dist/queue/index.d.ts +17 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +17 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/memory-queue.d.ts +86 -0
- package/dist/queue/memory-queue.d.ts.map +1 -0
- package/dist/queue/memory-queue.js +221 -0
- package/dist/queue/memory-queue.js.map +1 -0
- package/dist/services/audit-log.d.ts +59 -0
- package/dist/services/audit-log.d.ts.map +1 -0
- package/dist/services/audit-log.js +193 -0
- package/dist/services/audit-log.js.map +1 -0
- package/dist/services/auth-error-parser.d.ts +36 -0
- package/dist/services/auth-error-parser.d.ts.map +1 -0
- package/dist/services/auth-error-parser.js +90 -0
- package/dist/services/auth-error-parser.js.map +1 -0
- package/dist/services/deployment-doctor.d.ts +109 -0
- package/dist/services/deployment-doctor.d.ts.map +1 -0
- package/dist/services/deployment-doctor.js +476 -0
- package/dist/services/deployment-doctor.js.map +1 -0
- package/dist/services/deployment-notifications.d.ts +41 -0
- package/dist/services/deployment-notifications.d.ts.map +1 -0
- package/dist/services/deployment-notifications.js +161 -0
- package/dist/services/deployment-notifications.js.map +1 -0
- package/dist/services/deployment-progress.d.ts +89 -0
- package/dist/services/deployment-progress.d.ts.map +1 -0
- package/dist/services/deployment-progress.js +244 -0
- package/dist/services/deployment-progress.js.map +1 -0
- package/dist/services/deployment-service.d.ts +97 -0
- package/dist/services/deployment-service.d.ts.map +1 -0
- package/dist/services/deployment-service.js +375 -0
- package/dist/services/deployment-service.js.map +1 -0
- package/dist/services/drift-analyzer.d.ts +86 -0
- package/dist/services/drift-analyzer.d.ts.map +1 -0
- package/dist/services/drift-analyzer.js +273 -0
- package/dist/services/drift-analyzer.js.map +1 -0
- package/dist/services/environment-setup.d.ts +97 -0
- package/dist/services/environment-setup.d.ts.map +1 -0
- package/dist/services/environment-setup.js +250 -0
- package/dist/services/environment-setup.js.map +1 -0
- package/dist/services/health-check.d.ts +168 -0
- package/dist/services/health-check.d.ts.map +1 -0
- package/dist/services/health-check.js +705 -0
- package/dist/services/health-check.js.map +1 -0
- package/dist/services/index.d.ts +39 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +39 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/logger.d.ts +139 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +268 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/notification-service.d.ts +55 -0
- package/dist/services/notification-service.d.ts.map +1 -0
- package/dist/services/notification-service.js +184 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/risk-analyzer.d.ts +252 -0
- package/dist/services/risk-analyzer.d.ts.map +1 -0
- package/dist/services/risk-analyzer.js +866 -0
- package/dist/services/risk-analyzer.js.map +1 -0
- package/dist/services/rollback.d.ts +57 -0
- package/dist/services/rollback.d.ts.map +1 -0
- package/dist/services/rollback.js +270 -0
- package/dist/services/rollback.js.map +1 -0
- package/dist/services/scheduler.d.ts +80 -0
- package/dist/services/scheduler.d.ts.map +1 -0
- package/dist/services/scheduler.js +350 -0
- package/dist/services/scheduler.js.map +1 -0
- package/dist/services/secrets.d.ts +31 -0
- package/dist/services/secrets.d.ts.map +1 -0
- package/dist/services/secrets.js +206 -0
- package/dist/services/secrets.js.map +1 -0
- package/dist/services/settings-service.d.ts +132 -0
- package/dist/services/settings-service.d.ts.map +1 -0
- package/dist/services/settings-service.js +378 -0
- package/dist/services/settings-service.js.map +1 -0
- package/dist/services/solution-diff.d.ts +127 -0
- package/dist/services/solution-diff.d.ts.map +1 -0
- package/dist/services/solution-diff.js +260 -0
- package/dist/services/solution-diff.js.map +1 -0
- package/dist/services/solution-mode-detector.d.ts +35 -0
- package/dist/services/solution-mode-detector.d.ts.map +1 -0
- package/dist/services/solution-mode-detector.js +84 -0
- package/dist/services/solution-mode-detector.js.map +1 -0
- package/dist/services/tenant-resolver.d.ts +55 -0
- package/dist/services/tenant-resolver.d.ts.map +1 -0
- package/dist/services/tenant-resolver.js +126 -0
- package/dist/services/tenant-resolver.js.map +1 -0
- package/dist/services/unmanaged-customizations.d.ts +104 -0
- package/dist/services/unmanaged-customizations.d.ts.map +1 -0
- package/dist/services/unmanaged-customizations.js +521 -0
- package/dist/services/unmanaged-customizations.js.map +1 -0
- package/dist/services/url-templater.d.ts +184 -0
- package/dist/services/url-templater.d.ts.map +1 -0
- package/dist/services/url-templater.js +327 -0
- package/dist/services/url-templater.js.map +1 -0
- package/dist/services/version-checker.d.ts +108 -0
- package/dist/services/version-checker.d.ts.map +1 -0
- package/dist/services/version-checker.js +403 -0
- package/dist/services/version-checker.js.map +1 -0
- package/dist/services/waves.d.ts +90 -0
- package/dist/services/waves.d.ts.map +1 -0
- package/dist/services/waves.js +222 -0
- package/dist/services/waves.js.map +1 -0
- package/dist/services/webhook.d.ts +95 -0
- package/dist/services/webhook.d.ts.map +1 -0
- package/dist/services/webhook.js +244 -0
- package/dist/services/webhook.js.map +1 -0
- package/dist/utils/deployment-tools.d.ts +110 -0
- package/dist/utils/deployment-tools.d.ts.map +1 -0
- package/dist/utils/deployment-tools.js +121 -0
- package/dist/utils/deployment-tools.js.map +1 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,315 @@
|
|
|
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
|
+
* Client for Power Platform Admin API
|
|
18
|
+
* Used to discover and manage environments across tenants
|
|
19
|
+
*
|
|
20
|
+
* API Reference: https://learn.microsoft.com/en-us/power-platform/admin/list-environments
|
|
21
|
+
*/
|
|
22
|
+
export class PowerPlatformAdminClient {
|
|
23
|
+
config;
|
|
24
|
+
adminApiUrl = "https://api.bap.microsoft.com";
|
|
25
|
+
apiVersion = "2021-04-01";
|
|
26
|
+
appManagementApiUrl = "https://api.powerplatform.com";
|
|
27
|
+
constructor(config) {
|
|
28
|
+
this.config = config;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* List all environments accessible to the authenticated user
|
|
32
|
+
* When using GDAP, this lists environments in the customer tenant
|
|
33
|
+
*/
|
|
34
|
+
async listEnvironments() {
|
|
35
|
+
const token = await this.getAdminToken();
|
|
36
|
+
const url = `${this.adminApiUrl}/providers/Microsoft.BusinessAppPlatform/scopes/admin/environments?api-version=${this.apiVersion}`;
|
|
37
|
+
const response = await fetch(url, {
|
|
38
|
+
method: "GET",
|
|
39
|
+
headers: {
|
|
40
|
+
Authorization: `Bearer ${token}`,
|
|
41
|
+
"Content-Type": "application/json",
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
const error = await response.text();
|
|
46
|
+
throw new Error(`Failed to list environments: ${response.status} - ${error}`);
|
|
47
|
+
}
|
|
48
|
+
const data = (await response.json());
|
|
49
|
+
return data.value || [];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get details for a specific environment
|
|
53
|
+
*/
|
|
54
|
+
async getEnvironment(environmentId) {
|
|
55
|
+
const token = await this.getAdminToken();
|
|
56
|
+
const url = `${this.adminApiUrl}/providers/Microsoft.BusinessAppPlatform/scopes/admin/environments/${environmentId}?api-version=${this.apiVersion}`;
|
|
57
|
+
const response = await fetch(url, {
|
|
58
|
+
method: "GET",
|
|
59
|
+
headers: {
|
|
60
|
+
Authorization: `Bearer ${token}`,
|
|
61
|
+
"Content-Type": "application/json",
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
const error = await response.text();
|
|
66
|
+
throw new Error(`Failed to get environment: ${response.status} - ${error}`);
|
|
67
|
+
}
|
|
68
|
+
return response.json();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get environment capacity information
|
|
72
|
+
*/
|
|
73
|
+
async getEnvironmentCapacity(environmentId) {
|
|
74
|
+
const env = await this.getEnvironment(environmentId);
|
|
75
|
+
return env.properties.capacity || [];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Convert raw environment to simplified summary for UI
|
|
79
|
+
*/
|
|
80
|
+
toEnvironmentSummary(env) {
|
|
81
|
+
const linked = env.properties.linkedEnvironmentMetadata;
|
|
82
|
+
const capacity = env.properties.capacity || [];
|
|
83
|
+
const dbCapacity = capacity.find((c) => c.capacityType === "Database");
|
|
84
|
+
const fileCapacity = capacity.find((c) => c.capacityType === "File");
|
|
85
|
+
return {
|
|
86
|
+
id: env.id,
|
|
87
|
+
displayName: env.properties.displayName || linked?.friendlyName || env.name,
|
|
88
|
+
uniqueName: linked?.uniqueName || env.name,
|
|
89
|
+
domainName: linked?.domainName || "",
|
|
90
|
+
type: env.properties.environmentSku,
|
|
91
|
+
instanceUrl: linked?.instanceUrl ||
|
|
92
|
+
env.properties.runtimeEndpoints
|
|
93
|
+
?.microsoft_BusinessAppPlatform_linkedEnvironmentMetadata_instanceUrl ||
|
|
94
|
+
"",
|
|
95
|
+
instanceApiUrl: linked?.instanceApiUrl ||
|
|
96
|
+
env.properties.runtimeEndpoints
|
|
97
|
+
?.microsoft_BusinessAppPlatform_linkedEnvironmentMetadata_instanceApiUrl ||
|
|
98
|
+
"",
|
|
99
|
+
version: linked?.version || "",
|
|
100
|
+
state: linked?.instanceState || env.properties.states?.runtime?.id || "Unknown",
|
|
101
|
+
location: env.location,
|
|
102
|
+
isDefault: env.properties.isDefault,
|
|
103
|
+
createdTime: linked?.createdTime || env.properties.createdTime,
|
|
104
|
+
capacity: {
|
|
105
|
+
database: dbCapacity
|
|
106
|
+
? {
|
|
107
|
+
used: dbCapacity.actualConsumption,
|
|
108
|
+
rated: dbCapacity.ratedConsumption,
|
|
109
|
+
unit: dbCapacity.capacityUnit,
|
|
110
|
+
}
|
|
111
|
+
: undefined,
|
|
112
|
+
file: fileCapacity
|
|
113
|
+
? {
|
|
114
|
+
used: fileCapacity.actualConsumption,
|
|
115
|
+
rated: fileCapacity.ratedConsumption,
|
|
116
|
+
unit: fileCapacity.capacityUnit,
|
|
117
|
+
}
|
|
118
|
+
: undefined,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* List environments and return simplified summaries
|
|
124
|
+
*/
|
|
125
|
+
async listEnvironmentSummaries() {
|
|
126
|
+
const environments = await this.listEnvironments();
|
|
127
|
+
return environments
|
|
128
|
+
.filter((env) => env.properties.linkedEnvironmentMetadata) // Only Dataverse-enabled environments
|
|
129
|
+
.map((env) => this.toEnvironmentSummary(env));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* List application users in an environment
|
|
133
|
+
*/
|
|
134
|
+
async listApplicationUsers(environmentId) {
|
|
135
|
+
const token = await this.getAppManagementToken();
|
|
136
|
+
const url = `${this.appManagementApiUrl}/appmanagement/environments/${environmentId}/applicationUsers?api-version=2022-03-01-preview`;
|
|
137
|
+
const response = await fetch(url, {
|
|
138
|
+
method: "GET",
|
|
139
|
+
headers: {
|
|
140
|
+
Authorization: `Bearer ${token}`,
|
|
141
|
+
"Content-Type": "application/json",
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
const error = await response.text();
|
|
146
|
+
throw new Error(`Failed to list application users: ${response.status} - ${error}`);
|
|
147
|
+
}
|
|
148
|
+
const data = (await response.json());
|
|
149
|
+
return data.value || [];
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check if an application user exists for the given app ID
|
|
153
|
+
*/
|
|
154
|
+
async checkApplicationUserExists(environmentId, appId) {
|
|
155
|
+
const users = await this.listApplicationUsers(environmentId);
|
|
156
|
+
return users.find((u) => u.applicationId.toLowerCase() === appId.toLowerCase()) || null;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Create an application user in an environment
|
|
160
|
+
*/
|
|
161
|
+
async createApplicationUser(environmentId, appId, businessUnitId) {
|
|
162
|
+
const token = await this.getAppManagementToken();
|
|
163
|
+
const url = `${this.appManagementApiUrl}/appmanagement/environments/${environmentId}/applicationUsers?api-version=2022-03-01-preview`;
|
|
164
|
+
const body = {
|
|
165
|
+
applicationId: appId,
|
|
166
|
+
businessUnitId: businessUnitId,
|
|
167
|
+
};
|
|
168
|
+
const response = await fetch(url, {
|
|
169
|
+
method: "POST",
|
|
170
|
+
headers: {
|
|
171
|
+
Authorization: `Bearer ${token}`,
|
|
172
|
+
"Content-Type": "application/json",
|
|
173
|
+
},
|
|
174
|
+
body: JSON.stringify(body),
|
|
175
|
+
});
|
|
176
|
+
if (!response.ok) {
|
|
177
|
+
const error = await response.text();
|
|
178
|
+
throw new Error(`Failed to create application user: ${response.status} - ${error}`);
|
|
179
|
+
}
|
|
180
|
+
return response.json();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get the default (root) business unit for an environment
|
|
184
|
+
*/
|
|
185
|
+
async getDefaultBusinessUnitId(environmentUrl) {
|
|
186
|
+
// Use Dataverse Web API to get the root business unit
|
|
187
|
+
const token = await this.config.tokenManager.getDataverseToken(environmentUrl);
|
|
188
|
+
const baseUrl = environmentUrl.replace(/\/$/, "");
|
|
189
|
+
const apiUrl = `${baseUrl}/api/data/v9.2`;
|
|
190
|
+
const url = `${apiUrl}/businessunits?$select=businessunitid,name&$filter=parentbusinessunitid eq null`;
|
|
191
|
+
const response = await fetch(url, {
|
|
192
|
+
method: "GET",
|
|
193
|
+
headers: {
|
|
194
|
+
Authorization: `Bearer ${token}`,
|
|
195
|
+
"Content-Type": "application/json",
|
|
196
|
+
Accept: "application/json",
|
|
197
|
+
"OData-MaxVersion": "4.0",
|
|
198
|
+
"OData-Version": "4.0",
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
if (!response.ok) {
|
|
202
|
+
const error = await response.text();
|
|
203
|
+
throw new Error(`Failed to get default business unit: ${response.status} - ${error}`);
|
|
204
|
+
}
|
|
205
|
+
const data = (await response.json());
|
|
206
|
+
if (!data.value || data.value.length === 0) {
|
|
207
|
+
throw new Error("No root business unit found in environment");
|
|
208
|
+
}
|
|
209
|
+
return data.value[0].businessunitid;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get the System Administrator role ID for an environment
|
|
213
|
+
*/
|
|
214
|
+
async getSystemAdminRoleId(environmentUrl) {
|
|
215
|
+
// Use Dataverse Web API to get the System Administrator role
|
|
216
|
+
const token = await this.config.tokenManager.getDataverseToken(environmentUrl);
|
|
217
|
+
const baseUrl = environmentUrl.replace(/\/$/, "");
|
|
218
|
+
const apiUrl = `${baseUrl}/api/data/v9.2`;
|
|
219
|
+
const url = `${apiUrl}/roles?$select=roleid,name&$filter=name eq 'System Administrator'`;
|
|
220
|
+
const response = await fetch(url, {
|
|
221
|
+
method: "GET",
|
|
222
|
+
headers: {
|
|
223
|
+
Authorization: `Bearer ${token}`,
|
|
224
|
+
"Content-Type": "application/json",
|
|
225
|
+
Accept: "application/json",
|
|
226
|
+
"OData-MaxVersion": "4.0",
|
|
227
|
+
"OData-Version": "4.0",
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
if (!response.ok) {
|
|
231
|
+
const error = await response.text();
|
|
232
|
+
throw new Error(`Failed to get System Administrator role: ${response.status} - ${error}`);
|
|
233
|
+
}
|
|
234
|
+
const data = (await response.json());
|
|
235
|
+
if (!data.value || data.value.length === 0) {
|
|
236
|
+
throw new Error("System Administrator role not found in environment");
|
|
237
|
+
}
|
|
238
|
+
return data.value[0].roleid;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Assign a security role to a user (using Dataverse Web API)
|
|
242
|
+
*/
|
|
243
|
+
async assignSecurityRole(environmentUrl, userId, roleId) {
|
|
244
|
+
const token = await this.config.tokenManager.getDataverseToken(environmentUrl);
|
|
245
|
+
const baseUrl = environmentUrl.replace(/\/$/, "");
|
|
246
|
+
const apiUrl = `${baseUrl}/api/data/v9.2`;
|
|
247
|
+
// Use associate action to link role to user
|
|
248
|
+
const url = `${apiUrl}/systemusers(${userId})/systemuserroles_association/$ref`;
|
|
249
|
+
const body = {
|
|
250
|
+
"@odata.id": `${apiUrl}/roles(${roleId})`,
|
|
251
|
+
};
|
|
252
|
+
const response = await fetch(url, {
|
|
253
|
+
method: "POST",
|
|
254
|
+
headers: {
|
|
255
|
+
Authorization: `Bearer ${token}`,
|
|
256
|
+
"Content-Type": "application/json",
|
|
257
|
+
Accept: "application/json",
|
|
258
|
+
"OData-MaxVersion": "4.0",
|
|
259
|
+
"OData-Version": "4.0",
|
|
260
|
+
},
|
|
261
|
+
body: JSON.stringify(body),
|
|
262
|
+
});
|
|
263
|
+
if (!response.ok) {
|
|
264
|
+
const error = await response.text();
|
|
265
|
+
// Don't fail if role already assigned
|
|
266
|
+
if (response.status === 400 && error.includes("duplicate")) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
throw new Error(`Failed to assign security role: ${response.status} - ${error}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Setup application user with System Administrator role
|
|
274
|
+
* This is the main entry point for auto-setup functionality
|
|
275
|
+
*/
|
|
276
|
+
async setupApplicationUser(environmentId, environmentUrl, appId) {
|
|
277
|
+
// Check if app user already exists
|
|
278
|
+
const existingUser = await this.checkApplicationUserExists(environmentId, appId);
|
|
279
|
+
if (existingUser) {
|
|
280
|
+
return {
|
|
281
|
+
created: false,
|
|
282
|
+
userId: existingUser.systemUserId,
|
|
283
|
+
message: "Application user already exists",
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
// Get default business unit
|
|
287
|
+
const businessUnitId = await this.getDefaultBusinessUnitId(environmentUrl);
|
|
288
|
+
// Create application user
|
|
289
|
+
const appUser = await this.createApplicationUser(environmentId, appId, businessUnitId);
|
|
290
|
+
// Get System Administrator role
|
|
291
|
+
const roleId = await this.getSystemAdminRoleId(environmentUrl);
|
|
292
|
+
// Assign role to user
|
|
293
|
+
await this.assignSecurityRole(environmentUrl, appUser.systemUserId, roleId);
|
|
294
|
+
return {
|
|
295
|
+
created: true,
|
|
296
|
+
userId: appUser.systemUserId,
|
|
297
|
+
message: "Application user created and System Administrator role assigned",
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get token for Power Platform Admin API
|
|
302
|
+
* Uses the BAP (Business Application Platform) scope
|
|
303
|
+
*/
|
|
304
|
+
async getAdminToken() {
|
|
305
|
+
return this.config.tokenManager.getToken(["https://api.bap.microsoft.com/.default"]);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Get token for Power Platform App Management API
|
|
309
|
+
* Uses the Power Platform API scope
|
|
310
|
+
*/
|
|
311
|
+
async getAppManagementToken() {
|
|
312
|
+
return this.config.tokenManager.getToken(["https://api.powerplatform.com/.default"]);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=admin-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../../src/powerplatform/admin-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export * from "./admin-client.js";
|
|
17
|
+
export * from "./tenant-discovery.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerplatform/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export * from "./admin-client.js";
|
|
17
|
+
export * from "./tenant-discovery.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerplatform/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
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 { TokenManager, TokenManagerConfig } from "../auth/token-manager.js";
|
|
17
|
+
import { EnvironmentSummary } from "./admin-client.js";
|
|
18
|
+
export interface TenantDiscoveryConfig extends TokenManagerConfig {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Discovered customer tenant with environments and solutions
|
|
22
|
+
*/
|
|
23
|
+
export interface DiscoveredTenant {
|
|
24
|
+
tenantId: string;
|
|
25
|
+
displayName: string;
|
|
26
|
+
gdapRelationshipId: string;
|
|
27
|
+
gdapStatus: "active" | "pending" | "terminated" | "expired";
|
|
28
|
+
gdapEndDateTime: string;
|
|
29
|
+
hasPowerPlatformAdmin: boolean;
|
|
30
|
+
environments: EnvironmentSummary[];
|
|
31
|
+
defaultEnvironment?: EnvironmentSummary;
|
|
32
|
+
discoveredAt: string;
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Solution info from a discovered tenant
|
|
37
|
+
*/
|
|
38
|
+
export interface DiscoveredSolution {
|
|
39
|
+
tenantId: string;
|
|
40
|
+
tenantName: string;
|
|
41
|
+
environmentId: string;
|
|
42
|
+
environmentName: string;
|
|
43
|
+
environmentUrl: string;
|
|
44
|
+
solutionId: string;
|
|
45
|
+
uniqueName: string;
|
|
46
|
+
friendlyName: string;
|
|
47
|
+
version: string;
|
|
48
|
+
isManaged: boolean;
|
|
49
|
+
publisherName?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Service for discovering customer tenants and their Power Platform environments
|
|
53
|
+
* via GDAP relationships
|
|
54
|
+
*/
|
|
55
|
+
export declare class TenantDiscoveryService {
|
|
56
|
+
private gdapClient;
|
|
57
|
+
private partnerConfig;
|
|
58
|
+
private tenantCache;
|
|
59
|
+
private solutionCache;
|
|
60
|
+
private readonly DEFAULT_CACHE_TTL_MS;
|
|
61
|
+
constructor(config: TenantDiscoveryConfig);
|
|
62
|
+
/**
|
|
63
|
+
* Discover all customer tenants via GDAP and their Power Platform environments
|
|
64
|
+
*/
|
|
65
|
+
discoverTenants(options?: {
|
|
66
|
+
forceRefresh?: boolean;
|
|
67
|
+
cacheTtlMs?: number;
|
|
68
|
+
}): Promise<DiscoveredTenant[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Discover environments for a single tenant
|
|
71
|
+
*/
|
|
72
|
+
private discoverTenantEnvironments;
|
|
73
|
+
/**
|
|
74
|
+
* Discover solutions installed in a tenant's environment
|
|
75
|
+
*/
|
|
76
|
+
discoverSolutions(tenantId: string, environmentUrl: string, options?: {
|
|
77
|
+
forceRefresh?: boolean;
|
|
78
|
+
cacheTtlMs?: number;
|
|
79
|
+
}): Promise<DiscoveredSolution[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Discover a specific solution across all tenants
|
|
82
|
+
* Useful for finding where an agent is deployed
|
|
83
|
+
*/
|
|
84
|
+
findSolutionAcrossTenants(solutionUniqueName: string, options?: {
|
|
85
|
+
forceRefresh?: boolean;
|
|
86
|
+
}): Promise<DiscoveredSolution[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Get a token manager for a specific customer tenant
|
|
89
|
+
*/
|
|
90
|
+
getCustomerTokenManager(customerTenantId: string): TokenManager;
|
|
91
|
+
/**
|
|
92
|
+
* Clear all caches
|
|
93
|
+
*/
|
|
94
|
+
clearCache(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Clear cache for a specific tenant
|
|
97
|
+
*/
|
|
98
|
+
clearTenantCache(tenantId: string): void;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=tenant-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-discovery.d.ts","sourceRoot":"","sources":["../../src/powerplatform/tenant-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE5E,OAAO,EAA4B,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIjF,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;CAEhE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC5D,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAwB;IAG7C,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,aAAa,CAA4D;IAEjF,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAkB;gBAE3C,MAAM,EAAE,qBAAqB;IAKzC;;OAEG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE;QAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA6C/B;;OAEG;YACW,0BAA0B;IA2CxC;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GACA,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqDhC;;;OAGG;IACG,yBAAyB,CAC7B,kBAAkB,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GACA,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA2BhC;;OAEG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,GAAG,YAAY;IAO/D;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAUzC"}
|