@mcp-consultant-tools/powerplatform 25.0.0 → 26.0.0-beta.3

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.
@@ -1,259 +1,86 @@
1
- import { type AuthProvider } from './auth/index.js';
2
- export interface PowerPlatformConfig {
3
- organizationUrl: string;
4
- clientId: string;
5
- /** Client secret is optional - if not provided, interactive auth will be used */
6
- clientSecret?: string;
7
- tenantId: string;
8
- }
9
- export interface ApiCollectionResponse<T> {
10
- value: T[];
11
- [key: string]: any;
12
- }
13
- export interface Violation {
14
- attributeLogicalName?: string;
15
- attributeType?: string;
16
- createdOn?: string;
17
- rule: string;
18
- severity: 'MUST' | 'SHOULD';
19
- message: string;
20
- currentValue: string;
21
- expectedValue: string;
22
- action: string;
23
- recommendation?: string;
24
- }
25
- export interface EntityValidationResult {
26
- logicalName: string;
27
- schemaName: string;
28
- displayName: string;
29
- isRefData: boolean;
30
- attributesChecked: number;
31
- violations: Violation[];
32
- isCompliant: boolean;
33
- }
34
- export interface ViolationSummaryByRule {
35
- rule: string;
36
- severity: 'MUST' | 'SHOULD';
37
- totalCount: number;
38
- affectedEntities: string[];
39
- affectedColumns: string[];
40
- action: string;
41
- recommendation?: string;
42
- }
43
- export interface BestPracticesValidationResult {
44
- metadata: {
45
- generatedAt: string;
46
- solutionName?: string;
47
- solutionUniqueName?: string;
48
- publisherPrefix: string;
49
- recentDays: number;
50
- executionTimeMs: number;
51
- };
52
- summary: {
53
- entitiesChecked: number;
54
- attributesChecked: number;
55
- totalViolations: number;
56
- criticalViolations: number;
57
- warnings: number;
58
- compliantEntities: number;
59
- };
60
- violationsSummary: ViolationSummaryByRule[];
61
- entities: EntityValidationResult[];
62
- statistics: {
63
- systemColumnsExcluded: number;
64
- oldColumnsExcluded: number;
65
- refDataTablesSkipped: number;
66
- };
67
- }
68
- export interface FlowFilterOptions {
69
- activeOnly?: boolean;
70
- maxRecords?: number;
71
- excludeCustomerInsights?: boolean;
72
- excludeSystem?: boolean;
73
- excludeCopilotSales?: boolean;
74
- nameContains?: string;
75
- }
76
- export interface FlowListResult {
77
- totalCount: number;
78
- hasMore: boolean;
79
- requestedMax: number;
80
- excluded: {
81
- customerInsights: number;
82
- system: number;
83
- copilotSales: number;
84
- total: number;
85
- };
86
- filterApplied: {
87
- excludeCustomerInsights: boolean;
88
- excludeSystem: boolean;
89
- excludeCopilotSales: boolean;
90
- nameContains?: string;
91
- };
92
- flows: FlowSummary[];
93
- }
94
- export interface FlowSummary {
95
- workflowid: string;
96
- name: string;
97
- description: string | null;
98
- state: string;
99
- statecode: number;
100
- statuscode: number;
101
- type: string;
102
- primaryEntity: string | null;
103
- isManaged: boolean;
104
- ownerId: string;
105
- modifiedOn: string;
106
- modifiedBy: string | null;
107
- createdOn: string;
108
- }
1
+ /**
2
+ * PowerPlatformService - Slim Read-Only Facade
3
+ *
4
+ * This is a facade that delegates to services in @mcp-consultant-tools/powerplatform-core.
5
+ * It provides READ-ONLY access to PowerPlatform/Dataverse entities.
6
+ *
7
+ * For data CRUD operations, use @mcp-consultant-tools/powerplatform-data.
8
+ * For customization operations, use @mcp-consultant-tools/powerplatform-customization.
9
+ */
10
+ import { type PowerPlatformConfig, type ApiCollectionResponse, type FlowFilterOptions, type FlowListResult, type FlowSummary, type BestPracticesValidationResult, type AuthProvider } from '@mcp-consultant-tools/powerplatform-core';
11
+ export type { PowerPlatformConfig, ApiCollectionResponse, FlowFilterOptions, FlowListResult, FlowSummary, BestPracticesValidationResult, };
109
12
  export declare class PowerPlatformService {
110
- private config;
111
- private authProvider;
112
- private environmentId;
13
+ private client;
14
+ private metadata;
15
+ private plugin;
16
+ private flow;
17
+ private workflow;
18
+ private businessRule;
19
+ private app;
20
+ private validation;
21
+ private form;
22
+ private view;
23
+ private webResource;
24
+ private solution;
25
+ private dependency;
26
+ private publishing;
27
+ private relationship;
113
28
  constructor(config: PowerPlatformConfig, authProvider?: AuthProvider);
114
- /**
115
- * Get the authentication mode being used
116
- */
117
29
  getAuthMode(): 'service-principal' | 'interactive';
118
- /**
119
- * Get information about the authenticated user (if using interactive auth)
120
- */
121
30
  getUserInfo(): Promise<{
122
31
  name: string;
123
32
  email: string;
124
33
  oid: string;
125
34
  } | null>;
126
- /**
127
- * Clear cached tokens (logout) - only applicable for interactive auth
128
- */
129
35
  logout(): Promise<void>;
130
- /**
131
- * Get an access token for the PowerPlatform API
132
- */
133
- private getAccessToken;
134
- /**
135
- * Make an authenticated request to the PowerPlatform API
136
- * Extended to support all HTTP methods for write operations
137
- */
138
- private makeRequest;
139
- /**
140
- * Get metadata about an entity
141
- * @param entityName The logical name of the entity
142
- */
143
- getEntityMetadata(entityName: string): Promise<any>;
144
- /**
145
- * Get metadata about entity attributes/fields
146
- * @param entityName The logical name of the entity
147
- */
36
+ getEntityMetadata(entityName: string): Promise<unknown>;
148
37
  getEntityAttributes(entityName: string, options?: {
149
38
  prefix?: string;
150
39
  attributeType?: string;
151
40
  maxAttributes?: number;
152
41
  }): Promise<{
153
- value: any[];
42
+ value: unknown[];
154
43
  hasMore: boolean;
155
44
  returnedCount: number;
156
45
  totalBeforeFilter?: number;
157
46
  }>;
158
- /**
159
- * Get metadata about a specific entity attribute/field
160
- * @param entityName The logical name of the entity
161
- * @param attributeName The logical name of the attribute
162
- */
163
- getEntityAttribute(entityName: string, attributeName: string): Promise<any>;
164
- /**
165
- * Get one-to-many relationships for an entity
166
- * @param entityName The logical name of the entity
167
- */
168
- getEntityOneToManyRelationships(entityName: string): Promise<ApiCollectionResponse<any>>;
169
- /**
170
- * Get many-to-many relationships for an entity
171
- * @param entityName The logical name of the entity
172
- */
173
- getEntityManyToManyRelationships(entityName: string): Promise<ApiCollectionResponse<any>>;
174
- /**
175
- * Get all relationships (one-to-many and many-to-many) for an entity
176
- * @param entityName The logical name of the entity
177
- */
47
+ getEntityAttribute(entityName: string, attributeName: string): Promise<unknown>;
178
48
  getEntityRelationships(entityName: string): Promise<{
179
- oneToMany: ApiCollectionResponse<any>;
180
- manyToMany: ApiCollectionResponse<any>;
49
+ oneToMany: ApiCollectionResponse<unknown>;
50
+ manyToMany: ApiCollectionResponse<unknown>;
181
51
  }>;
182
- /**
183
- * Get a global option set definition by name
184
- * @param optionSetName The name of the global option set
185
- * @returns The global option set definition
186
- */
187
- getGlobalOptionSet(optionSetName: string): Promise<any>;
188
- /**
189
- * Get a specific record by entity name (plural) and ID
190
- * @param entityNamePlural The plural name of the entity (e.g., 'accounts', 'contacts')
191
- * @param recordId The GUID of the record
192
- * @returns The record data
193
- */
194
- getRecord(entityNamePlural: string, recordId: string): Promise<any>;
195
- /**
196
- * Query records using entity name (plural) and a filter expression
197
- * @param entityNamePlural The plural name of the entity (e.g., 'accounts', 'contacts')
198
- * @param filter OData filter expression (e.g., "name eq 'test'")
199
- * @param maxRecords Maximum number of records to retrieve (default: 50)
200
- * @returns Filtered list of records
201
- */
202
- queryRecords(entityNamePlural: string, filter: string, maxRecords?: number, select?: string[]): Promise<{
203
- value: any[];
52
+ getGlobalOptionSet(optionSetName: string): Promise<unknown>;
53
+ getGlobalOptionSets(options?: {
54
+ maxRecords?: number;
55
+ prefix?: string;
56
+ }): Promise<{
57
+ value: unknown[];
204
58
  hasMore: boolean;
205
- returnedCount: number;
206
- requestedMax: number;
59
+ totalCount: number;
60
+ }>;
61
+ getPluginAssemblies(includeManaged?: boolean, maxRecords?: number): Promise<{
62
+ totalCount: number;
63
+ assemblies: unknown[];
64
+ }>;
65
+ getPluginAssemblyComplete(assemblyName: string, includeDisabled?: boolean): Promise<{
66
+ assembly: unknown;
67
+ pluginTypes: unknown[];
68
+ steps: unknown[];
69
+ validation: {
70
+ hasDisabledSteps: boolean;
71
+ hasAsyncSteps: boolean;
72
+ hasSyncSteps: boolean;
73
+ stepsWithoutFilteringAttributes: string[];
74
+ stepsWithoutImages: string[];
75
+ potentialIssues: string[];
76
+ };
77
+ }>;
78
+ getEntityPluginPipeline(entityName: string, messageFilter?: string, includeDisabled?: boolean): Promise<{
79
+ entity: string;
80
+ messages: unknown[];
81
+ steps: unknown[];
82
+ executionOrder: string[];
207
83
  }>;
208
- /**
209
- * Create a new record in Dataverse
210
- * @param entityNamePlural The plural name of the entity (e.g., 'accounts', 'contacts')
211
- * @param data Record data as JSON object (field names must match logical names)
212
- * @returns Created record with ID and OData context
213
- */
214
- createRecord(entityNamePlural: string, data: Record<string, any>): Promise<any>;
215
- /**
216
- * Update an existing record in Dataverse
217
- * @param entityNamePlural The plural name of the entity (e.g., 'accounts', 'contacts')
218
- * @param recordId The GUID of the record to update
219
- * @param data Partial record data to update (only fields being changed)
220
- * @returns Updated record (if Prefer header used) or void
221
- */
222
- updateRecord(entityNamePlural: string, recordId: string, data: Record<string, any>): Promise<any>;
223
- /**
224
- * Delete a record from Dataverse
225
- * @param entityNamePlural The plural name of the entity (e.g., 'accounts', 'contacts')
226
- * @param recordId The GUID of the record to delete
227
- * @returns Void (successful deletion returns 204 No Content)
228
- */
229
- deleteRecord(entityNamePlural: string, recordId: string): Promise<void>;
230
- /**
231
- * Get all plugin assemblies in the environment
232
- * @param includeManaged Include managed assemblies (default: false)
233
- * @param maxRecords Maximum number of assemblies to return (default: 100)
234
- * @returns List of plugin assemblies with basic information
235
- */
236
- getPluginAssemblies(includeManaged?: boolean, maxRecords?: number): Promise<any>;
237
- /**
238
- * Get a plugin assembly by name with all related plugin types, steps, and images
239
- * @param assemblyName The name of the plugin assembly
240
- * @param includeDisabled Include disabled steps (default: false)
241
- * @returns Complete plugin assembly information with validation
242
- */
243
- getPluginAssemblyComplete(assemblyName: string, includeDisabled?: boolean): Promise<any>;
244
- /**
245
- * Get all plugins that execute on a specific entity, organized by message and execution order
246
- * @param entityName The logical name of the entity
247
- * @param messageFilter Optional filter by message name (e.g., "Create", "Update")
248
- * @param includeDisabled Include disabled steps (default: false)
249
- * @returns Complete plugin pipeline for the entity
250
- */
251
- getEntityPluginPipeline(entityName: string, messageFilter?: string, includeDisabled?: boolean): Promise<any>;
252
- /**
253
- * Get plugin trace logs with filtering
254
- * @param options Filtering options for trace logs
255
- * @returns Filtered trace logs with parsed exception details
256
- */
257
84
  getPluginTraceLogs(options: {
258
85
  entityName?: string;
259
86
  messageName?: string;
@@ -262,23 +89,11 @@ export declare class PowerPlatformService {
262
89
  exceptionOnly?: boolean;
263
90
  hoursBack?: number;
264
91
  maxRecords?: number;
265
- }): Promise<any>;
266
- private getOperationTypeName;
267
- private extractExceptionType;
268
- private extractExceptionMessage;
269
- /**
270
- * Get Power Automate cloud flows with smart filtering
271
- * By default, excludes non-custom flows (CXP_, SYSTEM, Copilot for Sales) to reduce noise.
272
- * @param options Filter options for flows
273
- * @returns FlowListResult with flows and exclusion statistics
274
- */
92
+ }): Promise<{
93
+ totalCount: number;
94
+ logs: unknown[];
95
+ }>;
275
96
  getFlows(options?: FlowFilterOptions): Promise<FlowListResult>;
276
- /**
277
- * Search workflows (both classic workflows and Power Automate flows)
278
- * Supports flexible filtering by name, entity, description, category, and state
279
- * @param options Search filter options
280
- * @returns Array of matching workflows with metadata
281
- */
282
97
  searchWorkflows(options?: {
283
98
  name?: string;
284
99
  primaryEntity?: string;
@@ -291,517 +106,65 @@ export declare class PowerPlatformService {
291
106
  totalCount: number;
292
107
  hasMore: boolean;
293
108
  requestedMax: number;
294
- workflows: any[];
109
+ workflows: unknown[];
110
+ }>;
111
+ getFlowDefinition(flowId: string, summary?: boolean): Promise<unknown>;
112
+ getFlowRuns(flowId: string, maxRecords?: number): Promise<{
113
+ flowId: string;
114
+ totalCount: number;
115
+ runs: unknown[];
116
+ }>;
117
+ getFlowRunDetails(flowId: string, runId: string): Promise<unknown>;
118
+ getWorkflows(activeOnly?: boolean, maxRecords?: number): Promise<{
119
+ totalCount: number;
120
+ hasMore: boolean;
121
+ requestedMax: number;
122
+ workflows: unknown[];
123
+ }>;
124
+ getWorkflowDefinition(workflowId: string, summary?: boolean): Promise<unknown>;
125
+ getBusinessRules(activeOnly?: boolean, maxRecords?: number): Promise<{
126
+ totalCount: number;
127
+ businessRules: unknown[];
128
+ }>;
129
+ getBusinessRule(workflowId: string): Promise<unknown>;
130
+ getApps(activeOnly?: boolean, maxRecords?: number, includeUnpublished?: boolean, solutionUniqueName?: string): Promise<{
131
+ totalCount: number;
132
+ apps: unknown[];
133
+ filters: {
134
+ activeOnly: boolean;
135
+ includeUnpublished: boolean;
136
+ solutionUniqueName: string;
137
+ };
295
138
  }>;
296
- /**
297
- * Get a specific Power Automate flow with its complete definition
298
- * @param flowId The GUID of the flow (workflowid)
299
- * @returns Complete flow information including the flow definition JSON
300
- */
301
- getFlowDefinition(flowId: string, summary?: boolean): Promise<any>;
302
- /**
303
- * Parse a flow definition to extract a summary
304
- * @param flowDef The parsed flow definition JSON
305
- * @returns Summary object with trigger, actions, and connectors
306
- */
307
- parseFlowSummary(flowDef: any): any;
308
- /**
309
- * Get flow run history for a specific Power Automate flow
310
- * @param flowId The GUID of the flow (workflowid)
311
- * @param maxRecords Maximum number of runs to return (default: 100)
312
- * @returns List of flow runs with status, start time, duration, and error details
313
- */
314
- getFlowRuns(flowId: string, maxRecords?: number): Promise<any>;
315
- /**
316
- * Extract environment ID from organization URL
317
- * @returns Environment ID (GUID)
318
- */
319
- private getEnvironmentId;
320
- /**
321
- * Get an access token for the Power Automate Management API
322
- * @returns Access token for management.azure.com
323
- */
324
- private getFlowManagementToken;
325
- /**
326
- * Get detailed flow run information including action-level execution details
327
- * @param flowId The GUID of the flow (workflowid)
328
- * @param runId The GUID of the flow run (flowrunid)
329
- * @returns Detailed flow run information with action-level execution data
330
- */
331
- getFlowRunDetails(flowId: string, runId: string): Promise<any>;
332
- /**
333
- * Get all classic Dynamics workflows in the environment
334
- * @param activeOnly Only return activated workflows (default: false)
335
- * @param maxRecords Maximum number of workflows to return (default: 100)
336
- * @returns List of classic workflows with basic information
337
- */
338
- getWorkflows(activeOnly?: boolean, maxRecords?: number): Promise<any>;
339
- /**
340
- * Get a specific classic workflow with its complete XAML definition
341
- * @param workflowId The GUID of the workflow (workflowid)
342
- * @param summary If true, parse XAML and return structured summary instead of raw XAML
343
- * @returns Complete workflow information including the XAML definition or parsed summary
344
- */
345
- getWorkflowDefinition(workflowId: string, summary?: boolean): Promise<any>;
346
- /**
347
- * Parse workflow XAML to extract a structured summary
348
- * @param xaml The raw XAML string
349
- * @returns Summary object with activities, conditions, and variables
350
- */
351
- parseWorkflowXamlSummary(xaml: string | null): any;
352
- /**
353
- * Get all business rules in the environment
354
- * @param activeOnly Only return activated business rules (default: false)
355
- * @param maxRecords Maximum number of business rules to return (default: 100)
356
- * @returns List of business rules with basic information
357
- */
358
- getBusinessRules(activeOnly?: boolean, maxRecords?: number): Promise<any>;
359
- /**
360
- * Get a specific business rule with its complete XAML definition
361
- * @param workflowId The GUID of the business rule (workflowid)
362
- * @returns Complete business rule information including the XAML definition
363
- */
364
- getBusinessRule(workflowId: string): Promise<any>;
365
- /**
366
- * Get all model-driven apps in the environment
367
- * @param activeOnly Only return active apps (default: false)
368
- * @param maxRecords Maximum number of apps to return (default: 100)
369
- * @returns List of model-driven apps with basic information
370
- */
371
- getApps(activeOnly?: boolean, maxRecords?: number, includeUnpublished?: boolean, solutionUniqueName?: string): Promise<any>;
372
- /**
373
- * Get a specific model-driven app by ID
374
- * @param appId The GUID of the app (appmoduleid)
375
- * @returns Complete app information including publisher details
376
- */
377
- getApp(appId: string): Promise<any>;
378
- /**
379
- * Get all components (entities, forms, views, sitemaps) associated with an app
380
- * @param appId The GUID of the app (appmoduleid)
381
- * @returns List of app components with type information
382
- */
383
- getAppComponents(appId: string): Promise<any>;
384
- /**
385
- * Get the sitemap for a specific app
386
- * @param appId The GUID of the app (appmoduleid)
387
- * @returns Sitemap information including XML
388
- */
389
- getAppSitemap(appId: string): Promise<any>;
390
- /**
391
- * Create a new model-driven app
392
- * @param appDefinition The app definition object
393
- * @param solutionUniqueName Optional solution to add the app to
394
- * @returns The created app information including ID
395
- */
396
- createApp(appDefinition: any, solutionUniqueName?: string): Promise<any>;
397
- /**
398
- * Create a sitemap from simplified configuration (no XML knowledge required)
399
- * @param config Simplified sitemap configuration
400
- * @param solutionUniqueName Optional solution to add the sitemap to
401
- * @returns The created sitemap information including ID and XML
402
- */
403
- createSimpleSitemap(config: any, solutionUniqueName?: string): Promise<any>;
404
- /**
405
- * Add entities to an app by modifying the sitemap XML
406
- * @param appId The GUID of the app
407
- * @param entityNames Array of entity logical names to add
408
- * @returns Result of the operation
409
- */
410
- addEntitiesToApp(appId: string, entityNames: string[]): Promise<any>;
411
- /**
412
- * Validate an app before publishing
413
- * @param appId The GUID of the app
414
- * @returns Validation result with any issues found
415
- */
416
- validateApp(appId: string): Promise<any>;
417
- /**
418
- * Publish an app to make it available to users
419
- * @param appId The GUID of the app
420
- * @returns Result of the publish operation
421
- */
422
- publishApp(appId: string): Promise<any>;
423
- /**
424
- * Helper to escape XML special characters
425
- */
426
- private escapeXml;
427
- /**
428
- * Create a new custom entity (table)
429
- * @param entityDefinition The entity definition object
430
- * @param solutionUniqueName Optional solution to add the entity to
431
- * @returns The created entity metadata
432
- */
433
- createEntity(entityDefinition: any, solutionUniqueName?: string): Promise<any>;
434
- /**
435
- * Update an existing entity
436
- * @param metadataId The MetadataId of the entity
437
- * @param updates The properties to update
438
- * @param solutionUniqueName Optional solution context
439
- */
440
- updateEntity(metadataId: string, updates: any, solutionUniqueName?: string): Promise<void>;
441
- /**
442
- * Delete a custom entity
443
- * @param metadataId The MetadataId of the entity to delete
444
- */
445
- deleteEntity(metadataId: string): Promise<void>;
446
- /**
447
- * Update entity icon using Fluent UI System Icon
448
- * @param entityLogicalName The logical name of the entity
449
- * @param iconFileName The Fluent UI icon file name (e.g., 'people_community_24_filled.svg')
450
- * @param solutionUniqueName Optional solution to add the web resource to
451
- * @returns Result with web resource ID and icon vector name
452
- */
453
- updateEntityIcon(entityLogicalName: string, iconFileName: string, solutionUniqueName?: string): Promise<any>;
454
- /**
455
- * Create a new attribute on an entity
456
- * @param entityLogicalName The logical name of the entity
457
- * @param attributeDefinition The attribute definition object
458
- * @param solutionUniqueName Optional solution to add the attribute to
459
- * @returns The created attribute metadata
460
- */
461
- createAttribute(entityLogicalName: string, attributeDefinition: any, solutionUniqueName?: string): Promise<any>;
462
- /**
463
- * Update an existing attribute
464
- * @param entityLogicalName The logical name of the entity
465
- * @param attributeLogicalName The logical name of the attribute
466
- * @param updates The properties to update
467
- * @param solutionUniqueName Optional solution context
468
- */
469
- updateAttribute(entityLogicalName: string, attributeLogicalName: string, updates: any, solutionUniqueName?: string): Promise<void>;
470
- /**
471
- * Delete an attribute
472
- * @param entityLogicalName The logical name of the entity
473
- * @param attributeMetadataId The MetadataId of the attribute to delete
474
- */
475
- deleteAttribute(entityLogicalName: string, attributeMetadataId: string): Promise<void>;
476
- /**
477
- * Create a picklist attribute using a global option set
478
- * @param entityLogicalName The logical name of the entity
479
- * @param attributeDefinition The attribute definition (must reference a global option set)
480
- * @param solutionUniqueName Optional solution to add the attribute to
481
- * @returns The created attribute metadata
482
- */
483
- createGlobalOptionSetAttribute(entityLogicalName: string, attributeDefinition: any, solutionUniqueName?: string): Promise<any>;
484
- /**
485
- * Create a one-to-many relationship
486
- * @param relationshipDefinition The relationship definition
487
- * @param solutionUniqueName Optional solution to add the relationship to
488
- */
489
- createOneToManyRelationship(relationshipDefinition: any, solutionUniqueName?: string): Promise<any>;
490
- /**
491
- * Create a many-to-many relationship
492
- * @param relationshipDefinition The relationship definition
493
- * @param solutionUniqueName Optional solution to add the relationship to
494
- */
495
- createManyToManyRelationship(relationshipDefinition: any, solutionUniqueName?: string): Promise<any>;
496
- /**
497
- * Delete a relationship
498
- * @param metadataId The MetadataId of the relationship to delete
499
- */
500
- deleteRelationship(metadataId: string): Promise<void>;
501
- /**
502
- * Update a relationship
503
- * Note: Most relationship properties are immutable, only labels can be updated
504
- * @param metadataId The MetadataId of the relationship
505
- * @param updates The properties to update (typically labels)
506
- */
507
- updateRelationship(metadataId: string, updates: any): Promise<void>;
508
- /**
509
- * Get detailed information about a relationship
510
- * @param metadataId The MetadataId of the relationship
511
- * @returns The relationship metadata
512
- */
513
- getRelationshipDetails(metadataId: string): Promise<any>;
514
- /**
515
- * Publish all customizations
516
- */
517
- publishAllCustomizations(): Promise<void>;
518
- /**
519
- * Publish specific customizations
520
- * @param parameterXml The ParameterXml specifying what to publish
521
- */
522
- publishXml(parameterXml: string): Promise<void>;
523
- /**
524
- * Create a global option set
525
- * @param optionSetDefinition The option set definition
526
- * @param solutionUniqueName Optional solution to add the option set to
527
- */
528
- createGlobalOptionSet(optionSetDefinition: any, solutionUniqueName?: string): Promise<any>;
529
- /**
530
- * Delete a global option set
531
- * @param metadataId The MetadataId of the option set to delete
532
- */
533
- deleteGlobalOptionSet(metadataId: string): Promise<void>;
534
- /**
535
- * Update a global option set
536
- */
537
- updateGlobalOptionSet(metadataId: string, updates: any, solutionUniqueName?: string): Promise<void>;
538
- /**
539
- * Add a value to a global option set
540
- */
541
- addOptionSetValue(optionSetName: string, value: number, label: string, solutionUniqueName?: string): Promise<any>;
542
- /**
543
- * Update an option set value
544
- */
545
- updateOptionSetValue(optionSetName: string, value: number, label: string, solutionUniqueName?: string): Promise<void>;
546
- /**
547
- * Delete an option set value
548
- */
549
- deleteOptionSetValue(optionSetName: string, value: number): Promise<void>;
550
- /**
551
- * Reorder option set values
552
- */
553
- reorderOptionSetValues(optionSetName: string, values: number[], solutionUniqueName?: string): Promise<void>;
554
- /**
555
- * Create a form (systemform)
556
- */
557
- createForm(form: any, solutionUniqueName?: string): Promise<any>;
558
- /**
559
- * Update a form
560
- */
561
- updateForm(formId: string, updates: any, solutionUniqueName?: string): Promise<void>;
562
- /**
563
- * Delete a form
564
- */
565
- deleteForm(formId: string): Promise<void>;
566
- /**
567
- * Get forms for an entity
568
- */
569
- getForms(entityLogicalName: string): Promise<any>;
570
- /**
571
- * Create a view (savedquery)
572
- */
573
- createView(view: any, solutionUniqueName?: string): Promise<any>;
574
- /**
575
- * Update a view
576
- */
577
- updateView(viewId: string, updates: any, solutionUniqueName?: string): Promise<void>;
578
- /**
579
- * Delete a view
580
- */
581
- deleteView(viewId: string): Promise<void>;
582
- /**
583
- * Get views for an entity
584
- */
585
- getViews(entityLogicalName: string): Promise<any>;
586
- /**
587
- * Activate a form (set statecode=1)
588
- * @param formId The systemformid (GUID)
589
- */
590
- activateForm(formId: string): Promise<void>;
591
- /**
592
- * Deactivate a form (set statecode=0)
593
- * @param formId The systemformid (GUID)
594
- */
595
- deactivateForm(formId: string): Promise<void>;
596
- /**
597
- * Set a view as the default view for its entity
598
- * @param viewId The savedqueryid (GUID)
599
- */
600
- setDefaultView(viewId: string): Promise<void>;
601
- /**
602
- * Get the FetchXML from a view
603
- * @param viewId The savedqueryid (GUID)
604
- * @returns The view with FetchXML
605
- */
606
- getViewFetchXml(viewId: string): Promise<any>;
607
- /**
608
- * Create a web resource
609
- */
610
- createWebResource(webResource: any, solutionUniqueName?: string): Promise<any>;
611
- /**
612
- * Update a web resource
613
- */
614
- updateWebResource(webResourceId: string, updates: any, solutionUniqueName?: string): Promise<void>;
615
- /**
616
- * Delete a web resource
617
- */
618
- deleteWebResource(webResourceId: string): Promise<void>;
619
- /**
620
- * Get web resource
621
- */
622
- getWebResource(webResourceId: string): Promise<any>;
623
- /**
624
- * Get web resources by name pattern
625
- */
626
- getWebResources(nameFilter?: string): Promise<any>;
627
- /**
628
- * Get web resource content (base64 encoded)
629
- * @param webResourceId The webresourceid (GUID)
630
- * @returns The web resource with content field
631
- */
632
- getWebResourceContent(webResourceId: string): Promise<any>;
633
- /**
634
- * Get web resource dependencies
635
- * @param webResourceId The webresourceid (GUID)
636
- * @returns List of dependencies
637
- */
638
- getWebResourceDependencies(webResourceId: string): Promise<any>;
639
- /**
640
- * Create a publisher
641
- */
642
- createPublisher(publisher: any): Promise<any>;
643
- /**
644
- * Get publishers
645
- */
646
- getPublishers(): Promise<any>;
647
- /**
648
- * Create a solution
649
- */
650
- createSolution(solution: any): Promise<any>;
651
- /**
652
- * Get solutions
653
- */
654
- getSolutions(): Promise<any>;
655
- /**
656
- * Get solution by unique name
657
- */
658
- getSolution(uniqueName: string): Promise<any>;
659
- /**
660
- * Add component to solution
661
- */
662
- addComponentToSolution(solutionUniqueName: string, componentId: string, componentType: number, addRequiredComponents?: boolean, includedComponentSettingsValues?: string): Promise<void>;
663
- /**
664
- * Remove component from solution
665
- */
666
- removeComponentFromSolution(solutionUniqueName: string, componentId: string, componentType: number): Promise<void>;
667
- /**
668
- * Get solution components
669
- */
670
- getSolutionComponents(solutionUniqueName: string): Promise<any>;
671
- /**
672
- * Export solution
673
- */
674
- exportSolution(solutionName: string, managed?: boolean): Promise<any>;
675
- /**
676
- * Import solution
677
- */
678
- importSolution(customizationFile: string, publishWorkflows?: boolean, overwriteUnmanagedCustomizations?: boolean): Promise<any>;
679
- /**
680
- * Delete a solution
681
- */
682
- deleteSolution(solutionId: string): Promise<void>;
683
- /**
684
- * Publish specific entity
685
- */
686
- publishEntity(entityLogicalName: string): Promise<void>;
687
- /**
688
- * Publish specific component
689
- */
690
- publishComponent(componentId: string, componentType: number): Promise<void>;
691
- /**
692
- * Check for unpublished customizations
693
- */
694
- checkUnpublishedChanges(): Promise<any>;
695
- /**
696
- * Check component dependencies
697
- */
698
- checkDependencies(componentId: string, componentType: number): Promise<any>;
699
- /**
700
- * Check if component can be deleted
701
- */
139
+ getApp(appId: string): Promise<unknown>;
140
+ getAppComponents(appId: string): Promise<{
141
+ totalCount: number;
142
+ components: unknown[];
143
+ groupedByType: Record<string, unknown[]>;
144
+ }>;
145
+ getAppSitemap(appId: string): Promise<unknown>;
146
+ getForms(entityLogicalName: string): Promise<unknown>;
147
+ getViews(entityLogicalName: string): Promise<unknown>;
148
+ getViewFetchXml(viewId: string): Promise<unknown>;
149
+ getWebResource(webResourceId: string): Promise<unknown>;
150
+ getWebResources(nameFilter?: string): Promise<unknown>;
151
+ getWebResourceDependencies(webResourceId: string): Promise<unknown>;
152
+ getPublishers(): Promise<unknown>;
153
+ getSolutions(): Promise<unknown>;
154
+ getSolution(uniqueName: string): Promise<unknown>;
155
+ getSolutionComponents(solutionUniqueName: string): Promise<unknown>;
156
+ checkDependencies(componentId: string, componentType: number): Promise<unknown>;
702
157
  checkDeleteEligibility(componentId: string, componentType: number): Promise<{
703
158
  canDelete: boolean;
704
- dependencies: any[];
159
+ dependencies: unknown[];
705
160
  }>;
706
- /**
707
- * Preview unpublished changes
708
- * Returns all components that have unpublished customizations
709
- */
710
- previewUnpublishedChanges(): Promise<any>;
711
- /**
712
- * Check dependencies for a specific component
713
- * @param componentId The component ID (GUID)
714
- * @param componentType The component type code
715
- * @returns Dependency information
716
- */
717
- checkComponentDependencies(componentId: string, componentType: number): Promise<any>;
718
- /**
719
- * Validate solution integrity
720
- * Checks for missing dependencies and other issues
721
- * @param solutionUniqueName The unique name of the solution
722
- * @returns Validation results
723
- */
724
- validateSolutionIntegrity(solutionUniqueName: string): Promise<any>;
725
- /**
726
- * Validate schema name
727
- */
161
+ checkComponentDependencies(componentId: string, componentType: number): Promise<unknown>;
162
+ checkUnpublishedChanges(): Promise<unknown>;
163
+ previewUnpublishedChanges(): Promise<unknown>;
164
+ validateBestPractices(solutionUniqueName: string | undefined, entityLogicalNames: string[] | undefined, publisherPrefix: string, recentDays?: number, includeRefDataTables?: boolean, rules?: string[], maxEntities?: number, requiredColumns?: string[]): Promise<BestPracticesValidationResult>;
728
165
  validateSchemaName(schemaName: string, prefix: string): {
729
166
  valid: boolean;
730
167
  errors: string[];
731
168
  };
732
- /**
733
- * Get entity customization information
734
- */
735
- getEntityCustomizationInfo(entityLogicalName: string): Promise<any>;
736
- /**
737
- * Check if entity has dependencies
738
- */
739
- checkEntityDependencies(entityLogicalName: string): Promise<any>;
740
- /**
741
- * Helper to generate GUID
742
- */
743
- private generateGuid;
744
- /**
745
- * Validate Dataverse entities against best practices
746
- * @param solutionUniqueName - Solution unique name (mutually exclusive with entityLogicalNames)
747
- * @param entityLogicalNames - Explicit list of entities to validate (mutually exclusive with solutionUniqueName)
748
- * @param publisherPrefix - Publisher prefix to validate against (e.g., 'sic_')
749
- * @param recentDays - Only validate columns created in last N days (0 = all columns)
750
- * @param includeRefDataTables - Include RefData tables in validation
751
- * @param rules - Specific rules to validate
752
- * @param maxEntities - Maximum number of entities to validate (0 = unlimited)
753
- * @returns Structured validation results with violations
754
- */
755
- validateBestPractices(solutionUniqueName: string | undefined, entityLogicalNames: string[] | undefined, publisherPrefix: string, recentDays?: number, includeRefDataTables?: boolean, rules?: string[], maxEntities?: number, requiredColumns?: string[]): Promise<BestPracticesValidationResult>;
756
- /**
757
- * Helper method to validate entity-level properties and attributes against best practice rules
758
- */
759
- private validateEntityAndAttributes;
760
- /**
761
- * Build violations summary with complete lists of affected entities and columns grouped by rule
762
- * @private
763
- */
764
- private buildViolationsSummary;
765
- /**
766
- * Find automations with YAML metadata indicating they modify a specific table
767
- * Fast server-side search using OData contains() filter
768
- */
769
- findDocumentedAutomationsByTable(tableName: string, options?: {
770
- includeFlows?: boolean;
771
- includeWorkflows?: boolean;
772
- activeOnly?: boolean;
773
- }): Promise<{
774
- matches: Array<{
775
- id: string;
776
- name: string;
777
- type: 'flow' | 'workflow';
778
- tablesModified: string[];
779
- trigger: string;
780
- description: string;
781
- }>;
782
- undocumentedCount: number;
783
- searchedCount: number;
784
- }>;
785
- /**
786
- * Deep analysis of automations lacking YAML metadata
787
- * Fetches and parses definitions to find which tables they modify
788
- */
789
- analyzeUndocumentedAutomations(tableName: string, options?: {
790
- includeFlows?: boolean;
791
- includeWorkflows?: boolean;
792
- activeOnly?: boolean;
793
- maxToAnalyze?: number;
794
- }): Promise<{
795
- matches: Array<{
796
- id: string;
797
- name: string;
798
- type: 'flow' | 'workflow';
799
- tablesModified: string[];
800
- trigger: string;
801
- documented: false;
802
- }>;
803
- analyzedCount: number;
804
- skippedCount: number;
805
- }>;
806
169
  }
807
170
  //# sourceMappingURL=PowerPlatformService.d.ts.map