@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,104 @@
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 } from "../auth/token-manager.js";
17
+ export interface DataverseClientConfig {
18
+ environmentUrl: string;
19
+ tokenManager: TokenManager;
20
+ clientId?: string;
21
+ }
22
+ export interface DataverseError {
23
+ code: string;
24
+ message: string;
25
+ innererror?: {
26
+ message: string;
27
+ type: string;
28
+ stacktrace: string;
29
+ };
30
+ }
31
+ export interface ErrorContext {
32
+ operation?: string;
33
+ environmentUrl?: string;
34
+ clientId?: string;
35
+ }
36
+ /**
37
+ * Format Dataverse errors with helpful guidance for common authentication issues.
38
+ *
39
+ * Throws a typed error (DataverseApiError or GdapError) instead of
40
+ * returning a plain string, so callers can switch on error.code.
41
+ */
42
+ export declare function throwDataverseError(error: DataverseError, statusCode: number, context?: ErrorContext): never;
43
+ /**
44
+ * Format Dataverse errors with helpful guidance for common authentication issues.
45
+ *
46
+ * @deprecated Use throwDataverseError() instead. This is kept for backwards
47
+ * compatibility but will be removed in a future release.
48
+ */
49
+ export declare function formatDataverseError(error: DataverseError, statusCode: number, context?: ErrorContext): string;
50
+ /**
51
+ * Low-level client for Dataverse Web API
52
+ */
53
+ export declare class DataverseClient {
54
+ private config;
55
+ private readonly apiUrl;
56
+ constructor(config: DataverseClientConfig);
57
+ /**
58
+ * Make a GET request to the Dataverse API
59
+ */
60
+ get<T>(path: string, params?: Record<string, string>): Promise<T>;
61
+ /**
62
+ * Make a POST request to the Dataverse API
63
+ */
64
+ post<T>(path: string, body: unknown): Promise<T>;
65
+ /**
66
+ * Make a PATCH request to the Dataverse API
67
+ */
68
+ patch<T>(path: string, body: unknown): Promise<T>;
69
+ /**
70
+ * Make a DELETE request to the Dataverse API
71
+ */
72
+ delete(path: string): Promise<void>;
73
+ /**
74
+ * Execute a Dataverse action (unbound)
75
+ */
76
+ executeAction<TRequest, TResponse>(actionName: string, parameters: TRequest): Promise<TResponse>;
77
+ /**
78
+ * Get the raw response for actions that return binary data (like solution export)
79
+ */
80
+ executeActionRaw(actionName: string, parameters: unknown): Promise<Response>;
81
+ /**
82
+ * Query solutions in the environment
83
+ */
84
+ querySolutions(): Promise<SolutionRecord[]>;
85
+ /**
86
+ * Get a specific solution by unique name
87
+ */
88
+ getSolutionByName(uniqueName: string): Promise<SolutionRecord | null>;
89
+ private fetch;
90
+ private handleError;
91
+ }
92
+ export interface SolutionRecord {
93
+ solutionid: string;
94
+ uniquename: string;
95
+ friendlyname: string;
96
+ version: string;
97
+ ismanaged: boolean;
98
+ publisherid?: {
99
+ publisherid: string;
100
+ uniquename: string;
101
+ friendlyname: string;
102
+ };
103
+ }
104
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/dataverse/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CA8GP;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,MAAM,CAWR;AAED;;GAEG;AACH,qBAAa,eAAe;IAGd,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEZ,MAAM,EAAE,qBAAqB;IAKjD;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYvE;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUtD;;OAEG;IACG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUvD;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,SAAS,EACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,QAAQ,GACnB,OAAO,CAAC,SAAS,CAAC;IAIrB;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBlF;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IASjD;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;YAQ7D,KAAK;YAsBL,WAAW;CA4B1B;AAED,MAAM,WAAW,cAAc;IAC7B,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,WAAW,CAAC,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH"}
@@ -0,0 +1,272 @@
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 { DataverseApiError, ErrorCode, GdapError } from "../errors.js";
17
+ /**
18
+ * Format Dataverse errors with helpful guidance for common authentication issues.
19
+ *
20
+ * Throws a typed error (DataverseApiError or GdapError) instead of
21
+ * returning a plain string, so callers can switch on error.code.
22
+ */
23
+ export function throwDataverseError(error, statusCode, context) {
24
+ const errorMessage = error.message;
25
+ const innerMessage = error.innererror?.message || "";
26
+ const fullMessage = `${errorMessage}${innerMessage ? ` - ${innerMessage}` : ""}`;
27
+ const errorContext = {
28
+ environmentUrl: context?.environmentUrl,
29
+ clientId: context?.clientId,
30
+ };
31
+ // Check for common S2S authentication patterns
32
+ const isNotMemberError = /user is not a member of the organization/i.test(fullMessage) ||
33
+ /not a member of.*environment/i.test(fullMessage);
34
+ if (isNotMemberError) {
35
+ let helpfulMessage = `Authentication failed: ${fullMessage}\n`;
36
+ helpfulMessage += `\nThe application is not registered as a user in the Power Platform environment.\n`;
37
+ helpfulMessage += `\nTo fix:\n`;
38
+ helpfulMessage += `1. Go to https://admin.powerplatform.microsoft.com\n`;
39
+ helpfulMessage += `2. Select the environment → Settings → Users + permissions → Application users\n`;
40
+ helpfulMessage += `3. Click "+ New app user" and add your application\n`;
41
+ if (context?.clientId) {
42
+ helpfulMessage += ` Client ID: ${context.clientId}\n`;
43
+ }
44
+ helpfulMessage += `4. Assign the "System Administrator" security role\n`;
45
+ helpfulMessage += `5. Save and retry the command\n`;
46
+ if (context?.environmentUrl) {
47
+ helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
48
+ }
49
+ throw new GdapError(ErrorCode.GDAP_APP_USER_NOT_REGISTERED, helpfulMessage, errorContext);
50
+ }
51
+ const isPrivilegeError = /prvRead/i.test(fullMessage) ||
52
+ /prvWrite/i.test(fullMessage) ||
53
+ /prvCreate/i.test(fullMessage) ||
54
+ /prvDelete/i.test(fullMessage) ||
55
+ /insufficient.*privilege/i.test(fullMessage) ||
56
+ /missing privilege/i.test(fullMessage) ||
57
+ /access.*denied/i.test(fullMessage);
58
+ const isForbiddenError = statusCode === 403;
59
+ const isUnauthorizedError = statusCode === 401;
60
+ if (isPrivilegeError || isForbiddenError) {
61
+ let helpfulMessage = `Authentication failed: ${fullMessage}\n`;
62
+ helpfulMessage += `\nThe application lacks required permissions in the Power Platform environment.\n`;
63
+ helpfulMessage += `\nTo fix:\n`;
64
+ helpfulMessage += `1. Go to https://admin.powerplatform.microsoft.com\n`;
65
+ helpfulMessage += `2. Select the environment → Settings → Users + permissions → Application users\n`;
66
+ helpfulMessage += `3. Find your application user`;
67
+ if (context?.clientId) {
68
+ helpfulMessage += ` (Client ID: ${context.clientId})`;
69
+ }
70
+ helpfulMessage += `\n`;
71
+ helpfulMessage += `4. Click "Manage security roles" or "Edit"\n`;
72
+ helpfulMessage += `5. Ensure "System Administrator" role is assigned\n`;
73
+ helpfulMessage += ` (Required privileges: prvReadSolution, prvWriteSolution, prvCreateSolution, etc.)\n`;
74
+ helpfulMessage += `6. Save and retry the command\n`;
75
+ if (context?.environmentUrl) {
76
+ helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
77
+ }
78
+ throw new DataverseApiError(isPrivilegeError ? ErrorCode.PERMISSION_PRIVILEGE_MISSING : ErrorCode.DATAVERSE_FORBIDDEN, helpfulMessage, statusCode, errorContext);
79
+ }
80
+ if (isUnauthorizedError) {
81
+ let helpfulMessage = `Authentication failed: ${fullMessage}\n`;
82
+ helpfulMessage += `\nAuthentication token could not be acquired or is invalid.\n`;
83
+ helpfulMessage += `\nTo fix:\n`;
84
+ helpfulMessage += `1. Verify the app registration in Azure Portal:\n`;
85
+ helpfulMessage += ` - Go to https://portal.azure.com → Azure Active Directory → App registrations\n`;
86
+ if (context?.clientId) {
87
+ helpfulMessage += ` - Find your app (Client ID: ${context.clientId})\n`;
88
+ }
89
+ helpfulMessage += `2. Check API permissions:\n`;
90
+ helpfulMessage += ` - Ensure "Dynamics CRM" or "Common Data Service" permission is added\n`;
91
+ helpfulMessage += ` - Permission type: "user_impersonation" (delegated) or ".default" (application)\n`;
92
+ helpfulMessage += ` - Verify "Grant admin consent" has been clicked\n`;
93
+ helpfulMessage += `3. Verify client secret:\n`;
94
+ helpfulMessage += ` - Check if the secret has expired\n`;
95
+ helpfulMessage += ` - Generate a new secret if needed and update your configuration\n`;
96
+ helpfulMessage += `4. Retry the command\n`;
97
+ if (context?.environmentUrl) {
98
+ helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
99
+ }
100
+ throw new DataverseApiError(ErrorCode.DATAVERSE_UNAUTHORIZED, helpfulMessage, statusCode, errorContext);
101
+ }
102
+ // Generic Dataverse API error
103
+ let helpfulMessage = `Dataverse API error: ${fullMessage}`;
104
+ if (context?.environmentUrl) {
105
+ helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
106
+ }
107
+ throw new DataverseApiError(ErrorCode.DATAVERSE_API_ERROR, helpfulMessage, statusCode, errorContext);
108
+ }
109
+ /**
110
+ * Format Dataverse errors with helpful guidance for common authentication issues.
111
+ *
112
+ * @deprecated Use throwDataverseError() instead. This is kept for backwards
113
+ * compatibility but will be removed in a future release.
114
+ */
115
+ export function formatDataverseError(error, statusCode, context) {
116
+ try {
117
+ throwDataverseError(error, statusCode, context);
118
+ }
119
+ catch (e) {
120
+ if (e instanceof Error) {
121
+ return e.message;
122
+ }
123
+ return String(e);
124
+ }
125
+ // Unreachable, but TypeScript needs it
126
+ return "";
127
+ }
128
+ /**
129
+ * Low-level client for Dataverse Web API
130
+ */
131
+ export class DataverseClient {
132
+ config;
133
+ apiUrl;
134
+ constructor(config) {
135
+ this.config = config;
136
+ const baseUrl = config.environmentUrl.replace(/\/$/, "");
137
+ this.apiUrl = `${baseUrl}/api/data/v9.2`;
138
+ }
139
+ /**
140
+ * Make a GET request to the Dataverse API
141
+ */
142
+ async get(path, params) {
143
+ const url = new URL(`${this.apiUrl}${path}`);
144
+ if (params) {
145
+ Object.entries(params).forEach(([key, value]) => {
146
+ url.searchParams.set(key, value);
147
+ });
148
+ }
149
+ const response = await this.fetch(url.toString(), { method: "GET" });
150
+ return response.json();
151
+ }
152
+ /**
153
+ * Make a POST request to the Dataverse API
154
+ */
155
+ async post(path, body) {
156
+ const response = await this.fetch(`${this.apiUrl}${path}`, {
157
+ method: "POST",
158
+ body: JSON.stringify(body),
159
+ });
160
+ const text = await response.text();
161
+ return (text ? JSON.parse(text) : null);
162
+ }
163
+ /**
164
+ * Make a PATCH request to the Dataverse API
165
+ */
166
+ async patch(path, body) {
167
+ const response = await this.fetch(`${this.apiUrl}${path}`, {
168
+ method: "PATCH",
169
+ body: JSON.stringify(body),
170
+ });
171
+ const text = await response.text();
172
+ return (text ? JSON.parse(text) : null);
173
+ }
174
+ /**
175
+ * Make a DELETE request to the Dataverse API
176
+ */
177
+ async delete(path) {
178
+ await this.fetch(`${this.apiUrl}${path}`, {
179
+ method: "DELETE",
180
+ });
181
+ }
182
+ /**
183
+ * Execute a Dataverse action (unbound)
184
+ */
185
+ async executeAction(actionName, parameters) {
186
+ return this.post(`/${actionName}`, parameters);
187
+ }
188
+ /**
189
+ * Get the raw response for actions that return binary data (like solution export)
190
+ */
191
+ async executeActionRaw(actionName, parameters) {
192
+ const token = await this.config.tokenManager.getDataverseToken(this.config.environmentUrl);
193
+ const response = await fetch(`${this.apiUrl}/${actionName}`, {
194
+ method: "POST",
195
+ headers: {
196
+ Authorization: `Bearer ${token}`,
197
+ "Content-Type": "application/json",
198
+ Accept: "application/json",
199
+ "OData-MaxVersion": "4.0",
200
+ "OData-Version": "4.0",
201
+ },
202
+ body: JSON.stringify(parameters),
203
+ });
204
+ if (!response.ok) {
205
+ await this.handleError(response);
206
+ }
207
+ return response;
208
+ }
209
+ /**
210
+ * Query solutions in the environment
211
+ */
212
+ async querySolutions() {
213
+ const result = await this.get("/solutions", {
214
+ $select: "solutionid,uniquename,friendlyname,version,ismanaged",
215
+ $filter: "isvisible eq true",
216
+ $orderby: "friendlyname asc",
217
+ });
218
+ return result.value;
219
+ }
220
+ /**
221
+ * Get a specific solution by unique name
222
+ */
223
+ async getSolutionByName(uniqueName) {
224
+ const result = await this.get("/solutions", {
225
+ $select: "solutionid,uniquename,friendlyname,version,ismanaged,publisherid",
226
+ $filter: `uniquename eq '${uniqueName}'`,
227
+ });
228
+ return result.value[0] || null;
229
+ }
230
+ async fetch(url, options) {
231
+ const token = await this.config.tokenManager.getDataverseToken(this.config.environmentUrl);
232
+ const response = await fetch(url, {
233
+ ...options,
234
+ headers: {
235
+ Authorization: `Bearer ${token}`,
236
+ "Content-Type": "application/json",
237
+ Accept: "application/json",
238
+ "OData-MaxVersion": "4.0",
239
+ "OData-Version": "4.0",
240
+ ...options.headers,
241
+ },
242
+ });
243
+ if (!response.ok) {
244
+ await this.handleError(response);
245
+ }
246
+ return response;
247
+ }
248
+ async handleError(response) {
249
+ try {
250
+ const errorBody = (await response.json());
251
+ if (errorBody.error) {
252
+ // Throws a typed error (DataverseApiError, GdapError, etc.)
253
+ throwDataverseError(errorBody.error, response.status, {
254
+ environmentUrl: this.config.environmentUrl,
255
+ clientId: this.config.clientId,
256
+ });
257
+ }
258
+ }
259
+ catch (e) {
260
+ // Re-throw typed errors from throwDataverseError
261
+ if (e instanceof DataverseApiError || e instanceof GdapError) {
262
+ throw e;
263
+ }
264
+ // Ignore JSON parse errors - fall back to basic error
265
+ }
266
+ throw new DataverseApiError(ErrorCode.DATAVERSE_API_ERROR, `Dataverse API error: ${response.status} ${response.statusText}`, response.status, {
267
+ environmentUrl: this.config.environmentUrl,
268
+ clientId: this.config.clientId,
269
+ });
270
+ }
271
+ }
272
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/dataverse/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
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 { DataverseClient } from "./client.js";
17
+ import { ConnectionMapping, EnvironmentVariable } from "../config/schema.js";
18
+ /**
19
+ * Connection Reference record from Dataverse
20
+ */
21
+ export interface ConnectionReferenceRecord {
22
+ connectionreferenceid: string;
23
+ connectionreferencelogicalname: string;
24
+ connectionreferencedisplayname: string;
25
+ connectionid: string | null;
26
+ connectorid: string;
27
+ statecode: number;
28
+ statuscode: number;
29
+ }
30
+ /**
31
+ * Environment Variable Definition record
32
+ */
33
+ export interface EnvironmentVariableDefinitionRecord {
34
+ environmentvariabledefinitionid: string;
35
+ schemaname: string;
36
+ displayname: string;
37
+ type: number;
38
+ defaultvalue: string | null;
39
+ }
40
+ /**
41
+ * Environment Variable Value record
42
+ */
43
+ export interface EnvironmentVariableValueRecord {
44
+ environmentvariablevalueid: string;
45
+ value: string;
46
+ environmentvariabledefinitionid: string;
47
+ }
48
+ /**
49
+ * Operations for managing Connection References and Environment Variables
50
+ */
51
+ export declare class ConnectionOperations {
52
+ private client;
53
+ constructor(client: DataverseClient);
54
+ /**
55
+ * List all connection references in the environment
56
+ */
57
+ listConnectionReferences(): Promise<ConnectionReferenceRecord[]>;
58
+ /**
59
+ * Get a connection reference by logical name
60
+ */
61
+ getConnectionReferenceByLogicalName(logicalName: string): Promise<ConnectionReferenceRecord | null>;
62
+ /**
63
+ * Update the connection ID for a connection reference
64
+ */
65
+ updateConnectionReference(connectionReferenceId: string, connectionId: string): Promise<void>;
66
+ /**
67
+ * Apply connection mappings to the environment
68
+ * Maps source connection references to target connections
69
+ */
70
+ applyConnectionMappings(mappings: ConnectionMapping[]): Promise<{
71
+ success: boolean;
72
+ applied: number;
73
+ errors: string[];
74
+ }>;
75
+ /**
76
+ * Validate that all required connection references have connections assigned
77
+ */
78
+ validateConnectionReferences(logicalNames: string[]): Promise<{
79
+ valid: boolean;
80
+ missing: string[];
81
+ }>;
82
+ /**
83
+ * List all environment variable definitions in the environment
84
+ */
85
+ listEnvironmentVariables(): Promise<EnvironmentVariableDefinitionRecord[]>;
86
+ /**
87
+ * Get an environment variable definition by schema name
88
+ */
89
+ getEnvironmentVariableBySchemaName(schemaName: string): Promise<EnvironmentVariableDefinitionRecord | null>;
90
+ /**
91
+ * Get the current value of an environment variable
92
+ */
93
+ getEnvironmentVariableValue(definitionId: string): Promise<string | null>;
94
+ /**
95
+ * Set the value of an environment variable
96
+ * Creates a new value record if none exists, updates if it does
97
+ */
98
+ setEnvironmentVariableValue(schemaName: string, value: string | number | boolean): Promise<void>;
99
+ /**
100
+ * Apply environment variable values to the environment
101
+ */
102
+ applyEnvironmentVariables(variables: EnvironmentVariable[]): Promise<{
103
+ success: boolean;
104
+ applied: number;
105
+ errors: string[];
106
+ }>;
107
+ /**
108
+ * Get current values for all environment variables (for snapshot/rollback)
109
+ */
110
+ getCurrentEnvironmentVariableValues(): Promise<Map<string, {
111
+ definitionId: string;
112
+ value: string | null;
113
+ }>>;
114
+ }
115
+ //# sourceMappingURL=connection-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-refs.d.ts","sourceRoot":"","sources":["../../src/dataverse/connection-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAClD,+BAA+B,EAAE,MAAM,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,0BAA0B,EAAE,MAAM,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B,EAAE,MAAM,CAAC;CACzC;AAED;;GAEG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAM3C;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAYtE;;OAEG;IACG,mCAAmC,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAY5C;;OAEG;IACG,yBAAyB,CAC7B,qBAAqB,EAAE,MAAM,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAMhB;;;OAGG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAqCnE;;OAEG;IACG,4BAA4B,CAChC,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAuBjD;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,mCAAmC,EAAE,CAAC;IAWhF;;OAEG;IACG,kCAAkC,CACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mCAAmC,GAAG,IAAI,CAAC;IAWtD;;OAEG;IACG,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAW/E;;;OAGG;IACG,2BAA2B,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAC/B,OAAO,CAAC,IAAI,CAAC;IAmChB;;OAEG;IACG,yBAAyB,CAC7B,SAAS,EAAE,mBAAmB,EAAE,GAC/B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAwBnE;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAClD,GAAG,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAC5D;CAcF"}