@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,203 @@
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
+ * Operations for managing Connection References and Environment Variables
18
+ */
19
+ export class ConnectionOperations {
20
+ client;
21
+ constructor(client) {
22
+ this.client = client;
23
+ }
24
+ // ============================================================================
25
+ // Connection References
26
+ // ============================================================================
27
+ /**
28
+ * List all connection references in the environment
29
+ */
30
+ async listConnectionReferences() {
31
+ const result = await this.client.get("/connectionreferences", {
32
+ $select: "connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectionid,connectorid,statecode,statuscode",
33
+ $orderby: "connectionreferencelogicalname asc",
34
+ });
35
+ return result.value;
36
+ }
37
+ /**
38
+ * Get a connection reference by logical name
39
+ */
40
+ async getConnectionReferenceByLogicalName(logicalName) {
41
+ const result = await this.client.get("/connectionreferences", {
42
+ $filter: `connectionreferencelogicalname eq '${logicalName}'`,
43
+ $select: "connectionreferenceid,connectionreferencelogicalname,connectionreferencedisplayname,connectionid,connectorid,statecode,statuscode",
44
+ });
45
+ return result.value[0] || null;
46
+ }
47
+ /**
48
+ * Update the connection ID for a connection reference
49
+ */
50
+ async updateConnectionReference(connectionReferenceId, connectionId) {
51
+ await this.client.patch(`/connectionreferences(${connectionReferenceId})`, {
52
+ connectionid: connectionId,
53
+ });
54
+ }
55
+ /**
56
+ * Apply connection mappings to the environment
57
+ * Maps source connection references to target connections
58
+ */
59
+ async applyConnectionMappings(mappings) {
60
+ const errors = [];
61
+ let applied = 0;
62
+ for (const mapping of mappings) {
63
+ try {
64
+ // Find the connection reference by logical name
65
+ const connRef = await this.getConnectionReferenceByLogicalName(mapping.sourceLogicalName);
66
+ if (!connRef) {
67
+ errors.push(`Connection reference not found: ${mapping.sourceLogicalName}`);
68
+ continue;
69
+ }
70
+ // Update the connection ID
71
+ await this.updateConnectionReference(connRef.connectionreferenceid, mapping.targetConnectionId);
72
+ applied++;
73
+ }
74
+ catch (error) {
75
+ errors.push(`Failed to map ${mapping.sourceLogicalName}: ${error instanceof Error ? error.message : String(error)}`);
76
+ }
77
+ }
78
+ return {
79
+ success: errors.length === 0,
80
+ applied,
81
+ errors,
82
+ };
83
+ }
84
+ /**
85
+ * Validate that all required connection references have connections assigned
86
+ */
87
+ async validateConnectionReferences(logicalNames) {
88
+ const missing = [];
89
+ for (const logicalName of logicalNames) {
90
+ const connRef = await this.getConnectionReferenceByLogicalName(logicalName);
91
+ if (!connRef) {
92
+ missing.push(`${logicalName} (not found)`);
93
+ }
94
+ else if (!connRef.connectionid) {
95
+ missing.push(`${logicalName} (no connection assigned)`);
96
+ }
97
+ }
98
+ return {
99
+ valid: missing.length === 0,
100
+ missing,
101
+ };
102
+ }
103
+ // ============================================================================
104
+ // Environment Variables
105
+ // ============================================================================
106
+ /**
107
+ * List all environment variable definitions in the environment
108
+ */
109
+ async listEnvironmentVariables() {
110
+ const result = await this.client.get("/environmentvariabledefinitions", {
111
+ $select: "environmentvariabledefinitionid,schemaname,displayname,type,defaultvalue",
112
+ $orderby: "schemaname asc",
113
+ });
114
+ return result.value;
115
+ }
116
+ /**
117
+ * Get an environment variable definition by schema name
118
+ */
119
+ async getEnvironmentVariableBySchemaName(schemaName) {
120
+ const result = await this.client.get("/environmentvariabledefinitions", {
121
+ $filter: `schemaname eq '${schemaName}'`,
122
+ $select: "environmentvariabledefinitionid,schemaname,displayname,type,defaultvalue",
123
+ });
124
+ return result.value[0] || null;
125
+ }
126
+ /**
127
+ * Get the current value of an environment variable
128
+ */
129
+ async getEnvironmentVariableValue(definitionId) {
130
+ const result = await this.client.get("/environmentvariablevalues", {
131
+ $filter: `_environmentvariabledefinitionid_value eq '${definitionId}'`,
132
+ $select: "environmentvariablevalueid,value",
133
+ });
134
+ return result.value[0]?.value || null;
135
+ }
136
+ /**
137
+ * Set the value of an environment variable
138
+ * Creates a new value record if none exists, updates if it does
139
+ */
140
+ async setEnvironmentVariableValue(schemaName, value) {
141
+ // Find the definition
142
+ const definition = await this.getEnvironmentVariableBySchemaName(schemaName);
143
+ if (!definition) {
144
+ throw new Error(`Environment variable not found: ${schemaName}`);
145
+ }
146
+ const stringValue = typeof value === "string" ? value : JSON.stringify(value);
147
+ // Check if a value record exists
148
+ const existingValue = await this.client.get("/environmentvariablevalues", {
149
+ $filter: `_environmentvariabledefinitionid_value eq '${definition.environmentvariabledefinitionid}'`,
150
+ $select: "environmentvariablevalueid",
151
+ });
152
+ if (existingValue.value.length > 0) {
153
+ // Update existing value
154
+ await this.client.patch(`/environmentvariablevalues(${existingValue.value[0].environmentvariablevalueid})`, {
155
+ value: stringValue,
156
+ });
157
+ }
158
+ else {
159
+ // Create new value record
160
+ await this.client.post("/environmentvariablevalues", {
161
+ value: stringValue,
162
+ "EnvironmentVariableDefinitionId@odata.bind": `/environmentvariabledefinitions(${definition.environmentvariabledefinitionid})`,
163
+ });
164
+ }
165
+ }
166
+ /**
167
+ * Apply environment variable values to the environment
168
+ */
169
+ async applyEnvironmentVariables(variables) {
170
+ const errors = [];
171
+ let applied = 0;
172
+ for (const variable of variables) {
173
+ try {
174
+ await this.setEnvironmentVariableValue(variable.schemaName, variable.value);
175
+ applied++;
176
+ }
177
+ catch (error) {
178
+ errors.push(`Failed to set ${variable.schemaName}: ${error instanceof Error ? error.message : String(error)}`);
179
+ }
180
+ }
181
+ return {
182
+ success: errors.length === 0,
183
+ applied,
184
+ errors,
185
+ };
186
+ }
187
+ /**
188
+ * Get current values for all environment variables (for snapshot/rollback)
189
+ */
190
+ async getCurrentEnvironmentVariableValues() {
191
+ const definitions = await this.listEnvironmentVariables();
192
+ const values = new Map();
193
+ for (const def of definitions) {
194
+ const value = await this.getEnvironmentVariableValue(def.environmentvariabledefinitionid);
195
+ values.set(def.schemaname, {
196
+ definitionId: def.environmentvariabledefinitionid,
197
+ value,
198
+ });
199
+ }
200
+ return values;
201
+ }
202
+ }
203
+ //# sourceMappingURL=connection-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-refs.js","sourceRoot":"","sources":["../../src/dataverse/connection-refs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
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 "./client.js";
17
+ export * from "./solution-ops.js";
18
+ export * from "./connection-refs.js";
19
+ export * from "./agent-resolver.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dataverse/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,20 @@
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 "./client.js";
17
+ export * from "./solution-ops.js";
18
+ export * from "./connection-refs.js";
19
+ export * from "./agent-resolver.js";
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dataverse/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { DataverseClient, SolutionRecord } from "./client.js";
2
+ import { SolutionMetadata } from "../config/schema.js";
3
+ export interface ExportOptions {
4
+ managed?: boolean;
5
+ outputPath: string;
6
+ }
7
+ export interface ImportOptions {
8
+ overwriteUnmanagedCustomizations?: boolean;
9
+ publishWorkflows?: boolean;
10
+ convertToManaged?: boolean;
11
+ async?: boolean;
12
+ }
13
+ export interface ImportResult {
14
+ success: boolean;
15
+ importJobId?: string;
16
+ error?: string;
17
+ }
18
+ /**
19
+ * A record from Dataverse's msdyn_solutionhistory entity
20
+ */
21
+ export interface SolutionHistoryRecord {
22
+ msdyn_solutionhistoryid: string;
23
+ msdyn_name: string;
24
+ msdyn_solutionversion: string;
25
+ msdyn_operation: number;
26
+ msdyn_suboperation: number;
27
+ msdyn_result: boolean;
28
+ msdyn_status: number;
29
+ msdyn_starttime: string;
30
+ msdyn_endtime: string | null;
31
+ msdyn_totaltime: number | null;
32
+ msdyn_ismanaged: boolean;
33
+ msdyn_exceptionmessage: string | null;
34
+ msdyn_errorcode: number | null;
35
+ msdyn_publishername: string | null;
36
+ }
37
+ export interface SolutionHistoryOptions {
38
+ /** Filter by solution name */
39
+ solutionName?: string;
40
+ /** Filter by operation type: 'import' | 'uninstall' | 'export' | 'all' */
41
+ operation?: "import" | "uninstall" | "export" | "all";
42
+ /** Maximum number of records to return */
43
+ limit?: number;
44
+ }
45
+ /**
46
+ * High-level operations for Copilot Studio solution export/import
47
+ */
48
+ export declare class SolutionOperations {
49
+ private client;
50
+ constructor(client: DataverseClient);
51
+ private isAsyncImportDisabledError;
52
+ /**
53
+ * List all visible solutions in the environment
54
+ */
55
+ listSolutions(): Promise<SolutionRecord[]>;
56
+ /**
57
+ * Delete (uninstall) a managed solution from the environment.
58
+ * This removes the solution and all its components.
59
+ */
60
+ deleteSolution(uniqueName: string): Promise<void>;
61
+ /**
62
+ * Get solution by unique name
63
+ */
64
+ getSolution(uniqueName: string): Promise<SolutionRecord | null>;
65
+ /**
66
+ * Query solution history (imports, uninstalls, exports) from Dataverse
67
+ */
68
+ getSolutionHistory(options?: SolutionHistoryOptions): Promise<SolutionHistoryRecord[]>;
69
+ /**
70
+ * Export a solution to a zip file
71
+ */
72
+ exportSolution(solutionName: string, options: ExportOptions): Promise<SolutionMetadata>;
73
+ /**
74
+ * Import a solution from a zip file
75
+ */
76
+ importSolution(solutionPath: string, options?: ImportOptions): Promise<ImportResult>;
77
+ /**
78
+ * Import a solution asynchronously and return immediately
79
+ * Use checkImportStatus to poll for completion
80
+ */
81
+ importSolutionAsync(solutionPath: string, options?: ImportOptions): Promise<string>;
82
+ /**
83
+ * Check the status of an async import job
84
+ */
85
+ checkImportStatus(importJobId: string): Promise<{
86
+ progress: number;
87
+ completed: boolean;
88
+ success: boolean;
89
+ error?: string;
90
+ }>;
91
+ /**
92
+ * Wait for an async import to complete with polling
93
+ */
94
+ waitForImport(importJobId: string, options?: {
95
+ pollIntervalMs?: number;
96
+ timeoutMs?: number;
97
+ onProgress?: (progress: number) => void;
98
+ }): Promise<ImportResult>;
99
+ }
100
+ //# sourceMappingURL=solution-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solution-ops.d.ts","sourceRoot":"","sources":["../../src/dataverse/solution-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,288 @@
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 crypto from "node:crypto";
17
+ import { writeFile, readFile } from "node:fs/promises";
18
+ import { SolutionError, ErrorCode } from "../errors.js";
19
+ /**
20
+ * High-level operations for Copilot Studio solution export/import
21
+ */
22
+ export class SolutionOperations {
23
+ client;
24
+ constructor(client) {
25
+ this.client = client;
26
+ }
27
+ isAsyncImportDisabledError(error) {
28
+ const message = error instanceof Error ? error.message : String(error);
29
+ const normalized = message.toLowerCase();
30
+ return (normalized.includes("async operations are currently disabled") ||
31
+ normalized.includes("asynchronous operations are currently disabled"));
32
+ }
33
+ /**
34
+ * List all visible solutions in the environment
35
+ */
36
+ async listSolutions() {
37
+ return this.client.querySolutions();
38
+ }
39
+ /**
40
+ * Delete (uninstall) a managed solution from the environment.
41
+ * This removes the solution and all its components.
42
+ */
43
+ async deleteSolution(uniqueName) {
44
+ const solution = await this.getSolution(uniqueName);
45
+ if (!solution) {
46
+ throw new Error(`Solution '${uniqueName}' not found in environment`);
47
+ }
48
+ if (!solution.ismanaged) {
49
+ throw new Error(`Solution '${uniqueName}' is unmanaged. Only managed solutions can be uninstalled.`);
50
+ }
51
+ await this.client.delete(`/solutions(${solution.solutionid})`);
52
+ }
53
+ /**
54
+ * Get solution by unique name
55
+ */
56
+ async getSolution(uniqueName) {
57
+ return this.client.getSolutionByName(uniqueName);
58
+ }
59
+ /**
60
+ * Query solution history (imports, uninstalls, exports) from Dataverse
61
+ */
62
+ async getSolutionHistory(options = {}) {
63
+ const { solutionName, operation = "all", limit = 50 } = options;
64
+ const filters = [];
65
+ if (solutionName) {
66
+ filters.push(`msdyn_name eq '${solutionName}'`);
67
+ }
68
+ const opMap = { import: 0, uninstall: 1, export: 2 };
69
+ if (operation !== "all") {
70
+ filters.push(`msdyn_operation eq ${opMap[operation]}`);
71
+ }
72
+ const params = {
73
+ $select: [
74
+ "msdyn_solutionhistoryid",
75
+ "msdyn_name",
76
+ "msdyn_solutionversion",
77
+ "msdyn_operation",
78
+ "msdyn_suboperation",
79
+ "msdyn_result",
80
+ "msdyn_status",
81
+ "msdyn_starttime",
82
+ "msdyn_endtime",
83
+ "msdyn_totaltime",
84
+ "msdyn_ismanaged",
85
+ "msdyn_exceptionmessage",
86
+ "msdyn_errorcode",
87
+ "msdyn_publishername",
88
+ ].join(","),
89
+ $orderby: "msdyn_starttime desc",
90
+ $top: String(limit),
91
+ };
92
+ if (filters.length > 0) {
93
+ params.$filter = filters.join(" and ");
94
+ }
95
+ const result = await this.client.get("/msdyn_solutionhistories", params);
96
+ return result.value;
97
+ }
98
+ /**
99
+ * Export a solution to a zip file
100
+ */
101
+ async exportSolution(solutionName, options) {
102
+ // First, verify the solution exists
103
+ const solution = await this.getSolution(solutionName);
104
+ if (!solution) {
105
+ throw new SolutionError(ErrorCode.SOLUTION_NOT_FOUND, `Solution '${solutionName}' not found in environment`, {
106
+ solutionName,
107
+ });
108
+ }
109
+ const request = {
110
+ SolutionName: solutionName,
111
+ Managed: options.managed ?? true, // Default to managed for deployment
112
+ };
113
+ const response = await this.client.executeAction("ExportSolution", request);
114
+ // Decode base64 and write to file
115
+ const solutionBuffer = Buffer.from(response.ExportSolutionFile, "base64");
116
+ await writeFile(options.outputPath, solutionBuffer);
117
+ return {
118
+ uniqueName: solution.uniquename,
119
+ friendlyName: solution.friendlyname,
120
+ version: solution.version,
121
+ isManaged: options.managed ?? true,
122
+ publisherId: solution.publisherid?.publisherid,
123
+ };
124
+ }
125
+ /**
126
+ * Import a solution from a zip file
127
+ */
128
+ async importSolution(solutionPath, options = {}) {
129
+ // Read and encode the solution file
130
+ const solutionBuffer = await readFile(solutionPath);
131
+ const base64Solution = solutionBuffer.toString("base64");
132
+ const importJobId = crypto.randomUUID();
133
+ const request = {
134
+ CustomizationFile: base64Solution,
135
+ OverwriteUnmanagedCustomizations: options.overwriteUnmanagedCustomizations ?? true,
136
+ PublishWorkflows: options.publishWorkflows ?? true,
137
+ ConvertToManaged: options.convertToManaged ?? false,
138
+ ImportJobId: importJobId,
139
+ };
140
+ try {
141
+ await this.client.executeAction("ImportSolution", request);
142
+ return {
143
+ success: true,
144
+ importJobId,
145
+ };
146
+ }
147
+ catch (error) {
148
+ return {
149
+ success: false,
150
+ importJobId,
151
+ error: error instanceof Error ? error.message : String(error),
152
+ };
153
+ }
154
+ }
155
+ /**
156
+ * Import a solution asynchronously and return immediately
157
+ * Use checkImportStatus to poll for completion
158
+ */
159
+ async importSolutionAsync(solutionPath, options = {}) {
160
+ const solutionBuffer = await readFile(solutionPath);
161
+ const base64Solution = solutionBuffer.toString("base64");
162
+ const importJobId = crypto.randomUUID();
163
+ const request = {
164
+ CustomizationFile: base64Solution,
165
+ OverwriteUnmanagedCustomizations: options.overwriteUnmanagedCustomizations ?? true,
166
+ PublishWorkflows: options.publishWorkflows ?? true,
167
+ ImportJobId: importJobId,
168
+ };
169
+ try {
170
+ // Preferred path for normal environments.
171
+ await this.client.executeAction("ImportSolutionAsync", request);
172
+ }
173
+ catch (error) {
174
+ // Some environments (for example when async/background operations are disabled)
175
+ // reject ImportSolutionAsync. Fall back to synchronous import so deployments
176
+ // can still proceed.
177
+ if (!this.isAsyncImportDisabledError(error)) {
178
+ throw error;
179
+ }
180
+ await this.client.executeAction("ImportSolution", {
181
+ ...request,
182
+ ConvertToManaged: options.convertToManaged ?? false,
183
+ });
184
+ }
185
+ return importJobId;
186
+ }
187
+ /**
188
+ * Check the status of an async import job
189
+ */
190
+ async checkImportStatus(importJobId) {
191
+ try {
192
+ const result = await this.client.get("/importjobs", {
193
+ $filter: `importjobid eq '${importJobId}'`,
194
+ $select: "importjobid,solutionname,progress,completedon,startedon,data",
195
+ });
196
+ if (result.value.length === 0) {
197
+ return {
198
+ progress: 0,
199
+ completed: false,
200
+ success: false,
201
+ error: "Import job not found",
202
+ };
203
+ }
204
+ const job = result.value[0];
205
+ const completed = job.completedon !== null;
206
+ // Parse the data XML to check for errors
207
+ let success = true;
208
+ let error;
209
+ if (completed && job.data) {
210
+ // The data field contains XML with import results
211
+ // Check for failure indicators
212
+ if (job.data.includes('succeeded="failure"') ||
213
+ job.data.includes('<result result="failure"') ||
214
+ job.data.includes("<errortext>")) {
215
+ success = false;
216
+ // Try multiple patterns to extract error message
217
+ // Pattern 1: status attribute in importexportxml element
218
+ const statusMatch = job.data.match(/status="([^"]+)"/);
219
+ if (statusMatch && statusMatch[1].includes("FAILURE")) {
220
+ // Extract the actual error message after "FAILURE:"
221
+ const failureMsg = statusMatch[1].replace(/^[^:]+:\s*FAILURE:\s*/, "");
222
+ error = failureMsg || statusMatch[1];
223
+ }
224
+ // Pattern 2: errortext element
225
+ if (!error) {
226
+ const errorMatch = job.data.match(/<errortext>([^<]+)<\/errortext>/);
227
+ if (errorMatch) {
228
+ error = errorMatch[1];
229
+ }
230
+ }
231
+ // Pattern 3: Fallback to component name
232
+ if (!error) {
233
+ const componentMatch = job.data.match(/<name>([^<]+)<\/name>/);
234
+ error = componentMatch
235
+ ? `Import failed for component: ${componentMatch[1]}`
236
+ : "Import failed - check solution compatibility";
237
+ }
238
+ }
239
+ }
240
+ else if (completed && !job.data) {
241
+ // Completed but no data - unusual, treat as potential failure
242
+ error = "Import completed but no result data returned";
243
+ }
244
+ return {
245
+ progress: job.progress,
246
+ completed,
247
+ success: completed ? success : false,
248
+ error,
249
+ };
250
+ }
251
+ catch (error) {
252
+ return {
253
+ progress: 0,
254
+ completed: false,
255
+ success: false,
256
+ error: error instanceof Error ? error.message : String(error),
257
+ };
258
+ }
259
+ }
260
+ /**
261
+ * Wait for an async import to complete with polling
262
+ */
263
+ async waitForImport(importJobId, options = {}) {
264
+ const { pollIntervalMs = 5000, timeoutMs = 600000, // 10 minutes default
265
+ onProgress, } = options;
266
+ const startTime = Date.now();
267
+ while (Date.now() - startTime < timeoutMs) {
268
+ const status = await this.checkImportStatus(importJobId);
269
+ if (onProgress) {
270
+ onProgress(status.progress);
271
+ }
272
+ if (status.completed) {
273
+ return {
274
+ success: status.success,
275
+ importJobId,
276
+ error: status.error,
277
+ };
278
+ }
279
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
280
+ }
281
+ return {
282
+ success: false,
283
+ importJobId,
284
+ error: "Import timed out",
285
+ };
286
+ }
287
+ }
288
+ //# sourceMappingURL=solution-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solution-ops.js","sourceRoot":"","sources":["../../src/dataverse/solution-ops.ts"],"names":[],"mappings":"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"}