@fairmint/canton-node-sdk 0.0.267 → 0.0.269
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/build/src/clients/ledger-json-api/operations/v2/state/stream-active-contracts.d.ts +1 -1
- package/build/src/clients/ledger-json-api/operations/v2/state/stream-active-contracts.d.ts.map +1 -1
- package/build/src/clients/ledger-json-api/operations/v2/state/stream-active-contracts.js +47 -28
- package/build/src/clients/ledger-json-api/operations/v2/state/stream-active-contracts.js.map +1 -1
- package/build/src/core/ws/WebSocketClient.d.ts.map +1 -1
- package/build/src/core/ws/WebSocketClient.js +4 -0
- package/build/src/core/ws/WebSocketClient.js.map +1 -1
- package/build/src/da-registry/api-client.d.ts +47 -0
- package/build/src/da-registry/api-client.d.ts.map +1 -0
- package/build/src/da-registry/api-client.js +140 -0
- package/build/src/da-registry/api-client.js.map +1 -0
- package/build/src/da-registry/choice-context.d.ts +24 -0
- package/build/src/da-registry/choice-context.d.ts.map +1 -0
- package/build/src/da-registry/choice-context.js +37 -0
- package/build/src/da-registry/choice-context.js.map +1 -0
- package/build/src/da-registry/commands.d.ts +96 -0
- package/build/src/da-registry/commands.d.ts.map +1 -0
- package/build/src/da-registry/commands.js +233 -0
- package/build/src/da-registry/commands.js.map +1 -0
- package/build/src/da-registry/index.d.ts +8 -0
- package/build/src/da-registry/index.d.ts.map +1 -0
- package/build/src/da-registry/index.js +24 -0
- package/build/src/da-registry/index.js.map +1 -0
- package/build/src/da-registry/ledger.d.ts +29 -0
- package/build/src/da-registry/ledger.d.ts.map +1 -0
- package/build/src/da-registry/ledger.js +25 -0
- package/build/src/da-registry/ledger.js.map +1 -0
- package/build/src/da-registry/packages.d.ts +23 -0
- package/build/src/da-registry/packages.d.ts.map +1 -0
- package/build/src/da-registry/packages.js +41 -0
- package/build/src/da-registry/packages.js.map +1 -0
- package/build/src/da-registry/readers.d.ts +43 -0
- package/build/src/da-registry/readers.d.ts.map +1 -0
- package/build/src/da-registry/readers.js +59 -0
- package/build/src/da-registry/readers.js.map +1 -0
- package/build/src/da-registry/templates.d.ts +32 -0
- package/build/src/da-registry/templates.d.ts.map +1 -0
- package/build/src/da-registry/templates.js +33 -0
- package/build/src/da-registry/templates.js.map +1 -0
- package/build/src/index.d.ts +1 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +1 -0
- package/build/src/index.js.map +1 -1
- package/build/src/utils/index.d.ts +1 -0
- package/build/src/utils/index.d.ts.map +1 -1
- package/build/src/utils/index.js +1 -0
- package/build/src/utils/index.js.map +1 -1
- package/build/src/utils/ledger/active-contracts.d.ts +26 -0
- package/build/src/utils/ledger/active-contracts.d.ts.map +1 -0
- package/build/src/utils/ledger/active-contracts.js +43 -0
- package/build/src/utils/ledger/active-contracts.js.map +1 -0
- package/build/src/utils/ledger/index.d.ts +7 -0
- package/build/src/utils/ledger/index.d.ts.map +1 -0
- package/build/src/utils/ledger/index.js +23 -0
- package/build/src/utils/ledger/index.js.map +1 -0
- package/build/src/utils/ledger/packages.d.ts +21 -0
- package/build/src/utils/ledger/packages.d.ts.map +1 -0
- package/build/src/utils/ledger/packages.js +36 -0
- package/build/src/utils/ledger/packages.js.map +1 -0
- package/build/src/utils/ledger/submit-commands.d.ts +19 -0
- package/build/src/utils/ledger/submit-commands.d.ts.map +1 -0
- package/build/src/utils/ledger/submit-commands.js +34 -0
- package/build/src/utils/ledger/submit-commands.js.map +1 -0
- package/build/src/utils/ledger/synchronizers.d.ts +4 -0
- package/build/src/utils/ledger/synchronizers.d.ts.map +1 -0
- package/build/src/utils/ledger/synchronizers.js +9 -0
- package/build/src/utils/ledger/synchronizers.js.map +1 -0
- package/build/src/utils/ledger/types.d.ts +63 -0
- package/build/src/utils/ledger/types.d.ts.map +1 -0
- package/build/src/utils/ledger/types.js +3 -0
- package/build/src/utils/ledger/types.js.map +1 -0
- package/build/src/utils/ledger/user-rights.d.ts +17 -0
- package/build/src/utils/ledger/user-rights.d.ts.map +1 -0
- package/build/src/utils/ledger/user-rights.js +28 -0
- package/build/src/utils/ledger/user-rights.js.map +1 -0
- package/package.json +1 -1
package/build/src/index.js
CHANGED
|
@@ -19,5 +19,6 @@ var Canton_1 = require("./Canton");
|
|
|
19
19
|
Object.defineProperty(exports, "Canton", { enumerable: true, get: function () { return Canton_1.Canton; } });
|
|
20
20
|
__exportStar(require("./clients"), exports);
|
|
21
21
|
__exportStar(require("./core"), exports);
|
|
22
|
+
__exportStar(require("./da-registry"), exports);
|
|
22
23
|
__exportStar(require("./utils"), exports);
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
package/build/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAOkB;AANhB,gGAAA,MAAM,OAAA;AAOR,4CAA0B;AAC1B,yCAAuB;AACvB,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAOkB;AANhB,gGAAA,MAAM,OAAA;AAOR,4CAA0B;AAC1B,yCAAuB;AACvB,gDAA8B;AAC9B,0CAAwB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC"}
|
package/build/src/utils/index.js
CHANGED
|
@@ -19,6 +19,7 @@ __exportStar(require("./canton-response-utils"), exports);
|
|
|
19
19
|
__exportStar(require("./contracts"), exports);
|
|
20
20
|
__exportStar(require("./external-signing"), exports);
|
|
21
21
|
__exportStar(require("./health"), exports);
|
|
22
|
+
__exportStar(require("./ledger"), exports);
|
|
22
23
|
__exportStar(require("./mining"), exports);
|
|
23
24
|
__exportStar(require("./parsers"), exports);
|
|
24
25
|
__exportStar(require("./party"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0DAAwC;AACxC,8CAA4B;AAC5B,qDAAmC;AACnC,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,oDAAkC;AAClC,mDAAiC;AACjC,4CAA0B;AAC1B,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0DAAwC;AACxC,8CAA4B;AAC5B,qDAAmC;AACnC,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,oDAAkC;AAClC,mDAAiC;AACjC,4CAA0B;AAC1B,iDAA+B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type LedgerJsonApiClient } from '../../clients';
|
|
2
|
+
import { type ActiveContract } from './types';
|
|
3
|
+
export interface GetActiveContractsByTemplateParams {
|
|
4
|
+
/** Parties whose view of the active contract set is read. Every party must be actable by the client's user. */
|
|
5
|
+
parties: string[];
|
|
6
|
+
/**
|
|
7
|
+
* Template filters, in package-name form (`#<package-name>:<Module>:<Entity>`) or package-id form
|
|
8
|
+
* (`<packageId>:<Module>:<Entity>`).
|
|
9
|
+
*/
|
|
10
|
+
templateIds: string[];
|
|
11
|
+
/**
|
|
12
|
+
* When set, contracts on any other synchronizer are dropped: a submission pinned to one synchronizer cannot use them.
|
|
13
|
+
* When omitted, contracts on every connected synchronizer are returned.
|
|
14
|
+
*/
|
|
15
|
+
synchronizerId?: string;
|
|
16
|
+
includeCreatedEventBlob?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Reads the active contracts of the given templates visible to `parties`.
|
|
20
|
+
*
|
|
21
|
+
* Empty pages (`JsEmpty` entries, returned when nothing matches) are skipped. Malformed entries are skipped rather than
|
|
22
|
+
* throwing, matching the ledger's streaming semantics; use {@link isJsActiveContractItem} directly if strict validation
|
|
23
|
+
* is needed.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getActiveContractsByTemplate(client: LedgerJsonApiClient, params: GetActiveContractsByTemplateParams): Promise<ActiveContract[]>;
|
|
26
|
+
//# sourceMappingURL=active-contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-contracts.d.ts","sourceRoot":"","sources":["../../../../src/utils/ledger/active-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,kCAAkC;IACjD,+GAA+G;IAC/G,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,cAAc,EAAE,CAAC,CA2B3B"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getActiveContractsByTemplate = getActiveContractsByTemplate;
|
|
4
|
+
const errors_1 = require("../../core/errors");
|
|
5
|
+
const contracts_1 = require("../contracts");
|
|
6
|
+
/**
|
|
7
|
+
* Reads the active contracts of the given templates visible to `parties`.
|
|
8
|
+
*
|
|
9
|
+
* Empty pages (`JsEmpty` entries, returned when nothing matches) are skipped. Malformed entries are skipped rather than
|
|
10
|
+
* throwing, matching the ledger's streaming semantics; use {@link isJsActiveContractItem} directly if strict validation
|
|
11
|
+
* is needed.
|
|
12
|
+
*/
|
|
13
|
+
async function getActiveContractsByTemplate(client, params) {
|
|
14
|
+
// The underlying operation replaces an empty party list with the client's default parties; never let an explicit
|
|
15
|
+
// but empty selection fall back to reading as the validator party.
|
|
16
|
+
if (params.parties.length === 0) {
|
|
17
|
+
throw new errors_1.ValidationError('getActiveContractsByTemplate requires at least one party');
|
|
18
|
+
}
|
|
19
|
+
const items = await client.getActiveContracts({
|
|
20
|
+
parties: params.parties,
|
|
21
|
+
templateIds: params.templateIds,
|
|
22
|
+
...(params.includeCreatedEventBlob !== undefined
|
|
23
|
+
? { includeCreatedEventBlob: params.includeCreatedEventBlob }
|
|
24
|
+
: {}),
|
|
25
|
+
});
|
|
26
|
+
const contracts = [];
|
|
27
|
+
for (const item of items) {
|
|
28
|
+
if (!(0, contracts_1.isJsActiveContractItem)(item))
|
|
29
|
+
continue;
|
|
30
|
+
const { createdEvent, synchronizerId } = item.contractEntry.JsActiveContract;
|
|
31
|
+
if (params.synchronizerId !== undefined && synchronizerId !== params.synchronizerId)
|
|
32
|
+
continue;
|
|
33
|
+
contracts.push({
|
|
34
|
+
contractId: createdEvent.contractId,
|
|
35
|
+
templateId: createdEvent.templateId,
|
|
36
|
+
createArgument: createdEvent.createArgument,
|
|
37
|
+
synchronizerId,
|
|
38
|
+
...(createdEvent.createdEventBlob ? { createdEventBlob: createdEvent.createdEventBlob } : {}),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return contracts;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=active-contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-contracts.js","sourceRoot":"","sources":["../../../../src/utils/ledger/active-contracts.ts"],"names":[],"mappings":";;;AACA,8CAAoD;AACpD,4CAAsD;AAmBtD;;;;;;GAMG;AACI,KAAK,uCACV,MAA2B,EAC3B,MAA0C;IAE1C,iHAAiH;IACjH,mEAAmE;IACnE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,wBAAe,CAAC,0DAA0D,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC;QAC5C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,GAAG,CAAC,MAAM,CAAC,uBAAuB,KAAK,SAAS;YAC9C,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,EAAE;YAC7D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAA,kCAAsB,EAAC,IAAI,CAAC;YAAE,SAAS;QAC5C,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;QAC7E,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,MAAM,CAAC,cAAc;YAAE,SAAS;QAC9F,SAAS,CAAC,IAAI,CAAC;YACb,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,cAAc,EAAE,YAAY,CAAC,cAAc;YAC3C,cAAc;YACd,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9F,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/ledger/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./active-contracts"), exports);
|
|
18
|
+
__exportStar(require("./packages"), exports);
|
|
19
|
+
__exportStar(require("./submit-commands"), exports);
|
|
20
|
+
__exportStar(require("./synchronizers"), exports);
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
22
|
+
__exportStar(require("./user-rights"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/ledger/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,6CAA2B;AAC3B,oDAAkC;AAClC,kDAAgC;AAChC,0CAAwB;AACxB,gDAA8B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type LedgerJsonApiClient } from '../../clients';
|
|
2
|
+
import { type PreferredPackage } from './types';
|
|
3
|
+
/** Ids of every package uploaded to this participant, vetted or not. */
|
|
4
|
+
export declare function listUploadedPackageIds(client: LedgerJsonApiClient): Promise<string[]>;
|
|
5
|
+
/**
|
|
6
|
+
* The package version each name resolves to when every one of `parties` must have it vetted on `synchronizerId`.
|
|
7
|
+
*
|
|
8
|
+
* Use this to confirm that the packages a workflow needs (for example a DA Registry bundle) are vetted by all
|
|
9
|
+
* confirming nodes before submitting package-name-form commands.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getPreferredPackages(client: LedgerJsonApiClient, params: {
|
|
12
|
+
parties: string[];
|
|
13
|
+
packageNames: string[];
|
|
14
|
+
synchronizerId: string;
|
|
15
|
+
}): Promise<PreferredPackage[]>;
|
|
16
|
+
/** Uploads a DAR and vets every package in it on the given synchronizer. */
|
|
17
|
+
export declare function uploadAndVetDar(client: LedgerJsonApiClient, params: {
|
|
18
|
+
darFile: Buffer;
|
|
19
|
+
synchronizerId: string;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=packages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../../../../src/utils/ledger/packages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,wEAAwE;AACxE,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG3F;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC5E,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7B;AAED,4EAA4E;AAC5E,wBAAsB,eAAe,CACnC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listUploadedPackageIds = listUploadedPackageIds;
|
|
4
|
+
exports.getPreferredPackages = getPreferredPackages;
|
|
5
|
+
exports.uploadAndVetDar = uploadAndVetDar;
|
|
6
|
+
const core_1 = require("../../core");
|
|
7
|
+
/** Ids of every package uploaded to this participant, vetted or not. */
|
|
8
|
+
async function listUploadedPackageIds(client) {
|
|
9
|
+
const { packageIds } = await client.listPackages();
|
|
10
|
+
return packageIds;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The package version each name resolves to when every one of `parties` must have it vetted on `synchronizerId`.
|
|
14
|
+
*
|
|
15
|
+
* Use this to confirm that the packages a workflow needs (for example a DA Registry bundle) are vetted by all
|
|
16
|
+
* confirming nodes before submitting package-name-form commands.
|
|
17
|
+
*/
|
|
18
|
+
async function getPreferredPackages(client, params) {
|
|
19
|
+
const { packageReferences } = await client.interactiveSubmissionGetPreferredPackages({
|
|
20
|
+
packageVettingRequirements: params.packageNames.map((packageName) => ({
|
|
21
|
+
parties: params.parties,
|
|
22
|
+
packageName,
|
|
23
|
+
})),
|
|
24
|
+
synchronizerId: params.synchronizerId,
|
|
25
|
+
});
|
|
26
|
+
return packageReferences;
|
|
27
|
+
}
|
|
28
|
+
/** Uploads a DAR and vets every package in it on the given synchronizer. */
|
|
29
|
+
async function uploadAndVetDar(client, params) {
|
|
30
|
+
await client.uploadDar({
|
|
31
|
+
darFile: params.darFile,
|
|
32
|
+
vetAllPackages: true,
|
|
33
|
+
synchronizerId: (0, core_1.SynchronizerId)(params.synchronizerId),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../../src/utils/ledger/packages.ts"],"names":[],"mappings":";;;;;AACA,qCAA4C;AAG5C,wEAAwE;AACjE,KAAK,iCAAiC,MAA2B;IACtE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;IACnD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACI,KAAK,+BACV,MAA2B,EAC3B,MAA6E;IAE7E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC;QACnF,0BAA0B,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW;SACZ,CAAC,CAAC;QACH,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,4EAA4E;AACrE,KAAK,0BACV,MAA2B,EAC3B,MAAmD;IAEnD,MAAM,MAAM,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,IAAA,qBAAc,EAAC,MAAM,CAAC,cAAc,CAAC;KACtD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type LedgerJsonApiClient } from '../../clients';
|
|
2
|
+
import { type LedgerSubmission, type SubmittedTransaction } from './types';
|
|
3
|
+
export interface SubmitLedgerCommandsOptions {
|
|
4
|
+
/** Every command is pinned to this synchronizer. */
|
|
5
|
+
synchronizerId: string;
|
|
6
|
+
/**
|
|
7
|
+
* Package ids the participant prefers when resolving package-name-form template ids. Pinning the packages both
|
|
8
|
+
* confirming nodes vet keeps a multi-node workflow (for example a registrar and its operator) on the same code.
|
|
9
|
+
*/
|
|
10
|
+
packageIdSelectionPreference?: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Submits commands and waits for the resulting transaction, returning its update id and created contracts.
|
|
14
|
+
*
|
|
15
|
+
* The command id is `${commandIdPrefix}-${randomUUID()}`: callers keep a stable, searchable prefix per logical action
|
|
16
|
+
* while each submission stays unique.
|
|
17
|
+
*/
|
|
18
|
+
export declare function submitLedgerCommands(client: LedgerJsonApiClient, submission: LedgerSubmission, options: SubmitLedgerCommandsOptions): Promise<SubmittedTransaction>;
|
|
19
|
+
//# sourceMappingURL=submit-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-commands.d.ts","sourceRoot":"","sources":["../../../../src/utils/ledger/submit-commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,WAAW,2BAA2B;IAC1C,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClD;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,mBAAmB,EAC3B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,oBAAoB,CAAC,CAqB/B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.submitLedgerCommands = submitLedgerCommands;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const parsers_1 = require("../parsers");
|
|
6
|
+
/**
|
|
7
|
+
* Submits commands and waits for the resulting transaction, returning its update id and created contracts.
|
|
8
|
+
*
|
|
9
|
+
* The command id is `${commandIdPrefix}-${randomUUID()}`: callers keep a stable, searchable prefix per logical action
|
|
10
|
+
* while each submission stays unique.
|
|
11
|
+
*/
|
|
12
|
+
async function submitLedgerCommands(client, submission, options) {
|
|
13
|
+
const response = await client.submitAndWaitForTransaction({
|
|
14
|
+
// LedgerCommand mirrors the API's JSON shapes with Record<string, unknown> arguments; the client's zod-inferred
|
|
15
|
+
// parameter type uses a recursive JsonValue, so the structurally-equal commands need this one cast.
|
|
16
|
+
commands: submission.commands,
|
|
17
|
+
commandId: `${submission.commandIdPrefix}-${(0, crypto_1.randomUUID)()}`,
|
|
18
|
+
actAs: submission.actAs,
|
|
19
|
+
synchronizerId: options.synchronizerId,
|
|
20
|
+
...(options.packageIdSelectionPreference && options.packageIdSelectionPreference.length > 0
|
|
21
|
+
? { packageIdSelectionPreference: [...options.packageIdSelectionPreference] }
|
|
22
|
+
: {}),
|
|
23
|
+
...(submission.disclosedContracts && submission.disclosedContracts.length > 0
|
|
24
|
+
? { disclosedContracts: submission.disclosedContracts }
|
|
25
|
+
: {}),
|
|
26
|
+
});
|
|
27
|
+
const events = (0, parsers_1.extractEventsFromTransaction)(response);
|
|
28
|
+
const updateId = response.transaction?.updateId ?? '';
|
|
29
|
+
return {
|
|
30
|
+
updateId,
|
|
31
|
+
created: events.created.map((e) => ({ contractId: e.contractId, templateId: e.templateId })),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=submit-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-commands.js","sourceRoot":"","sources":["../../../../src/utils/ledger/submit-commands.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,wCAA0D;AAa1D;;;;;GAKG;AACI,KAAK,+BACV,MAA2B,EAC3B,UAA4B,EAC5B,OAAoC;IAEpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC;QACxD,gHAAgH;QAChH,oGAAoG;QACpG,QAAQ,EAAE,UAAU,CAAC,QAAyF;QAC9G,SAAS,EAAE,GAAG,UAAU,CAAC,eAAe,IAAI,IAAA,mBAAU,GAAE,EAAE;QAC1D,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,GAAG,CAAC,OAAO,CAAC,4BAA4B,IAAI,OAAO,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC;YACzF,CAAC,CAAC,EAAE,4BAA4B,EAAE,CAAC,GAAG,OAAO,CAAC,4BAA4B,CAAC,EAAE;YAC7E,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,UAAU,CAAC,kBAAkB,IAAI,UAAU,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;YAC3E,CAAC,CAAC,EAAE,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,EAAE;YACvD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAA,sCAA4B,EAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAI,QAAoD,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;IACnG,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;KAC7F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type LedgerJsonApiClient } from '../../clients';
|
|
2
|
+
/** Ids of the synchronizers `party` is currently connected to. */
|
|
3
|
+
export declare function getConnectedSynchronizerIds(client: LedgerJsonApiClient, party: string): Promise<string[]>;
|
|
4
|
+
//# sourceMappingURL=synchronizers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronizers.d.ts","sourceRoot":"","sources":["../../../../src/utils/ledger/synchronizers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,kEAAkE;AAClE,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG/G"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConnectedSynchronizerIds = getConnectedSynchronizerIds;
|
|
4
|
+
/** Ids of the synchronizers `party` is currently connected to. */
|
|
5
|
+
async function getConnectedSynchronizerIds(client, party) {
|
|
6
|
+
const { connectedSynchronizers } = await client.getConnectedSynchronizers({ party });
|
|
7
|
+
return (connectedSynchronizers ?? []).map((s) => s.synchronizerId);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=synchronizers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronizers.js","sourceRoot":"","sources":["../../../../src/utils/ledger/synchronizers.ts"],"names":[],"mappings":";;;AAEA,kEAAkE;AAC3D,KAAK,sCAAsC,MAA2B,EAAE,KAAa;IAC1F,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,OAAO,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for reading contracts and submitting commands through the Ledger JSON API.
|
|
3
|
+
*
|
|
4
|
+
* `LedgerCommand` mirrors the API's command JSON with `Record<string, unknown>` arguments, so callers can build
|
|
5
|
+
* commands for templates the SDK has no generated types for (for example Digital Asset's proprietary Registry DARs).
|
|
6
|
+
* The schema-typed counterparts (`CreateCommand`, `CompositeCommand`, …) are exported from the package root too;
|
|
7
|
+
* `LedgerCommand` is the ergonomic variant for hand-built commands, converted at the submission boundary.
|
|
8
|
+
*/
|
|
9
|
+
import { type DisclosedContract } from '../../clients';
|
|
10
|
+
export type { DisclosedContract };
|
|
11
|
+
/** A contract as read from the active contract set, in package-id form (`<packageId>:<Module>:<Entity>`). */
|
|
12
|
+
export interface ActiveContract {
|
|
13
|
+
contractId: string;
|
|
14
|
+
templateId: string;
|
|
15
|
+
createArgument: Record<string, unknown>;
|
|
16
|
+
createdEventBlob?: string;
|
|
17
|
+
synchronizerId: string;
|
|
18
|
+
}
|
|
19
|
+
export type LedgerCommand = {
|
|
20
|
+
CreateCommand: {
|
|
21
|
+
templateId: string;
|
|
22
|
+
createArguments: Record<string, unknown>;
|
|
23
|
+
};
|
|
24
|
+
} | {
|
|
25
|
+
ExerciseCommand: {
|
|
26
|
+
templateId: string;
|
|
27
|
+
contractId: string;
|
|
28
|
+
choice: string;
|
|
29
|
+
choiceArgument: Record<string, unknown>;
|
|
30
|
+
};
|
|
31
|
+
} | {
|
|
32
|
+
CreateAndExerciseCommand: {
|
|
33
|
+
templateId: string;
|
|
34
|
+
createArguments: Record<string, unknown>;
|
|
35
|
+
choice: string;
|
|
36
|
+
choiceArgument: Record<string, unknown>;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export interface LedgerSubmission {
|
|
40
|
+
/**
|
|
41
|
+
* Stable prefix identifying the logical action (for example one setup step); the submit helper appends a random
|
|
42
|
+
* suffix per submission so re-runs do not collide on the ledger's command-id deduplication.
|
|
43
|
+
*/
|
|
44
|
+
commandIdPrefix: string;
|
|
45
|
+
actAs: string[];
|
|
46
|
+
commands: LedgerCommand[];
|
|
47
|
+
disclosedContracts?: DisclosedContract[];
|
|
48
|
+
}
|
|
49
|
+
export interface CreatedContract {
|
|
50
|
+
contractId: string;
|
|
51
|
+
templateId: string;
|
|
52
|
+
}
|
|
53
|
+
export interface SubmittedTransaction {
|
|
54
|
+
updateId: string;
|
|
55
|
+
created: CreatedContract[];
|
|
56
|
+
}
|
|
57
|
+
/** The package version a name resolves to for a set of parties on a synchronizer. */
|
|
58
|
+
export interface PreferredPackage {
|
|
59
|
+
packageName: string;
|
|
60
|
+
packageId: string;
|
|
61
|
+
packageVersion: string;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/ledger/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,6GAA6G;AAC7G,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GACrB;IACE,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;CACjF,GACD;IACE,eAAe,EAAE;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACzC,CAAC;CACH,GACD;IACE,wBAAwB,EAAE;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACzC,CAAC;CACH,CAAC;AAEN,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/utils/ledger/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type LedgerJsonApiClient } from '../../clients';
|
|
2
|
+
export interface UserActAsStatus {
|
|
3
|
+
/** The authenticated user's id. */
|
|
4
|
+
userId: string;
|
|
5
|
+
/** Which of the requested parties the user may NOT act as. */
|
|
6
|
+
missing: string[];
|
|
7
|
+
/** Whether the user holds the ParticipantAdmin right (required to upload DARs). */
|
|
8
|
+
participantAdmin: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Checks which of `parties` the authenticated user may act as, and whether it is a participant admin.
|
|
12
|
+
*
|
|
13
|
+
* Every caller should name its parties explicitly: a client's default party is typically the validator party, and
|
|
14
|
+
* falling back to it would read or act as the wrong party.
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkUserActAs(client: LedgerJsonApiClient, parties: string[]): Promise<UserActAsStatus>;
|
|
17
|
+
//# sourceMappingURL=user-rights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-rights.d.ts","sourceRoot":"","sources":["../../../../src/utils/ledger/user-rights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mFAAmF;IACnF,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAWD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAc7G"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkUserActAs = checkUserActAs;
|
|
4
|
+
function canActAsParty(right) {
|
|
5
|
+
// The request shape nests the right under `value`; the response schema does not. Accept both.
|
|
6
|
+
return right.kind?.CanActAs?.value?.party ?? right.kind?.CanActAs?.party;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Checks which of `parties` the authenticated user may act as, and whether it is a participant admin.
|
|
10
|
+
*
|
|
11
|
+
* Every caller should name its parties explicitly: a client's default party is typically the validator party, and
|
|
12
|
+
* falling back to it would read or act as the wrong party.
|
|
13
|
+
*/
|
|
14
|
+
async function checkUserActAs(client, parties) {
|
|
15
|
+
const { user } = await client.getAuthenticatedUser({});
|
|
16
|
+
// The schema requires the user, but a misbehaving participant can still omit it; fail with a clear error.
|
|
17
|
+
const userId = user?.id;
|
|
18
|
+
if (!userId)
|
|
19
|
+
throw new Error('The ledger did not return the authenticated user');
|
|
20
|
+
const { rights } = await client.listUserRights({ userId });
|
|
21
|
+
const actable = new Set((rights ?? []).map(canActAsParty).filter((p) => p !== undefined));
|
|
22
|
+
return {
|
|
23
|
+
userId,
|
|
24
|
+
missing: parties.filter((p) => !actable.has(p)),
|
|
25
|
+
participantAdmin: (rights ?? []).some((r) => r.kind?.ParticipantAdmin !== undefined),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=user-rights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-rights.js","sourceRoot":"","sources":["../../../../src/utils/ledger/user-rights.ts"],"names":[],"mappings":";;;AAeA,SAAS,aAAa,CAAC,KAAgB;IACrC,8FAA8F;IAC9F,OAAO,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACI,KAAK,yBAAyB,MAA2B,EAAE,OAAiB;IACjF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACvD,0GAA0G;IAC1G,MAAM,MAAM,GAAI,IAAoC,EAAE,EAAE,CAAC;IACzD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACjF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,CACpB,CAAC,MAAM,IAAI,EAAE,CAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAC/F,CAAC;IACF,OAAO;QACL,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,gBAAgB,EAAG,CAAC,MAAM,IAAI,EAAE,CAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,KAAK,SAAS,CAAC;KACtG,CAAC;AACJ,CAAC"}
|