@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.
- package/LICENSE +198 -0
- package/dist/auth/device-code-login.d.ts +40 -0
- package/dist/auth/device-code-login.d.ts.map +1 -0
- package/dist/auth/device-code-login.js +59 -0
- package/dist/auth/device-code-login.js.map +1 -0
- package/dist/auth/gdap-client.d.ts +81 -0
- package/dist/auth/gdap-client.d.ts.map +1 -0
- package/dist/auth/gdap-client.js +128 -0
- package/dist/auth/gdap-client.js.map +1 -0
- package/dist/auth/index.d.ts +19 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +19 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/token-manager.d.ts +54 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +150 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/client.d.ts +27 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +27 -0
- package/dist/client.js.map +1 -0
- package/dist/config/client.d.ts +24 -0
- package/dist/config/client.d.ts.map +1 -0
- package/dist/config/client.js +18 -0
- package/dist/config/client.js.map +1 -0
- package/dist/config/index.d.ts +18 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +18 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +81 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +271 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +751 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +556 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.d.ts +116 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +170 -0
- package/dist/constants.js.map +1 -0
- package/dist/dataverse/agent-resolver.d.ts +98 -0
- package/dist/dataverse/agent-resolver.d.ts.map +1 -0
- package/dist/dataverse/agent-resolver.js +185 -0
- package/dist/dataverse/agent-resolver.js.map +1 -0
- package/dist/dataverse/client.d.ts +104 -0
- package/dist/dataverse/client.d.ts.map +1 -0
- package/dist/dataverse/client.js +272 -0
- package/dist/dataverse/client.js.map +1 -0
- package/dist/dataverse/connection-refs.d.ts +115 -0
- package/dist/dataverse/connection-refs.d.ts.map +1 -0
- package/dist/dataverse/connection-refs.js +203 -0
- package/dist/dataverse/connection-refs.js.map +1 -0
- package/dist/dataverse/index.d.ts +20 -0
- package/dist/dataverse/index.d.ts.map +1 -0
- package/dist/dataverse/index.js +20 -0
- package/dist/dataverse/index.js.map +1 -0
- package/dist/dataverse/solution-ops.d.ts +100 -0
- package/dist/dataverse/solution-ops.d.ts.map +1 -0
- package/dist/dataverse/solution-ops.js +288 -0
- package/dist/dataverse/solution-ops.js.map +1 -0
- package/dist/errors.d.ts +171 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +178 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/mock/demo-data.d.ts +213 -0
- package/dist/mock/demo-data.d.ts.map +1 -0
- package/dist/mock/demo-data.js +1096 -0
- package/dist/mock/demo-data.js.map +1 -0
- package/dist/mock/demo-deployment-store.d.ts +77 -0
- package/dist/mock/demo-deployment-store.d.ts.map +1 -0
- package/dist/mock/demo-deployment-store.js +85 -0
- package/dist/mock/demo-deployment-store.js.map +1 -0
- package/dist/powerplatform/admin-client.d.ts +226 -0
- package/dist/powerplatform/admin-client.d.ts.map +1 -0
- package/dist/powerplatform/admin-client.js +315 -0
- package/dist/powerplatform/admin-client.js.map +1 -0
- package/dist/powerplatform/index.d.ts +18 -0
- package/dist/powerplatform/index.d.ts.map +1 -0
- package/dist/powerplatform/index.js +18 -0
- package/dist/powerplatform/index.js.map +1 -0
- package/dist/powerplatform/tenant-discovery.d.ts +100 -0
- package/dist/powerplatform/tenant-discovery.d.ts.map +1 -0
- package/dist/powerplatform/tenant-discovery.js +205 -0
- package/dist/powerplatform/tenant-discovery.js.map +1 -0
- package/dist/preconditions/check.d.ts +41 -0
- package/dist/preconditions/check.d.ts.map +1 -0
- package/dist/preconditions/check.js +173 -0
- package/dist/preconditions/check.js.map +1 -0
- package/dist/preconditions/index.d.ts +20 -0
- package/dist/preconditions/index.d.ts.map +1 -0
- package/dist/preconditions/index.js +20 -0
- package/dist/preconditions/index.js.map +1 -0
- package/dist/preconditions/loader.d.ts +33 -0
- package/dist/preconditions/loader.d.ts.map +1 -0
- package/dist/preconditions/loader.js +65 -0
- package/dist/preconditions/loader.js.map +1 -0
- package/dist/preconditions/schema.d.ts +103 -0
- package/dist/preconditions/schema.d.ts.map +1 -0
- package/dist/preconditions/schema.js +93 -0
- package/dist/preconditions/schema.js.map +1 -0
- package/dist/preconditions/types.d.ts +118 -0
- package/dist/preconditions/types.d.ts.map +1 -0
- package/dist/preconditions/types.js +17 -0
- package/dist/preconditions/types.js.map +1 -0
- package/dist/queue/index.d.ts +17 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +17 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/memory-queue.d.ts +86 -0
- package/dist/queue/memory-queue.d.ts.map +1 -0
- package/dist/queue/memory-queue.js +221 -0
- package/dist/queue/memory-queue.js.map +1 -0
- package/dist/services/audit-log.d.ts +59 -0
- package/dist/services/audit-log.d.ts.map +1 -0
- package/dist/services/audit-log.js +193 -0
- package/dist/services/audit-log.js.map +1 -0
- package/dist/services/auth-error-parser.d.ts +36 -0
- package/dist/services/auth-error-parser.d.ts.map +1 -0
- package/dist/services/auth-error-parser.js +90 -0
- package/dist/services/auth-error-parser.js.map +1 -0
- package/dist/services/deployment-doctor.d.ts +109 -0
- package/dist/services/deployment-doctor.d.ts.map +1 -0
- package/dist/services/deployment-doctor.js +476 -0
- package/dist/services/deployment-doctor.js.map +1 -0
- package/dist/services/deployment-notifications.d.ts +41 -0
- package/dist/services/deployment-notifications.d.ts.map +1 -0
- package/dist/services/deployment-notifications.js +161 -0
- package/dist/services/deployment-notifications.js.map +1 -0
- package/dist/services/deployment-progress.d.ts +89 -0
- package/dist/services/deployment-progress.d.ts.map +1 -0
- package/dist/services/deployment-progress.js +244 -0
- package/dist/services/deployment-progress.js.map +1 -0
- package/dist/services/deployment-service.d.ts +97 -0
- package/dist/services/deployment-service.d.ts.map +1 -0
- package/dist/services/deployment-service.js +375 -0
- package/dist/services/deployment-service.js.map +1 -0
- package/dist/services/drift-analyzer.d.ts +86 -0
- package/dist/services/drift-analyzer.d.ts.map +1 -0
- package/dist/services/drift-analyzer.js +273 -0
- package/dist/services/drift-analyzer.js.map +1 -0
- package/dist/services/environment-setup.d.ts +97 -0
- package/dist/services/environment-setup.d.ts.map +1 -0
- package/dist/services/environment-setup.js +250 -0
- package/dist/services/environment-setup.js.map +1 -0
- package/dist/services/health-check.d.ts +168 -0
- package/dist/services/health-check.d.ts.map +1 -0
- package/dist/services/health-check.js +705 -0
- package/dist/services/health-check.js.map +1 -0
- package/dist/services/index.d.ts +39 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +39 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/logger.d.ts +139 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +268 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/notification-service.d.ts +55 -0
- package/dist/services/notification-service.d.ts.map +1 -0
- package/dist/services/notification-service.js +184 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/risk-analyzer.d.ts +252 -0
- package/dist/services/risk-analyzer.d.ts.map +1 -0
- package/dist/services/risk-analyzer.js +866 -0
- package/dist/services/risk-analyzer.js.map +1 -0
- package/dist/services/rollback.d.ts +57 -0
- package/dist/services/rollback.d.ts.map +1 -0
- package/dist/services/rollback.js +270 -0
- package/dist/services/rollback.js.map +1 -0
- package/dist/services/scheduler.d.ts +80 -0
- package/dist/services/scheduler.d.ts.map +1 -0
- package/dist/services/scheduler.js +350 -0
- package/dist/services/scheduler.js.map +1 -0
- package/dist/services/secrets.d.ts +31 -0
- package/dist/services/secrets.d.ts.map +1 -0
- package/dist/services/secrets.js +206 -0
- package/dist/services/secrets.js.map +1 -0
- package/dist/services/settings-service.d.ts +132 -0
- package/dist/services/settings-service.d.ts.map +1 -0
- package/dist/services/settings-service.js +378 -0
- package/dist/services/settings-service.js.map +1 -0
- package/dist/services/solution-diff.d.ts +127 -0
- package/dist/services/solution-diff.d.ts.map +1 -0
- package/dist/services/solution-diff.js +260 -0
- package/dist/services/solution-diff.js.map +1 -0
- package/dist/services/solution-mode-detector.d.ts +35 -0
- package/dist/services/solution-mode-detector.d.ts.map +1 -0
- package/dist/services/solution-mode-detector.js +84 -0
- package/dist/services/solution-mode-detector.js.map +1 -0
- package/dist/services/tenant-resolver.d.ts +55 -0
- package/dist/services/tenant-resolver.d.ts.map +1 -0
- package/dist/services/tenant-resolver.js +126 -0
- package/dist/services/tenant-resolver.js.map +1 -0
- package/dist/services/unmanaged-customizations.d.ts +104 -0
- package/dist/services/unmanaged-customizations.d.ts.map +1 -0
- package/dist/services/unmanaged-customizations.js +521 -0
- package/dist/services/unmanaged-customizations.js.map +1 -0
- package/dist/services/url-templater.d.ts +184 -0
- package/dist/services/url-templater.d.ts.map +1 -0
- package/dist/services/url-templater.js +327 -0
- package/dist/services/url-templater.js.map +1 -0
- package/dist/services/version-checker.d.ts +108 -0
- package/dist/services/version-checker.d.ts.map +1 -0
- package/dist/services/version-checker.js +403 -0
- package/dist/services/version-checker.js.map +1 -0
- package/dist/services/waves.d.ts +90 -0
- package/dist/services/waves.d.ts.map +1 -0
- package/dist/services/waves.js +222 -0
- package/dist/services/waves.js.map +1 -0
- package/dist/services/webhook.d.ts +95 -0
- package/dist/services/webhook.d.ts.map +1 -0
- package/dist/services/webhook.js +244 -0
- package/dist/services/webhook.js.map +1 -0
- package/dist/utils/deployment-tools.d.ts +110 -0
- package/dist/utils/deployment-tools.d.ts.map +1 -0
- package/dist/utils/deployment-tools.js +121 -0
- package/dist/utils/deployment-tools.js.map +1 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { TokenManager } from "../auth/token-manager.js";
|
|
17
|
+
export interface DataverseClientConfig {
|
|
18
|
+
environmentUrl: string;
|
|
19
|
+
tokenManager: TokenManager;
|
|
20
|
+
clientId?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface DataverseError {
|
|
23
|
+
code: string;
|
|
24
|
+
message: string;
|
|
25
|
+
innererror?: {
|
|
26
|
+
message: string;
|
|
27
|
+
type: string;
|
|
28
|
+
stacktrace: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface ErrorContext {
|
|
32
|
+
operation?: string;
|
|
33
|
+
environmentUrl?: string;
|
|
34
|
+
clientId?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Format Dataverse errors with helpful guidance for common authentication issues.
|
|
38
|
+
*
|
|
39
|
+
* Throws a typed error (DataverseApiError or GdapError) instead of
|
|
40
|
+
* returning a plain string, so callers can switch on error.code.
|
|
41
|
+
*/
|
|
42
|
+
export declare function throwDataverseError(error: DataverseError, statusCode: number, context?: ErrorContext): never;
|
|
43
|
+
/**
|
|
44
|
+
* Format Dataverse errors with helpful guidance for common authentication issues.
|
|
45
|
+
*
|
|
46
|
+
* @deprecated Use throwDataverseError() instead. This is kept for backwards
|
|
47
|
+
* compatibility but will be removed in a future release.
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatDataverseError(error: DataverseError, statusCode: number, context?: ErrorContext): string;
|
|
50
|
+
/**
|
|
51
|
+
* Low-level client for Dataverse Web API
|
|
52
|
+
*/
|
|
53
|
+
export declare class DataverseClient {
|
|
54
|
+
private config;
|
|
55
|
+
private readonly apiUrl;
|
|
56
|
+
constructor(config: DataverseClientConfig);
|
|
57
|
+
/**
|
|
58
|
+
* Make a GET request to the Dataverse API
|
|
59
|
+
*/
|
|
60
|
+
get<T>(path: string, params?: Record<string, string>): Promise<T>;
|
|
61
|
+
/**
|
|
62
|
+
* Make a POST request to the Dataverse API
|
|
63
|
+
*/
|
|
64
|
+
post<T>(path: string, body: unknown): Promise<T>;
|
|
65
|
+
/**
|
|
66
|
+
* Make a PATCH request to the Dataverse API
|
|
67
|
+
*/
|
|
68
|
+
patch<T>(path: string, body: unknown): Promise<T>;
|
|
69
|
+
/**
|
|
70
|
+
* Make a DELETE request to the Dataverse API
|
|
71
|
+
*/
|
|
72
|
+
delete(path: string): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Execute a Dataverse action (unbound)
|
|
75
|
+
*/
|
|
76
|
+
executeAction<TRequest, TResponse>(actionName: string, parameters: TRequest): Promise<TResponse>;
|
|
77
|
+
/**
|
|
78
|
+
* Get the raw response for actions that return binary data (like solution export)
|
|
79
|
+
*/
|
|
80
|
+
executeActionRaw(actionName: string, parameters: unknown): Promise<Response>;
|
|
81
|
+
/**
|
|
82
|
+
* Query solutions in the environment
|
|
83
|
+
*/
|
|
84
|
+
querySolutions(): Promise<SolutionRecord[]>;
|
|
85
|
+
/**
|
|
86
|
+
* Get a specific solution by unique name
|
|
87
|
+
*/
|
|
88
|
+
getSolutionByName(uniqueName: string): Promise<SolutionRecord | null>;
|
|
89
|
+
private fetch;
|
|
90
|
+
private handleError;
|
|
91
|
+
}
|
|
92
|
+
export interface SolutionRecord {
|
|
93
|
+
solutionid: string;
|
|
94
|
+
uniquename: string;
|
|
95
|
+
friendlyname: string;
|
|
96
|
+
version: string;
|
|
97
|
+
ismanaged: boolean;
|
|
98
|
+
publisherid?: {
|
|
99
|
+
publisherid: string;
|
|
100
|
+
uniquename: string;
|
|
101
|
+
friendlyname: string;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/dataverse/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,KAAK,CA8GP;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,YAAY,GACrB,MAAM,CAWR;AAED;;GAEG;AACH,qBAAa,eAAe;IAGd,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEZ,MAAM,EAAE,qBAAqB;IAKjD;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYvE;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUtD;;OAEG;IACG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUvD;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,SAAS,EACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,QAAQ,GACnB,OAAO,CAAC,SAAS,CAAC;IAIrB;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBlF;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IASjD;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;YAQ7D,KAAK;YAsBL,WAAW;CA4B1B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { DataverseApiError, ErrorCode, GdapError } from "../errors.js";
|
|
17
|
+
/**
|
|
18
|
+
* Format Dataverse errors with helpful guidance for common authentication issues.
|
|
19
|
+
*
|
|
20
|
+
* Throws a typed error (DataverseApiError or GdapError) instead of
|
|
21
|
+
* returning a plain string, so callers can switch on error.code.
|
|
22
|
+
*/
|
|
23
|
+
export function throwDataverseError(error, statusCode, context) {
|
|
24
|
+
const errorMessage = error.message;
|
|
25
|
+
const innerMessage = error.innererror?.message || "";
|
|
26
|
+
const fullMessage = `${errorMessage}${innerMessage ? ` - ${innerMessage}` : ""}`;
|
|
27
|
+
const errorContext = {
|
|
28
|
+
environmentUrl: context?.environmentUrl,
|
|
29
|
+
clientId: context?.clientId,
|
|
30
|
+
};
|
|
31
|
+
// Check for common S2S authentication patterns
|
|
32
|
+
const isNotMemberError = /user is not a member of the organization/i.test(fullMessage) ||
|
|
33
|
+
/not a member of.*environment/i.test(fullMessage);
|
|
34
|
+
if (isNotMemberError) {
|
|
35
|
+
let helpfulMessage = `Authentication failed: ${fullMessage}\n`;
|
|
36
|
+
helpfulMessage += `\nThe application is not registered as a user in the Power Platform environment.\n`;
|
|
37
|
+
helpfulMessage += `\nTo fix:\n`;
|
|
38
|
+
helpfulMessage += `1. Go to https://admin.powerplatform.microsoft.com\n`;
|
|
39
|
+
helpfulMessage += `2. Select the environment → Settings → Users + permissions → Application users\n`;
|
|
40
|
+
helpfulMessage += `3. Click "+ New app user" and add your application\n`;
|
|
41
|
+
if (context?.clientId) {
|
|
42
|
+
helpfulMessage += ` Client ID: ${context.clientId}\n`;
|
|
43
|
+
}
|
|
44
|
+
helpfulMessage += `4. Assign the "System Administrator" security role\n`;
|
|
45
|
+
helpfulMessage += `5. Save and retry the command\n`;
|
|
46
|
+
if (context?.environmentUrl) {
|
|
47
|
+
helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
|
|
48
|
+
}
|
|
49
|
+
throw new GdapError(ErrorCode.GDAP_APP_USER_NOT_REGISTERED, helpfulMessage, errorContext);
|
|
50
|
+
}
|
|
51
|
+
const isPrivilegeError = /prvRead/i.test(fullMessage) ||
|
|
52
|
+
/prvWrite/i.test(fullMessage) ||
|
|
53
|
+
/prvCreate/i.test(fullMessage) ||
|
|
54
|
+
/prvDelete/i.test(fullMessage) ||
|
|
55
|
+
/insufficient.*privilege/i.test(fullMessage) ||
|
|
56
|
+
/missing privilege/i.test(fullMessage) ||
|
|
57
|
+
/access.*denied/i.test(fullMessage);
|
|
58
|
+
const isForbiddenError = statusCode === 403;
|
|
59
|
+
const isUnauthorizedError = statusCode === 401;
|
|
60
|
+
if (isPrivilegeError || isForbiddenError) {
|
|
61
|
+
let helpfulMessage = `Authentication failed: ${fullMessage}\n`;
|
|
62
|
+
helpfulMessage += `\nThe application lacks required permissions in the Power Platform environment.\n`;
|
|
63
|
+
helpfulMessage += `\nTo fix:\n`;
|
|
64
|
+
helpfulMessage += `1. Go to https://admin.powerplatform.microsoft.com\n`;
|
|
65
|
+
helpfulMessage += `2. Select the environment → Settings → Users + permissions → Application users\n`;
|
|
66
|
+
helpfulMessage += `3. Find your application user`;
|
|
67
|
+
if (context?.clientId) {
|
|
68
|
+
helpfulMessage += ` (Client ID: ${context.clientId})`;
|
|
69
|
+
}
|
|
70
|
+
helpfulMessage += `\n`;
|
|
71
|
+
helpfulMessage += `4. Click "Manage security roles" or "Edit"\n`;
|
|
72
|
+
helpfulMessage += `5. Ensure "System Administrator" role is assigned\n`;
|
|
73
|
+
helpfulMessage += ` (Required privileges: prvReadSolution, prvWriteSolution, prvCreateSolution, etc.)\n`;
|
|
74
|
+
helpfulMessage += `6. Save and retry the command\n`;
|
|
75
|
+
if (context?.environmentUrl) {
|
|
76
|
+
helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
|
|
77
|
+
}
|
|
78
|
+
throw new DataverseApiError(isPrivilegeError ? ErrorCode.PERMISSION_PRIVILEGE_MISSING : ErrorCode.DATAVERSE_FORBIDDEN, helpfulMessage, statusCode, errorContext);
|
|
79
|
+
}
|
|
80
|
+
if (isUnauthorizedError) {
|
|
81
|
+
let helpfulMessage = `Authentication failed: ${fullMessage}\n`;
|
|
82
|
+
helpfulMessage += `\nAuthentication token could not be acquired or is invalid.\n`;
|
|
83
|
+
helpfulMessage += `\nTo fix:\n`;
|
|
84
|
+
helpfulMessage += `1. Verify the app registration in Azure Portal:\n`;
|
|
85
|
+
helpfulMessage += ` - Go to https://portal.azure.com → Azure Active Directory → App registrations\n`;
|
|
86
|
+
if (context?.clientId) {
|
|
87
|
+
helpfulMessage += ` - Find your app (Client ID: ${context.clientId})\n`;
|
|
88
|
+
}
|
|
89
|
+
helpfulMessage += `2. Check API permissions:\n`;
|
|
90
|
+
helpfulMessage += ` - Ensure "Dynamics CRM" or "Common Data Service" permission is added\n`;
|
|
91
|
+
helpfulMessage += ` - Permission type: "user_impersonation" (delegated) or ".default" (application)\n`;
|
|
92
|
+
helpfulMessage += ` - Verify "Grant admin consent" has been clicked\n`;
|
|
93
|
+
helpfulMessage += `3. Verify client secret:\n`;
|
|
94
|
+
helpfulMessage += ` - Check if the secret has expired\n`;
|
|
95
|
+
helpfulMessage += ` - Generate a new secret if needed and update your configuration\n`;
|
|
96
|
+
helpfulMessage += `4. Retry the command\n`;
|
|
97
|
+
if (context?.environmentUrl) {
|
|
98
|
+
helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
|
|
99
|
+
}
|
|
100
|
+
throw new DataverseApiError(ErrorCode.DATAVERSE_UNAUTHORIZED, helpfulMessage, statusCode, errorContext);
|
|
101
|
+
}
|
|
102
|
+
// Generic Dataverse API error
|
|
103
|
+
let helpfulMessage = `Dataverse API error: ${fullMessage}`;
|
|
104
|
+
if (context?.environmentUrl) {
|
|
105
|
+
helpfulMessage += `\nEnvironment: ${context.environmentUrl}`;
|
|
106
|
+
}
|
|
107
|
+
throw new DataverseApiError(ErrorCode.DATAVERSE_API_ERROR, helpfulMessage, statusCode, errorContext);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Format Dataverse errors with helpful guidance for common authentication issues.
|
|
111
|
+
*
|
|
112
|
+
* @deprecated Use throwDataverseError() instead. This is kept for backwards
|
|
113
|
+
* compatibility but will be removed in a future release.
|
|
114
|
+
*/
|
|
115
|
+
export function formatDataverseError(error, statusCode, context) {
|
|
116
|
+
try {
|
|
117
|
+
throwDataverseError(error, statusCode, context);
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
if (e instanceof Error) {
|
|
121
|
+
return e.message;
|
|
122
|
+
}
|
|
123
|
+
return String(e);
|
|
124
|
+
}
|
|
125
|
+
// Unreachable, but TypeScript needs it
|
|
126
|
+
return "";
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Low-level client for Dataverse Web API
|
|
130
|
+
*/
|
|
131
|
+
export class DataverseClient {
|
|
132
|
+
config;
|
|
133
|
+
apiUrl;
|
|
134
|
+
constructor(config) {
|
|
135
|
+
this.config = config;
|
|
136
|
+
const baseUrl = config.environmentUrl.replace(/\/$/, "");
|
|
137
|
+
this.apiUrl = `${baseUrl}/api/data/v9.2`;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Make a GET request to the Dataverse API
|
|
141
|
+
*/
|
|
142
|
+
async get(path, params) {
|
|
143
|
+
const url = new URL(`${this.apiUrl}${path}`);
|
|
144
|
+
if (params) {
|
|
145
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
146
|
+
url.searchParams.set(key, value);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const response = await this.fetch(url.toString(), { method: "GET" });
|
|
150
|
+
return response.json();
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Make a POST request to the Dataverse API
|
|
154
|
+
*/
|
|
155
|
+
async post(path, body) {
|
|
156
|
+
const response = await this.fetch(`${this.apiUrl}${path}`, {
|
|
157
|
+
method: "POST",
|
|
158
|
+
body: JSON.stringify(body),
|
|
159
|
+
});
|
|
160
|
+
const text = await response.text();
|
|
161
|
+
return (text ? JSON.parse(text) : null);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Make a PATCH request to the Dataverse API
|
|
165
|
+
*/
|
|
166
|
+
async patch(path, body) {
|
|
167
|
+
const response = await this.fetch(`${this.apiUrl}${path}`, {
|
|
168
|
+
method: "PATCH",
|
|
169
|
+
body: JSON.stringify(body),
|
|
170
|
+
});
|
|
171
|
+
const text = await response.text();
|
|
172
|
+
return (text ? JSON.parse(text) : null);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Make a DELETE request to the Dataverse API
|
|
176
|
+
*/
|
|
177
|
+
async delete(path) {
|
|
178
|
+
await this.fetch(`${this.apiUrl}${path}`, {
|
|
179
|
+
method: "DELETE",
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Execute a Dataverse action (unbound)
|
|
184
|
+
*/
|
|
185
|
+
async executeAction(actionName, parameters) {
|
|
186
|
+
return this.post(`/${actionName}`, parameters);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get the raw response for actions that return binary data (like solution export)
|
|
190
|
+
*/
|
|
191
|
+
async executeActionRaw(actionName, parameters) {
|
|
192
|
+
const token = await this.config.tokenManager.getDataverseToken(this.config.environmentUrl);
|
|
193
|
+
const response = await fetch(`${this.apiUrl}/${actionName}`, {
|
|
194
|
+
method: "POST",
|
|
195
|
+
headers: {
|
|
196
|
+
Authorization: `Bearer ${token}`,
|
|
197
|
+
"Content-Type": "application/json",
|
|
198
|
+
Accept: "application/json",
|
|
199
|
+
"OData-MaxVersion": "4.0",
|
|
200
|
+
"OData-Version": "4.0",
|
|
201
|
+
},
|
|
202
|
+
body: JSON.stringify(parameters),
|
|
203
|
+
});
|
|
204
|
+
if (!response.ok) {
|
|
205
|
+
await this.handleError(response);
|
|
206
|
+
}
|
|
207
|
+
return response;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Query solutions in the environment
|
|
211
|
+
*/
|
|
212
|
+
async querySolutions() {
|
|
213
|
+
const result = await this.get("/solutions", {
|
|
214
|
+
$select: "solutionid,uniquename,friendlyname,version,ismanaged",
|
|
215
|
+
$filter: "isvisible eq true",
|
|
216
|
+
$orderby: "friendlyname asc",
|
|
217
|
+
});
|
|
218
|
+
return result.value;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get a specific solution by unique name
|
|
222
|
+
*/
|
|
223
|
+
async getSolutionByName(uniqueName) {
|
|
224
|
+
const result = await this.get("/solutions", {
|
|
225
|
+
$select: "solutionid,uniquename,friendlyname,version,ismanaged,publisherid",
|
|
226
|
+
$filter: `uniquename eq '${uniqueName}'`,
|
|
227
|
+
});
|
|
228
|
+
return result.value[0] || null;
|
|
229
|
+
}
|
|
230
|
+
async fetch(url, options) {
|
|
231
|
+
const token = await this.config.tokenManager.getDataverseToken(this.config.environmentUrl);
|
|
232
|
+
const response = await fetch(url, {
|
|
233
|
+
...options,
|
|
234
|
+
headers: {
|
|
235
|
+
Authorization: `Bearer ${token}`,
|
|
236
|
+
"Content-Type": "application/json",
|
|
237
|
+
Accept: "application/json",
|
|
238
|
+
"OData-MaxVersion": "4.0",
|
|
239
|
+
"OData-Version": "4.0",
|
|
240
|
+
...options.headers,
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
if (!response.ok) {
|
|
244
|
+
await this.handleError(response);
|
|
245
|
+
}
|
|
246
|
+
return response;
|
|
247
|
+
}
|
|
248
|
+
async handleError(response) {
|
|
249
|
+
try {
|
|
250
|
+
const errorBody = (await response.json());
|
|
251
|
+
if (errorBody.error) {
|
|
252
|
+
// Throws a typed error (DataverseApiError, GdapError, etc.)
|
|
253
|
+
throwDataverseError(errorBody.error, response.status, {
|
|
254
|
+
environmentUrl: this.config.environmentUrl,
|
|
255
|
+
clientId: this.config.clientId,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (e) {
|
|
260
|
+
// Re-throw typed errors from throwDataverseError
|
|
261
|
+
if (e instanceof DataverseApiError || e instanceof GdapError) {
|
|
262
|
+
throw e;
|
|
263
|
+
}
|
|
264
|
+
// Ignore JSON parse errors - fall back to basic error
|
|
265
|
+
}
|
|
266
|
+
throw new DataverseApiError(ErrorCode.DATAVERSE_API_ERROR, `Dataverse API error: ${response.status} ${response.statusText}`, response.status, {
|
|
267
|
+
environmentUrl: this.config.environmentUrl,
|
|
268
|
+
clientId: this.config.clientId,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/dataverse/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { DataverseClient } from "./client.js";
|
|
17
|
+
import { ConnectionMapping, EnvironmentVariable } from "../config/schema.js";
|
|
18
|
+
/**
|
|
19
|
+
* Connection Reference record from Dataverse
|
|
20
|
+
*/
|
|
21
|
+
export interface ConnectionReferenceRecord {
|
|
22
|
+
connectionreferenceid: string;
|
|
23
|
+
connectionreferencelogicalname: string;
|
|
24
|
+
connectionreferencedisplayname: string;
|
|
25
|
+
connectionid: string | null;
|
|
26
|
+
connectorid: string;
|
|
27
|
+
statecode: number;
|
|
28
|
+
statuscode: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Environment Variable Definition record
|
|
32
|
+
*/
|
|
33
|
+
export interface EnvironmentVariableDefinitionRecord {
|
|
34
|
+
environmentvariabledefinitionid: string;
|
|
35
|
+
schemaname: string;
|
|
36
|
+
displayname: string;
|
|
37
|
+
type: number;
|
|
38
|
+
defaultvalue: string | null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Environment Variable Value record
|
|
42
|
+
*/
|
|
43
|
+
export interface EnvironmentVariableValueRecord {
|
|
44
|
+
environmentvariablevalueid: string;
|
|
45
|
+
value: string;
|
|
46
|
+
environmentvariabledefinitionid: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Operations for managing Connection References and Environment Variables
|
|
50
|
+
*/
|
|
51
|
+
export declare class ConnectionOperations {
|
|
52
|
+
private client;
|
|
53
|
+
constructor(client: DataverseClient);
|
|
54
|
+
/**
|
|
55
|
+
* List all connection references in the environment
|
|
56
|
+
*/
|
|
57
|
+
listConnectionReferences(): Promise<ConnectionReferenceRecord[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Get a connection reference by logical name
|
|
60
|
+
*/
|
|
61
|
+
getConnectionReferenceByLogicalName(logicalName: string): Promise<ConnectionReferenceRecord | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Update the connection ID for a connection reference
|
|
64
|
+
*/
|
|
65
|
+
updateConnectionReference(connectionReferenceId: string, connectionId: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Apply connection mappings to the environment
|
|
68
|
+
* Maps source connection references to target connections
|
|
69
|
+
*/
|
|
70
|
+
applyConnectionMappings(mappings: ConnectionMapping[]): Promise<{
|
|
71
|
+
success: boolean;
|
|
72
|
+
applied: number;
|
|
73
|
+
errors: string[];
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Validate that all required connection references have connections assigned
|
|
77
|
+
*/
|
|
78
|
+
validateConnectionReferences(logicalNames: string[]): Promise<{
|
|
79
|
+
valid: boolean;
|
|
80
|
+
missing: string[];
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* List all environment variable definitions in the environment
|
|
84
|
+
*/
|
|
85
|
+
listEnvironmentVariables(): Promise<EnvironmentVariableDefinitionRecord[]>;
|
|
86
|
+
/**
|
|
87
|
+
* Get an environment variable definition by schema name
|
|
88
|
+
*/
|
|
89
|
+
getEnvironmentVariableBySchemaName(schemaName: string): Promise<EnvironmentVariableDefinitionRecord | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Get the current value of an environment variable
|
|
92
|
+
*/
|
|
93
|
+
getEnvironmentVariableValue(definitionId: string): Promise<string | null>;
|
|
94
|
+
/**
|
|
95
|
+
* Set the value of an environment variable
|
|
96
|
+
* Creates a new value record if none exists, updates if it does
|
|
97
|
+
*/
|
|
98
|
+
setEnvironmentVariableValue(schemaName: string, value: string | number | boolean): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Apply environment variable values to the environment
|
|
101
|
+
*/
|
|
102
|
+
applyEnvironmentVariables(variables: EnvironmentVariable[]): Promise<{
|
|
103
|
+
success: boolean;
|
|
104
|
+
applied: number;
|
|
105
|
+
errors: string[];
|
|
106
|
+
}>;
|
|
107
|
+
/**
|
|
108
|
+
* Get current values for all environment variables (for snapshot/rollback)
|
|
109
|
+
*/
|
|
110
|
+
getCurrentEnvironmentVariableValues(): Promise<Map<string, {
|
|
111
|
+
definitionId: string;
|
|
112
|
+
value: string | null;
|
|
113
|
+
}>>;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=connection-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-refs.d.ts","sourceRoot":"","sources":["../../src/dataverse/connection-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAClD,+BAA+B,EAAE,MAAM,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,0BAA0B,EAAE,MAAM,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B,EAAE,MAAM,CAAC;CACzC;AAED;;GAEG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAM3C;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAYtE;;OAEG;IACG,mCAAmC,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAY5C;;OAEG;IACG,yBAAyB,CAC7B,qBAAqB,EAAE,MAAM,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAMhB;;;OAGG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAqCnE;;OAEG;IACG,4BAA4B,CAChC,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAuBjD;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,mCAAmC,EAAE,CAAC;IAWhF;;OAEG;IACG,kCAAkC,CACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mCAAmC,GAAG,IAAI,CAAC;IAWtD;;OAEG;IACG,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAW/E;;;OAGG;IACG,2BAA2B,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAC/B,OAAO,CAAC,IAAI,CAAC;IAmChB;;OAEG;IACG,yBAAyB,CAC7B,SAAS,EAAE,mBAAmB,EAAE,GAC/B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAwBnE;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAClD,GAAG,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAC5D;CAcF"}
|