@layerzerolabs/common-canton 0.2.107 → 0.2.109

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.turbo/turbo-build.log +602 -603
  2. package/.turbo/turbo-test.log +14 -12
  3. package/dist/5PRNJEPB.js +70 -0
  4. package/dist/5PRNJEPB.js.map +1 -0
  5. package/dist/{NO5PBPQH.js → GXJEEYPP.js} +42 -35
  6. package/dist/GXJEEYPP.js.map +1 -0
  7. package/dist/{3YCNHEVD.js → PSB6BQFH.js} +44 -70
  8. package/dist/PSB6BQFH.js.map +1 -0
  9. package/dist/{KEGAENCF.js → X66QZBHT.js} +11 -2
  10. package/dist/X66QZBHT.js.map +1 -0
  11. package/dist/deferredValue.d.ts +46 -0
  12. package/dist/deferredValue.d.ts.map +1 -0
  13. package/dist/deferredValue.js +4 -0
  14. package/dist/deferredValue.js.map +1 -0
  15. package/dist/events.d.ts +21 -15
  16. package/dist/events.d.ts.map +1 -1
  17. package/dist/events.js +2 -2
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -4
  21. package/dist/sdk/canton-sdk.d.ts +7 -0
  22. package/dist/sdk/canton-sdk.d.ts.map +1 -1
  23. package/dist/sdk/canton-sdk.js +1 -1
  24. package/dist/sdk/index.js +1 -1
  25. package/dist/transaction.d.ts +79 -83
  26. package/dist/transaction.d.ts.map +1 -1
  27. package/dist/transaction.js +1 -1
  28. package/package.json +12 -12
  29. package/src/deferredValue.ts +81 -0
  30. package/src/events.ts +93 -74
  31. package/src/index.ts +1 -1
  32. package/src/sdk/canton-sdk.ts +10 -0
  33. package/src/transaction.ts +52 -96
  34. package/dist/3YCNHEVD.js.map +0 -1
  35. package/dist/KEGAENCF.js.map +0 -1
  36. package/dist/NO5PBPQH.js.map +0 -1
  37. package/dist/YVZO3C4U.js +0 -41
  38. package/dist/YVZO3C4U.js.map +0 -1
  39. package/dist/senderPlaceholder.d.ts +0 -41
  40. package/dist/senderPlaceholder.d.ts.map +0 -1
  41. package/dist/senderPlaceholder.js +0 -4
  42. package/dist/senderPlaceholder.js.map +0 -1
  43. package/src/senderPlaceholder.ts +0 -119
@@ -9,7 +9,7 @@
9
9
  ✅ dpm-3.4.8-openapi-generator-7.21.0
10
10
  🔧 openapi-generator version: 7.21.0
11
11
  $ docker image inspect --format {{.Architecture}} 438003944538.dkr.ecr.us-east-1.amazonaws.com/layerzerolabs/canton-openapi-tooling:openapi-generator-7.21.0-patch-2
12
- (node:74041) [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.
12
+ (node:80195) [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.
13
13
  Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
14
14
  To eliminate this warning, add "type": "module" to /home/runner/work/monorepo-internal/monorepo-internal/package.json.
15
15
  (Use `node --trace-warnings ...` to show where the warning was created)
@@ -23,9 +23,10 @@ openapi-generator-7.21.0-patch-2: Pulling from layerzerolabs/canton-openapi-tool
23
23
  dfe8d6e6f390: Pulling fs layer
24
24
  e41c3f01e557: Pulling fs layer
25
25
  fe131d3b296c: Pulling fs layer
26
- dfe8d6e6f390: Waiting
27
- fe131d3b296c: Waiting
28
26
  e41c3f01e557: Waiting
27
+ fe131d3b296c: Waiting
28
+ dfe8d6e6f390: Waiting
29
+ 18a60288e8be: Verifying Checksum
29
30
  18a60288e8be: Download complete
30
31
  17639c486e57: Verifying Checksum
31
32
  17639c486e57: Download complete
@@ -33,10 +34,11 @@ e41c3f01e557: Verifying Checksum
33
34
  e41c3f01e557: Download complete
34
35
  dfe8d6e6f390: Verifying Checksum
35
36
  dfe8d6e6f390: Download complete
37
+ fe131d3b296c: Verifying Checksum
36
38
  fe131d3b296c: Download complete
39
+ 17639c486e57: Pull complete
37
40
  051d551be118: Verifying Checksum
38
41
  051d551be118: Download complete
39
- 17639c486e57: Pull complete
40
42
  051d551be118: Pull complete
41
43
  18a60288e8be: Pull complete
42
44
  dfe8d6e6f390: Pull complete
@@ -727,22 +729,22 @@ $ docker run --rm --add-host=host.docker.internal:host-gateway -e LOCAL_UID=1001
727
729
  # We appreciate your support! Please consider donation to help us maintain this project. #
728
730
  # https://opencollective.com/openapi_generator/donate #
729
731
  ############################################################################################
730
- ⏳ 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: 6.541s
732
+ ⏳ 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.087s
731
733
  Testing types with tsc and vue-tsc is an experimental feature.
732
734
  Breaking changes might not follow SemVer, please pin Vitest's version when using it.
733
735
 
734
-  RUN  v3.2.4 /home/runner/work/monorepo-internal/monorepo-internal/packages/vms/canton/common
736
+  RUN  v3.2.6 /home/runner/work/monorepo-internal/monorepo-internal/packages/vms/canton/common
735
737
 
736
- ✓ test/provider.test.ts (5 tests) 30ms
737
- ✓ test/auth/local-token-provider.test.ts (5 tests) 14ms
738
- ✓ test/auth/client-credentials-token-provider.test.ts (7 tests) 17ms
738
+ ✓ test/provider.test.ts (5 tests) 24ms
739
+ ✓ test/auth/client-credentials-token-provider.test.ts (7 tests) 10ms
740
+ ✓ test/auth/local-token-provider.test.ts (5 tests) 11ms
739
741
  stderr | test/sdk.test.ts > Error Handling (Unhappy Paths) > should handle double archive error
740
742
  Mock miss: GET /v2/state/connected-synchronizers
741
743
 
742
744
  stderr | test/sdk.test.ts > Error Handling (Unhappy Paths) > should handle unauthorized party error
743
745
  Mock miss: GET /v2/state/connected-synchronizers
744
746
 
745
- ✓ test/sdk.test.ts (18 tests) 37ms
747
+ ✓ test/sdk.test.ts (18 tests) 21ms
746
748
  ✓  TS  test/sdk.test.ts (18 tests)
747
749
  ✓  TS  test/auth/client-credentials-token-provider.test.ts (7 tests)
748
750
  ✓  TS  test/auth/local-token-provider.test.ts (5 tests)
@@ -751,6 +753,6 @@ Breaking changes might not follow SemVer, please pin Vitest's version when using
751
753
   Test Files  8 passed (8)
752
754
   Tests  70 passed (70)
753
755
  Type Errors  no errors
754
-  Start at  18:42:24
755
-  Duration  6.09s (transform 1.78s, setup 0ms, collect 2.82s, tests 99ms, environment 1ms, prepare 667ms, typecheck 5.72s)
756
+  Start at  02:12:18
757
+  Duration  3.12s (transform 827ms, setup 0ms, collect 1.31s, tests 66ms, environment 1ms, prepare 501ms, typecheck 2.82s)
756
758
 
@@ -0,0 +1,70 @@
1
+ import { __name } from './VUOMXK5T.js';
2
+ import { z } from 'zod';
3
+
4
+ var cantonRefreshPartyFilterSchema = z.union([
5
+ z.literal("sender"),
6
+ z.object({
7
+ party: z.string()
8
+ })
9
+ ]);
10
+ var cantonDeferredValueSchema = z.discriminatedUnion("type", [
11
+ z.object({
12
+ type: z.literal("senderParty")
13
+ }),
14
+ z.object({
15
+ type: z.literal("activeContractId"),
16
+ partyToFilter: cantonRefreshPartyFilterSchema,
17
+ templateId: z.string(),
18
+ contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),
19
+ disclose: z.boolean().optional()
20
+ }),
21
+ z.object({
22
+ type: z.literal("activeContractIds"),
23
+ partyToFilter: cantonRefreshPartyFilterSchema,
24
+ templateId: z.string(),
25
+ contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),
26
+ disclose: z.boolean().optional()
27
+ }),
28
+ z.object({
29
+ type: z.literal("amuletRulesCid")
30
+ }),
31
+ z.object({
32
+ type: z.literal("amuletContext")
33
+ })
34
+ ]);
35
+ var CANTON_DEFERRED_VALUE_PREFIX = "<<CANTON_DEFERRED:";
36
+ var CANTON_DEFERRED_VALUE_SUFFIX = ">>";
37
+ var encodeCantonDeferredValue = /* @__PURE__ */ __name((value) => `${CANTON_DEFERRED_VALUE_PREFIX}${JSON.stringify(value)}${CANTON_DEFERRED_VALUE_SUFFIX}`, "encodeCantonDeferredValue");
38
+ var parseCantonDeferredValue = /* @__PURE__ */ __name((value) => {
39
+ if (typeof value !== "string" || !value.startsWith(CANTON_DEFERRED_VALUE_PREFIX) || !value.endsWith(CANTON_DEFERRED_VALUE_SUFFIX)) {
40
+ return void 0;
41
+ }
42
+ try {
43
+ const parsedJson = JSON.parse(value.slice(CANTON_DEFERRED_VALUE_PREFIX.length, -CANTON_DEFERRED_VALUE_SUFFIX.length));
44
+ return cantonDeferredValueSchema.parse(parsedJson);
45
+ } catch {
46
+ return void 0;
47
+ }
48
+ }, "parseCantonDeferredValue");
49
+ var cantonSenderPartyRef = /* @__PURE__ */ __name(() => encodeCantonDeferredValue({
50
+ type: "senderParty"
51
+ }), "cantonSenderPartyRef");
52
+ var cantonActiveContractIdRef = /* @__PURE__ */ __name((value) => encodeCantonDeferredValue({
53
+ type: "activeContractId",
54
+ ...value
55
+ }), "cantonActiveContractIdRef");
56
+ var cantonActiveContractIdsRef = /* @__PURE__ */ __name((value) => encodeCantonDeferredValue({
57
+ type: "activeContractIds",
58
+ ...value
59
+ }), "cantonActiveContractIdsRef");
60
+ var cantonAmuletRulesCidRef = /* @__PURE__ */ __name(() => encodeCantonDeferredValue({
61
+ type: "amuletRulesCid"
62
+ }), "cantonAmuletRulesCidRef");
63
+ var cantonAmuletContextRef = /* @__PURE__ */ __name(() => encodeCantonDeferredValue({
64
+ type: "amuletContext"
65
+ }), "cantonAmuletContextRef");
66
+ var isCantonPlaceholder = /* @__PURE__ */ __name((value) => parseCantonDeferredValue(value) !== void 0, "isCantonPlaceholder");
67
+
68
+ export { cantonActiveContractIdRef, cantonActiveContractIdsRef, cantonAmuletContextRef, cantonAmuletRulesCidRef, cantonDeferredValueSchema, cantonRefreshPartyFilterSchema, cantonSenderPartyRef, encodeCantonDeferredValue, isCantonPlaceholder, parseCantonDeferredValue };
69
+ //# sourceMappingURL=5PRNJEPB.js.map
70
+ //# sourceMappingURL=5PRNJEPB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deferredValue.ts"],"names":["cantonRefreshPartyFilterSchema","z","union","literal","object","party","string","cantonDeferredValueSchema","discriminatedUnion","type","partyToFilter","templateId","contractStateFilter","partialRecord","any","optional","disclose","boolean","CANTON_DEFERRED_VALUE_PREFIX","CANTON_DEFERRED_VALUE_SUFFIX","encodeCantonDeferredValue","value","JSON","stringify","parseCantonDeferredValue","startsWith","endsWith","undefined","parsedJson","parse","slice","length","cantonSenderPartyRef","cantonActiveContractIdRef","cantonActiveContractIdsRef","cantonAmuletRulesCidRef","cantonAmuletContextRef","isCantonPlaceholder"],"mappings":"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","file":"5PRNJEPB.js","sourcesContent":["import { z } from 'zod';\n\nexport const cantonRefreshPartyFilterSchema = z.union([\n z.literal('sender'),\n z.object({ party: z.string() }),\n]);\n\nexport const cantonDeferredValueSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('senderParty') }),\n z.object({\n type: z.literal('activeContractId'),\n partyToFilter: cantonRefreshPartyFilterSchema,\n templateId: z.string(),\n contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),\n disclose: z.boolean().optional(),\n }),\n z.object({\n type: z.literal('activeContractIds'),\n partyToFilter: cantonRefreshPartyFilterSchema,\n templateId: z.string(),\n contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),\n disclose: z.boolean().optional(),\n }),\n z.object({ type: z.literal('amuletRulesCid') }),\n z.object({ type: z.literal('amuletContext') }),\n]);\n\nexport type CantonRefreshPartyFilter = z.infer<typeof cantonRefreshPartyFilterSchema>;\nexport type CantonDeferredValue = z.infer<typeof cantonDeferredValueSchema>;\ntype CantonActiveContractIdRef = Omit<\n Extract<CantonDeferredValue, { type: 'activeContractId' }>,\n 'type'\n>;\ntype CantonActiveContractIdsRef = Omit<\n Extract<CantonDeferredValue, { type: 'activeContractIds' }>,\n 'type'\n>;\n\nconst CANTON_DEFERRED_VALUE_PREFIX = '<<CANTON_DEFERRED:';\nconst CANTON_DEFERRED_VALUE_SUFFIX = '>>';\n\nexport const encodeCantonDeferredValue = (value: CantonDeferredValue): string =>\n `${CANTON_DEFERRED_VALUE_PREFIX}${JSON.stringify(value)}${CANTON_DEFERRED_VALUE_SUFFIX}`;\n\nexport const parseCantonDeferredValue = (value: unknown): CantonDeferredValue | undefined => {\n if (\n typeof value !== 'string' ||\n !value.startsWith(CANTON_DEFERRED_VALUE_PREFIX) ||\n !value.endsWith(CANTON_DEFERRED_VALUE_SUFFIX)\n ) {\n return undefined;\n }\n\n try {\n const parsedJson = JSON.parse(\n value.slice(CANTON_DEFERRED_VALUE_PREFIX.length, -CANTON_DEFERRED_VALUE_SUFFIX.length),\n );\n return cantonDeferredValueSchema.parse(parsedJson);\n } catch {\n return undefined;\n }\n};\n\nexport const cantonSenderPartyRef = (): string =>\n encodeCantonDeferredValue({ type: 'senderParty' });\n\nexport const cantonActiveContractIdRef = (value: CantonActiveContractIdRef): string =>\n encodeCantonDeferredValue({ type: 'activeContractId', ...value });\n\nexport const cantonActiveContractIdsRef = (value: CantonActiveContractIdsRef): string =>\n encodeCantonDeferredValue({ type: 'activeContractIds', ...value });\n\nexport const cantonAmuletRulesCidRef = (): string =>\n encodeCantonDeferredValue({ type: 'amuletRulesCid' });\n\nexport const cantonAmuletContextRef = (): string =>\n encodeCantonDeferredValue({ type: 'amuletContext' });\n\n/** Returns true if `value` is a Canton deferred-value sentinel. */\nexport const isCantonPlaceholder = (value: string): boolean =>\n parseCantonDeferredValue(value) !== undefined;\n"]}
@@ -1,4 +1,4 @@
1
- import { cantonTransactionSchema } from './3YCNHEVD.js';
1
+ import { cantonTransactionSchema } from './PSB6BQFH.js';
2
2
  import { __name } from './VUOMXK5T.js';
3
3
  import { buildTransactionWithResultSchema } from '@layerzerolabs/common-chain-model';
4
4
  import { NonRetryableError } from '@layerzerolabs/common-error-utils';
@@ -22,14 +22,13 @@ var findMatchingCreatedEvent = /* @__PURE__ */ __name((createdEvents, expectedTe
22
22
  });
23
23
  }, "findMatchingCreatedEvent");
24
24
  var findMatchingCreatedEventFromTx = /* @__PURE__ */ __name(async (client, tx) => {
25
- if (!tx) return null;
26
25
  const parsed = cantonTxWithResultSchema.safeParse(tx);
27
26
  if (!parsed.success) return null;
28
27
  if (parsed.data.result.type !== "success") return null;
29
- const { commands, actAs } = parsed.data.populatedTransaction;
28
+ const { populatedTransaction: { actAs, unresolvedCommands } } = parsed.data;
30
29
  const updateId = parsed.data.result.minedTxHash;
31
30
  if (!updateId || !actAs.length) return null;
32
- const createCommand = commands[0];
31
+ const createCommand = unresolvedCommands[0];
33
32
  if (!createCommand || !("createCommand" in createCommand)) return null;
34
33
  const createdEvents = await fetchCreatedEvents(client, updateId, actAs);
35
34
  return findMatchingCreatedEvent(createdEvents, createCommand.createCommand.templateId, actAs) ?? null;
@@ -55,43 +54,51 @@ var cantonRegisterSucceeded = /* @__PURE__ */ __name(async (client, txWithResult
55
54
  return false;
56
55
  }
57
56
  }, "cantonRegisterSucceeded");
58
- var waitForRequestArchival = /* @__PURE__ */ __name(async (client, requestContractId, parties) => {
57
+ var waitForArchival = /* @__PURE__ */ __name(async (client, contractId, parties) => {
59
58
  for (let attempt = 1; attempt <= REQUEST_ARCHIVAL_MAX_ATTEMPTS; attempt++) {
60
- const { archived } = await client.fetchEventsByContractId(requestContractId, parties);
59
+ const { archived } = await client.fetchEventsByContractId(contractId, parties);
61
60
  if (archived) {
62
- const transaction = await client.fetchTransactionByOffset(archived.offset, parties);
63
- let interfaceChoice;
64
- let interfaceArg;
65
- let consumingChoice;
66
- for (const event of transaction.events ?? []) {
67
- if (!("ExercisedEvent" in event)) continue;
68
- const ex = event.ExercisedEvent;
69
- if (ex.contractId !== requestContractId) continue;
70
- if (ex.choice === IREQUEST_ACCEPT_CHOICE || ex.choice === IREQUEST_REJECT_CHOICE) {
71
- interfaceChoice = ex.choice;
72
- interfaceArg = ex.choiceArgument;
73
- }
74
- if (ex.consuming) {
75
- consumingChoice = ex.choice;
76
- }
77
- }
78
- if (interfaceChoice === IREQUEST_ACCEPT_CHOICE) {
79
- return interfaceArg;
80
- }
81
- if (interfaceChoice === IREQUEST_REJECT_CHOICE) {
82
- const rejectContext = typeof interfaceArg === "object" && interfaceArg !== null && "rejectContext" in interfaceArg ? interfaceArg.rejectContext : void 0;
83
- const reason = rejectContext ? JSON.stringify(rejectContext).slice(0, 500) : "unknown";
84
- throw new NonRetryableError(`Request rejected \u2014 rejectContext: ${reason}`);
85
- }
86
- throw new NonRetryableError(`Request ${requestContractId} archived via unexpected choice ${consumingChoice ?? "<none>"}`);
61
+ return client.fetchTransactionByOffset(archived.offset, parties);
87
62
  }
88
63
  if (attempt < REQUEST_ARCHIVAL_MAX_ATTEMPTS) {
89
64
  await new Promise((resolve) => setTimeout(resolve, REQUEST_ARCHIVAL_POLL_INTERVAL_MS));
90
65
  }
91
66
  }
92
- throw new NonRetryableError(`Request archival timeout (${REQUEST_ARCHIVAL_MAX_ATTEMPTS} attempts) for ${requestContractId}`);
67
+ throw new NonRetryableError(`Archival timeout (${REQUEST_ARCHIVAL_MAX_ATTEMPTS} attempts) for ${contractId}`);
68
+ }, "waitForArchival");
69
+ var getExercisedChoiceArgument = /* @__PURE__ */ __name((transaction, contractId, choice) => {
70
+ for (const event of transaction.events ?? []) {
71
+ if (!("ExercisedEvent" in event)) continue;
72
+ const { ExercisedEvent: exercised } = event;
73
+ if (exercised.contractId === contractId && exercised.choice === choice) {
74
+ return exercised.choiceArgument;
75
+ }
76
+ }
77
+ return void 0;
78
+ }, "getExercisedChoiceArgument");
79
+ var waitForRequestArchival = /* @__PURE__ */ __name(async (client, requestContractId, parties) => {
80
+ const transaction = await waitForArchival(client, requestContractId, parties);
81
+ const accept = getExercisedChoiceArgument(transaction, requestContractId, IREQUEST_ACCEPT_CHOICE);
82
+ if (accept !== void 0) return accept;
83
+ const reject = getExercisedChoiceArgument(transaction, requestContractId, IREQUEST_REJECT_CHOICE);
84
+ if (reject !== void 0) {
85
+ const reason = reject.rejectContext ? JSON.stringify(reject.rejectContext).slice(0, 500) : "unknown";
86
+ throw new NonRetryableError(`Request rejected \u2014 rejectContext: ${reason}`);
87
+ }
88
+ const consuming = getConsumingChoice(transaction, requestContractId);
89
+ throw new NonRetryableError(`Request ${requestContractId} archived via unexpected choice ${consuming ?? "<none>"}`);
93
90
  }, "waitForRequestArchival");
91
+ var getConsumingChoice = /* @__PURE__ */ __name((transaction, contractId) => {
92
+ for (const event of transaction.events ?? []) {
93
+ if (!("ExercisedEvent" in event)) continue;
94
+ const { ExercisedEvent: exercised } = event;
95
+ if (exercised.contractId === contractId && exercised.consuming) {
96
+ return exercised.choice;
97
+ }
98
+ }
99
+ return void 0;
100
+ }, "getConsumingChoice");
94
101
 
95
- export { cantonDeploymentSucceeded, cantonRegisterSucceeded, fetchCreatedEvents, findMatchingCreatedEvent, findMatchingCreatedEventFromTx, waitForRequestArchival };
96
- //# sourceMappingURL=NO5PBPQH.js.map
97
- //# sourceMappingURL=NO5PBPQH.js.map
102
+ export { cantonDeploymentSucceeded, cantonRegisterSucceeded, fetchCreatedEvents, findMatchingCreatedEvent, findMatchingCreatedEventFromTx, getExercisedChoiceArgument, waitForArchival, waitForRequestArchival };
103
+ //# sourceMappingURL=GXJEEYPP.js.map
104
+ //# sourceMappingURL=GXJEEYPP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/events.ts"],"names":["cantonTxWithResultSchema","buildTransactionWithResultSchema","cantonTransactionSchema","REQUEST_ARCHIVAL_POLL_INTERVAL_MS","REQUEST_ARCHIVAL_MAX_ATTEMPTS","IREQUEST_ACCEPT_CHOICE","IREQUEST_REJECT_CHOICE","REQUEST_TEMPLATE_QUALIFIED_NAME","fetchCreatedEvents","client","updateId","parties","cantonTx","fetchTransactionByUpdateId","events","filter","event","map","CreatedEvent","findMatchingCreatedEvent","createdEvents","expectedTemplateId","expectedSignatories","expectedSet","Set","find","templateId","signatories","length","every","s","has","findMatchingCreatedEventFromTx","tx","parsed","safeParse","success","data","result","type","populatedTransaction","actAs","unresolvedCommands","minedTxHash","createCommand","cantonDeploymentSucceeded","txWithResult","cantonRegisterSucceeded","listUserParties","requestEvent","includes","waitForRequestArchival","contractId","waitForArchival","attempt","archived","fetchEventsByContractId","fetchTransactionByOffset","offset","Promise","resolve","setTimeout","NonRetryableError","getExercisedChoiceArgument","transaction","choice","ExercisedEvent","exercised","choiceArgument","undefined","requestContractId","accept","reject","reason","rejectContext","JSON","stringify","slice","consuming","getConsumingChoice"],"mappings":"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","file":"GXJEEYPP.js","sourcesContent":["import { buildTransactionWithResultSchema } from '@layerzerolabs/common-chain-model';\nimport { NonRetryableError } from '@layerzerolabs/common-error-utils';\n\nimport type { CantonTransaction, ICantonClient } from './client';\nimport type { CreatedEvent } from './open-api/models';\nimport { cantonTransactionSchema } from './transaction';\n\nconst cantonTxWithResultSchema = buildTransactionWithResultSchema(cantonTransactionSchema);\n\n// TODO(canton): confirm these poll values are enough to wait for archival across environments.\nconst REQUEST_ARCHIVAL_POLL_INTERVAL_MS = 2000;\nconst REQUEST_ARCHIVAL_MAX_ATTEMPTS = 60;\n\n// IRequest interface choices that consume the Request contract via `archive reqCid` in their impls.\nconst IREQUEST_ACCEPT_CHOICE = 'IRequest_Accept';\nconst IREQUEST_REJECT_CHOICE = 'IRequest_Reject';\n\nconst REQUEST_TEMPLATE_QUALIFIED_NAME = 'Request:Request';\n\n/**\n * Fetches a transaction by updateId and returns all CreatedEvents.\n */\nexport const fetchCreatedEvents = async (\n client: ICantonClient,\n updateId: string,\n parties: string[],\n): Promise<CreatedEvent[]> => {\n const cantonTx = await client.fetchTransactionByUpdateId(updateId, parties);\n return (\n cantonTx.events\n ?.filter((event): event is { CreatedEvent: CreatedEvent } => 'CreatedEvent' in event)\n .map((event) => event.CreatedEvent) ?? []\n );\n};\n\n/**\n * Finds a CreatedEvent matching the expected templateId whose signatories\n * are a subset of the provided actAs parties.\n */\nexport const findMatchingCreatedEvent = (\n createdEvents: CreatedEvent[],\n expectedTemplateId: string,\n expectedSignatories: string[],\n): CreatedEvent | undefined => {\n const expectedSet = new Set(expectedSignatories);\n return createdEvents.find((event) => {\n if (event.templateId !== expectedTemplateId) return false;\n const signatories = event.signatories ?? [];\n return signatories.length > 0 && signatories.every((s) => expectedSet.has(s));\n });\n};\n\n/**\n * Parses a Canton transaction-with-result, fetches the created events from the ledger,\n * and returns the first CreatedEvent matching the submitted command's templateId and actAs\n * signatories. Returns null if the transaction is falsy, not successful, or has no match.\n */\nexport const findMatchingCreatedEventFromTx = async (\n client: ICantonClient,\n tx: unknown,\n): Promise<CreatedEvent | null> => {\n const parsed = cantonTxWithResultSchema.safeParse(tx);\n if (!parsed.success) return null;\n\n if (parsed.data.result.type !== 'success') return null;\n\n const {\n populatedTransaction: { actAs, unresolvedCommands },\n } = parsed.data;\n const updateId = parsed.data.result.minedTxHash;\n\n if (!updateId || !actAs.length) return null;\n\n const createCommand = unresolvedCommands[0];\n if (!createCommand || !('createCommand' in createCommand)) return null;\n\n const createdEvents = await fetchCreatedEvents(client, updateId, actAs);\n return (\n findMatchingCreatedEvent(createdEvents, createCommand.createCommand.templateId, actAs) ??\n null\n );\n};\n\n/**\n * Checks that a Canton deploy transaction resulted in a CreatedEvent\n * matching the submitted command's templateId and actAs signatories.\n */\nexport const cantonDeploymentSucceeded = async (\n client: ICantonClient,\n txWithResult: unknown,\n): Promise<boolean> => {\n return (await findMatchingCreatedEventFromTx(client, txWithResult)) != null;\n};\n\n/**\n * Success check for register-style deploys (an exercise on Uln302 that creates a\n * Request, which the validator then accepts or rejects in a later transaction).\n *\n * Positively confirms acceptance: locate the Request created by this submission,\n * then delegate to waitForRequestArchival, which waits for the Request to be\n * archived and verifies the IRequest_Accept choice ran (throwing on reject,\n * unexpected archival, or timeout). This is a positive accept check rather than\n * inferring success from the absence of a rejection event.\n */\nexport const cantonRegisterSucceeded = async (\n client: ICantonClient,\n txWithResult: unknown,\n): Promise<boolean> => {\n const parsed = cantonTxWithResultSchema.safeParse(txWithResult);\n if (!parsed.success || parsed.data.result.type !== 'success') return false;\n\n const updateId = parsed.data.result.minedTxHash;\n if (!updateId) return false;\n\n // Deferred-sender register payloads build with empty actAs (the sender is\n // resolved at sign time), so fall back to the parties this user can read as.\n const { actAs } = parsed.data.populatedTransaction;\n const parties = actAs.length ? actAs : await client.listUserParties();\n if (!parties.length) return false;\n\n const createdEvents = await fetchCreatedEvents(client, updateId, parties);\n const requestEvent = createdEvents.find((event) =>\n event.templateId?.includes(REQUEST_TEMPLATE_QUALIFIED_NAME),\n );\n if (!requestEvent) return false;\n\n try {\n await waitForRequestArchival(client, requestEvent.contractId, parties);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Poll until `contractId` is archived, then return the transaction tree that\n * archived it. Generic: knows nothing about which choice did the archiving.\n * Throws NonRetryableError on timeout.\n */\nexport const waitForArchival = async (\n client: ICantonClient,\n contractId: string,\n parties: string[],\n): Promise<CantonTransaction> => {\n for (let attempt = 1; attempt <= REQUEST_ARCHIVAL_MAX_ATTEMPTS; attempt++) {\n const { archived } = await client.fetchEventsByContractId(contractId, parties);\n if (archived) {\n return client.fetchTransactionByOffset(archived.offset, parties);\n }\n // Skip the sleep on the final attempt — there's no next iteration to wait for.\n if (attempt < REQUEST_ARCHIVAL_MAX_ATTEMPTS) {\n await new Promise((resolve) => setTimeout(resolve, REQUEST_ARCHIVAL_POLL_INTERVAL_MS));\n }\n }\n throw new NonRetryableError(\n `Archival timeout (${REQUEST_ARCHIVAL_MAX_ATTEMPTS} attempts) for ${contractId}`,\n );\n};\n\n/**\n * Return the argument of the first exercise of `choice` on `contractId` in a\n * transaction tree, typed as the caller expects. Generic over choice and arg\n * type; returns undefined when no such exercise is present.\n */\nexport const getExercisedChoiceArgument = <TArg = unknown>(\n transaction: CantonTransaction,\n contractId: string,\n choice: string,\n): TArg | undefined => {\n for (const event of transaction.events ?? []) {\n if (!('ExercisedEvent' in event)) continue;\n const { ExercisedEvent: exercised } = event;\n if (exercised.contractId === contractId && exercised.choice === choice) {\n return exercised.choiceArgument as TArg;\n }\n }\n return undefined;\n};\n\n/**\n * Wait for a Request to be archived and confirm it was accepted, returning the\n * IRequest_Accept choice argument typed as `TAccept` (callers pass the codegen\n * `IRequest_Accept` type to get `acceptContext` typed).\n *\n * IRequest_Accept and IRequest_Reject both end with `archive reqCid` in their\n * Daml impls, so the archive alone can't distinguish them — the choice is read\n * off the archive transaction tree. Throws NonRetryableError on rejection, on\n * archival via any other choice (unexpected), or on timeout.\n */\nexport const waitForRequestArchival = async <TAccept = unknown>(\n client: ICantonClient,\n requestContractId: string,\n parties: string[],\n): Promise<TAccept> => {\n const transaction = await waitForArchival(client, requestContractId, parties);\n\n const accept = getExercisedChoiceArgument<TAccept>(\n transaction,\n requestContractId,\n IREQUEST_ACCEPT_CHOICE,\n );\n if (accept !== undefined) return accept;\n\n const reject = getExercisedChoiceArgument<{ rejectContext?: unknown }>(\n transaction,\n requestContractId,\n IREQUEST_REJECT_CHOICE,\n );\n if (reject !== undefined) {\n const reason = reject.rejectContext\n ? JSON.stringify(reject.rejectContext).slice(0, 500)\n : 'unknown';\n throw new NonRetryableError(`Request rejected — rejectContext: ${reason}`);\n }\n\n const consuming = getConsumingChoice(transaction, requestContractId);\n throw new NonRetryableError(\n `Request ${requestContractId} archived via unexpected choice ${consuming ?? '<none>'}`,\n );\n};\n\n/** Name of the consuming exercise on `contractId` in a transaction tree, if any. */\nconst getConsumingChoice = (\n transaction: CantonTransaction,\n contractId: string,\n): string | undefined => {\n for (const event of transaction.events ?? []) {\n if (!('ExercisedEvent' in event)) continue;\n const { ExercisedEvent: exercised } = event;\n if (exercised.contractId === contractId && exercised.consuming) {\n return exercised.choice;\n }\n }\n return undefined;\n};\n"]}
@@ -2,40 +2,36 @@ import { __name } from './VUOMXK5T.js';
2
2
  import { z } from 'zod';
3
3
  import { transactionSchema, assignedTransactionSchema, signedTransactionSchema, minedTransactionSchema } from '@layerzerolabs/common-chain-model';
4
4
 
5
- var createCommandSchema = z.object({
6
- templateId: z.string(),
7
- createArguments: z.any()
8
- });
9
- var exerciseCommandSchema = z.object({
10
- templateId: z.string(),
11
- contractId: z.string(),
12
- choice: z.string(),
13
- choiceArgument: z.any()
14
- });
15
- var createAndExerciseCommandSchema = z.object({
16
- templateId: z.string(),
17
- createArguments: z.any(),
18
- choice: z.string(),
19
- choiceArgument: z.any()
20
- });
21
- var exerciseByKeyCommandSchema = z.object({
22
- templateId: z.string(),
23
- contractKey: z.any(),
24
- choice: z.string(),
25
- choiceArgument: z.any()
26
- });
27
5
  var cantonCommandSchema = z.union([
28
6
  z.object({
29
- createCommand: createCommandSchema
7
+ createCommand: z.object({
8
+ templateId: z.string(),
9
+ createArguments: z.any()
10
+ })
30
11
  }),
31
12
  z.object({
32
- exerciseCommand: exerciseCommandSchema
13
+ exerciseCommand: z.object({
14
+ templateId: z.string(),
15
+ contractId: z.string(),
16
+ choice: z.string(),
17
+ choiceArgument: z.any()
18
+ })
33
19
  }),
34
20
  z.object({
35
- createAndExerciseCommand: createAndExerciseCommandSchema
21
+ createAndExerciseCommand: z.object({
22
+ templateId: z.string(),
23
+ createArguments: z.any(),
24
+ choice: z.string(),
25
+ choiceArgument: z.any()
26
+ })
36
27
  }),
37
28
  z.object({
38
- exerciseByKeyCommand: exerciseByKeyCommandSchema
29
+ exerciseByKeyCommand: z.object({
30
+ templateId: z.string(),
31
+ contractKey: z.any(),
32
+ choice: z.string(),
33
+ choiceArgument: z.any()
34
+ })
39
35
  })
40
36
  ]);
41
37
  var cantonDisclosedContractSchema = z.object({
@@ -44,24 +40,19 @@ var cantonDisclosedContractSchema = z.object({
44
40
  createdEventBlob: z.string(),
45
41
  synchronizerId: z.string()
46
42
  });
47
- var ledgerRefreshEntrySchema = z.object({
48
- /** Party whose Active Contract Set to query; resolved at sign time. */
49
- partyToFilter: z.literal("sender"),
50
- /** Template id to query. */
51
- templateId: z.string()
52
- });
53
- var cantonRefreshSpecSchema = z.object({
54
- /** Command-tree placeholders, each replaced with the contract id(s) from a ledger query. */
55
- commands: z.array(ledgerRefreshEntrySchema.extend({
56
- /** Sentinel to replace in the command tree. */
57
- placeholder: z.string(),
58
- /** When true, the placeholder is replaced with the full array of resolved
59
- * contract ids (e.g. amulet holdings); otherwise with the single id. */
60
- multiple: z.boolean().optional()
61
- })).optional(),
62
- /** Contracts fetched via a ledger query (run as the sender) and appended to
63
- * disclosedContracts. */
64
- disclosedContracts: z.array(ledgerRefreshEntrySchema).optional()
43
+ var cantonTransactionSchema = transactionSchema.extend({
44
+ populatedTransaction: z.object({
45
+ unresolvedCommands: z.array(cantonCommandSchema),
46
+ unresolvedDisclosedContracts: z.array(cantonDisclosedContractSchema),
47
+ /** Parties submitting the command (actAs) */
48
+ actAs: z.array(z.string()),
49
+ /** Maps each actAs party → the senderEntityName(s) controlling its signing
50
+ * key(s), always as an array. `.optional()` only so deferred-sender create-time
51
+ * payloads parse; by sign time every actAs party must map, or signing throws.
52
+ * Multiple entries = a multisig party (decentralized namespace) whose keys must
53
+ * all sign. */
54
+ partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional()
55
+ })
65
56
  });
66
57
  var cantonInflightTransactionSchema = z.object({
67
58
  /** The prepared transaction blob */
@@ -75,37 +66,20 @@ var cantonInflightTransactionSchema = z.object({
75
66
  ]),
76
67
  /** Command ID for tracking */
77
68
  commandId: z.string(),
78
- /** Ledger offset at which the submission landed — used as `beginExclusive`
79
- * for waitForCommand to avoid polling from the start of the ledger.
80
- * Optional: only present after send(); absent for old/retry scenarios. */
69
+ // Ledger offset at which the submission landed — used as `beginExclusive`
70
+ // for waitForCommand to avoid polling from the start of the ledger.
71
+ // Optional: only present after send(); absent for old/retry scenarios.
81
72
  completionOffset: z.number().optional()
82
73
  });
83
- var cantonTransactionSchema = transactionSchema.extend({
84
- populatedTransaction: z.object({
85
- /** Parties submitting the command (actAs) */
86
- actAs: z.array(z.string()),
87
- /** Daml commands to send to prepareForSigning */
88
- commands: z.array(cantonCommandSchema),
89
- /** Disclosed contracts for contract/key lookups */
90
- disclosedContracts: z.array(cantonDisclosedContractSchema),
91
- /** Maps each actAs party → the senderEntityName(s) controlling its signing
92
- * key(s), always as an array. `.optional()` only so deferred-sender create-time
93
- * payloads parse; by sign time every actAs party must map, or signing throws.
94
- * Multiple entries = a multisig party (decentralized namespace) whose keys must
95
- * all sign. */
96
- partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional(),
97
- /** Sign-time refresh spec for placeholders the building factory deferred
98
- * (e.g. amulet input holdings, disclosures, time-sensitive choice context).
99
- * Resolved by the generic refresh executor before prepareForSigning. */
100
- refreshSpec: cantonRefreshSpecSchema.optional()
101
- })
102
- });
103
74
  var cantonAssignedTransactionSchema = assignedTransactionSchema.extend({
104
75
  ...cantonTransactionSchema.shape,
105
76
  inflightTransaction: cantonInflightTransactionSchema.optional()
106
77
  });
107
78
  var cantonSignedTransactionSchema = signedTransactionSchema.extend({
108
79
  ...cantonAssignedTransactionSchema.shape,
80
+ // Resolved commands and contracts
81
+ commands: z.array(cantonCommandSchema),
82
+ disclosedContracts: z.array(cantonDisclosedContractSchema),
109
83
  signedTransaction: z.object({
110
84
  /** Per-party signatures in the format expected by Canton's submitSigned */
111
85
  signatures: z.array(z.object({
@@ -133,6 +107,6 @@ var buildCantonTransaction = /* @__PURE__ */ __name(async (chainName, tx) => {
133
107
  };
134
108
  }, "buildCantonTransaction");
135
109
 
136
- export { buildCantonTransaction, cantonAssignedTransactionSchema, cantonCommandSchema, cantonDisclosedContractSchema, cantonMinedTransactionSchema, cantonRefreshSpecSchema, cantonSignedTransactionSchema, cantonTransactionSchema };
137
- //# sourceMappingURL=3YCNHEVD.js.map
138
- //# sourceMappingURL=3YCNHEVD.js.map
110
+ export { buildCantonTransaction, cantonAssignedTransactionSchema, cantonCommandSchema, cantonDisclosedContractSchema, cantonMinedTransactionSchema, cantonSignedTransactionSchema, cantonTransactionSchema };
111
+ //# sourceMappingURL=PSB6BQFH.js.map
112
+ //# sourceMappingURL=PSB6BQFH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transaction.ts"],"names":["cantonCommandSchema","z","union","object","createCommand","templateId","string","createArguments","any","exerciseCommand","contractId","choice","choiceArgument","createAndExerciseCommand","exerciseByKeyCommand","contractKey","cantonDisclosedContractSchema","optional","createdEventBlob","synchronizerId","cantonTransactionSchema","transactionSchema","extend","populatedTransaction","unresolvedCommands","array","unresolvedDisclosedContracts","actAs","partyToSenderEntity","record","cantonInflightTransactionSchema","preparedTransaction","preparedTransactionHash","hashingSchemeVersion","enum","commandId","completionOffset","number","cantonAssignedTransactionSchema","assignedTransactionSchema","shape","inflightTransaction","cantonSignedTransactionSchema","signedTransactionSchema","commands","disclosedContracts","signedTransaction","signatures","party","format","signature","signedBy","signingAlgorithmSpec","cantonMinedTransactionSchema","minedTransactionSchema","buildCantonTransaction","chainName","tx","timestamps","created","Date","now"],"mappings":"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","file":"PSB6BQFH.js","sourcesContent":["import { z } from 'zod';\n\nimport {\n assignedTransactionSchema,\n minedTransactionSchema,\n signedTransactionSchema,\n transactionSchema,\n} from '@layerzerolabs/common-chain-model';\nimport type { PartialBy } from '@layerzerolabs/typescript-utils';\n\n// === Component schemas ===\n\nexport const cantonCommandSchema = z.union([\n z.object({\n createCommand: z.object({\n templateId: z.string(),\n createArguments: z.any(),\n }),\n }),\n z.object({\n exerciseCommand: z.object({\n templateId: z.string(),\n contractId: z.string(),\n choice: z.string(),\n choiceArgument: z.any(),\n }),\n }),\n z.object({\n createAndExerciseCommand: z.object({\n templateId: z.string(),\n createArguments: z.any(),\n choice: z.string(),\n choiceArgument: z.any(),\n }),\n }),\n z.object({\n exerciseByKeyCommand: z.object({\n templateId: z.string(),\n contractKey: z.any(),\n choice: z.string(),\n choiceArgument: z.any(),\n }),\n }),\n]);\n\nexport const cantonDisclosedContractSchema = z.object({\n templateId: z.string().optional(),\n contractId: z.string(),\n createdEventBlob: z.string(),\n synchronizerId: z.string(),\n});\n\n// === Lifecycle schemas ===\n\n/**\n * Canton transaction schema for Daml Ledger API commands.\n */\nexport const cantonTransactionSchema = transactionSchema.extend({\n populatedTransaction: z.object({\n unresolvedCommands: z.array(cantonCommandSchema),\n unresolvedDisclosedContracts: z.array(cantonDisclosedContractSchema),\n\n /** Parties submitting the command (actAs) */\n actAs: z.array(z.string()),\n /** Maps each actAs party → the senderEntityName(s) controlling its signing\n * key(s), always as an array. `.optional()` only so deferred-sender create-time\n * payloads parse; by sign time every actAs party must map, or signing throws.\n * Multiple entries = a multisig party (decentralized namespace) whose keys must\n * all sign. */\n partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional(),\n }),\n});\n\nconst cantonInflightTransactionSchema = z.object({\n /** The prepared transaction blob */\n preparedTransaction: z.string(),\n /** Hash of the prepared transaction (what was signed) */\n preparedTransactionHash: z.string(),\n /** Hashing scheme version used */\n hashingSchemeVersion: z.enum([\n 'HASHING_SCHEME_VERSION_UNSPECIFIED',\n 'HASHING_SCHEME_VERSION_V2',\n ]),\n /** Command ID for tracking */\n commandId: z.string(),\n // Ledger offset at which the submission landed — used as `beginExclusive`\n // for waitForCommand to avoid polling from the start of the ledger.\n // Optional: only present after send(); absent for old/retry scenarios.\n completionOffset: z.number().optional(),\n});\n\n/**\n * Assigned transaction includes the inflight transaction data.\n */\nexport const cantonAssignedTransactionSchema = assignedTransactionSchema.extend({\n ...cantonTransactionSchema.shape,\n inflightTransaction: cantonInflightTransactionSchema.optional(),\n});\n\n/**\n * Signed transaction includes the DER-encoded ECDSA signature.\n */\nexport const cantonSignedTransactionSchema = signedTransactionSchema.extend({\n ...cantonAssignedTransactionSchema.shape,\n // Resolved commands and contracts\n commands: z.array(cantonCommandSchema),\n disclosedContracts: z.array(cantonDisclosedContractSchema),\n signedTransaction: z.object({\n /** Per-party signatures in the format expected by Canton's submitSigned */\n signatures: z.array(\n z.object({\n party: z.string(),\n signatures: z.array(\n z.object({\n format: z.string(),\n signature: z.string(),\n signedBy: z.string(),\n signingAlgorithmSpec: z.string(),\n }),\n ),\n }),\n ),\n }),\n});\n\n/**\n * Mined transaction with confirmation result.\n */\nexport const cantonMinedTransactionSchema = minedTransactionSchema.extend({\n ...cantonSignedTransactionSchema.shape,\n inflightTransaction: cantonInflightTransactionSchema,\n});\n\n// === Types ===\n\nexport type CantonTx = z.infer<typeof cantonTransactionSchema>;\nexport type CantonAssignedTx = z.infer<typeof cantonAssignedTransactionSchema>;\nexport type CantonSignedTx = z.infer<typeof cantonSignedTransactionSchema>;\nexport type CantonMinedTx = z.infer<typeof cantonMinedTransactionSchema>;\n\n// === Builder ===\n\nexport type BuildCantonTransactionInput = PartialBy<CantonTx, 'chainName' | 'timestamps'>;\n\nexport const buildCantonTransaction = async (\n chainName: string,\n tx: BuildCantonTransactionInput,\n): Promise<CantonTx> => {\n return {\n ...tx,\n chainName,\n timestamps: {\n created: tx.timestamps?.created ?? Date.now(),\n },\n };\n};\n"]}
@@ -234,6 +234,15 @@ var CantonSdk = class _CantonSdk {
234
234
  listParties(opts) {
235
235
  return this.#client.listParties(opts);
236
236
  }
237
+ /**
238
+ * List the parties the configured user can act/read as.
239
+ *
240
+ * Narrower than {@link listParties} (all parties on the node): use this when a
241
+ * call needs the caller's own read-scoped parties.
242
+ */
243
+ listUserParties() {
244
+ return this.#client.listUserParties();
245
+ }
237
246
  /**
238
247
  * Allocate a new party on the participant node.
239
248
  *
@@ -349,5 +358,5 @@ var CantonSdk = class _CantonSdk {
349
358
  };
350
359
 
351
360
  export { CantonSdk };
352
- //# sourceMappingURL=KEGAENCF.js.map
353
- //# sourceMappingURL=KEGAENCF.js.map
361
+ //# sourceMappingURL=X66QZBHT.js.map
362
+ //# sourceMappingURL=X66QZBHT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sdk/canton-sdk.ts"],"names":["CantonSdk","client","event","contractId","undefined","templateId","CantonProtocolError","createArgument","payload","buildCreate","template","packageId","parts","replace","split","createCommand","join","createArguments","encode","buildExercise","choice","args","encodedArgs","argumentEncode","exerciseCommand","choiceName","choiceArgument","submit","actors","commands","opts","prepareForSigning","submitSigned","prepared","signatures","waitForCommand","commandId","get","parties","fetchContractById","fetchTransaction","updateId","fetchTransactionByUpdateId","fetchTransactionByOffset","offset","fetchEventsByContractId","createDisclosure","connectedSynchronizers","uploadDar","dar","validateDar","listParties","listUserParties","allocateParty","partyIdHint","getPackageId","packageName","getLedgerEndOffset","queryActiveContracts","party","normalizeActiveContract","contract","e","createdEvent","synchronizerId","queryActiveContractsByParties","templateIds","queryActiveContractsForParties","templateFilter","apiOpts","perPartyResults","Promise","all","map","partyId","seen","Set","result","contracts","c","cid","has","add","normalized","push"],"mappings":"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","file":"X66QZBHT.js","sourcesContent":["import type { Choice, ContractId, Party, Template } from '@daml/types';\n\nimport type { CantonTransaction, ICantonClient } from '../client/index';\nimport { CantonProtocolError } from '../errors';\nimport type {\n ArchivedEvent,\n Command,\n CreatedEvent,\n DisclosedContract,\n JsActiveContract,\n} from '../open-api/models';\nimport type {\n Contract,\n ExternalSignature,\n NormalizedActiveContract,\n PreparedTransaction,\n SubmitActors,\n SubmitResult,\n WaitOptions,\n WaitResult,\n} from '../types';\n\n/**\n * High-level SDK for Canton/DAML contract operations.\n *\n * Users interact with this SDK, not CantonClient directly.\n *\n * @example\n * ```ts\n * import { CantonClient, CantonSdk } from '@layerzerolabs/common-canton';\n *\n * const client = new CantonClient(config, userId);\n * const sdk = new CantonSdk(client);\n *\n * await sdk.submit({ actAs: [party] }, [cmd]);\n * ```\n */\nexport class CantonSdk {\n readonly #client: ICantonClient;\n\n constructor(client: ICantonClient) {\n this.#client = client;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Private Helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Validate and extract contract fields from a CreatedEvent.\n * Returns undefined if event is undefined (contract not found).\n */\n #validateContractEvent<T extends object>(\n event: { templateId?: string; contractId?: string; createArgument?: unknown } | undefined,\n contractId: ContractId<T>,\n ): Contract<T> | undefined {\n if (!event) return undefined;\n\n if (!event.templateId) {\n throw new CantonProtocolError('Contract response missing templateId', {\n contractId,\n });\n }\n if (!event.contractId) {\n throw new CantonProtocolError('Contract response missing contractId', {\n contractId,\n });\n }\n if (event.createArgument === undefined) {\n throw new CantonProtocolError('Contract response missing createArgument', {\n contractId,\n });\n }\n return {\n templateId: event.templateId,\n contractId: event.contractId as ContractId<T>,\n payload: event.createArgument as T,\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Command Builders\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Build a create command using a generated DAML template.\n *\n * @param template The generated DAML template (e.g., StateCommitment)\n * @param payload The contract payload\n * @param packageId The package ID from the generated package's index.js\n */\n buildCreate<T extends object, K, I extends string>(\n template: Template<T, K, I>,\n payload: T,\n packageId: string,\n ): Command {\n // Generated templateId format: '#packageName:Module:Entity'\n // Canton API needs: 'packageId:Module:Entity'\n const parts = template.templateId.replace(/^#/, '').split(':');\n parts[0] = packageId;\n\n return {\n createCommand: {\n templateId: parts.join(':'),\n createArguments: template.encode(payload),\n },\n };\n }\n\n /**\n * Build an exercise command using a generated DAML choice.\n *\n * @param choice The generated DAML choice (e.g., StateCommitment.Archive)\n * @param contractId The contract ID to exercise on\n * @param args The choice arguments\n * @param packageId The package ID from the generated package's index.js\n */\n buildExercise<T extends object, C, R, K>(\n choice: Choice<T, C, R, K>,\n contractId: ContractId<T>,\n args: C,\n packageId: string,\n ): Command {\n // Generated templateId format: '#packageName:Module:Entity'\n // Canton API needs: 'packageId:Module:Entity'\n const parts = choice.template().templateId.replace(/^#/, '').split(':');\n parts[0] = packageId;\n\n const encodedArgs = choice.argumentEncode(args);\n\n return {\n exerciseCommand: {\n templateId: parts.join(':'),\n contractId,\n choice: choice.choiceName,\n choiceArgument: encodedArgs,\n },\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Submission (networked)\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Submit commands to the ledger.\n */\n submit(\n actors: SubmitActors,\n commands: Command[],\n opts?: { disclosedContracts?: DisclosedContract[]; commandId?: string },\n ): Promise<SubmitResult> {\n return this.#client.submit(actors, commands, opts);\n }\n\n /**\n * Prepare commands for off-chain signing by external parties.\n */\n prepareForSigning(\n actors: SubmitActors,\n commands: Command[],\n opts?: { disclosedContracts?: DisclosedContract[]; commandId?: string },\n ): Promise<PreparedTransaction> {\n return this.#client.prepareForSigning(actors, commands, opts);\n }\n\n /**\n * Submit a pre-signed transaction (external party flow).\n */\n submitSigned(\n prepared: PreparedTransaction,\n signatures: ExternalSignature[],\n ): Promise<SubmitResult> {\n return this.#client.submitSigned(prepared, signatures);\n }\n\n /**\n * Wait for a command to be accepted or rejected.\n */\n waitForCommand(commandId: string, opts: WaitOptions): Promise<WaitResult> {\n return this.#client.waitForCommand(commandId, opts);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Queries\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Fetch a specific contract by ID.\n * Returns undefined if archived or not visible.\n *\n * @param contractId The contract ID to fetch\n * @param parties Parties to use for visibility filtering\n */\n async get<T extends object>(\n contractId: ContractId<T>,\n parties: Party[],\n ): Promise<Contract<T> | undefined> {\n const event = await this.#client.fetchContractById(contractId, parties);\n return this.#validateContractEvent(event, contractId);\n }\n\n /**\n * Fetch an update (transaction) by its ID.\n *\n * Use this to get created contract IDs after a command is accepted.\n * The updateId comes from WaitResult.updateId.\n *\n * @param updateId The update ID from WaitResult\n * @param parties Parties to filter events\n * @returns Parsed update with events\n *\n * @example\n * ```ts\n * const waitResult = await sdk.waitForCommand(commandId, opts);\n * if (waitResult.status === 'accepted') {\n * const tx = await sdk.fetchTransaction(waitResult.updateId, [party]);\n * const createdIds = (tx.events ?? [])\n * .filter(e => 'CreatedEvent' in e)\n * .map(e => e.CreatedEvent.contractId);\n * }\n * ```\n */\n fetchTransaction(updateId: string, parties: string[]): Promise<CantonTransaction> {\n return this.#client.fetchTransactionByUpdateId(updateId, parties);\n }\n\n /**\n * Fetch a transaction by its offset.\n *\n * @param offset The ledger offset\n * @param parties Parties to filter events\n * @returns Parsed transaction with events and timestamps\n */\n fetchTransactionByOffset(offset: number, parties: string[]): Promise<CantonTransaction> {\n return this.#client.fetchTransactionByOffset(offset, parties);\n }\n\n /**\n * Fetch both the created and archived events for a contract by ID.\n *\n * @param contractId - The contract ID to look up\n * @param parties - Parties to use for visibility filtering\n */\n fetchEventsByContractId(\n contractId: string,\n parties: string[],\n ): Promise<{ created: CreatedEvent | undefined; archived: ArchivedEvent | undefined }> {\n return this.#client.fetchEventsByContractId(contractId, parties);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Disclosure\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a disclosure for a contract.\n *\n * Disclosures allow a party to share a contract's content with another party\n * who isn't a stakeholder, enabling them to exercise choices that reference it.\n *\n * @param contractId The contract to create disclosure for\n * @param parties Parties that have visibility to the contract\n * @returns The disclosed contract, or undefined if contract not found\n *\n * @example\n * ```ts\n * // Alice creates disclosure for Bob to use\n * const disclosure = await aliceSdk.createDisclosure(contractId, [aliceParty]);\n * if (disclosure) {\n * // Bob uses the disclosure in his submission\n * await bobSdk.submit(\n * { actAs: [bobParty] },\n * [command],\n * { disclosedContracts: [disclosure] }\n * );\n * }\n * ```\n */\n createDisclosure<T extends object>(\n contractId: ContractId<T>,\n parties: Party[],\n ): Promise<DisclosedContract | undefined> {\n return this.#client.createDisclosure(contractId, parties);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Utilities\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Get connected synchronizers.\n */\n connectedSynchronizers(): Promise<string[]> {\n return this.#client.connectedSynchronizers();\n }\n\n /**\n * Upload a DAR to the participant node.\n *\n * POST /v2/dars\n *\n * @param opts.skipIfVetted - If true, treat KNOWN_PACKAGE_VERSION errors as success\n */\n uploadDar(\n dar: Uint8Array<ArrayBuffer>,\n opts?: { vetAllPackages?: boolean; synchronizerId?: string; skipIfVetted?: boolean },\n ): Promise<object> {\n return this.#client.uploadDar(dar, opts);\n }\n\n /**\n * Validate a DAR for upgrade compatibility against the current vetting state.\n *\n * POST /v2/dars/validate\n */\n validateDar(dar: Uint8Array<ArrayBuffer>, opts?: { synchronizerId?: string }): Promise<void> {\n return this.#client.validateDar(dar, opts);\n }\n\n /**\n * List all known parties on the participant node.\n *\n * GET /v2/parties\n *\n * @param opts.pageSize - Maximum number of results per page\n * @param opts.pageToken - Pagination token from previous response\n * @returns Array of party IDs\n */\n listParties(opts?: {\n pageSize?: number;\n pageToken?: string;\n }): Promise<{ parties: string[]; nextPageToken: string }> {\n return this.#client.listParties(opts);\n }\n\n /**\n * List the parties the configured user can act/read as.\n *\n * Narrower than {@link listParties} (all parties on the node): use this when a\n * call needs the caller's own read-scoped parties.\n */\n listUserParties(): Promise<string[]> {\n return this.#client.listUserParties();\n }\n\n /**\n * Allocate a new party on the participant node.\n *\n * POST /v2/parties\n *\n * @param partyIdHint - A hint for the party ID (e.g., \"alice\", \"bob\")\n * @param opts.userId - User who gets actAs rights (empty string = no user)\n * @param opts.synchronizerId - Synchronizer to allocate on (auto-detected if omitted)\n * @param opts.identityProviderId - Identity provider ID (empty string = default)\n * @returns The allocated party ID\n */\n allocateParty(\n partyIdHint: string,\n opts?: { userId?: string; synchronizerId?: string; identityProviderId?: string },\n ): Promise<string> {\n return this.#client.allocateParty(partyIdHint, opts);\n }\n\n /**\n * Get the package ID for a package by name.\n *\n * POST /v2/interactive-submission/preferred-packages\n *\n * @param packageName - The package name (e.g., \"layerzero-oft\")\n * @param parties - Parties whose vetting state should be considered\n * @param opts.synchronizerId - Synchronizer to query (auto-detected if omitted)\n * @returns The package ID (hash)\n */\n getPackageId(\n packageName: string,\n parties: string[],\n opts?: { synchronizerId?: string },\n ): Promise<string> {\n return this.#client.getPackageId(packageName, parties, opts);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Active Contracts Query\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Get the current ledger end offset.\n *\n * GET /v2/state/ledger-end\n *\n * @returns The current ledger end offset\n */\n getLedgerEndOffset(): Promise<number> {\n return this.#client.getLedgerEndOffset();\n }\n\n /**\n * Query active contracts at a given offset with optional template filtering.\n *\n * POST /v2/state/active-contracts\n *\n * @param party - Party to query as (for visibility)\n * @param offset - Ledger offset to query at\n * @param opts.templateIds - Template IDs to filter by (e.g., \"packageId:Module:Template\")\n * @param opts.limit - Maximum number of contracts to return\n * @returns Array of active contracts\n *\n * @example\n * ```ts\n * const offset = await sdk.getLedgerEndOffset();\n * const contracts = await sdk.queryActiveContracts(party, offset, {\n * templateIds: ['packageId:SimpleRequest:SimpleRequest'],\n * limit: 100,\n * });\n * for (const contract of contracts) {\n * console.log(contract.createdEvent.contractId, contract.createdEvent.templateId);\n * }\n * ```\n */\n queryActiveContracts(\n party: string,\n offset: number,\n opts?: { templateIds?: string[]; limit?: number },\n ): Promise<JsActiveContract[]> {\n return this.#client.queryActiveContracts(party, offset, opts);\n }\n\n /**\n * Normalize a ledger API JsActiveContract to a flat shape (contractId, templateId, payload, synchronizerId).\n * Useful when you only need these fields and not createdEvent / reassignmentCounter.\n */\n static normalizeActiveContract(contract: JsActiveContract): NormalizedActiveContract {\n const e = contract.createdEvent;\n return {\n contractId: e.contractId,\n templateId: e.templateId,\n payload: e.createArgument,\n synchronizerId: contract.synchronizerId,\n };\n }\n\n /**\n * Query active contracts visible to any of the given parties (single API call).\n */\n queryActiveContractsByParties(\n parties: string[],\n offset: number,\n templateIds: string[],\n opts?: { limit?: number },\n ): Promise<JsActiveContract[]> {\n return this.#client.queryActiveContractsByParties(parties, offset, templateIds, opts);\n }\n\n /**\n * Query active contracts visible to any of the given parties, deduplicated by contractId.\n * Returns normalized contracts (flat shape). Use when you need a merged view across multiple parties.\n *\n * @param parties - Party IDs to query as (contracts visible to any party are included, each contract once)\n * @param opts - Optional templateIds and limit (passed per-party to the ledger API); optional templateFilter (applied after fetch)\n */\n async queryActiveContractsForParties(\n parties: string[],\n opts?: {\n templateIds?: string[];\n limit?: number;\n /** If provided, only contracts whose templateId passes this predicate are returned. */\n templateFilter?: (templateId: string) => boolean;\n },\n ): Promise<NormalizedActiveContract[]> {\n const offset = await this.#client.getLedgerEndOffset();\n const { templateFilter, ...apiOpts } = opts ?? {};\n const perPartyResults = await Promise.all(\n parties.map((partyId) => this.#client.queryActiveContracts(partyId, offset, apiOpts)),\n );\n const seen = new Set<string>();\n const result: NormalizedActiveContract[] = [];\n for (const contracts of perPartyResults) {\n for (const c of contracts) {\n const cid = c.createdEvent.contractId;\n if (!seen.has(cid)) {\n seen.add(cid);\n const normalized = CantonSdk.normalizeActiveContract(c);\n if (!templateFilter || templateFilter(normalized.templateId)) {\n result.push(normalized);\n }\n }\n }\n }\n return result;\n }\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ export declare const cantonRefreshPartyFilterSchema: z.ZodUnion<readonly [z.ZodLiteral<"sender">, z.ZodObject<{
3
+ party: z.ZodString;
4
+ }, z.core.$strip>]>;
5
+ export declare const cantonDeferredValueSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6
+ type: z.ZodLiteral<"senderParty">;
7
+ }, z.core.$strip>, z.ZodObject<{
8
+ type: z.ZodLiteral<"activeContractId">;
9
+ partyToFilter: z.ZodUnion<readonly [z.ZodLiteral<"sender">, z.ZodObject<{
10
+ party: z.ZodString;
11
+ }, z.core.$strip>]>;
12
+ templateId: z.ZodString;
13
+ contractStateFilter: z.ZodOptional<z.ZodRecord<z.ZodString & z.core.$partial, z.ZodAny>>;
14
+ disclose: z.ZodOptional<z.ZodBoolean>;
15
+ }, z.core.$strip>, z.ZodObject<{
16
+ type: z.ZodLiteral<"activeContractIds">;
17
+ partyToFilter: z.ZodUnion<readonly [z.ZodLiteral<"sender">, z.ZodObject<{
18
+ party: z.ZodString;
19
+ }, z.core.$strip>]>;
20
+ templateId: z.ZodString;
21
+ contractStateFilter: z.ZodOptional<z.ZodRecord<z.ZodString & z.core.$partial, z.ZodAny>>;
22
+ disclose: z.ZodOptional<z.ZodBoolean>;
23
+ }, z.core.$strip>, z.ZodObject<{
24
+ type: z.ZodLiteral<"amuletRulesCid">;
25
+ }, z.core.$strip>, z.ZodObject<{
26
+ type: z.ZodLiteral<"amuletContext">;
27
+ }, z.core.$strip>], "type">;
28
+ export type CantonRefreshPartyFilter = z.infer<typeof cantonRefreshPartyFilterSchema>;
29
+ export type CantonDeferredValue = z.infer<typeof cantonDeferredValueSchema>;
30
+ type CantonActiveContractIdRef = Omit<Extract<CantonDeferredValue, {
31
+ type: 'activeContractId';
32
+ }>, 'type'>;
33
+ type CantonActiveContractIdsRef = Omit<Extract<CantonDeferredValue, {
34
+ type: 'activeContractIds';
35
+ }>, 'type'>;
36
+ export declare const encodeCantonDeferredValue: (value: CantonDeferredValue) => string;
37
+ export declare const parseCantonDeferredValue: (value: unknown) => CantonDeferredValue | undefined;
38
+ export declare const cantonSenderPartyRef: () => string;
39
+ export declare const cantonActiveContractIdRef: (value: CantonActiveContractIdRef) => string;
40
+ export declare const cantonActiveContractIdsRef: (value: CantonActiveContractIdsRef) => string;
41
+ export declare const cantonAmuletRulesCidRef: () => string;
42
+ export declare const cantonAmuletContextRef: () => string;
43
+ /** Returns true if `value` is a Canton deferred-value sentinel. */
44
+ export declare const isCantonPlaceholder: (value: string) => boolean;
45
+ export {};
46
+ //# sourceMappingURL=deferredValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferredValue.d.ts","sourceRoot":"","sources":["../src/deferredValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,8BAA8B;;mBAGzC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;2BAkBpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACtF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,KAAK,yBAAyB,GAAG,IAAI,CACjC,OAAO,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC,EAC1D,MAAM,CACT,CAAC;AACF,KAAK,0BAA0B,GAAG,IAAI,CAClC,OAAO,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC,EAC3D,MAAM,CACT,CAAC;AAKF,eAAO,MAAM,yBAAyB,GAAI,OAAO,mBAAmB,KAAG,MACqB,CAAC;AAE7F,eAAO,MAAM,wBAAwB,GAAI,OAAO,OAAO,KAAG,mBAAmB,GAAG,SAiB/E,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,MACc,CAAC;AAEvD,eAAO,MAAM,yBAAyB,GAAI,OAAO,yBAAyB,KAAG,MACR,CAAC;AAEtE,eAAO,MAAM,0BAA0B,GAAI,OAAO,0BAA0B,KAAG,MACT,CAAC;AAEvE,eAAO,MAAM,uBAAuB,QAAO,MACc,CAAC;AAE1D,eAAO,MAAM,sBAAsB,QAAO,MACc,CAAC;AAEzD,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,KAAG,OACH,CAAC"}