@mcp-consultant-tools/powerplatform-core 26.0.0-beta.2

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 (153) hide show
  1. package/build/auth/index.d.ts +64 -0
  2. package/build/auth/index.d.ts.map +1 -0
  3. package/build/auth/index.js +39 -0
  4. package/build/auth/index.js.map +1 -0
  5. package/build/auth/interactive-auth.d.ts +60 -0
  6. package/build/auth/interactive-auth.d.ts.map +1 -0
  7. package/build/auth/interactive-auth.js +429 -0
  8. package/build/auth/interactive-auth.js.map +1 -0
  9. package/build/auth/service-principal-auth.d.ts +26 -0
  10. package/build/auth/service-principal-auth.d.ts.map +1 -0
  11. package/build/auth/service-principal-auth.js +60 -0
  12. package/build/auth/service-principal-auth.js.map +1 -0
  13. package/build/auth/token-cache.d.ts +40 -0
  14. package/build/auth/token-cache.d.ts.map +1 -0
  15. package/build/auth/token-cache.js +108 -0
  16. package/build/auth/token-cache.js.map +1 -0
  17. package/build/client/PowerPlatformClient.d.ts +78 -0
  18. package/build/client/PowerPlatformClient.d.ts.map +1 -0
  19. package/build/client/PowerPlatformClient.js +198 -0
  20. package/build/client/PowerPlatformClient.js.map +1 -0
  21. package/build/client/index.d.ts +6 -0
  22. package/build/client/index.d.ts.map +1 -0
  23. package/build/client/index.js +6 -0
  24. package/build/client/index.js.map +1 -0
  25. package/build/client/types.d.ts +300 -0
  26. package/build/client/types.d.ts.map +1 -0
  27. package/build/client/types.js +5 -0
  28. package/build/client/types.js.map +1 -0
  29. package/build/index.d.ts +36 -0
  30. package/build/index.d.ts.map +1 -0
  31. package/build/index.js +55 -0
  32. package/build/index.js.map +1 -0
  33. package/build/services/AppManagementService.d.ts +95 -0
  34. package/build/services/AppManagementService.d.ts.map +1 -0
  35. package/build/services/AppManagementService.js +322 -0
  36. package/build/services/AppManagementService.js.map +1 -0
  37. package/build/services/AppService.d.ts +39 -0
  38. package/build/services/AppService.d.ts.map +1 -0
  39. package/build/services/AppService.js +173 -0
  40. package/build/services/AppService.js.map +1 -0
  41. package/build/services/AttributeService.d.ts +28 -0
  42. package/build/services/AttributeService.d.ts.map +1 -0
  43. package/build/services/AttributeService.js +86 -0
  44. package/build/services/AttributeService.js.map +1 -0
  45. package/build/services/BusinessRuleService.d.ts +22 -0
  46. package/build/services/BusinessRuleService.d.ts.map +1 -0
  47. package/build/services/BusinessRuleService.js +85 -0
  48. package/build/services/BusinessRuleService.js.map +1 -0
  49. package/build/services/DataService.d.ts +53 -0
  50. package/build/services/DataService.d.ts.map +1 -0
  51. package/build/services/DataService.js +204 -0
  52. package/build/services/DataService.js.map +1 -0
  53. package/build/services/DependencyService.d.ts +27 -0
  54. package/build/services/DependencyService.d.ts.map +1 -0
  55. package/build/services/DependencyService.js +47 -0
  56. package/build/services/DependencyService.js.map +1 -0
  57. package/build/services/EntityService.d.ts +42 -0
  58. package/build/services/EntityService.d.ts.map +1 -0
  59. package/build/services/EntityService.js +132 -0
  60. package/build/services/EntityService.js.map +1 -0
  61. package/build/services/FlowService.d.ts +55 -0
  62. package/build/services/FlowService.d.ts.map +1 -0
  63. package/build/services/FlowService.js +608 -0
  64. package/build/services/FlowService.js.map +1 -0
  65. package/build/services/FormService.d.ts +36 -0
  66. package/build/services/FormService.d.ts.map +1 -0
  67. package/build/services/FormService.js +55 -0
  68. package/build/services/FormService.js.map +1 -0
  69. package/build/services/MetadataService.d.ts +63 -0
  70. package/build/services/MetadataService.d.ts.map +1 -0
  71. package/build/services/MetadataService.js +176 -0
  72. package/build/services/MetadataService.js.map +1 -0
  73. package/build/services/OptionSetService.d.ts +40 -0
  74. package/build/services/OptionSetService.d.ts.map +1 -0
  75. package/build/services/OptionSetService.js +91 -0
  76. package/build/services/OptionSetService.js.map +1 -0
  77. package/build/services/PluginDeploymentService.d.ts +102 -0
  78. package/build/services/PluginDeploymentService.d.ts.map +1 -0
  79. package/build/services/PluginDeploymentService.js +412 -0
  80. package/build/services/PluginDeploymentService.js.map +1 -0
  81. package/build/services/PluginService.d.ts +61 -0
  82. package/build/services/PluginService.d.ts.map +1 -0
  83. package/build/services/PluginService.js +289 -0
  84. package/build/services/PluginService.js.map +1 -0
  85. package/build/services/PublishingService.d.ts +37 -0
  86. package/build/services/PublishingService.d.ts.map +1 -0
  87. package/build/services/PublishingService.js +65 -0
  88. package/build/services/PublishingService.js.map +1 -0
  89. package/build/services/RelationshipService.d.ts +29 -0
  90. package/build/services/RelationshipService.d.ts.map +1 -0
  91. package/build/services/RelationshipService.js +46 -0
  92. package/build/services/RelationshipService.js.map +1 -0
  93. package/build/services/SolutionService.d.ts +60 -0
  94. package/build/services/SolutionService.d.ts.map +1 -0
  95. package/build/services/SolutionService.js +125 -0
  96. package/build/services/SolutionService.js.map +1 -0
  97. package/build/services/ValidationService.d.ts +31 -0
  98. package/build/services/ValidationService.d.ts.map +1 -0
  99. package/build/services/ValidationService.js +391 -0
  100. package/build/services/ValidationService.js.map +1 -0
  101. package/build/services/ViewService.d.ts +36 -0
  102. package/build/services/ViewService.d.ts.map +1 -0
  103. package/build/services/ViewService.js +55 -0
  104. package/build/services/ViewService.js.map +1 -0
  105. package/build/services/WebResourceService.d.ts +40 -0
  106. package/build/services/WebResourceService.d.ts.map +1 -0
  107. package/build/services/WebResourceService.js +64 -0
  108. package/build/services/WebResourceService.js.map +1 -0
  109. package/build/services/WorkflowManagementService.d.ts +157 -0
  110. package/build/services/WorkflowManagementService.d.ts.map +1 -0
  111. package/build/services/WorkflowManagementService.js +567 -0
  112. package/build/services/WorkflowManagementService.js.map +1 -0
  113. package/build/services/WorkflowService.d.ts +28 -0
  114. package/build/services/WorkflowService.d.ts.map +1 -0
  115. package/build/services/WorkflowService.js +285 -0
  116. package/build/services/WorkflowService.js.map +1 -0
  117. package/build/services/index.d.ts +29 -0
  118. package/build/services/index.d.ts.map +1 -0
  119. package/build/services/index.js +31 -0
  120. package/build/services/index.js.map +1 -0
  121. package/build/utils/auditLogger.d.ts +76 -0
  122. package/build/utils/auditLogger.d.ts.map +1 -0
  123. package/build/utils/auditLogger.js +110 -0
  124. package/build/utils/auditLogger.js.map +1 -0
  125. package/build/utils/best-practices-formatters.d.ts +26 -0
  126. package/build/utils/best-practices-formatters.d.ts.map +1 -0
  127. package/build/utils/best-practices-formatters.js +238 -0
  128. package/build/utils/best-practices-formatters.js.map +1 -0
  129. package/build/utils/bestPractices.d.ts +150 -0
  130. package/build/utils/bestPractices.d.ts.map +1 -0
  131. package/build/utils/bestPractices.js +324 -0
  132. package/build/utils/bestPractices.js.map +1 -0
  133. package/build/utils/iconManager.d.ts +84 -0
  134. package/build/utils/iconManager.d.ts.map +1 -0
  135. package/build/utils/iconManager.js +338 -0
  136. package/build/utils/iconManager.js.map +1 -0
  137. package/build/utils/index.d.ts +11 -0
  138. package/build/utils/index.d.ts.map +1 -0
  139. package/build/utils/index.js +18 -0
  140. package/build/utils/index.js.map +1 -0
  141. package/build/utils/prompt-templates.d.ts +9 -0
  142. package/build/utils/prompt-templates.d.ts.map +1 -0
  143. package/build/utils/prompt-templates.js +31 -0
  144. package/build/utils/prompt-templates.js.map +1 -0
  145. package/build/utils/publisherConfig.d.ts +33 -0
  146. package/build/utils/publisherConfig.d.ts.map +1 -0
  147. package/build/utils/publisherConfig.js +54 -0
  148. package/build/utils/publisherConfig.js.map +1 -0
  149. package/build/utils/rate-limiter.d.ts +108 -0
  150. package/build/utils/rate-limiter.d.ts.map +1 -0
  151. package/build/utils/rate-limiter.js +242 -0
  152. package/build/utils/rate-limiter.js.map +1 -0
  153. package/package.json +65 -0
@@ -0,0 +1,567 @@
1
+ /**
2
+ * WorkflowManagementService
3
+ *
4
+ * Service for workflow state management and documentation.
5
+ * Note: This service should only be used by powerplatform-customization package.
6
+ */
7
+ import { auditLogger } from '../utils/auditLogger.js';
8
+ export class WorkflowManagementService {
9
+ client;
10
+ constructor(client) {
11
+ this.client = client;
12
+ }
13
+ /**
14
+ * Update workflow description
15
+ */
16
+ async updateWorkflowDescription(workflowId, description) {
17
+ const MAX_DESCRIPTION_LENGTH = 1024;
18
+ if (description.length > MAX_DESCRIPTION_LENGTH) {
19
+ const overage = description.length - MAX_DESCRIPTION_LENGTH;
20
+ throw new Error(`Description too long (${description.length}/${MAX_DESCRIPTION_LENGTH} chars). ` +
21
+ `Please shorten by ${overage} character${overage === 1 ? '' : 's'}.`);
22
+ }
23
+ // Get current description
24
+ const currentWorkflow = await this.client.makeRequest(`api/data/v9.2/workflows(${workflowId})?$select=description`);
25
+ const previousDescription = currentWorkflow.description || '';
26
+ // Update
27
+ await this.client.makeRequest(`api/data/v9.2/workflows(${workflowId})`, 'PATCH', { description });
28
+ return {
29
+ success: true,
30
+ previousDescription,
31
+ newDescription: description,
32
+ };
33
+ }
34
+ /**
35
+ * Update flow description (alias for updateWorkflowDescription)
36
+ */
37
+ async updateFlowDescription(flowId, description) {
38
+ return this.updateWorkflowDescription(flowId, description);
39
+ }
40
+ /**
41
+ * Deactivate a workflow (set to Draft state)
42
+ */
43
+ async deactivateWorkflow(workflowId) {
44
+ const currentWorkflow = await this.client.makeRequest(`api/data/v9.2/workflows(${workflowId})?$select=workflowid,name,statecode,statuscode`);
45
+ const previousState = currentWorkflow.statecode === 0
46
+ ? 'Draft'
47
+ : currentWorkflow.statecode === 1
48
+ ? 'Activated'
49
+ : 'Suspended';
50
+ // Already Draft
51
+ if (currentWorkflow.statecode === 0) {
52
+ auditLogger.log({
53
+ operation: 'deactivate-workflow',
54
+ operationType: 'UPDATE',
55
+ componentType: 'workflow',
56
+ componentName: currentWorkflow.name,
57
+ componentId: workflowId,
58
+ parameters: { previousState, result: 'already-draft' },
59
+ success: true,
60
+ });
61
+ return {
62
+ success: true,
63
+ workflowId,
64
+ workflowName: currentWorkflow.name,
65
+ previousState,
66
+ newState: 'Draft',
67
+ };
68
+ }
69
+ try {
70
+ await this.client.makeRequest(`api/data/v9.2/workflows(${workflowId})/Microsoft.Dynamics.CRM.SetState`, 'POST', { State: 0, Status: 1 });
71
+ auditLogger.log({
72
+ operation: 'deactivate-workflow',
73
+ operationType: 'UPDATE',
74
+ componentType: 'workflow',
75
+ componentName: currentWorkflow.name,
76
+ componentId: workflowId,
77
+ parameters: { previousState, newState: 'Draft' },
78
+ success: true,
79
+ });
80
+ return {
81
+ success: true,
82
+ workflowId,
83
+ workflowName: currentWorkflow.name,
84
+ previousState,
85
+ newState: 'Draft',
86
+ };
87
+ }
88
+ catch (error) {
89
+ // Check for "already in target state" error
90
+ const err = error;
91
+ if (err.response?.data?.error?.code === '0x80045003') {
92
+ return {
93
+ success: true,
94
+ workflowId,
95
+ workflowName: currentWorkflow.name,
96
+ previousState,
97
+ newState: 'Draft',
98
+ };
99
+ }
100
+ throw error;
101
+ }
102
+ }
103
+ /**
104
+ * Activate a workflow (set to Activated state)
105
+ */
106
+ async activateWorkflow(workflowId) {
107
+ const currentWorkflow = await this.client.makeRequest(`api/data/v9.2/workflows(${workflowId})?$select=workflowid,name,statecode,statuscode`);
108
+ const previousState = currentWorkflow.statecode === 0
109
+ ? 'Draft'
110
+ : currentWorkflow.statecode === 1
111
+ ? 'Activated'
112
+ : 'Suspended';
113
+ // Already Activated
114
+ if (currentWorkflow.statecode === 1) {
115
+ auditLogger.log({
116
+ operation: 'activate-workflow',
117
+ operationType: 'UPDATE',
118
+ componentType: 'workflow',
119
+ componentName: currentWorkflow.name,
120
+ componentId: workflowId,
121
+ parameters: { previousState, result: 'already-activated' },
122
+ success: true,
123
+ });
124
+ return {
125
+ success: true,
126
+ workflowId,
127
+ workflowName: currentWorkflow.name,
128
+ previousState,
129
+ newState: 'Activated',
130
+ };
131
+ }
132
+ try {
133
+ await this.client.makeRequest(`api/data/v9.2/workflows(${workflowId})/Microsoft.Dynamics.CRM.SetState`, 'POST', { State: 1, Status: 2 });
134
+ auditLogger.log({
135
+ operation: 'activate-workflow',
136
+ operationType: 'UPDATE',
137
+ componentType: 'workflow',
138
+ componentName: currentWorkflow.name,
139
+ componentId: workflowId,
140
+ parameters: { previousState, newState: 'Activated' },
141
+ success: true,
142
+ });
143
+ return {
144
+ success: true,
145
+ workflowId,
146
+ workflowName: currentWorkflow.name,
147
+ previousState,
148
+ newState: 'Activated',
149
+ };
150
+ }
151
+ catch (error) {
152
+ const err = error;
153
+ if (err.response?.data?.error?.code === '0x80045003') {
154
+ return {
155
+ success: true,
156
+ workflowId,
157
+ workflowName: currentWorkflow.name,
158
+ previousState,
159
+ newState: 'Activated',
160
+ };
161
+ }
162
+ throw error;
163
+ }
164
+ }
165
+ /**
166
+ * Generate YAML metadata block for documentation
167
+ */
168
+ generateAutomationYaml(analysis) {
169
+ const today = new Date().toISOString().split('T')[0];
170
+ return `[AUTO-DOCS:v1]
171
+ tables_modified: ${analysis.tablesModified.join(', ') || 'none'}
172
+ trigger: ${analysis.trigger}
173
+ trigger_fields: ${analysis.triggerFields.join(', ') || 'none'}
174
+ custom_apis_called: ${analysis.customApisCalled.length > 0 ? analysis.customApisCalled.join(', ') : 'none'}
175
+ action_count: ${analysis.actionCount}
176
+ analyzed: ${today}
177
+ ---`;
178
+ }
179
+ /**
180
+ * Merge YAML metadata with existing description
181
+ */
182
+ mergeDescriptionWithYaml(yamlBlock, existingDescription) {
183
+ // Empty description
184
+ if (!existingDescription || existingDescription.trim() === '') {
185
+ return `${yamlBlock}\n[Manual notes below this line are preserved on re-analysis]`;
186
+ }
187
+ // Has [AUTO-DOCS: tag
188
+ const autoDocsMatch = existingDescription.match(/\[AUTO-DOCS:v\d+\]([\s\S]*?)^---$/m);
189
+ if (autoDocsMatch) {
190
+ const separatorIndex = existingDescription.indexOf('---', autoDocsMatch.index);
191
+ const manualNotes = existingDescription
192
+ .substring(separatorIndex + 3)
193
+ .trim();
194
+ if (manualNotes) {
195
+ return `${yamlBlock}\n${manualNotes}`;
196
+ }
197
+ else {
198
+ return `${yamlBlock}\n[Manual notes below this line are preserved on re-analysis]`;
199
+ }
200
+ }
201
+ // No [AUTO-DOCS: tag - preserve content as manual notes
202
+ return `${yamlBlock}\n${existingDescription.trim()}`;
203
+ }
204
+ /**
205
+ * Document automation with YAML metadata
206
+ */
207
+ async documentAutomation(automationId, type, parseFlowSummary, parseWorkflowXamlSummary) {
208
+ const accessToken = await this.client.getAccessToken();
209
+ const config = this.client.getConfig();
210
+ const response = await fetch(`${config.organizationUrl}/api/data/v9.2/workflows(${automationId})?$select=category,clientdata,description`, {
211
+ headers: {
212
+ Authorization: `Bearer ${accessToken}`,
213
+ Accept: 'application/json',
214
+ 'OData-MaxVersion': '4.0',
215
+ 'OData-Version': '4.0',
216
+ },
217
+ });
218
+ if (!response.ok) {
219
+ throw new Error(`Failed to fetch automation: ${response.status} ${response.statusText}`);
220
+ }
221
+ const automation = (await response.json());
222
+ const previousDescription = automation.description || '';
223
+ // Detect type if not provided
224
+ const detectedType = type || (automation.category === 5 ? 'flow' : 'workflow');
225
+ let analysis;
226
+ if (detectedType === 'flow') {
227
+ if (!automation.clientdata) {
228
+ throw new Error('Flow has no clientdata (definition)');
229
+ }
230
+ const flowDefinition = JSON.parse(automation.clientdata);
231
+ const summary = parseFlowSummary(flowDefinition);
232
+ const actionNames = Array.isArray(summary.actions)
233
+ ? summary.actions
234
+ .map((a) => {
235
+ const action = a;
236
+ return (action.name || action.type || 'unknown');
237
+ })
238
+ .slice(0, 10)
239
+ : [];
240
+ analysis = {
241
+ tablesModified: summary.tablesModified,
242
+ trigger: summary.triggerInfo,
243
+ triggerFields: summary.triggerFields,
244
+ actions: actionNames,
245
+ actionCount: Array.isArray(summary.actions) ? summary.actions.length : 0,
246
+ customApisCalled: summary.customApisCalled || [],
247
+ };
248
+ }
249
+ else {
250
+ // Fetch XAML
251
+ const xamlResponse = await fetch(`${config.organizationUrl}/api/data/v9.2/workflows(${automationId})?$select=xaml`, {
252
+ headers: {
253
+ Authorization: `Bearer ${accessToken}`,
254
+ Accept: 'application/json',
255
+ 'OData-MaxVersion': '4.0',
256
+ 'OData-Version': '4.0',
257
+ },
258
+ });
259
+ if (!xamlResponse.ok) {
260
+ throw new Error(`Failed to fetch workflow XAML: ${xamlResponse.status}`);
261
+ }
262
+ const xamlData = (await xamlResponse.json());
263
+ if (!xamlData.xaml) {
264
+ throw new Error('Workflow has no XAML definition');
265
+ }
266
+ const summary = parseWorkflowXamlSummary(xamlData.xaml);
267
+ const actions = [];
268
+ if (summary.createEntityCount > 0)
269
+ actions.push('create_record');
270
+ if (summary.updateEntityCount > 0)
271
+ actions.push('update_record');
272
+ if (summary.assignEntityCount > 0)
273
+ actions.push('assign_record');
274
+ if (summary.setStateCount > 0)
275
+ actions.push('set_state');
276
+ analysis = {
277
+ tablesModified: summary.tablesModified,
278
+ trigger: summary.triggerInfo,
279
+ triggerFields: summary.triggerFields,
280
+ actions,
281
+ actionCount: actions.length,
282
+ customApisCalled: [],
283
+ };
284
+ }
285
+ // Generate YAML and merge
286
+ const yamlBlock = this.generateAutomationYaml(analysis);
287
+ const newDescription = this.mergeDescriptionWithYaml(yamlBlock, previousDescription);
288
+ // Update description
289
+ const updateResult = await this.updateWorkflowDescription(automationId, newDescription);
290
+ return {
291
+ analysis,
292
+ descriptionUpdated: updateResult.success,
293
+ previousDescription: updateResult.previousDescription,
294
+ newDescription: updateResult.newDescription,
295
+ };
296
+ }
297
+ /**
298
+ * Document workflow safely with deactivate/reactivate
299
+ */
300
+ async documentWorkflowSafe(workflowId, type, parseFlowSummary, parseWorkflowXamlSummary) {
301
+ // Get initial state
302
+ const currentWorkflow = await this.client.makeRequest(`api/data/v9.2/workflows(${workflowId})?$select=workflowid,name,statecode,statuscode`);
303
+ const initialState = currentWorkflow.statecode === 0
304
+ ? 'Draft'
305
+ : currentWorkflow.statecode === 1
306
+ ? 'Activated'
307
+ : 'Suspended';
308
+ const wasInitiallyActive = currentWorkflow.statecode === 1;
309
+ auditLogger.log({
310
+ operation: 'document-workflow-safe-start',
311
+ operationType: 'UPDATE',
312
+ componentType: 'workflow',
313
+ componentName: currentWorkflow.name,
314
+ componentId: workflowId,
315
+ parameters: { initialState },
316
+ success: true,
317
+ });
318
+ let wasDeactivated = false;
319
+ let wasReactivated = false;
320
+ try {
321
+ // Deactivate if needed
322
+ if (wasInitiallyActive) {
323
+ const deactivateResult = await this.deactivateWorkflow(workflowId);
324
+ wasDeactivated = deactivateResult.success;
325
+ if (!wasDeactivated) {
326
+ throw new Error('Failed to deactivate workflow');
327
+ }
328
+ }
329
+ // Document
330
+ let documentResult;
331
+ try {
332
+ documentResult = await this.documentAutomation(workflowId, type, parseFlowSummary, parseWorkflowXamlSummary);
333
+ }
334
+ catch (documentError) {
335
+ // Rollback on failure
336
+ if (wasDeactivated && wasInitiallyActive) {
337
+ try {
338
+ await this.activateWorkflow(workflowId);
339
+ }
340
+ catch {
341
+ // Log but continue to throw original error
342
+ }
343
+ }
344
+ const errorMsg = documentError instanceof Error
345
+ ? documentError.message
346
+ : 'Unknown error';
347
+ throw new Error(`Documentation failed: ${errorMsg}`);
348
+ }
349
+ // Reactivate if was initially active
350
+ if (wasInitiallyActive) {
351
+ try {
352
+ const activateResult = await this.activateWorkflow(workflowId);
353
+ wasReactivated = activateResult.success;
354
+ if (!wasReactivated) {
355
+ return {
356
+ success: true,
357
+ workflowId,
358
+ workflowName: currentWorkflow.name,
359
+ analysis: documentResult.analysis,
360
+ descriptionUpdated: documentResult.descriptionUpdated,
361
+ previousDescription: documentResult.previousDescription,
362
+ newDescription: documentResult.newDescription,
363
+ stateManagement: {
364
+ initialState,
365
+ wasDeactivated,
366
+ wasReactivated: false,
367
+ finalState: 'Draft (⚠️ Manual reactivation required)',
368
+ },
369
+ };
370
+ }
371
+ }
372
+ catch {
373
+ return {
374
+ success: true,
375
+ workflowId,
376
+ workflowName: currentWorkflow.name,
377
+ analysis: documentResult.analysis,
378
+ descriptionUpdated: documentResult.descriptionUpdated,
379
+ previousDescription: documentResult.previousDescription,
380
+ newDescription: documentResult.newDescription,
381
+ stateManagement: {
382
+ initialState,
383
+ wasDeactivated,
384
+ wasReactivated: false,
385
+ finalState: 'Draft (⚠️ Manual reactivation required)',
386
+ },
387
+ };
388
+ }
389
+ }
390
+ const finalState = wasInitiallyActive ? 'Activated' : 'Draft';
391
+ auditLogger.log({
392
+ operation: 'document-workflow-safe-complete',
393
+ operationType: 'UPDATE',
394
+ componentType: 'workflow',
395
+ componentName: currentWorkflow.name,
396
+ componentId: workflowId,
397
+ parameters: { initialState, finalState, wasDeactivated, wasReactivated },
398
+ success: true,
399
+ });
400
+ return {
401
+ success: true,
402
+ workflowId,
403
+ workflowName: currentWorkflow.name,
404
+ analysis: documentResult.analysis,
405
+ descriptionUpdated: documentResult.descriptionUpdated,
406
+ previousDescription: documentResult.previousDescription,
407
+ newDescription: documentResult.newDescription,
408
+ stateManagement: {
409
+ initialState,
410
+ wasDeactivated,
411
+ wasReactivated,
412
+ finalState,
413
+ },
414
+ };
415
+ }
416
+ catch (error) {
417
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
418
+ auditLogger.log({
419
+ operation: 'document-workflow-safe-error',
420
+ operationType: 'UPDATE',
421
+ componentType: 'workflow',
422
+ componentName: currentWorkflow.name,
423
+ componentId: workflowId,
424
+ success: false,
425
+ error: errorMessage,
426
+ });
427
+ throw error;
428
+ }
429
+ }
430
+ // =====================================================
431
+ // FLOW MANAGEMENT METHODS
432
+ // =====================================================
433
+ /**
434
+ * Create a new Power Automate flow from an existing template flow
435
+ */
436
+ async createFlow(name, templateFlowId, options = {}) {
437
+ // 1. Validate template flow exists and is accessible
438
+ const templateFlow = await this.client.makeRequest(`api/data/v9.2/workflows(${templateFlowId})?$select=workflowid,name,clientdata,primaryentity,category`);
439
+ // Verify it's a flow (category = 5)
440
+ if (templateFlow.category !== 5) {
441
+ throw new Error(`Template '${templateFlow.name}' is not a flow (category=${templateFlow.category}). Use a Power Automate cloud flow as template.`);
442
+ }
443
+ if (!templateFlow.clientdata) {
444
+ throw new Error(`Template flow '${templateFlow.name}' has no clientdata (definition)`);
445
+ }
446
+ // 2. Parse clientdata JSON
447
+ let templateDefinition;
448
+ try {
449
+ templateDefinition = JSON.parse(templateFlow.clientdata);
450
+ }
451
+ catch (error) {
452
+ throw new Error(`Template flow has invalid JSON definition: ${error instanceof Error ? error.message : String(error)}`);
453
+ }
454
+ // 3. Update connection references if mappings provided
455
+ let updatedConnectionsCount = 0;
456
+ if (options.connectionReferenceMappings) {
457
+ const properties = templateDefinition.properties;
458
+ const connectionReferences = properties?.connectionReferences || {};
459
+ for (const [refName, newConnectionId] of Object.entries(options.connectionReferenceMappings)) {
460
+ const ref = connectionReferences[refName];
461
+ if (ref?.connection) {
462
+ const connection = ref.connection;
463
+ connection.connectionReferenceLogicalName = newConnectionId;
464
+ updatedConnectionsCount++;
465
+ }
466
+ }
467
+ }
468
+ // 4. Generate new flow ID
469
+ const newFlowId = crypto.randomUUID();
470
+ // 5. Create new workflow record
471
+ const createPayload = {
472
+ workflowid: newFlowId,
473
+ name: name,
474
+ category: 5, // Cloud Flow
475
+ type: 1, // Definition
476
+ statecode: options.state === 'activated' ? 1 : 0,
477
+ statuscode: options.state === 'activated' ? 2 : 1,
478
+ primaryentity: templateFlow.primaryentity || 'none',
479
+ clientdata: JSON.stringify(templateDefinition),
480
+ description: options.description || ''
481
+ };
482
+ // 6. Execute POST request
483
+ await this.client.makeRequest('api/data/v9.2/workflows', 'POST', createPayload);
484
+ // 7. Audit log
485
+ auditLogger.log({
486
+ operation: 'create-flow',
487
+ operationType: 'CREATE',
488
+ componentType: 'flow',
489
+ componentName: name,
490
+ componentId: newFlowId,
491
+ parameters: { templateFlowId, state: options.state || 'draft' },
492
+ success: true,
493
+ });
494
+ return {
495
+ success: true,
496
+ flowId: newFlowId,
497
+ flowName: name,
498
+ state: options.state || 'draft',
499
+ connectionReferencesUpdated: updatedConnectionsCount,
500
+ warnings: []
501
+ };
502
+ }
503
+ /**
504
+ * Delete a Power Automate flow (permanent operation)
505
+ */
506
+ async deleteFlow(flowId) {
507
+ // 1. Get current flow to validate and capture name
508
+ const flow = await this.client.makeRequest(`api/data/v9.2/workflows(${flowId})?$select=workflowid,name,statecode,statuscode,category`);
509
+ const flowName = flow.name;
510
+ const previousState = flow.statecode === 0 ? 'Draft' :
511
+ flow.statecode === 1 ? 'Activated' : 'Suspended';
512
+ // Verify it's a flow (category = 5)
513
+ if (flow.category !== 5) {
514
+ throw new Error(`Cannot delete '${flowName}' - it is not a flow (category=${flow.category}). This tool is for Power Automate cloud flows only.`);
515
+ }
516
+ // 2. Check if flow is activated (must deactivate first)
517
+ if (flow.statecode === 1) {
518
+ throw new Error(`Flow '${flowName}' is currently Activated. Deactivate the flow before deletion using deactivate-flow tool.`);
519
+ }
520
+ // 3. Execute DELETE request
521
+ await this.client.makeRequest(`api/data/v9.2/workflows(${flowId})`, 'DELETE');
522
+ // 4. Audit log
523
+ auditLogger.log({
524
+ operation: 'delete-flow',
525
+ operationType: 'DELETE',
526
+ componentType: 'flow',
527
+ componentName: flowName,
528
+ componentId: flowId,
529
+ parameters: { previousState },
530
+ success: true,
531
+ });
532
+ return {
533
+ success: true,
534
+ flowId,
535
+ flowName,
536
+ previousState
537
+ };
538
+ }
539
+ /**
540
+ * Clone an existing flow with a new name (convenience wrapper over createFlow)
541
+ */
542
+ async cloneFlow(sourceFlowId, newName, options = {}) {
543
+ // 1. Get source flow metadata
544
+ const sourceFlow = await this.client.makeRequest(`api/data/v9.2/workflows(${sourceFlowId})?$select=workflowid,name,description,category`);
545
+ // Verify it's a flow
546
+ if (sourceFlow.category !== 5) {
547
+ throw new Error(`Cannot clone '${sourceFlow.name}' - it is not a flow (category=${sourceFlow.category}). This tool is for Power Automate cloud flows only.`);
548
+ }
549
+ // 2. Use createFlow with source as template
550
+ const createResult = await this.createFlow(newName, sourceFlowId, {
551
+ description: options.description || sourceFlow.description || '',
552
+ state: 'draft', // Always clone as draft
553
+ connectionReferenceMappings: options.updateConnectionReferences ? options.connectionReferenceMappings : undefined
554
+ });
555
+ // 3. Return clone-specific result
556
+ return {
557
+ success: true,
558
+ sourceFlowId,
559
+ sourceFlowName: sourceFlow.name,
560
+ newFlowId: createResult.flowId,
561
+ newFlowName: createResult.flowName,
562
+ state: 'draft',
563
+ connectionReferencesUpdated: createResult.connectionReferencesUpdated
564
+ };
565
+ }
566
+ }
567
+ //# sourceMappingURL=WorkflowManagementService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowManagementService.js","sourceRoot":"","sources":["../../src/services/WorkflowManagementService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * WorkflowService
3
+ *
4
+ * Read-only service for classic Dynamics workflows.
5
+ */
6
+ import type { PowerPlatformClient } from '../client/PowerPlatformClient.js';
7
+ export declare class WorkflowService {
8
+ private client;
9
+ constructor(client: PowerPlatformClient);
10
+ /**
11
+ * Get all classic Dynamics workflows in the environment
12
+ */
13
+ getWorkflows(activeOnly?: boolean, maxRecords?: number): Promise<{
14
+ totalCount: number;
15
+ hasMore: boolean;
16
+ requestedMax: number;
17
+ workflows: unknown[];
18
+ }>;
19
+ /**
20
+ * Get a specific classic workflow with its complete XAML definition
21
+ */
22
+ getWorkflowDefinition(workflowId: string, summary?: boolean): Promise<unknown>;
23
+ /**
24
+ * Parse workflow XAML to extract a structured summary
25
+ */
26
+ parseWorkflowXamlSummary(xaml: string | null): Record<string, unknown>;
27
+ }
28
+ //# sourceMappingURL=WorkflowService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowService.d.ts","sourceRoot":"","sources":["../../src/services/WorkflowService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAG5E,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAE/C;;OAEG;IACG,YAAY,CAChB,UAAU,GAAE,OAAe,EAC3B,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,OAAO,EAAE,CAAC;KACtB,CAAC;IAsDF;;OAEG;IACG,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC;IA2DnB;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAsNvE"}