@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,161 @@
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 { getNotificationService } from "./notification-service.js";
17
+ import { getSettingsService } from "./settings-service.js";
18
+ import { coreLogger } from "./logger.js";
19
+ const logger = coreLogger.child({ service: "deployment-notifications" });
20
+ /**
21
+ * Helper service for sending deployment lifecycle notifications
22
+ * Checks settings before sending to ensure only enabled notifications are sent
23
+ */
24
+ export class DeploymentNotifications {
25
+ baseUrl;
26
+ constructor(baseUrl) {
27
+ this.baseUrl = baseUrl || process.env.PUBLIC_URL || process.env.NEXTAUTH_URL;
28
+ }
29
+ /**
30
+ * Send notification when deployment batch starts
31
+ */
32
+ async notifyDeploymentStart(deploymentId, solutionName, tenantCount) {
33
+ try {
34
+ const settings = await getSettingsService().getDecryptedAppSettings();
35
+ if (!settings.notifyOnDeploymentStart) {
36
+ return;
37
+ }
38
+ const notificationService = getNotificationService();
39
+ const deploymentUrl = this.baseUrl
40
+ ? `${this.baseUrl}/deployments/${deploymentId}`
41
+ : undefined;
42
+ const payload = {
43
+ title: `Deployment Started: ${solutionName}`,
44
+ message: `Deploying agent "${solutionName}" to ${tenantCount} tenant${tenantCount === 1 ? "" : "s"}`,
45
+ color: "info",
46
+ url: deploymentUrl,
47
+ };
48
+ // Fire and forget - don't block deployment
49
+ notificationService.sendNotification(payload).catch((error) => {
50
+ logger.warn("Failed to send deployment start notification", { error, deploymentId });
51
+ });
52
+ }
53
+ catch (error) {
54
+ // Never fail deployment due to notification error
55
+ logger.warn("Error in notifyDeploymentStart", { error, deploymentId });
56
+ }
57
+ }
58
+ /**
59
+ * Send notification when deployment batch completes successfully
60
+ */
61
+ async notifyDeploymentComplete(deploymentId, solutionName, successCount, totalCount, durationMs) {
62
+ try {
63
+ const settings = await getSettingsService().getDecryptedAppSettings();
64
+ if (!settings.notifyOnDeploymentComplete) {
65
+ return;
66
+ }
67
+ const notificationService = getNotificationService();
68
+ const deploymentUrl = this.baseUrl
69
+ ? `${this.baseUrl}/deployments/${deploymentId}`
70
+ : undefined;
71
+ const durationMin = Math.round(durationMs / 60000);
72
+ const payload = {
73
+ title: `Deployment Complete: ${solutionName}`,
74
+ message: `Successfully deployed "${solutionName}" to ${successCount}/${totalCount} tenant${totalCount === 1 ? "" : "s"} in ${durationMin} minute${durationMin === 1 ? "" : "s"}`,
75
+ color: "success",
76
+ url: deploymentUrl,
77
+ };
78
+ // Fire and forget
79
+ notificationService.sendNotification(payload).catch((error) => {
80
+ logger.warn("Failed to send deployment complete notification", { error, deploymentId });
81
+ });
82
+ }
83
+ catch (error) {
84
+ logger.warn("Error in notifyDeploymentComplete", { error, deploymentId });
85
+ }
86
+ }
87
+ /**
88
+ * Send notification when deployment batch fails
89
+ */
90
+ async notifyDeploymentFailure(deploymentId, solutionName, failedCount, totalCount, errorSummary) {
91
+ try {
92
+ const settings = await getSettingsService().getDecryptedAppSettings();
93
+ if (!settings.notifyOnDeploymentFailure) {
94
+ return;
95
+ }
96
+ const notificationService = getNotificationService();
97
+ const deploymentUrl = this.baseUrl
98
+ ? `${this.baseUrl}/deployments/${deploymentId}`
99
+ : undefined;
100
+ let message = `Deployment failed for "${solutionName}" - ${failedCount}/${totalCount} tenant${totalCount === 1 ? "" : "s"} failed`;
101
+ if (errorSummary) {
102
+ message += `\n\nError: ${errorSummary}`;
103
+ }
104
+ const payload = {
105
+ title: `Deployment Failed: ${solutionName}`,
106
+ message,
107
+ color: "error",
108
+ url: deploymentUrl,
109
+ };
110
+ // Fire and forget
111
+ notificationService.sendNotification(payload).catch((error) => {
112
+ logger.warn("Failed to send deployment failure notification", { error, deploymentId });
113
+ });
114
+ }
115
+ catch (error) {
116
+ logger.warn("Error in notifyDeploymentFailure", { error, deploymentId });
117
+ }
118
+ }
119
+ /**
120
+ * Send notification when deployment requires approval
121
+ */
122
+ async notifyApprovalNeeded(deploymentId, solutionName, tenantCount, reason) {
123
+ try {
124
+ const settings = await getSettingsService().getDecryptedAppSettings();
125
+ if (!settings.notifyOnApprovalNeeded) {
126
+ return;
127
+ }
128
+ const notificationService = getNotificationService();
129
+ const deploymentUrl = this.baseUrl
130
+ ? `${this.baseUrl}/deployments/${deploymentId}`
131
+ : undefined;
132
+ let message = `Deployment of "${solutionName}" to ${tenantCount} tenant${tenantCount === 1 ? "" : "s"} requires approval`;
133
+ if (reason) {
134
+ message += `\n\nReason: ${reason}`;
135
+ }
136
+ const payload = {
137
+ title: `Approval Required: ${solutionName}`,
138
+ message,
139
+ color: "warning",
140
+ url: deploymentUrl,
141
+ };
142
+ // Fire and forget
143
+ notificationService.sendNotification(payload).catch((error) => {
144
+ logger.warn("Failed to send approval needed notification", { error, deploymentId });
145
+ });
146
+ }
147
+ catch (error) {
148
+ logger.warn("Error in notifyApprovalNeeded", { error, deploymentId });
149
+ }
150
+ }
151
+ }
152
+ // Singleton instance
153
+ let deploymentNotificationsInstance = null;
154
+ export function getDeploymentNotifications(baseUrl) {
155
+ if (!deploymentNotificationsInstance ||
156
+ (baseUrl && deploymentNotificationsInstance["baseUrl"] !== baseUrl)) {
157
+ deploymentNotificationsInstance = new DeploymentNotifications(baseUrl);
158
+ }
159
+ return deploymentNotificationsInstance;
160
+ }
161
+ //# sourceMappingURL=deployment-notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-notifications.js","sourceRoot":"","sources":["../../src/services/deployment-notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,sBAAsB,EAAuB,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAC1B,OAAO,CAAU;IAEzB,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CACzB,YAAoB,EACpB,YAAoB,EACpB,WAAmB;QAEnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC,uBAAuB,EAAE,CAAC;YAEtE,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;gBAChC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,YAAY,EAAE;gBAC/C,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,uBAAuB,YAAY,EAAE;gBAC5C,OAAO,EAAE,oBAAoB,YAAY,QAAQ,WAAW,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;gBACpG,KAAK,EAAE,MAAM;gBACb,GAAG,EAAE,aAAa;aACnB,CAAC;YAEF,2CAA2C;YAC3C,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5D,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YACvF,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kDAAkD;YAClD,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB,CAC5B,YAAoB,EACpB,YAAoB,EACpB,YAAoB,EACpB,UAAkB,EAClB,UAAkB;QAElB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC,uBAAuB,EAAE,CAAC;YAEtE,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;gBACzC,OAAO;YACT,CAAC;YAED,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;gBAChC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,YAAY,EAAE;gBAC/C,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;YAEnD,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,wBAAwB,YAAY,EAAE;gBAC7C,OAAO,EAAE,0BAA0B,YAAY,QAAQ,YAAY,IAAI,UAAU,UAAU,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,WAAW,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;gBAChL,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,aAAa;aACnB,CAAC;YAEF,kBAAkB;YAClB,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5D,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,YAAoB,EACpB,YAAoB,EACpB,WAAmB,EACnB,UAAkB,EAClB,YAAqB;QAErB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC,uBAAuB,EAAE,CAAC;YAEtE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;gBAChC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,YAAY,EAAE;gBAC/C,CAAC,CAAC,SAAS,CAAC;YAEd,IAAI,OAAO,GAAG,0BAA0B,YAAY,OAAO,WAAW,IAAI,UAAU,UAAU,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;YACnI,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,IAAI,cAAc,YAAY,EAAE,CAAC;YAC1C,CAAC;YAED,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,sBAAsB,YAAY,EAAE;gBAC3C,OAAO;gBACP,KAAK,EAAE,OAAO;gBACd,GAAG,EAAE,aAAa;aACnB,CAAC;YAEF,kBAAkB;YAClB,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5D,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,YAAoB,EACpB,YAAoB,EACpB,WAAmB,EACnB,MAAe;QAEf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC,uBAAuB,EAAE,CAAC;YAEtE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;gBAChC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,YAAY,EAAE;gBAC/C,CAAC,CAAC,SAAS,CAAC;YAEd,IAAI,OAAO,GAAG,kBAAkB,YAAY,QAAQ,WAAW,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC;YAC1H,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,IAAI,eAAe,MAAM,EAAE,CAAC;YACrC,CAAC;YAED,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,sBAAsB,YAAY,EAAE;gBAC3C,OAAO;gBACP,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,aAAa;aACnB,CAAC;YAEF,kBAAkB;YAClB,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5D,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YACtF,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,+BAA+B,GAAmC,IAAI,CAAC;AAE3E,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,IACE,CAAC,+BAA+B;QAChC,CAAC,OAAO,IAAI,+BAA+B,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,EACnE,CAAC;QACD,+BAA+B,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,+BAA+B,CAAC;AACzC,CAAC"}
@@ -0,0 +1,89 @@
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
+ * Real-time deployment progress tracking types and utilities
18
+ *
19
+ * Provides step-by-step visibility into the deployment process with
20
+ * minimum display times to ensure each step is legible even when fast.
21
+ */
22
+ import { MIN_STEP_DISPLAY_MS } from "../constants.js";
23
+ export { MIN_STEP_DISPLAY_MS };
24
+ export type DeploymentStepId = "authenticating" | "validating" | "exporting" | "uploading" | "importing" | "configuring" | "verifying" | "completing";
25
+ export type DeploymentStepStatus = "pending" | "in_progress" | "completed" | "failed" | "skipped";
26
+ export interface DeploymentStep {
27
+ id: DeploymentStepId;
28
+ label: string;
29
+ description: string;
30
+ status: DeploymentStepStatus;
31
+ startedAt?: string;
32
+ completedAt?: string;
33
+ error?: string;
34
+ details?: string;
35
+ }
36
+ export interface TenantDeploymentProgress {
37
+ tenantId: string;
38
+ tenantName: string;
39
+ overallStatus: "pending" | "in_progress" | "completed" | "failed";
40
+ currentStep: DeploymentStepId | null;
41
+ steps: DeploymentStep[];
42
+ progress: number;
43
+ startedAt?: string;
44
+ completedAt?: string;
45
+ error?: string;
46
+ }
47
+ export interface DeploymentProgressEvent {
48
+ type: "step_started" | "step_completed" | "step_failed" | "tenant_completed" | "deployment_completed";
49
+ deploymentId: string;
50
+ tenantId?: string;
51
+ tenantName?: string;
52
+ stepId?: DeploymentStepId;
53
+ progress?: number;
54
+ error?: string;
55
+ details?: string;
56
+ timestamp: string;
57
+ }
58
+ /**
59
+ * Configuration for each deployment step
60
+ */
61
+ export declare const DEPLOYMENT_STEPS: Record<DeploymentStepId, {
62
+ label: string;
63
+ description: string;
64
+ }>;
65
+ /**
66
+ * Create initial progress state for a tenant deployment
67
+ */
68
+ export declare function createInitialTenantProgress(tenantId: string, tenantName: string): TenantDeploymentProgress;
69
+ /**
70
+ * Calculate progress percentage based on completed steps
71
+ */
72
+ export declare function calculateProgress(steps: DeploymentStep[]): number;
73
+ /**
74
+ * Update a tenant's progress state based on an event
75
+ */
76
+ export declare function applyProgressEvent(progress: TenantDeploymentProgress, event: DeploymentProgressEvent): TenantDeploymentProgress;
77
+ /**
78
+ * Format duration for display
79
+ */
80
+ export declare function formatDuration(startedAt: string, completedAt?: string): string;
81
+ /**
82
+ * Generate simulated progress events for demo mode
83
+ * Includes minimum display times between steps
84
+ */
85
+ export declare function simulateDeploymentProgress(deploymentId: string, tenantId: string, tenantName: string, options?: {
86
+ failAtStep?: DeploymentStepId;
87
+ speedMultiplier?: number;
88
+ }): AsyncGenerator<DeploymentProgressEvent>;
89
+ //# sourceMappingURL=deployment-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-progress.d.ts","sourceRoot":"","sources":["../../src/services/deployment-progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,YAAY,GACZ,WAAW,GACX,WAAW,GACX,WAAW,GACX,aAAa,GACb,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElG,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,gBAAgB,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAClE,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EACA,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,sBAAsB,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAiC7F,CAAC;AAEF;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,wBAAwB,CAgB1B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,CAOjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,wBAAwB,EAClC,KAAK,EAAE,uBAAuB,GAC7B,wBAAwB,CAsE1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAED;;;GAGG;AACH,wBAAuB,0BAA0B,CAC/C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,cAAc,CAAC,uBAAuB,CAAC,CA0EzC"}
@@ -0,0 +1,244 @@
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
+ * Real-time deployment progress tracking types and utilities
18
+ *
19
+ * Provides step-by-step visibility into the deployment process with
20
+ * minimum display times to ensure each step is legible even when fast.
21
+ */
22
+ import { MIN_STEP_DISPLAY_MS } from "../constants.js";
23
+ // Re-export for backward compatibility
24
+ export { MIN_STEP_DISPLAY_MS };
25
+ /**
26
+ * Configuration for each deployment step
27
+ */
28
+ export const DEPLOYMENT_STEPS = {
29
+ authenticating: {
30
+ label: "Authenticating",
31
+ description: "Connecting to tenant with GDAP credentials",
32
+ },
33
+ validating: {
34
+ label: "Validating",
35
+ description: "Checking environment compatibility and permissions",
36
+ },
37
+ exporting: {
38
+ label: "Exporting",
39
+ description: "Exporting solution from source environment",
40
+ },
41
+ uploading: {
42
+ label: "Uploading",
43
+ description: "Transferring solution package to target",
44
+ },
45
+ importing: {
46
+ label: "Importing",
47
+ description: "Installing solution in target environment",
48
+ },
49
+ configuring: {
50
+ label: "Configuring",
51
+ description: "Setting up connection references and variables",
52
+ },
53
+ verifying: {
54
+ label: "Verifying",
55
+ description: "Confirming deployment was successful",
56
+ },
57
+ completing: {
58
+ label: "Completing",
59
+ description: "Finalizing deployment and cleaning up",
60
+ },
61
+ };
62
+ /**
63
+ * Create initial progress state for a tenant deployment
64
+ */
65
+ export function createInitialTenantProgress(tenantId, tenantName) {
66
+ const steps = Object.entries(DEPLOYMENT_STEPS).map(([id, config]) => ({
67
+ id: id,
68
+ label: config.label,
69
+ description: config.description,
70
+ status: "pending",
71
+ }));
72
+ return {
73
+ tenantId,
74
+ tenantName,
75
+ overallStatus: "pending",
76
+ currentStep: null,
77
+ steps,
78
+ progress: 0,
79
+ };
80
+ }
81
+ /**
82
+ * Calculate progress percentage based on completed steps
83
+ */
84
+ export function calculateProgress(steps) {
85
+ const completed = steps.filter((s) => s.status === "completed" || s.status === "skipped").length;
86
+ const inProgress = steps.filter((s) => s.status === "in_progress").length;
87
+ const total = steps.length;
88
+ // Give partial credit for in-progress step
89
+ return Math.round(((completed + inProgress * 0.5) / total) * 100);
90
+ }
91
+ /**
92
+ * Update a tenant's progress state based on an event
93
+ */
94
+ export function applyProgressEvent(progress, event) {
95
+ const updatedProgress = { ...progress };
96
+ const steps = [...progress.steps];
97
+ switch (event.type) {
98
+ case "step_started": {
99
+ if (event.stepId) {
100
+ const stepIndex = steps.findIndex((s) => s.id === event.stepId);
101
+ if (stepIndex !== -1) {
102
+ steps[stepIndex] = {
103
+ ...steps[stepIndex],
104
+ status: "in_progress",
105
+ startedAt: event.timestamp,
106
+ details: event.details,
107
+ };
108
+ updatedProgress.currentStep = event.stepId;
109
+ updatedProgress.overallStatus = "in_progress";
110
+ if (!updatedProgress.startedAt) {
111
+ updatedProgress.startedAt = event.timestamp;
112
+ }
113
+ }
114
+ }
115
+ break;
116
+ }
117
+ case "step_completed": {
118
+ if (event.stepId) {
119
+ const stepIndex = steps.findIndex((s) => s.id === event.stepId);
120
+ if (stepIndex !== -1) {
121
+ steps[stepIndex] = {
122
+ ...steps[stepIndex],
123
+ status: "completed",
124
+ completedAt: event.timestamp,
125
+ details: event.details,
126
+ };
127
+ }
128
+ }
129
+ break;
130
+ }
131
+ case "step_failed": {
132
+ if (event.stepId) {
133
+ const stepIndex = steps.findIndex((s) => s.id === event.stepId);
134
+ if (stepIndex !== -1) {
135
+ steps[stepIndex] = {
136
+ ...steps[stepIndex],
137
+ status: "failed",
138
+ completedAt: event.timestamp,
139
+ error: event.error,
140
+ };
141
+ updatedProgress.error = event.error;
142
+ updatedProgress.overallStatus = "failed";
143
+ updatedProgress.completedAt = event.timestamp;
144
+ }
145
+ }
146
+ break;
147
+ }
148
+ case "tenant_completed": {
149
+ updatedProgress.overallStatus = "completed";
150
+ updatedProgress.completedAt = event.timestamp;
151
+ updatedProgress.currentStep = null;
152
+ break;
153
+ }
154
+ }
155
+ updatedProgress.steps = steps;
156
+ updatedProgress.progress = calculateProgress(steps);
157
+ return updatedProgress;
158
+ }
159
+ /**
160
+ * Format duration for display
161
+ */
162
+ export function formatDuration(startedAt, completedAt) {
163
+ const start = new Date(startedAt).getTime();
164
+ const end = completedAt ? new Date(completedAt).getTime() : Date.now();
165
+ const durationMs = end - start;
166
+ if (durationMs < 1000)
167
+ return `${durationMs}ms`;
168
+ if (durationMs < 60000)
169
+ return `${(durationMs / 1000).toFixed(1)}s`;
170
+ return `${Math.floor(durationMs / 60000)}m ${Math.round((durationMs % 60000) / 1000)}s`;
171
+ }
172
+ /**
173
+ * Generate simulated progress events for demo mode
174
+ * Includes minimum display times between steps
175
+ */
176
+ export async function* simulateDeploymentProgress(deploymentId, tenantId, tenantName, options) {
177
+ const speedMultiplier = options?.speedMultiplier ?? 1;
178
+ const minDelay = MIN_STEP_DISPLAY_MS / speedMultiplier;
179
+ const stepDurations = {
180
+ authenticating: 800,
181
+ validating: 600,
182
+ exporting: 1200,
183
+ uploading: 1500,
184
+ importing: 2000,
185
+ configuring: 900,
186
+ verifying: 700,
187
+ completing: 500,
188
+ };
189
+ const stepOrder = [
190
+ "authenticating",
191
+ "validating",
192
+ "exporting",
193
+ "uploading",
194
+ "importing",
195
+ "configuring",
196
+ "verifying",
197
+ "completing",
198
+ ];
199
+ for (const stepId of stepOrder) {
200
+ // Start step
201
+ yield {
202
+ type: "step_started",
203
+ deploymentId,
204
+ tenantId,
205
+ tenantName,
206
+ stepId,
207
+ timestamp: new Date().toISOString(),
208
+ };
209
+ // Simulate step processing with minimum display time
210
+ const duration = Math.max(minDelay, stepDurations[stepId] / speedMultiplier);
211
+ await new Promise((resolve) => setTimeout(resolve, duration));
212
+ // Check if this step should fail
213
+ if (options?.failAtStep === stepId) {
214
+ yield {
215
+ type: "step_failed",
216
+ deploymentId,
217
+ tenantId,
218
+ tenantName,
219
+ stepId,
220
+ error: `Failed during ${DEPLOYMENT_STEPS[stepId].label.toLowerCase()}: Connection timeout`,
221
+ timestamp: new Date().toISOString(),
222
+ };
223
+ return;
224
+ }
225
+ // Complete step
226
+ yield {
227
+ type: "step_completed",
228
+ deploymentId,
229
+ tenantId,
230
+ tenantName,
231
+ stepId,
232
+ timestamp: new Date().toISOString(),
233
+ };
234
+ }
235
+ // Deployment completed
236
+ yield {
237
+ type: "tenant_completed",
238
+ deploymentId,
239
+ tenantId,
240
+ tenantName,
241
+ timestamp: new Date().toISOString(),
242
+ };
243
+ }
244
+ //# sourceMappingURL=deployment-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-progress.js","sourceRoot":"","sources":["../../src/services/deployment-progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
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 { TokenManagerConfig } from "../auth/token-manager.js";
17
+ import { ConnectionMapping, EnvironmentVariable } from "../config/schema.js";
18
+ export interface DeploymentServiceConfig extends TokenManagerConfig {
19
+ }
20
+ export interface DeploymentTarget {
21
+ tenantId: string;
22
+ tenantName: string;
23
+ environmentUrl: string;
24
+ environmentId?: string;
25
+ connectionMappings?: ConnectionMapping[];
26
+ environmentVariables?: EnvironmentVariable[];
27
+ autoSetup?: boolean;
28
+ }
29
+ export interface RealDeploymentProgress {
30
+ tenantId: string;
31
+ tenantName: string;
32
+ status: "pending" | "in_progress" | "completed" | "failed";
33
+ step: RealDeploymentStepId;
34
+ progress: number;
35
+ startedAt?: string;
36
+ completedAt?: string;
37
+ error?: string;
38
+ importJobId?: string;
39
+ }
40
+ export type RealDeploymentStepId = "authenticating" | "validating" | "uploading" | "importing" | "configuring_connections" | "configuring_variables" | "verifying" | "completing";
41
+ export interface DeploymentResult {
42
+ tenantId: string;
43
+ tenantName: string;
44
+ success: boolean;
45
+ importJobId?: string;
46
+ error?: string;
47
+ startedAt: string;
48
+ completedAt: string;
49
+ durationMs: number;
50
+ }
51
+ export type RealDeploymentProgressCallback = (progress: RealDeploymentProgress) => void;
52
+ /**
53
+ * Service for deploying solutions to customer tenants via GDAP
54
+ */
55
+ export declare class DeploymentService {
56
+ private config;
57
+ private tokenManagers;
58
+ constructor(config: DeploymentServiceConfig);
59
+ /**
60
+ * Get or create a cached TokenManager for a tenant.
61
+ * Avoids creating redundant TokenManager instances for the same tenant.
62
+ */
63
+ private getTokenManager;
64
+ /**
65
+ * Deploy a solution to a single tenant
66
+ */
67
+ deployToTenant(solutionBase64: string, target: DeploymentTarget, onProgress?: RealDeploymentProgressCallback): Promise<DeploymentResult>;
68
+ /**
69
+ * Deploy to multiple tenants with concurrency control
70
+ */
71
+ deployToTenants(solutionBase64: string, targets: DeploymentTarget[], options?: {
72
+ maxConcurrent?: number;
73
+ onProgress?: RealDeploymentProgressCallback;
74
+ }): Promise<DeploymentResult[]>;
75
+ /**
76
+ * Import a solution from base64 encoded content
77
+ */
78
+ private importSolutionFromBase64;
79
+ /**
80
+ * Validate that a tenant is ready for deployment
81
+ */
82
+ validateTenant(target: DeploymentTarget): Promise<{
83
+ valid: boolean;
84
+ errors: string[];
85
+ warnings: string[];
86
+ }>;
87
+ /**
88
+ * Check if an error indicates the app user is not registered.
89
+ * Prefers checking the structured error code; falls back to regex on the message.
90
+ */
91
+ private isAppUserNotRegisteredError;
92
+ /**
93
+ * Setup application user in an environment
94
+ */
95
+ private setupApplicationUser;
96
+ }
97
+ //# sourceMappingURL=deployment-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-service.d.ts","sourceRoot":"","sources":["../../src/services/deployment-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAgB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAI5E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAK7E,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;CAElE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,oBAAoB,GAC5B,gBAAgB,GAChB,YAAY,GACZ,WAAW,GACX,WAAW,GACX,yBAAyB,GACzB,uBAAuB,GACvB,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,8BAA8B,GAAG,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAExF;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,aAAa,CAAmC;gBAE5C,MAAM,EAAE,uBAAuB;IAI3C;;;OAGG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACG,cAAc,CAClB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,gBAAgB,EACxB,UAAU,CAAC,EAAE,8BAA8B,GAC1C,OAAO,CAAC,gBAAgB,CAAC;IA6L5B;;OAEG;IACG,eAAe,CACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,8BAA8B,CAAC;KAC7C,GACA,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiC9B;;OAEG;YACW,wBAAwB;IAuCtC;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;QACtD,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IA0DF;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAcnC;;OAEG;YACW,oBAAoB;CAsEnC"}