@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,109 @@
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
+ * AI-Powered Deployment Doctor
18
+ *
19
+ * Analyzes deployment failures and provides intelligent remediation guidance.
20
+ * Uses pattern matching + AI to identify root causes and suggest fixes.
21
+ */
22
+ export type ErrorCategory = "authentication" | "authorization" | "network" | "timeout" | "conflict" | "dependency" | "configuration" | "resource_limit" | "validation" | "unknown";
23
+ export interface ErrorPattern {
24
+ category: ErrorCategory;
25
+ patterns: RegExp[];
26
+ confidence: number;
27
+ description: string;
28
+ commonCauses: string[];
29
+ remediationSteps: string[];
30
+ autoFixable: boolean;
31
+ autoFixAction?: "retry" | "retry_with_delay" | "update_config" | "request_admin_action";
32
+ }
33
+ export interface FailureAnalysis {
34
+ deploymentId: string;
35
+ tenantId: string;
36
+ tenantName: string;
37
+ errorMessage: string;
38
+ category: ErrorCategory;
39
+ confidence: number;
40
+ rootCause: string;
41
+ remediationPlan: {
42
+ priority: "critical" | "high" | "medium" | "low";
43
+ estimatedEffort: "quick" | "moderate" | "complex";
44
+ steps: Array<{
45
+ order: number;
46
+ action: string;
47
+ description: string;
48
+ automated: boolean;
49
+ }>;
50
+ preventionTips?: string[];
51
+ };
52
+ similarFailures?: Array<{
53
+ deploymentId: string;
54
+ tenantName: string;
55
+ resolved: boolean;
56
+ resolution?: string;
57
+ }>;
58
+ autoFixSuggestion?: {
59
+ action: "retry" | "retry_with_delay" | "update_config" | "request_admin_action";
60
+ parameters?: Record<string, unknown>;
61
+ safetyNote?: string;
62
+ };
63
+ }
64
+ export interface FleetHealthInsight {
65
+ pattern: string;
66
+ affectedDeployments: number;
67
+ affectedTenants: string[];
68
+ severity: "critical" | "warning" | "info";
69
+ recommendation: string;
70
+ trend?: "increasing" | "stable" | "decreasing";
71
+ }
72
+ /**
73
+ * Deployment Doctor Service
74
+ */
75
+ export declare class DeploymentDoctor {
76
+ /**
77
+ * Categorize an error message
78
+ */
79
+ categorizeError(errorMessage: string): {
80
+ category: ErrorCategory;
81
+ confidence: number;
82
+ matchedPattern?: ErrorPattern;
83
+ };
84
+ /**
85
+ * Analyze a single deployment failure
86
+ */
87
+ analyzeFailure(deploymentId: string, tenantId: string, tenantName: string, errorMessage: string, deploymentHistory?: Array<{
88
+ deploymentId: string;
89
+ tenantName: string;
90
+ error?: string;
91
+ resolved?: boolean;
92
+ }>): FailureAnalysis;
93
+ /**
94
+ * Analyze multiple failures to identify fleet-wide patterns
95
+ */
96
+ analyzeFleetPatterns(failures: Array<{
97
+ deploymentId: string;
98
+ tenantId: string;
99
+ tenantName: string;
100
+ error: string;
101
+ timestamp: string;
102
+ }>): FleetHealthInsight[];
103
+ /**
104
+ * Generate a concise action title from a remediation step
105
+ */
106
+ private generateActionTitle;
107
+ }
108
+ export declare function getDeploymentDoctor(): DeploymentDoctor;
109
+ //# sourceMappingURL=deployment-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-doctor.d.ts","sourceRoot":"","sources":["../../src/services/deployment-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,476 @@
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
+ * Knowledge base of error patterns and remediations
18
+ */
19
+ const ERROR_PATTERNS = [
20
+ // Authentication errors
21
+ {
22
+ category: "authentication",
23
+ patterns: [
24
+ /invalid_client/i,
25
+ /unauthorized/i,
26
+ /authentication.*failed/i,
27
+ /AADSTS\d+/i,
28
+ /token.*expired/i,
29
+ /invalid.*credentials/i,
30
+ ],
31
+ confidence: 0.95,
32
+ description: "Authentication failure with Azure AD or Dataverse",
33
+ commonCauses: [
34
+ "Service principal credentials expired or invalid",
35
+ "Client secret needs renewal",
36
+ "App registration misconfigured",
37
+ "Token cache issues",
38
+ ],
39
+ remediationSteps: [
40
+ "Verify service principal credentials in Azure Portal",
41
+ "Check if client secret has expired",
42
+ "Ensure app registration has correct API permissions",
43
+ "Clear token cache and retry",
44
+ "Verify GDAP relationship is active",
45
+ ],
46
+ autoFixable: true,
47
+ autoFixAction: "retry",
48
+ },
49
+ // Authorization / Permission errors
50
+ {
51
+ category: "authorization",
52
+ patterns: [
53
+ /insufficient.*privileges/i,
54
+ /access.*denied/i,
55
+ /forbidden/i,
56
+ /privilege.*missing/i,
57
+ /prvWrite/i,
58
+ /prvCreate/i,
59
+ /Missing privilege/i,
60
+ ],
61
+ confidence: 0.98,
62
+ description: "Missing permissions or GDAP role insufficient",
63
+ commonCauses: [
64
+ "GDAP role lacks required Dynamics 365 privileges",
65
+ "User does not have System Administrator role",
66
+ "Power Platform Admin role not assigned",
67
+ "Environment security not configured correctly",
68
+ ],
69
+ remediationSteps: [
70
+ "Go to Partner Center → Customers → select customer",
71
+ 'Request "Power Platform Admin" or "Dynamics 365 Admin" role',
72
+ "Wait for customer approval (can take hours/days)",
73
+ "Alternatively: Ask customer to add service principal to environment with System Admin role",
74
+ "Retry deployment after role assignment",
75
+ ],
76
+ autoFixable: false,
77
+ autoFixAction: "request_admin_action",
78
+ },
79
+ // Network errors
80
+ {
81
+ category: "network",
82
+ patterns: [
83
+ /network.*error/i,
84
+ /connection.*refused/i,
85
+ /ECONNREFUSED/i,
86
+ /ECONNRESET/i,
87
+ /ETIMEDOUT/i,
88
+ /socket.*hang/i,
89
+ /dns.*lookup.*failed/i,
90
+ ],
91
+ confidence: 0.9,
92
+ description: "Network connectivity issue to tenant environment",
93
+ commonCauses: [
94
+ "Tenant environment temporarily unavailable",
95
+ "Network firewall blocking requests",
96
+ "DNS resolution failure",
97
+ "Dataverse API throttling",
98
+ "ISP or Azure network issue",
99
+ ],
100
+ remediationSteps: [
101
+ "Verify tenant environment URL is correct",
102
+ "Check tenant environment is online (Power Platform Admin Center)",
103
+ "Wait 5-10 minutes and retry (transient issue)",
104
+ "Check firewall rules allow outbound HTTPS to *.dynamics.com",
105
+ "Verify no service outages on Azure Status page",
106
+ ],
107
+ autoFixable: true,
108
+ autoFixAction: "retry_with_delay",
109
+ },
110
+ // Timeout errors
111
+ {
112
+ category: "timeout",
113
+ patterns: [/timeout/i, /timed out/i, /operation.*exceeded.*time/i, /request.*took too long/i],
114
+ confidence: 0.85,
115
+ description: "Operation exceeded time limit",
116
+ commonCauses: [
117
+ "Large solution file taking too long to import",
118
+ "Tenant environment under heavy load",
119
+ "Solution has complex dependencies that slow import",
120
+ "Dataverse import queue backlog",
121
+ ],
122
+ remediationSteps: [
123
+ "Retry during off-peak hours (evenings/weekends)",
124
+ "Check tenant environment performance in admin center",
125
+ "Consider breaking solution into smaller components",
126
+ "Increase timeout limit in deployment configuration",
127
+ "Contact Microsoft support if persistent",
128
+ ],
129
+ autoFixable: true,
130
+ autoFixAction: "retry_with_delay",
131
+ },
132
+ // Conflict errors
133
+ {
134
+ category: "conflict",
135
+ patterns: [
136
+ /already exists/i,
137
+ /duplicate/i,
138
+ /conflict/i,
139
+ /name.*is already in use/i,
140
+ /solution.*already installed/i,
141
+ ],
142
+ confidence: 0.92,
143
+ description: "Resource conflict with existing component",
144
+ commonCauses: [
145
+ "Solution already installed (maybe older version)",
146
+ "Agent with same name exists in environment",
147
+ "Conflicting component from another solution",
148
+ "Previous deployment partially completed",
149
+ ],
150
+ remediationSteps: [
151
+ "Check if solution is already installed in environment",
152
+ "Upgrade existing solution instead of new install",
153
+ "Remove conflicting component manually",
154
+ "Use unique names for agents/components",
155
+ "Perform rollback if previous deployment is incomplete",
156
+ ],
157
+ autoFixable: false,
158
+ autoFixAction: "request_admin_action",
159
+ },
160
+ // Dependency errors
161
+ {
162
+ category: "dependency",
163
+ patterns: [
164
+ /missing.*dependency/i,
165
+ /dependent.*component/i,
166
+ /requires.*connector/i,
167
+ /connection.*reference.*not found/i,
168
+ /environment.*variable.*not found/i,
169
+ ],
170
+ confidence: 0.94,
171
+ description: "Missing dependencies or connection references",
172
+ commonCauses: [
173
+ "Required connectors not installed in tenant",
174
+ "Connection references not mapped correctly",
175
+ "Environment variables not configured",
176
+ "Dependent solution not installed",
177
+ ],
178
+ remediationSteps: [
179
+ "Review solution dependencies in source environment",
180
+ "Install required connectors in target environment",
181
+ "Update tenant configuration with correct connection mappings",
182
+ "Set environment variable values in tenant config",
183
+ "Deploy dependency solutions first, then main solution",
184
+ ],
185
+ autoFixable: false,
186
+ autoFixAction: "update_config",
187
+ },
188
+ // Configuration errors
189
+ {
190
+ category: "configuration",
191
+ patterns: [
192
+ /invalid.*configuration/i,
193
+ /malformed/i,
194
+ /invalid.*format/i,
195
+ /validation.*failed/i,
196
+ /invalid.*parameter/i,
197
+ ],
198
+ confidence: 0.88,
199
+ description: "Invalid configuration or malformed request",
200
+ commonCauses: [
201
+ "Tenant configuration has incorrect format",
202
+ "Environment URL is malformed",
203
+ "Connection mapping schema invalid",
204
+ "Solution file corrupted",
205
+ ],
206
+ remediationSteps: [
207
+ "Validate tenant configuration YAML syntax",
208
+ "Check environment URL format (https://org.crm.dynamics.com)",
209
+ "Verify connection mappings follow correct schema",
210
+ "Re-export solution from source environment",
211
+ "Run configuration validation before deployment",
212
+ ],
213
+ autoFixable: false,
214
+ autoFixAction: "update_config",
215
+ },
216
+ // Resource limits
217
+ {
218
+ category: "resource_limit",
219
+ patterns: [
220
+ /quota.*exceeded/i,
221
+ /too many requests/i,
222
+ /rate.*limit/i,
223
+ /throttle/i,
224
+ /storage.*limit/i,
225
+ ],
226
+ confidence: 0.9,
227
+ description: "Resource quota or rate limit exceeded",
228
+ commonCauses: [
229
+ "API rate limit exceeded (too many requests)",
230
+ "Tenant storage quota full",
231
+ "Concurrent deployment limit reached",
232
+ "Power Platform API throttling",
233
+ ],
234
+ remediationSteps: [
235
+ "Reduce deployment concurrency (deploy to fewer tenants at once)",
236
+ "Add delays between deployments",
237
+ "Check tenant storage usage and clean up",
238
+ "Upgrade tenant license for higher limits",
239
+ "Retry after rate limit reset (usually 5-15 minutes)",
240
+ ],
241
+ autoFixable: true,
242
+ autoFixAction: "retry_with_delay",
243
+ },
244
+ ];
245
+ /**
246
+ * Deployment Doctor Service
247
+ */
248
+ export class DeploymentDoctor {
249
+ /**
250
+ * Categorize an error message
251
+ */
252
+ categorizeError(errorMessage) {
253
+ let bestMatch;
254
+ let bestConfidence = 0;
255
+ for (const pattern of ERROR_PATTERNS) {
256
+ for (const regex of pattern.patterns) {
257
+ if (regex.test(errorMessage)) {
258
+ if (pattern.confidence > bestConfidence) {
259
+ bestMatch = pattern;
260
+ bestConfidence = pattern.confidence;
261
+ }
262
+ }
263
+ }
264
+ }
265
+ if (bestMatch) {
266
+ return {
267
+ category: bestMatch.category,
268
+ confidence: bestConfidence,
269
+ matchedPattern: bestMatch,
270
+ };
271
+ }
272
+ return {
273
+ category: "unknown",
274
+ confidence: 0.3,
275
+ };
276
+ }
277
+ /**
278
+ * Analyze a single deployment failure
279
+ */
280
+ analyzeFailure(deploymentId, tenantId, tenantName, errorMessage, deploymentHistory) {
281
+ const { category, confidence, matchedPattern } = this.categorizeError(errorMessage);
282
+ // Find similar failures
283
+ const similarFailures = deploymentHistory
284
+ ?.filter((d) => d.error && this.categorizeError(d.error).category === category)
285
+ .slice(0, 5)
286
+ .map((d) => ({
287
+ deploymentId: d.deploymentId,
288
+ tenantName: d.tenantName,
289
+ resolved: d.resolved || false,
290
+ }));
291
+ // Determine priority based on category
292
+ const priorityMap = {
293
+ authentication: "critical",
294
+ authorization: "critical",
295
+ network: "high",
296
+ timeout: "medium",
297
+ conflict: "high",
298
+ dependency: "high",
299
+ configuration: "high",
300
+ resource_limit: "medium",
301
+ validation: "medium",
302
+ unknown: "medium",
303
+ };
304
+ // Determine effort
305
+ const effortMap = {
306
+ authentication: "quick",
307
+ authorization: "complex",
308
+ network: "quick",
309
+ timeout: "quick",
310
+ conflict: "moderate",
311
+ dependency: "moderate",
312
+ configuration: "moderate",
313
+ resource_limit: "moderate",
314
+ validation: "moderate",
315
+ unknown: "complex",
316
+ };
317
+ // Build remediation steps
318
+ const steps = matchedPattern
319
+ ? matchedPattern.remediationSteps.map((step, i) => ({
320
+ order: i + 1,
321
+ action: this.generateActionTitle(step),
322
+ description: step,
323
+ automated: i === 0 && matchedPattern.autoFixable,
324
+ }))
325
+ : [
326
+ {
327
+ order: 1,
328
+ action: "Investigate Error",
329
+ description: "Review the full error message and deployment logs",
330
+ automated: false,
331
+ },
332
+ {
333
+ order: 2,
334
+ action: "Check Environment Health",
335
+ description: "Verify tenant environment is accessible and healthy",
336
+ automated: false,
337
+ },
338
+ {
339
+ order: 3,
340
+ action: "Contact Support",
341
+ description: "If issue persists, contact Microsoft support with deployment details",
342
+ automated: false,
343
+ },
344
+ ];
345
+ // Build auto-fix suggestion
346
+ let autoFixSuggestion;
347
+ if (matchedPattern?.autoFixable && matchedPattern.autoFixAction) {
348
+ autoFixSuggestion = {
349
+ action: matchedPattern.autoFixAction,
350
+ parameters: matchedPattern.autoFixAction === "retry_with_delay" ? { delayMs: 300000 } : undefined,
351
+ safetyNote: matchedPattern.autoFixAction === "retry"
352
+ ? "Safe to retry immediately - no configuration changes needed"
353
+ : "Will wait 5 minutes before retrying to allow transient issues to resolve",
354
+ };
355
+ }
356
+ return {
357
+ deploymentId,
358
+ tenantId,
359
+ tenantName,
360
+ errorMessage,
361
+ category,
362
+ confidence,
363
+ rootCause: matchedPattern?.description || "Unknown error - requires manual investigation",
364
+ remediationPlan: {
365
+ priority: priorityMap[category],
366
+ estimatedEffort: effortMap[category],
367
+ steps,
368
+ preventionTips: matchedPattern?.commonCauses
369
+ ? [`Common causes: ${matchedPattern.commonCauses.join(", ")}`]
370
+ : undefined,
371
+ },
372
+ similarFailures,
373
+ autoFixSuggestion,
374
+ };
375
+ }
376
+ /**
377
+ * Analyze multiple failures to identify fleet-wide patterns
378
+ */
379
+ analyzeFleetPatterns(failures) {
380
+ const insights = [];
381
+ // Group by error category
382
+ const categoryGroups = new Map();
383
+ for (const failure of failures) {
384
+ const { category } = this.categorizeError(failure.error);
385
+ if (!categoryGroups.has(category)) {
386
+ categoryGroups.set(category, []);
387
+ }
388
+ categoryGroups.get(category).push(failure);
389
+ }
390
+ // Generate insights for significant patterns
391
+ for (const [category, categoryFailures] of categoryGroups.entries()) {
392
+ if (categoryFailures.length >= 3) {
393
+ // Pattern detected
394
+ const affectedTenants = [...new Set(categoryFailures.map((f) => f.tenantName))];
395
+ let severity = "warning";
396
+ let recommendation = "";
397
+ switch (category) {
398
+ case "authentication":
399
+ severity = "critical";
400
+ recommendation =
401
+ "Multiple authentication failures detected. Check service principal credentials and GDAP status immediately.";
402
+ break;
403
+ case "authorization":
404
+ severity = "critical";
405
+ recommendation = `${affectedTenants.length} tenant${affectedTenants.length > 1 ? "s need" : " needs"} additional GDAP permissions. Request Power Platform Admin role in Partner Center.`;
406
+ break;
407
+ case "network":
408
+ severity = "warning";
409
+ recommendation =
410
+ "Network issues detected across multiple tenants. Check Azure service health and consider retrying later.";
411
+ break;
412
+ case "dependency":
413
+ severity = "warning";
414
+ recommendation =
415
+ "Missing dependencies are a common issue. Review and update tenant connection mappings before next deployment.";
416
+ break;
417
+ case "timeout":
418
+ severity = "info";
419
+ recommendation =
420
+ "Timeout issues detected. Consider deploying during off-peak hours or increasing timeout limits.";
421
+ break;
422
+ default:
423
+ recommendation = `${category} errors affecting multiple tenants. Review individual failures for details.`;
424
+ }
425
+ insights.push({
426
+ pattern: `${category} failures`,
427
+ affectedDeployments: categoryFailures.length,
428
+ affectedTenants,
429
+ severity,
430
+ recommendation,
431
+ });
432
+ }
433
+ }
434
+ // Check for tenant-specific patterns
435
+ const tenantFailureCounts = new Map();
436
+ for (const failure of failures) {
437
+ tenantFailureCounts.set(failure.tenantId, (tenantFailureCounts.get(failure.tenantId) || 0) + 1);
438
+ }
439
+ for (const [tenantId, count] of tenantFailureCounts.entries()) {
440
+ if (count >= 3) {
441
+ const tenant = failures.find((f) => f.tenantId === tenantId)?.tenantName;
442
+ insights.push({
443
+ pattern: "repeated failures for single tenant",
444
+ affectedDeployments: count,
445
+ affectedTenants: [tenant || tenantId],
446
+ severity: "critical",
447
+ recommendation: `Tenant '${tenant || tenantId}' has ${count} consecutive failures. Environment may have persistent issues - investigate tenant health before retrying.`,
448
+ });
449
+ }
450
+ }
451
+ return insights.sort((a, b) => {
452
+ // Sort by severity
453
+ const severityOrder = { critical: 0, warning: 1, info: 2 };
454
+ return severityOrder[a.severity] - severityOrder[b.severity];
455
+ });
456
+ }
457
+ /**
458
+ * Generate a concise action title from a remediation step
459
+ */
460
+ generateActionTitle(step) {
461
+ // Extract the first few words as the action title
462
+ const words = step.split(" ").slice(0, 4);
463
+ return words.join(" ") + (step.split(" ").length > 4 ? "..." : "");
464
+ }
465
+ }
466
+ /**
467
+ * Singleton instance
468
+ */
469
+ let doctorInstance;
470
+ export function getDeploymentDoctor() {
471
+ if (!doctorInstance) {
472
+ doctorInstance = new DeploymentDoctor();
473
+ }
474
+ return doctorInstance;
475
+ }
476
+ //# sourceMappingURL=deployment-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-doctor.js","sourceRoot":"","sources":["../../src/services/deployment-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
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
+ * Helper service for sending deployment lifecycle notifications
18
+ * Checks settings before sending to ensure only enabled notifications are sent
19
+ */
20
+ export declare class DeploymentNotifications {
21
+ private baseUrl?;
22
+ constructor(baseUrl?: string);
23
+ /**
24
+ * Send notification when deployment batch starts
25
+ */
26
+ notifyDeploymentStart(deploymentId: string, solutionName: string, tenantCount: number): Promise<void>;
27
+ /**
28
+ * Send notification when deployment batch completes successfully
29
+ */
30
+ notifyDeploymentComplete(deploymentId: string, solutionName: string, successCount: number, totalCount: number, durationMs: number): Promise<void>;
31
+ /**
32
+ * Send notification when deployment batch fails
33
+ */
34
+ notifyDeploymentFailure(deploymentId: string, solutionName: string, failedCount: number, totalCount: number, errorSummary?: string): Promise<void>;
35
+ /**
36
+ * Send notification when deployment requires approval
37
+ */
38
+ notifyApprovalNeeded(deploymentId: string, solutionName: string, tenantCount: number, reason?: string): Promise<void>;
39
+ }
40
+ export declare function getDeploymentNotifications(baseUrl?: string): DeploymentNotifications;
41
+ //# sourceMappingURL=deployment-notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-notifications.d.ts","sourceRoot":"","sources":["../../src/services/deployment-notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,OAAO,CAAC,EAAE,MAAM;IAI5B;;OAEG;IACG,qBAAqB,CACzB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IA8BhB;;OAEG;IACG,wBAAwB,CAC5B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IA8BhB;;OAEG;IACG,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAkChB;;OAEG;IACG,oBAAoB,CACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;CAiCjB;AAKD,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAQpF"}