@layerzerolabs/common-canton 1.2.6 → 1.2.8

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.
@@ -8,56 +8,22 @@
8
8
 
9
9
  ✅ dpm-3.4.8-openapi-generator-7.21.0
10
10
  🔧 openapi-generator version: 7.21.0
11
- 📦 Using scoped workspace: /tmp/lz-scoped-workspace-oCc5RN
11
+ 📦 Using scoped workspace: /tmp/lz-scoped-workspace-qabI51
12
12
  📦 Copied 13 workspace package source(s)
13
13
  📦 No scoped-workspace pruner configured; using unpruned package-level source copy fallback.
14
- (node:87681) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/monorepo-internal/monorepo-internal/configs/vm-tooling/values/docker-image-repo.ts is not specified and it doesn't parse as CommonJS.
14
+ (node:109778) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/monorepo-internal/monorepo-internal/configs/vm-tooling/values/docker-image-repo.ts is not specified and it doesn't parse as CommonJS.
15
15
  Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
16
16
  To eliminate this warning, add "type": "module" to /home/runner/work/monorepo-internal/monorepo-internal/package.json.
17
17
  (Use `node --trace-warnings ...` to show where the warning was created)
18
18
  📦 Docker volumes:
19
- -v /tmp/lz-scoped-workspace-oCc5RN:/workspace
19
+ -v /tmp/lz-scoped-workspace-qabI51:/workspace
20
20
  -v /home/runner/work/monorepo-internal/monorepo-internal/packages/vms/canton/common:/workspace/packages/vms/canton/common
21
21
  -v /home/runner/work/monorepo-internal/monorepo-internal/node_modules/.pnpm:/workspace/node_modules/.pnpm:ro
22
22
  $ docker image inspect --format {{.Architecture}} 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
23
- Error response from daemon: No such image: 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
24
- 📥 Pulling Docker image from: 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
25
- $ docker pull 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
26
- openapi-generator-7.21.0-patch-2: Pulling from layerzerolabs/canton-openapi-tooling
27
- 17639c486e57: Pulling fs layer
28
- 051d551be118: Pulling fs layer
29
- 18a60288e8be: Pulling fs layer
30
- dfe8d6e6f390: Pulling fs layer
31
- e41c3f01e557: Pulling fs layer
32
- fe131d3b296c: Pulling fs layer
33
- dfe8d6e6f390: Waiting
34
- e41c3f01e557: Waiting
35
- fe131d3b296c: Waiting
36
- 18a60288e8be: Verifying Checksum
37
- 18a60288e8be: Download complete
38
- 17639c486e57: Verifying Checksum
39
- 17639c486e57: Download complete
40
- e41c3f01e557: Verifying Checksum
41
- e41c3f01e557: Download complete
42
- dfe8d6e6f390: Verifying Checksum
43
- dfe8d6e6f390: Download complete
44
- fe131d3b296c: Verifying Checksum
45
- fe131d3b296c: Download complete
46
- 051d551be118: Verifying Checksum
47
- 051d551be118: Download complete
48
- 17639c486e57: Pull complete
49
- 051d551be118: Pull complete
50
- 18a60288e8be: Pull complete
51
- dfe8d6e6f390: Pull complete
52
- e41c3f01e557: Pull complete
53
- fe131d3b296c: Pull complete
54
- Digest: sha256:9f4b76e7e635939d8107dbe5cf56b881ece20ecb08873f25e5e9d66b2955b5cb
55
- Status: Downloaded newer image for 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
56
- 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
57
- ✅ Successfully pulled: 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
23
+ ✅ Using cached Docker image: 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2 (amd64)
58
24
  👤 Running container as UID:GID 1001:1001
59
25
  📜 Executing custom script: set -euo pipefail && rm -rf "src/open-api" && canton-openapi-generator generate -g typescript-fetch -o "src/open-api" --additional-properties=importFileExtension=.js
60
- $ docker run --rm --add-host=host.docker.internal:host-gateway -e LOCAL_UID=1001 -e LOCAL_GID=1001 -v /tmp/lz-scoped-workspace-oCc5RN:/workspace -v /home/runner/work/monorepo-internal/monorepo-internal/packages/vms/canton/common:/workspace/packages/vms/canton/common -v /home/runner/work/monorepo-internal/monorepo-internal/node_modules/.pnpm:/workspace/node_modules/.pnpm:ro -w /workspace/packages/vms/canton/common 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2 bash -c $'set -euo pipefail && rm -rf "src/open-api" && canton-openapi-generator generate -g typescript-fetch -o "src/open-api" --additional-properties=importFileExtension=.js'
26
+ $ docker run --rm --add-host=host.docker.internal:host-gateway -e LOCAL_UID=1001 -e LOCAL_GID=1001 -v /tmp/lz-scoped-workspace-qabI51:/workspace -v /home/runner/work/monorepo-internal/monorepo-internal/packages/vms/canton/common:/workspace/packages/vms/canton/common -v /home/runner/work/monorepo-internal/monorepo-internal/node_modules/.pnpm:/workspace/node_modules/.pnpm:ro -w /workspace/packages/vms/canton/common 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2 bash -c $'set -euo pipefail && rm -rf "src/open-api" && canton-openapi-generator generate -g typescript-fetch -o "src/open-api" --additional-properties=importFileExtension=.js'
61
27
  [main] INFO o.o.codegen.DefaultGenerator - Generating with dryRun=false
62
28
  [main] INFO o.o.c.ignore.CodegenIgnoreProcessor - Output directory (/workspace/packages/vms/canton/common/src/open-api) does not exist, or is inaccessible. No file (.openapi-generator-ignore) will be evaluated.
63
29
  [main] INFO o.o.codegen.DefaultGenerator - OpenAPI Generator: typescript-fetch (client)
@@ -736,25 +702,25 @@ $ docker run --rm --add-host=host.docker.internal:host-gateway -e LOCAL_UID=1001
736
702
  # We appreciate your support! Please consider donation to help us maintain this project. #
737
703
  # https://opencollective.com/openapi_generator/donate #
738
704
  ############################################################################################
739
- ⏳ bash -c set -euo pipefail && rm -rf "src/open-api" && canton-openapi-generator generate -g typescript-fetch -o "src/open-api" --additional-properties=importFileExtension=.js: 4.696s
705
+ ⏳ bash -c set -euo pipefail && rm -rf "src/open-api" && canton-openapi-generator generate -g typescript-fetch -o "src/open-api" --additional-properties=importFileExtension=.js: 3.397s
740
706
  Testing types with tsc and vue-tsc is an experimental feature.
741
707
  Breaking changes might not follow SemVer, please pin Vitest's version when using it.
742
708
 
743
709
   RUN  v3.2.6 /home/runner/work/monorepo-internal/monorepo-internal/packages/vms/canton/common
744
710
 
745
- ✓ test/provider.test.ts (8 tests) 44ms
746
- ✓ test/auth/client-credentials-token-provider.test.ts (7 tests) 19ms
747
- ✓ test/auth/local-token-provider.test.ts (5 tests) 14ms
748
- ✓ test/crypto.test.ts (6 tests) 9ms
749
- ✓ test/client/amulet.test.ts (3 tests) 9ms
750
- ✓ test/daml-serde.test.ts (19 tests) 22ms
711
+ ✓ test/auth/local-token-provider.test.ts (5 tests) 11ms
712
+ ✓ test/provider.test.ts (8 tests) 24ms
713
+ ✓ test/auth/client-credentials-token-provider.test.ts (7 tests) 17ms
714
+ ✓ test/crypto.test.ts (6 tests) 7ms
715
+ ✓ test/client/amulet.test.ts (3 tests) 7ms
716
+ ✓ test/daml-serde.test.ts (19 tests) 17ms
751
717
  stderr | test/sdk.test.ts > Error Handling (Unhappy Paths) > should handle double archive error
752
718
  Mock miss: GET /v2/state/connected-synchronizers
753
719
 
754
720
  stderr | test/sdk.test.ts > Error Handling (Unhappy Paths) > should handle unauthorized party error
755
721
  Mock miss: GET /v2/state/connected-synchronizers
756
722
 
757
- ✓ test/sdk.test.ts (18 tests) 47ms
723
+ ✓ test/sdk.test.ts (18 tests) 28ms
758
724
  ✓  TS  test/sdk.test.ts (18 tests)
759
725
  ✓  TS  test/auth/client-credentials-token-provider.test.ts (7 tests)
760
726
  ✓  TS  test/daml-serde.test.ts (19 tests)
@@ -766,6 +732,6 @@ Breaking changes might not follow SemVer, please pin Vitest's version when using
766
732
   Test Files  14 passed (14)
767
733
   Tests  132 passed (132)
768
734
  Type Errors  no errors
769
-  Start at  23:44:28
770
-  Duration  5.68s (transform 1.67s, setup 0ms, collect 3.07s, tests 164ms, environment 2ms, prepare 1.81s, typecheck 5.07s)
735
+  Start at  22:07:22
736
+  Duration  4.02s (transform 1.09s, setup 0ms, collect 1.84s, tests 112ms, environment 1ms, prepare 1.39s, typecheck 3.63s)
771
737
 
@@ -1,5 +1,5 @@
1
+ import { createContractAddressResolver } from './VAFLUPQJ.js';
1
2
  import { substituteRefsToCids } from './57KDDFEU.js';
2
- import { createContractAddressResolver } from './QRFMJ32P.js';
3
3
  import { AMULET_INSTRUMENT_ID } from './4G6A7TFX.js';
4
4
  import { __name } from './VUOMXK5T.js';
5
5
 
@@ -67,5 +67,5 @@ var resolveCantonTransaction = /* @__PURE__ */ __name(async ({ unresolvedCommand
67
67
  }, "resolveCantonTransaction");
68
68
 
69
69
  export { resolveCantonTransaction };
70
- //# sourceMappingURL=333Q6X6C.js.map
71
- //# sourceMappingURL=333Q6X6C.js.map
70
+ //# sourceMappingURL=ST5U5WZ4.js.map
71
+ //# sourceMappingURL=ST5U5WZ4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","senderParty","signingParties","client","nextDisclosed","disclosedContractIds","Set","map","contractId","appendDisclosures","disclosures","disclosure","has","add","push","resolveActiveContractId","resolveActiveContractIds","requireSenderParty","createContractAddressResolver","amuletBundlePromise","getAmuletBundle","dsoParty","getDsoParty","amuletContext","disclosedContracts","bundle","externalPartyAmuletRulesCid","getAmuletContextWithExternalRules","admin","id","AMULET_INSTRUMENT_ID","resolveRef","ref","type","resolvedCommands","substituteRefsToCids","resolvedDisclosedContracts","index","length","commands"],"mappings":"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","file":"333Q6X6C.js","sourcesContent":["import { AMULET_INSTRUMENT_ID, type ChoiceContext } from '../client/amulet';\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type { CantonCommands, CantonDisclosedContracts } from '../transaction';\nimport { createContractAddressResolver } from './address-resolver';\nimport { substituteRefsToCids } from './reverse-substitute';\n\nexport interface ResolveCantonAddressParams {\n unresolvedCommands: CantonCommands;\n unresolvedDisclosedContracts: CantonDisclosedContracts;\n senderParty?: string;\n /** A contract is only disclosed when none of these parties is already a stakeholder on it. */\n signingParties: string[];\n client: ICantonClient;\n}\n\nexport const resolveCantonTransaction = async ({\n unresolvedCommands,\n unresolvedDisclosedContracts,\n senderParty,\n signingParties,\n client,\n}: ResolveCantonAddressParams): Promise<{\n commands: CantonCommands;\n disclosedContracts: CantonDisclosedContracts;\n}> => {\n const nextDisclosed = [...unresolvedDisclosedContracts];\n const disclosedContractIds = new Set(\n unresolvedDisclosedContracts.map(({ contractId }) => contractId),\n );\n const appendDisclosures = (disclosures: CantonDisclosedContracts): void => {\n for (const disclosure of disclosures) {\n if (!disclosedContractIds.has(disclosure.contractId)) {\n disclosedContractIds.add(disclosure.contractId);\n nextDisclosed.push(disclosure);\n }\n }\n };\n\n const { resolveActiveContractId, resolveActiveContractIds, requireSenderParty } =\n createContractAddressResolver({\n client,\n senderParty,\n signingParties,\n appendDisclosures,\n });\n\n let amuletBundlePromise:\n | Promise<{\n amuletContext: ChoiceContext;\n externalPartyAmuletRulesCid: string;\n }>\n | undefined;\n\n const getAmuletBundle = async () => {\n if (!amuletBundlePromise) {\n amuletBundlePromise = (async () => {\n const dsoParty = await client.getDsoParty();\n const {\n amuletContext,\n disclosedContracts: bundle,\n externalPartyAmuletRulesCid,\n } = await client.getAmuletContextWithExternalRules({\n admin: dsoParty,\n id: AMULET_INSTRUMENT_ID,\n });\n appendDisclosures(bundle);\n return { amuletContext, externalPartyAmuletRulesCid };\n })();\n }\n return amuletBundlePromise;\n };\n\n const resolveRef = async (ref: CantonDeferredValue): Promise<unknown> => {\n switch (ref.type) {\n case 'senderParty':\n return requireSenderParty(ref.type);\n case 'activeContractId':\n return resolveActiveContractId(ref);\n case 'activeContractIds':\n return resolveActiveContractIds(ref);\n case 'amuletRulesCid':\n return (await getAmuletBundle()).externalPartyAmuletRulesCid;\n case 'amuletContext':\n return (await getAmuletBundle()).amuletContext;\n }\n };\n\n const resolvedCommands = await substituteRefsToCids(unresolvedCommands, resolveRef);\n const resolvedDisclosedContracts: CantonDisclosedContracts = [];\n for (let index = 0; index < nextDisclosed.length; index++) {\n resolvedDisclosedContracts.push(\n await substituteRefsToCids(nextDisclosed[index]!, resolveRef),\n );\n }\n\n return {\n commands: resolvedCommands,\n disclosedContracts: resolvedDisclosedContracts,\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","senderParty","signingParties","client","nextDisclosed","disclosedContractIds","Set","map","contractId","appendDisclosures","disclosures","disclosure","has","add","push","resolveActiveContractId","resolveActiveContractIds","requireSenderParty","createContractAddressResolver","amuletBundlePromise","getAmuletBundle","dsoParty","getDsoParty","amuletContext","disclosedContracts","bundle","externalPartyAmuletRulesCid","getAmuletContextWithExternalRules","admin","id","AMULET_INSTRUMENT_ID","resolveRef","ref","type","resolvedCommands","substituteRefsToCids","resolvedDisclosedContracts","index","length","commands"],"mappings":"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","file":"ST5U5WZ4.js","sourcesContent":["import { AMULET_INSTRUMENT_ID, type ChoiceContext } from '../client/amulet';\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type { CantonCommands, CantonDisclosedContracts } from '../transaction';\nimport { createContractAddressResolver } from './address-resolver';\nimport { substituteRefsToCids } from './reverse-substitute';\n\nexport interface ResolveCantonAddressParams {\n unresolvedCommands: CantonCommands;\n unresolvedDisclosedContracts: CantonDisclosedContracts;\n senderParty?: string;\n /** A contract is only disclosed when none of these parties is already a stakeholder on it. */\n signingParties: string[];\n client: ICantonClient;\n}\n\nexport const resolveCantonTransaction = async ({\n unresolvedCommands,\n unresolvedDisclosedContracts,\n senderParty,\n signingParties,\n client,\n}: ResolveCantonAddressParams): Promise<{\n commands: CantonCommands;\n disclosedContracts: CantonDisclosedContracts;\n}> => {\n const nextDisclosed = [...unresolvedDisclosedContracts];\n const disclosedContractIds = new Set(\n unresolvedDisclosedContracts.map(({ contractId }) => contractId),\n );\n const appendDisclosures = (disclosures: CantonDisclosedContracts): void => {\n for (const disclosure of disclosures) {\n if (!disclosedContractIds.has(disclosure.contractId)) {\n disclosedContractIds.add(disclosure.contractId);\n nextDisclosed.push(disclosure);\n }\n }\n };\n\n const { resolveActiveContractId, resolveActiveContractIds, requireSenderParty } =\n createContractAddressResolver({\n client,\n senderParty,\n signingParties,\n appendDisclosures,\n });\n\n let amuletBundlePromise:\n | Promise<{\n amuletContext: ChoiceContext;\n externalPartyAmuletRulesCid: string;\n }>\n | undefined;\n\n const getAmuletBundle = async () => {\n if (!amuletBundlePromise) {\n amuletBundlePromise = (async () => {\n const dsoParty = await client.getDsoParty();\n const {\n amuletContext,\n disclosedContracts: bundle,\n externalPartyAmuletRulesCid,\n } = await client.getAmuletContextWithExternalRules({\n admin: dsoParty,\n id: AMULET_INSTRUMENT_ID,\n });\n appendDisclosures(bundle);\n return { amuletContext, externalPartyAmuletRulesCid };\n })();\n }\n return amuletBundlePromise;\n };\n\n const resolveRef = async (ref: CantonDeferredValue): Promise<unknown> => {\n switch (ref.type) {\n case 'senderParty':\n return requireSenderParty(ref.type);\n case 'activeContractId':\n return resolveActiveContractId(ref);\n case 'activeContractIds':\n return resolveActiveContractIds(ref);\n case 'amuletRulesCid':\n return (await getAmuletBundle()).externalPartyAmuletRulesCid;\n case 'amuletContext':\n return (await getAmuletBundle()).amuletContext;\n }\n };\n\n const resolvedCommands = await substituteRefsToCids(unresolvedCommands, resolveRef);\n const resolvedDisclosedContracts: CantonDisclosedContracts = [];\n for (let index = 0; index < nextDisclosed.length; index++) {\n resolvedDisclosedContracts.push(\n await substituteRefsToCids(nextDisclosed[index]!, resolveRef),\n );\n }\n\n return {\n commands: resolvedCommands,\n disclosedContracts: resolvedDisclosedContracts,\n };\n};\n"]}
@@ -1,14 +1,14 @@
1
1
  import { __name } from './VUOMXK5T.js';
2
2
  import { NonRetryableError } from '@layerzerolabs/common-error-utils';
3
3
 
4
+ var isConcreteActiveContractRef = /* @__PURE__ */ __name((ref) => (ref.type === "activeContractId" || ref.type === "activeContractIds") && ref.partyToFilter !== "sender", "isConcreteActiveContractRef");
4
5
  var matchesContractStateFilter = /* @__PURE__ */ __name((contract, contractStateFilter) => {
5
6
  if (!contractStateFilter) return true;
6
7
  const createArgument = contract.createdEvent.createArgument;
7
8
  return Object.entries(contractStateFilter).every(([key, value]) => JSON.stringify(createArgument[key]) === JSON.stringify(value));
8
9
  }, "matchesContractStateFilter");
9
10
  var isRefAlive = /* @__PURE__ */ __name(async (client, ref) => {
10
- if (ref.type !== "activeContractId" && ref.type !== "activeContractIds") return false;
11
- if (ref.partyToFilter === "sender") return false;
11
+ if (!isConcreteActiveContractRef(ref)) return false;
12
12
  const contracts = await queryLiveContractsForRef(client, ref.partyToFilter.party, ref);
13
13
  return ref.type === "activeContractId" ? contracts.length === 1 : contracts.length > 0;
14
14
  }, "isRefAlive");
@@ -98,6 +98,6 @@ var createContractAddressResolver = /* @__PURE__ */ __name((deps) => {
98
98
  };
99
99
  }, "createContractAddressResolver");
100
100
 
101
- export { createContractAddressResolver, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef };
102
- //# sourceMappingURL=QRFMJ32P.js.map
103
- //# sourceMappingURL=QRFMJ32P.js.map
101
+ export { createContractAddressResolver, isConcreteActiveContractRef, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef };
102
+ //# sourceMappingURL=VAFLUPQJ.js.map
103
+ //# sourceMappingURL=VAFLUPQJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/refresh/address-resolver.ts"],"names":["isConcreteActiveContractRef","ref","type","partyToFilter","matchesContractStateFilter","contract","contractStateFilter","createArgument","createdEvent","Object","entries","every","key","value","JSON","stringify","isRefAlive","client","contracts","queryLiveContractsForRef","party","length","offset","getLedgerEndOffset","queryActiveContracts","templateIds","templateId","filter","queryLiveContractIdsForRef","senderParty","map","c","contractId","createContractAddressResolver","deps","signingParties","appendDisclosures","requireSender","NonRetryableError","resolveQueryParty","queryCache","Map","queryAsParty","cacheKey","cached","get","query","set","needsDisclosure","stakeholders","Set","signatories","observers","some","has","discloseContracts","toDisclose","disclosures","Promise","all","disclosure","createDisclosure","resolveActiveContractId","resolveActiveContractIds","requireSenderParty"],"mappings":"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","file":"VAFLUPQJ.js","sourcesContent":["import type { ContractId } from '@daml/types';\n\nimport { NonRetryableError } from '@layerzerolabs/common-error-utils';\n\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type { JsActiveContract } from '../open-api/models';\nimport type { CantonDisclosedContracts } from '../transaction';\n\nexport type ActiveContractRef = Extract<\n CantonDeferredValue,\n { type: 'activeContractId' | 'activeContractIds' }\n>;\n\n/** Active-contract ref whose handler party is concrete (not the `'sender'` sentinel). */\nexport type ConcreteActiveContractRef = ActiveContractRef & {\n partyToFilter: { party: string };\n};\n\nexport const isConcreteActiveContractRef = (\n ref: CantonDeferredValue,\n): ref is ConcreteActiveContractRef =>\n (ref.type === 'activeContractId' || ref.type === 'activeContractIds') &&\n ref.partyToFilter !== 'sender';\n\nexport interface ContractAddressResolverDeps {\n client: ICantonClient;\n senderParty?: string;\n /** A contract is only disclosed when none of these parties is already a stakeholder on it. */\n signingParties: string[];\n appendDisclosures: (disclosures: CantonDisclosedContracts) => void;\n}\n\nexport const matchesContractStateFilter = (\n contract: JsActiveContract,\n contractStateFilter: ActiveContractRef['contractStateFilter'],\n): boolean => {\n if (!contractStateFilter) return true;\n const createArgument = contract.createdEvent.createArgument as Record<string, unknown>;\n return Object.entries(contractStateFilter).every(\n ([key, value]) => JSON.stringify(createArgument[key]) === JSON.stringify(value),\n );\n};\n\nexport const isRefAlive = async (\n client: ICantonClient,\n ref: CantonDeferredValue,\n): Promise<boolean> => {\n if (!isConcreteActiveContractRef(ref)) return false;\n const contracts = await queryLiveContractsForRef(client, ref.partyToFilter.party, ref);\n return ref.type === 'activeContractId' ? contracts.length === 1 : contracts.length > 0;\n};\n\n/** partyToFilter: 'sender' is resolved per-caller — this function takes an already-resolved party string. */\nexport const queryLiveContractsForRef = async (\n client: ICantonClient,\n party: string,\n ref: ActiveContractRef,\n): Promise<JsActiveContract[]> => {\n const offset = await client.getLedgerEndOffset();\n return (\n await client.queryActiveContracts(party, offset, { templateIds: [ref.templateId] })\n ).filter((contract) => matchesContractStateFilter(contract, ref.contractStateFilter));\n};\n\n/**\n * Returns the contractIds of all live contracts matching ref.\n * Resolves 'sender' to senderParty when provided; returns [] if unresolvable.\n */\nexport const queryLiveContractIdsForRef = async (\n client: ICantonClient,\n ref: CantonDeferredValue,\n senderParty?: string,\n): Promise<string[]> => {\n if (ref.type !== 'activeContractId' && ref.type !== 'activeContractIds') return [];\n const party = ref.partyToFilter === 'sender' ? senderParty : ref.partyToFilter.party;\n if (!party) return [];\n const contracts = await queryLiveContractsForRef(client, party, ref);\n return contracts.map((c) => c.createdEvent.contractId);\n};\n\nexport const createContractAddressResolver = (deps: ContractAddressResolverDeps) => {\n const { client, senderParty, signingParties, appendDisclosures } = deps;\n\n const requireSender = (templateId: string): string => {\n if (!senderParty) {\n throw new NonRetryableError(\n `Refresh entry for ${templateId} needs a resolved sender party, but none was provided`,\n );\n }\n return senderParty;\n };\n\n const resolveQueryParty = ({ partyToFilter, templateId }: ActiveContractRef): string =>\n partyToFilter === 'sender' ? requireSender(templateId) : partyToFilter.party;\n\n const queryCache = new Map<string, Promise<JsActiveContract[]>>();\n const queryAsParty = async (ref: ActiveContractRef): Promise<JsActiveContract[]> => {\n const party = resolveQueryParty(ref);\n const cacheKey = JSON.stringify({ ...ref, party });\n const cached = queryCache.get(cacheKey);\n if (cached) return cached;\n\n const query = (async () => {\n const contracts = await queryLiveContractsForRef(client, party, ref);\n if (contracts.length === 0) {\n throw new NonRetryableError(\n `Party ${party} has no matching active contracts of ${ref.templateId}`,\n );\n }\n return contracts;\n })();\n queryCache.set(cacheKey, query);\n return query;\n };\n\n // A signing party that is already a stakeholder can see the contract on its\n // own stream, so only disclose to parties that aren't signatories/observers.\n const needsDisclosure = (contract: JsActiveContract): boolean => {\n const stakeholders = new Set([\n ...(contract.createdEvent.signatories ?? []),\n ...(contract.createdEvent.observers ?? []),\n ]);\n return !signingParties.some((party) => stakeholders.has(party));\n };\n\n const discloseContracts = async (\n ref: ActiveContractRef,\n contracts: JsActiveContract[],\n ): Promise<void> => {\n const toDisclose = contracts.filter(needsDisclosure);\n if (toDisclose.length === 0) return;\n\n const party = resolveQueryParty(ref);\n const disclosures = await Promise.all(\n toDisclose.map(async (contract) => {\n const contractId = contract.createdEvent.contractId;\n const disclosure = await client.createDisclosure(\n contractId as ContractId<unknown>,\n [party],\n );\n if (!disclosure) {\n throw new NonRetryableError(\n `Could not disclose ${contractId} (template ${ref.templateId}) — no longer active`,\n );\n }\n return disclosure;\n }),\n );\n appendDisclosures(disclosures);\n };\n\n const resolveActiveContractId = async (ref: ActiveContractRef): Promise<string> => {\n const contracts = await queryAsParty(ref);\n if (contracts.length !== 1) {\n throw new NonRetryableError(\n `Refresh for ${ref.templateId} matched ${contracts.length} contracts, but a scalar ref expects exactly one`,\n );\n }\n await discloseContracts(ref, contracts);\n return contracts[0]!.createdEvent.contractId;\n };\n\n const resolveActiveContractIds = async (ref: ActiveContractRef): Promise<string[]> => {\n const contracts = await queryAsParty(ref);\n await discloseContracts(ref, contracts);\n return contracts.map((contract) => contract.createdEvent.contractId);\n };\n\n return { resolveActiveContractId, resolveActiveContractIds, requireSenderParty: requireSender };\n};\n"]}
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import './AQJMQQ4W.js';
2
- export { resolveCantonTransaction } from './333Q6X6C.js';
2
+ export { buildCantonDeployedContractAddressRef, qualifiedTemplateName } from './I6Z5XG3N.js';
3
+ export { resolveCantonTransaction } from './ST5U5WZ4.js';
4
+ export { createContractAddressResolver, isConcreteActiveContractRef, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef } from './VAFLUPQJ.js';
3
5
  export { wrapLzSdk } from './RJSKBZMO.js';
4
6
  export { substituteCidsToRefs, substituteRefsToCids } from './57KDDFEU.js';
5
- import './5GUYLHA7.js';
6
- export { CantonSdk } from './SLTAV2JF.js';
7
7
  import './7JX6NIYS.js';
8
8
  export { buildMultiTransactionSignatures, buildSignedTransaction } from './WKC6X2E3.js';
9
9
  import './IIWYAFUO.js';
10
- export { createContractAddressResolver, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef } from './QRFMJ32P.js';
11
- export { buildCantonDeployedContractAddressRef, qualifiedTemplateName } from './I6Z5XG3N.js';
10
+ import './5GUYLHA7.js';
11
+ export { CantonSdk } from './SLTAV2JF.js';
12
12
  export { parseMinFeeValue } from './M3GPMXME.js';
13
13
  export { createCantonChainProvider, parseCantonChainUri } from './ESNOKXKB.js';
14
14
  export { CantonClient } from './3ZCDWNJG.js';
@@ -5,6 +5,13 @@ import type { CantonDisclosedContracts } from '../transaction';
5
5
  export type ActiveContractRef = Extract<CantonDeferredValue, {
6
6
  type: 'activeContractId' | 'activeContractIds';
7
7
  }>;
8
+ /** Active-contract ref whose handler party is concrete (not the `'sender'` sentinel). */
9
+ export type ConcreteActiveContractRef = ActiveContractRef & {
10
+ partyToFilter: {
11
+ party: string;
12
+ };
13
+ };
14
+ export declare const isConcreteActiveContractRef: (ref: CantonDeferredValue) => ref is ConcreteActiveContractRef;
8
15
  export interface ContractAddressResolverDeps {
9
16
  client: ICantonClient;
10
17
  senderParty?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"address-resolver.d.ts","sourceRoot":"","sources":["../../src/refresh/address-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACnC,mBAAmB,EACnB;IAAE,IAAI,EAAE,kBAAkB,GAAG,mBAAmB,CAAA;CAAE,CACrD,CAAC;AAEF,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8FAA8F;IAC9F,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,CAAC,WAAW,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACtE;AAED,eAAO,MAAM,0BAA0B,GACnC,UAAU,gBAAgB,EAC1B,qBAAqB,iBAAiB,CAAC,qBAAqB,CAAC,KAC9D,OAMF,CAAC;AAEF,eAAO,MAAM,UAAU,GACnB,QAAQ,aAAa,EACrB,KAAK,mBAAmB,KACzB,OAAO,CAAC,OAAO,CAKjB,CAAC;AAEF,6GAA6G;AAC7G,eAAO,MAAM,wBAAwB,GACjC,QAAQ,aAAa,EACrB,OAAO,MAAM,EACb,KAAK,iBAAiB,KACvB,OAAO,CAAC,gBAAgB,EAAE,CAK5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GACnC,QAAQ,aAAa,EACrB,KAAK,mBAAmB,EACxB,cAAc,MAAM,KACrB,OAAO,CAAC,MAAM,EAAE,CAMlB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,MAAM,2BAA2B;mCAuE/B,iBAAiB,KAAG,OAAO,CAAC,MAAM,CAAC;oCAWlC,iBAAiB,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;qCA/E/C,MAAM,KAAG,MAAM;CAsFrD,CAAC"}
1
+ {"version":3,"file":"address-resolver.d.ts","sourceRoot":"","sources":["../../src/refresh/address-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACnC,mBAAmB,EACnB;IAAE,IAAI,EAAE,kBAAkB,GAAG,mBAAmB,CAAA;CAAE,CACrD,CAAC;AAEF,yFAAyF;AACzF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG;IACxD,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACpC,KAAK,mBAAmB,KACzB,GAAG,IAAI,yBAEwB,CAAC;AAEnC,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8FAA8F;IAC9F,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,CAAC,WAAW,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACtE;AAED,eAAO,MAAM,0BAA0B,GACnC,UAAU,gBAAgB,EAC1B,qBAAqB,iBAAiB,CAAC,qBAAqB,CAAC,KAC9D,OAMF,CAAC;AAEF,eAAO,MAAM,UAAU,GACnB,QAAQ,aAAa,EACrB,KAAK,mBAAmB,KACzB,OAAO,CAAC,OAAO,CAIjB,CAAC;AAEF,6GAA6G;AAC7G,eAAO,MAAM,wBAAwB,GACjC,QAAQ,aAAa,EACrB,OAAO,MAAM,EACb,KAAK,iBAAiB,KACvB,OAAO,CAAC,gBAAgB,EAAE,CAK5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GACnC,QAAQ,aAAa,EACrB,KAAK,mBAAmB,EACxB,cAAc,MAAM,KACrB,OAAO,CAAC,MAAM,EAAE,CAMlB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,MAAM,2BAA2B;mCAuE/B,iBAAiB,KAAG,OAAO,CAAC,MAAM,CAAC;oCAWlC,iBAAiB,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;qCA/E/C,MAAM,KAAG,MAAM;CAsFrD,CAAC"}
@@ -1,4 +1,4 @@
1
- export { createContractAddressResolver, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef } from '../QRFMJ32P.js';
1
+ export { createContractAddressResolver, isConcreteActiveContractRef, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef } from '../VAFLUPQJ.js';
2
2
  import '../VUOMXK5T.js';
3
3
  //# sourceMappingURL=address-resolver.js.map
4
4
  //# sourceMappingURL=address-resolver.js.map
@@ -1,9 +1,9 @@
1
1
  import '../AQJMQQ4W.js';
2
- export { resolveCantonTransaction } from '../333Q6X6C.js';
2
+ export { buildCantonDeployedContractAddressRef, qualifiedTemplateName } from '../I6Z5XG3N.js';
3
+ export { resolveCantonTransaction } from '../ST5U5WZ4.js';
4
+ export { createContractAddressResolver, isConcreteActiveContractRef, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef } from '../VAFLUPQJ.js';
3
5
  export { wrapLzSdk } from '../RJSKBZMO.js';
4
6
  export { substituteCidsToRefs, substituteRefsToCids } from '../57KDDFEU.js';
5
- export { createContractAddressResolver, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef } from '../QRFMJ32P.js';
6
- export { buildCantonDeployedContractAddressRef, qualifiedTemplateName } from '../I6Z5XG3N.js';
7
7
  import '../4G6A7TFX.js';
8
8
  import '../Z35TKEFU.js';
9
9
  import '../A7Z5O57E.js';
@@ -1,6 +1,6 @@
1
- export { resolveCantonTransaction } from '../333Q6X6C.js';
1
+ export { resolveCantonTransaction } from '../ST5U5WZ4.js';
2
+ import '../VAFLUPQJ.js';
2
3
  import '../57KDDFEU.js';
3
- import '../QRFMJ32P.js';
4
4
  import '../4G6A7TFX.js';
5
5
  import '../Z35TKEFU.js';
6
6
  import '../A7Z5O57E.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/common-canton",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "private": false,
5
5
  "description": "Canton VM client and utilities",
6
6
  "license": "MIT",
@@ -32,10 +32,10 @@
32
32
  "@protobuf-ts/runtime-rpc": "^2.11.1",
33
33
  "es-toolkit": "^1.39.10",
34
34
  "zod": "4.3.5",
35
- "@layerzerolabs/common-chain-model": "1.2.6",
36
- "@layerzerolabs/common-error-utils": "1.2.6",
37
- "@layerzerolabs/typescript-utils": "1.2.6",
38
- "@layerzerolabs/common-encoding-utils": "1.2.6"
35
+ "@layerzerolabs/common-chain-model": "1.2.8",
36
+ "@layerzerolabs/common-encoding-utils": "1.2.8",
37
+ "@layerzerolabs/common-error-utils": "1.2.8",
38
+ "@layerzerolabs/typescript-utils": "1.2.8"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/node": "^22.18.6",
@@ -44,11 +44,11 @@
44
44
  "tsup": "^8.4.0",
45
45
  "typescript": "^5.8.2",
46
46
  "vitest": "^3.2.6",
47
- "@layerzerolabs/eslint-configuration": "^1.2.6",
48
- "@layerzerolabs/tsup-configuration": "1.2.6",
49
- "@layerzerolabs/typescript-configuration": "1.2.6",
50
- "@layerzerolabs/vitest-configuration": "1.2.6",
51
- "@layerzerolabs/vm-tooling-canton": "1.2.6"
47
+ "@layerzerolabs/eslint-configuration": "^1.2.8",
48
+ "@layerzerolabs/tsup-configuration": "1.2.8",
49
+ "@layerzerolabs/typescript-configuration": "1.2.8",
50
+ "@layerzerolabs/vm-tooling-canton": "1.2.8",
51
+ "@layerzerolabs/vitest-configuration": "1.2.8"
52
52
  },
53
53
  "publishConfig": {
54
54
  "access": "public",
@@ -58,6 +58,7 @@
58
58
  "targets": [
59
59
  "audit-external",
60
60
  "console-pen-test",
61
+ "gasolina-audit",
61
62
  "layerzero-ver"
62
63
  ]
63
64
  },
@@ -12,6 +12,17 @@ export type ActiveContractRef = Extract<
12
12
  { type: 'activeContractId' | 'activeContractIds' }
13
13
  >;
14
14
 
15
+ /** Active-contract ref whose handler party is concrete (not the `'sender'` sentinel). */
16
+ export type ConcreteActiveContractRef = ActiveContractRef & {
17
+ partyToFilter: { party: string };
18
+ };
19
+
20
+ export const isConcreteActiveContractRef = (
21
+ ref: CantonDeferredValue,
22
+ ): ref is ConcreteActiveContractRef =>
23
+ (ref.type === 'activeContractId' || ref.type === 'activeContractIds') &&
24
+ ref.partyToFilter !== 'sender';
25
+
15
26
  export interface ContractAddressResolverDeps {
16
27
  client: ICantonClient;
17
28
  senderParty?: string;
@@ -35,8 +46,7 @@ export const isRefAlive = async (
35
46
  client: ICantonClient,
36
47
  ref: CantonDeferredValue,
37
48
  ): Promise<boolean> => {
38
- if (ref.type !== 'activeContractId' && ref.type !== 'activeContractIds') return false;
39
- if (ref.partyToFilter === 'sender') return false;
49
+ if (!isConcreteActiveContractRef(ref)) return false;
40
50
  const contracts = await queryLiveContractsForRef(client, ref.partyToFilter.party, ref);
41
51
  return ref.type === 'activeContractId' ? contracts.length === 1 : contracts.length > 0;
42
52
  };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/refresh/address-resolver.ts"],"names":["matchesContractStateFilter","contract","contractStateFilter","createArgument","createdEvent","Object","entries","every","key","value","JSON","stringify","isRefAlive","client","ref","type","partyToFilter","contracts","queryLiveContractsForRef","party","length","offset","getLedgerEndOffset","queryActiveContracts","templateIds","templateId","filter","queryLiveContractIdsForRef","senderParty","map","c","contractId","createContractAddressResolver","deps","signingParties","appendDisclosures","requireSender","NonRetryableError","resolveQueryParty","queryCache","Map","queryAsParty","cacheKey","cached","get","query","set","needsDisclosure","stakeholders","Set","signatories","observers","some","has","discloseContracts","toDisclose","disclosures","Promise","all","disclosure","createDisclosure","resolveActiveContractId","resolveActiveContractIds","requireSenderParty"],"mappings":"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","file":"QRFMJ32P.js","sourcesContent":["import type { ContractId } from '@daml/types';\n\nimport { NonRetryableError } from '@layerzerolabs/common-error-utils';\n\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type { JsActiveContract } from '../open-api/models';\nimport type { CantonDisclosedContracts } from '../transaction';\n\nexport type ActiveContractRef = Extract<\n CantonDeferredValue,\n { type: 'activeContractId' | 'activeContractIds' }\n>;\n\nexport interface ContractAddressResolverDeps {\n client: ICantonClient;\n senderParty?: string;\n /** A contract is only disclosed when none of these parties is already a stakeholder on it. */\n signingParties: string[];\n appendDisclosures: (disclosures: CantonDisclosedContracts) => void;\n}\n\nexport const matchesContractStateFilter = (\n contract: JsActiveContract,\n contractStateFilter: ActiveContractRef['contractStateFilter'],\n): boolean => {\n if (!contractStateFilter) return true;\n const createArgument = contract.createdEvent.createArgument as Record<string, unknown>;\n return Object.entries(contractStateFilter).every(\n ([key, value]) => JSON.stringify(createArgument[key]) === JSON.stringify(value),\n );\n};\n\nexport const isRefAlive = async (\n client: ICantonClient,\n ref: CantonDeferredValue,\n): Promise<boolean> => {\n if (ref.type !== 'activeContractId' && ref.type !== 'activeContractIds') return false;\n if (ref.partyToFilter === 'sender') return false;\n const contracts = await queryLiveContractsForRef(client, ref.partyToFilter.party, ref);\n return ref.type === 'activeContractId' ? contracts.length === 1 : contracts.length > 0;\n};\n\n/** partyToFilter: 'sender' is resolved per-caller — this function takes an already-resolved party string. */\nexport const queryLiveContractsForRef = async (\n client: ICantonClient,\n party: string,\n ref: ActiveContractRef,\n): Promise<JsActiveContract[]> => {\n const offset = await client.getLedgerEndOffset();\n return (\n await client.queryActiveContracts(party, offset, { templateIds: [ref.templateId] })\n ).filter((contract) => matchesContractStateFilter(contract, ref.contractStateFilter));\n};\n\n/**\n * Returns the contractIds of all live contracts matching ref.\n * Resolves 'sender' to senderParty when provided; returns [] if unresolvable.\n */\nexport const queryLiveContractIdsForRef = async (\n client: ICantonClient,\n ref: CantonDeferredValue,\n senderParty?: string,\n): Promise<string[]> => {\n if (ref.type !== 'activeContractId' && ref.type !== 'activeContractIds') return [];\n const party = ref.partyToFilter === 'sender' ? senderParty : ref.partyToFilter.party;\n if (!party) return [];\n const contracts = await queryLiveContractsForRef(client, party, ref);\n return contracts.map((c) => c.createdEvent.contractId);\n};\n\nexport const createContractAddressResolver = (deps: ContractAddressResolverDeps) => {\n const { client, senderParty, signingParties, appendDisclosures } = deps;\n\n const requireSender = (templateId: string): string => {\n if (!senderParty) {\n throw new NonRetryableError(\n `Refresh entry for ${templateId} needs a resolved sender party, but none was provided`,\n );\n }\n return senderParty;\n };\n\n const resolveQueryParty = ({ partyToFilter, templateId }: ActiveContractRef): string =>\n partyToFilter === 'sender' ? requireSender(templateId) : partyToFilter.party;\n\n const queryCache = new Map<string, Promise<JsActiveContract[]>>();\n const queryAsParty = async (ref: ActiveContractRef): Promise<JsActiveContract[]> => {\n const party = resolveQueryParty(ref);\n const cacheKey = JSON.stringify({ ...ref, party });\n const cached = queryCache.get(cacheKey);\n if (cached) return cached;\n\n const query = (async () => {\n const contracts = await queryLiveContractsForRef(client, party, ref);\n if (contracts.length === 0) {\n throw new NonRetryableError(\n `Party ${party} has no matching active contracts of ${ref.templateId}`,\n );\n }\n return contracts;\n })();\n queryCache.set(cacheKey, query);\n return query;\n };\n\n // A signing party that is already a stakeholder can see the contract on its\n // own stream, so only disclose to parties that aren't signatories/observers.\n const needsDisclosure = (contract: JsActiveContract): boolean => {\n const stakeholders = new Set([\n ...(contract.createdEvent.signatories ?? []),\n ...(contract.createdEvent.observers ?? []),\n ]);\n return !signingParties.some((party) => stakeholders.has(party));\n };\n\n const discloseContracts = async (\n ref: ActiveContractRef,\n contracts: JsActiveContract[],\n ): Promise<void> => {\n const toDisclose = contracts.filter(needsDisclosure);\n if (toDisclose.length === 0) return;\n\n const party = resolveQueryParty(ref);\n const disclosures = await Promise.all(\n toDisclose.map(async (contract) => {\n const contractId = contract.createdEvent.contractId;\n const disclosure = await client.createDisclosure(\n contractId as ContractId<unknown>,\n [party],\n );\n if (!disclosure) {\n throw new NonRetryableError(\n `Could not disclose ${contractId} (template ${ref.templateId}) — no longer active`,\n );\n }\n return disclosure;\n }),\n );\n appendDisclosures(disclosures);\n };\n\n const resolveActiveContractId = async (ref: ActiveContractRef): Promise<string> => {\n const contracts = await queryAsParty(ref);\n if (contracts.length !== 1) {\n throw new NonRetryableError(\n `Refresh for ${ref.templateId} matched ${contracts.length} contracts, but a scalar ref expects exactly one`,\n );\n }\n await discloseContracts(ref, contracts);\n return contracts[0]!.createdEvent.contractId;\n };\n\n const resolveActiveContractIds = async (ref: ActiveContractRef): Promise<string[]> => {\n const contracts = await queryAsParty(ref);\n await discloseContracts(ref, contracts);\n return contracts.map((contract) => contract.createdEvent.contractId);\n };\n\n return { resolveActiveContractId, resolveActiveContractIds, requireSenderParty: requireSender };\n};\n"]}