@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.
Files changed (226) hide show
  1. package/LICENSE +198 -0
  2. package/dist/auth/device-code-login.d.ts +40 -0
  3. package/dist/auth/device-code-login.d.ts.map +1 -0
  4. package/dist/auth/device-code-login.js +59 -0
  5. package/dist/auth/device-code-login.js.map +1 -0
  6. package/dist/auth/gdap-client.d.ts +81 -0
  7. package/dist/auth/gdap-client.d.ts.map +1 -0
  8. package/dist/auth/gdap-client.js +128 -0
  9. package/dist/auth/gdap-client.js.map +1 -0
  10. package/dist/auth/index.d.ts +19 -0
  11. package/dist/auth/index.d.ts.map +1 -0
  12. package/dist/auth/index.js +19 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/token-manager.d.ts +54 -0
  15. package/dist/auth/token-manager.d.ts.map +1 -0
  16. package/dist/auth/token-manager.js +150 -0
  17. package/dist/auth/token-manager.js.map +1 -0
  18. package/dist/client.d.ts +27 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +27 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/config/client.d.ts +24 -0
  23. package/dist/config/client.d.ts.map +1 -0
  24. package/dist/config/client.js +18 -0
  25. package/dist/config/client.js.map +1 -0
  26. package/dist/config/index.d.ts +18 -0
  27. package/dist/config/index.d.ts.map +1 -0
  28. package/dist/config/index.js +18 -0
  29. package/dist/config/index.js.map +1 -0
  30. package/dist/config/loader.d.ts +81 -0
  31. package/dist/config/loader.d.ts.map +1 -0
  32. package/dist/config/loader.js +271 -0
  33. package/dist/config/loader.js.map +1 -0
  34. package/dist/config/schema.d.ts +751 -0
  35. package/dist/config/schema.d.ts.map +1 -0
  36. package/dist/config/schema.js +556 -0
  37. package/dist/config/schema.js.map +1 -0
  38. package/dist/constants.d.ts +116 -0
  39. package/dist/constants.d.ts.map +1 -0
  40. package/dist/constants.js +170 -0
  41. package/dist/constants.js.map +1 -0
  42. package/dist/dataverse/agent-resolver.d.ts +98 -0
  43. package/dist/dataverse/agent-resolver.d.ts.map +1 -0
  44. package/dist/dataverse/agent-resolver.js +185 -0
  45. package/dist/dataverse/agent-resolver.js.map +1 -0
  46. package/dist/dataverse/client.d.ts +104 -0
  47. package/dist/dataverse/client.d.ts.map +1 -0
  48. package/dist/dataverse/client.js +272 -0
  49. package/dist/dataverse/client.js.map +1 -0
  50. package/dist/dataverse/connection-refs.d.ts +115 -0
  51. package/dist/dataverse/connection-refs.d.ts.map +1 -0
  52. package/dist/dataverse/connection-refs.js +203 -0
  53. package/dist/dataverse/connection-refs.js.map +1 -0
  54. package/dist/dataverse/index.d.ts +20 -0
  55. package/dist/dataverse/index.d.ts.map +1 -0
  56. package/dist/dataverse/index.js +20 -0
  57. package/dist/dataverse/index.js.map +1 -0
  58. package/dist/dataverse/solution-ops.d.ts +100 -0
  59. package/dist/dataverse/solution-ops.d.ts.map +1 -0
  60. package/dist/dataverse/solution-ops.js +288 -0
  61. package/dist/dataverse/solution-ops.js.map +1 -0
  62. package/dist/errors.d.ts +171 -0
  63. package/dist/errors.d.ts.map +1 -0
  64. package/dist/errors.js +178 -0
  65. package/dist/errors.js.map +1 -0
  66. package/dist/index.d.ts +27 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +40 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/mock/demo-data.d.ts +213 -0
  71. package/dist/mock/demo-data.d.ts.map +1 -0
  72. package/dist/mock/demo-data.js +1096 -0
  73. package/dist/mock/demo-data.js.map +1 -0
  74. package/dist/mock/demo-deployment-store.d.ts +77 -0
  75. package/dist/mock/demo-deployment-store.d.ts.map +1 -0
  76. package/dist/mock/demo-deployment-store.js +85 -0
  77. package/dist/mock/demo-deployment-store.js.map +1 -0
  78. package/dist/powerplatform/admin-client.d.ts +226 -0
  79. package/dist/powerplatform/admin-client.d.ts.map +1 -0
  80. package/dist/powerplatform/admin-client.js +315 -0
  81. package/dist/powerplatform/admin-client.js.map +1 -0
  82. package/dist/powerplatform/index.d.ts +18 -0
  83. package/dist/powerplatform/index.d.ts.map +1 -0
  84. package/dist/powerplatform/index.js +18 -0
  85. package/dist/powerplatform/index.js.map +1 -0
  86. package/dist/powerplatform/tenant-discovery.d.ts +100 -0
  87. package/dist/powerplatform/tenant-discovery.d.ts.map +1 -0
  88. package/dist/powerplatform/tenant-discovery.js +205 -0
  89. package/dist/powerplatform/tenant-discovery.js.map +1 -0
  90. package/dist/preconditions/check.d.ts +41 -0
  91. package/dist/preconditions/check.d.ts.map +1 -0
  92. package/dist/preconditions/check.js +173 -0
  93. package/dist/preconditions/check.js.map +1 -0
  94. package/dist/preconditions/index.d.ts +20 -0
  95. package/dist/preconditions/index.d.ts.map +1 -0
  96. package/dist/preconditions/index.js +20 -0
  97. package/dist/preconditions/index.js.map +1 -0
  98. package/dist/preconditions/loader.d.ts +33 -0
  99. package/dist/preconditions/loader.d.ts.map +1 -0
  100. package/dist/preconditions/loader.js +65 -0
  101. package/dist/preconditions/loader.js.map +1 -0
  102. package/dist/preconditions/schema.d.ts +103 -0
  103. package/dist/preconditions/schema.d.ts.map +1 -0
  104. package/dist/preconditions/schema.js +93 -0
  105. package/dist/preconditions/schema.js.map +1 -0
  106. package/dist/preconditions/types.d.ts +118 -0
  107. package/dist/preconditions/types.d.ts.map +1 -0
  108. package/dist/preconditions/types.js +17 -0
  109. package/dist/preconditions/types.js.map +1 -0
  110. package/dist/queue/index.d.ts +17 -0
  111. package/dist/queue/index.d.ts.map +1 -0
  112. package/dist/queue/index.js +17 -0
  113. package/dist/queue/index.js.map +1 -0
  114. package/dist/queue/memory-queue.d.ts +86 -0
  115. package/dist/queue/memory-queue.d.ts.map +1 -0
  116. package/dist/queue/memory-queue.js +221 -0
  117. package/dist/queue/memory-queue.js.map +1 -0
  118. package/dist/services/audit-log.d.ts +59 -0
  119. package/dist/services/audit-log.d.ts.map +1 -0
  120. package/dist/services/audit-log.js +193 -0
  121. package/dist/services/audit-log.js.map +1 -0
  122. package/dist/services/auth-error-parser.d.ts +36 -0
  123. package/dist/services/auth-error-parser.d.ts.map +1 -0
  124. package/dist/services/auth-error-parser.js +90 -0
  125. package/dist/services/auth-error-parser.js.map +1 -0
  126. package/dist/services/deployment-doctor.d.ts +109 -0
  127. package/dist/services/deployment-doctor.d.ts.map +1 -0
  128. package/dist/services/deployment-doctor.js +476 -0
  129. package/dist/services/deployment-doctor.js.map +1 -0
  130. package/dist/services/deployment-notifications.d.ts +41 -0
  131. package/dist/services/deployment-notifications.d.ts.map +1 -0
  132. package/dist/services/deployment-notifications.js +161 -0
  133. package/dist/services/deployment-notifications.js.map +1 -0
  134. package/dist/services/deployment-progress.d.ts +89 -0
  135. package/dist/services/deployment-progress.d.ts.map +1 -0
  136. package/dist/services/deployment-progress.js +244 -0
  137. package/dist/services/deployment-progress.js.map +1 -0
  138. package/dist/services/deployment-service.d.ts +97 -0
  139. package/dist/services/deployment-service.d.ts.map +1 -0
  140. package/dist/services/deployment-service.js +375 -0
  141. package/dist/services/deployment-service.js.map +1 -0
  142. package/dist/services/drift-analyzer.d.ts +86 -0
  143. package/dist/services/drift-analyzer.d.ts.map +1 -0
  144. package/dist/services/drift-analyzer.js +273 -0
  145. package/dist/services/drift-analyzer.js.map +1 -0
  146. package/dist/services/environment-setup.d.ts +97 -0
  147. package/dist/services/environment-setup.d.ts.map +1 -0
  148. package/dist/services/environment-setup.js +250 -0
  149. package/dist/services/environment-setup.js.map +1 -0
  150. package/dist/services/health-check.d.ts +168 -0
  151. package/dist/services/health-check.d.ts.map +1 -0
  152. package/dist/services/health-check.js +705 -0
  153. package/dist/services/health-check.js.map +1 -0
  154. package/dist/services/index.d.ts +39 -0
  155. package/dist/services/index.d.ts.map +1 -0
  156. package/dist/services/index.js +39 -0
  157. package/dist/services/index.js.map +1 -0
  158. package/dist/services/logger.d.ts +139 -0
  159. package/dist/services/logger.d.ts.map +1 -0
  160. package/dist/services/logger.js +268 -0
  161. package/dist/services/logger.js.map +1 -0
  162. package/dist/services/notification-service.d.ts +55 -0
  163. package/dist/services/notification-service.d.ts.map +1 -0
  164. package/dist/services/notification-service.js +184 -0
  165. package/dist/services/notification-service.js.map +1 -0
  166. package/dist/services/risk-analyzer.d.ts +252 -0
  167. package/dist/services/risk-analyzer.d.ts.map +1 -0
  168. package/dist/services/risk-analyzer.js +866 -0
  169. package/dist/services/risk-analyzer.js.map +1 -0
  170. package/dist/services/rollback.d.ts +57 -0
  171. package/dist/services/rollback.d.ts.map +1 -0
  172. package/dist/services/rollback.js +270 -0
  173. package/dist/services/rollback.js.map +1 -0
  174. package/dist/services/scheduler.d.ts +80 -0
  175. package/dist/services/scheduler.d.ts.map +1 -0
  176. package/dist/services/scheduler.js +350 -0
  177. package/dist/services/scheduler.js.map +1 -0
  178. package/dist/services/secrets.d.ts +31 -0
  179. package/dist/services/secrets.d.ts.map +1 -0
  180. package/dist/services/secrets.js +206 -0
  181. package/dist/services/secrets.js.map +1 -0
  182. package/dist/services/settings-service.d.ts +132 -0
  183. package/dist/services/settings-service.d.ts.map +1 -0
  184. package/dist/services/settings-service.js +378 -0
  185. package/dist/services/settings-service.js.map +1 -0
  186. package/dist/services/solution-diff.d.ts +127 -0
  187. package/dist/services/solution-diff.d.ts.map +1 -0
  188. package/dist/services/solution-diff.js +260 -0
  189. package/dist/services/solution-diff.js.map +1 -0
  190. package/dist/services/solution-mode-detector.d.ts +35 -0
  191. package/dist/services/solution-mode-detector.d.ts.map +1 -0
  192. package/dist/services/solution-mode-detector.js +84 -0
  193. package/dist/services/solution-mode-detector.js.map +1 -0
  194. package/dist/services/tenant-resolver.d.ts +55 -0
  195. package/dist/services/tenant-resolver.d.ts.map +1 -0
  196. package/dist/services/tenant-resolver.js +126 -0
  197. package/dist/services/tenant-resolver.js.map +1 -0
  198. package/dist/services/unmanaged-customizations.d.ts +104 -0
  199. package/dist/services/unmanaged-customizations.d.ts.map +1 -0
  200. package/dist/services/unmanaged-customizations.js +521 -0
  201. package/dist/services/unmanaged-customizations.js.map +1 -0
  202. package/dist/services/url-templater.d.ts +184 -0
  203. package/dist/services/url-templater.d.ts.map +1 -0
  204. package/dist/services/url-templater.js +327 -0
  205. package/dist/services/url-templater.js.map +1 -0
  206. package/dist/services/version-checker.d.ts +108 -0
  207. package/dist/services/version-checker.d.ts.map +1 -0
  208. package/dist/services/version-checker.js +403 -0
  209. package/dist/services/version-checker.js.map +1 -0
  210. package/dist/services/waves.d.ts +90 -0
  211. package/dist/services/waves.d.ts.map +1 -0
  212. package/dist/services/waves.js +222 -0
  213. package/dist/services/waves.js.map +1 -0
  214. package/dist/services/webhook.d.ts +95 -0
  215. package/dist/services/webhook.d.ts.map +1 -0
  216. package/dist/services/webhook.js +244 -0
  217. package/dist/services/webhook.js.map +1 -0
  218. package/dist/utils/deployment-tools.d.ts +110 -0
  219. package/dist/utils/deployment-tools.d.ts.map +1 -0
  220. package/dist/utils/deployment-tools.js +121 -0
  221. package/dist/utils/deployment-tools.js.map +1 -0
  222. package/dist/utils/index.d.ts +17 -0
  223. package/dist/utils/index.d.ts.map +1 -0
  224. package/dist/utils/index.js +18 -0
  225. package/dist/utils/index.js.map +1 -0
  226. 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"}