@layerzerolabs/common-canton 1.2.70 → 1.2.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{MI3L7BKC.js → 7S3NIGZP.js} +3 -3
- package/dist/{MI3L7BKC.js.map → 7S3NIGZP.js.map} +1 -1
- package/dist/{LCM7LWM5.js → A7FFE5B3.js} +3 -3
- package/dist/{LCM7LWM5.js.map → A7FFE5B3.js.map} +1 -1
- package/dist/{XPBJWESZ.js → B67OHWKM.js} +3 -3
- package/dist/{XPBJWESZ.js.map → B67OHWKM.js.map} +1 -1
- package/dist/{PXHLNX4K.js → BQWTGHOG.js} +5 -5
- package/dist/BQWTGHOG.js.map +1 -0
- package/dist/{WLHCBBAJ.js → BSVJEBKM.js} +5 -5
- package/dist/BSVJEBKM.js.map +1 -0
- package/dist/{F7DI4SRR.js → C3ZXB6LJ.js} +6 -6
- package/dist/{F7DI4SRR.js.map → C3ZXB6LJ.js.map} +1 -1
- package/dist/{RELCLANB.js → FE2U6OQD.js} +3 -3
- package/dist/{RELCLANB.js.map → FE2U6OQD.js.map} +1 -1
- package/dist/{42L4RKH6.js → HMB7QXTW.js} +42 -10
- package/dist/HMB7QXTW.js.map +1 -0
- package/dist/{HF5HP2EX.js → I5ERUZDD.js} +5 -6
- package/dist/I5ERUZDD.js.map +1 -0
- package/dist/{QSQZYJB6.js → PWKI6T6A.js} +3 -4
- package/dist/PWKI6T6A.js.map +1 -0
- package/dist/{SEKD553P.js → QEE5QCHB.js} +4 -4
- package/dist/QEE5QCHB.js.map +1 -0
- package/dist/{O26WXLAL.js → RKO3QWCF.js} +4 -4
- package/dist/{O26WXLAL.js.map → RKO3QWCF.js.map} +1 -1
- package/dist/{5N5IZWFQ.js → RZLTCZ5M.js} +63 -50
- package/dist/RZLTCZ5M.js.map +1 -0
- package/dist/{ODJN4O2R.js → UGGRFD54.js} +25 -7
- package/dist/UGGRFD54.js.map +1 -0
- package/dist/address.js +2 -2
- package/dist/browser.js +2 -2
- package/dist/client/amulet.d.ts.map +1 -1
- package/dist/client/amulet.js +1 -1
- package/dist/client/canton-client.js +2 -2
- package/dist/client/index.js +2 -2
- package/dist/deferredValue.d.ts.map +1 -1
- package/dist/deferredValue.js +1 -1
- package/dist/events.js +5 -5
- package/dist/index.js +14 -14
- package/dist/provider.js +3 -3
- package/dist/refresh/address-resolver.d.ts +3 -1
- package/dist/refresh/address-resolver.d.ts.map +1 -1
- package/dist/refresh/address-resolver.js +2 -2
- package/dist/refresh/deployment-address.d.ts.map +1 -1
- package/dist/refresh/deployment-address.js +2 -2
- package/dist/refresh/index.js +9 -9
- package/dist/refresh/plan.d.ts +495 -45
- package/dist/refresh/plan.d.ts.map +1 -1
- package/dist/refresh/plan.js +2 -2
- package/dist/refresh/resolve-plan.d.ts.map +1 -1
- package/dist/refresh/resolve-plan.js +3 -3
- package/dist/refresh/resolve.js +6 -6
- package/dist/refresh/reverse-substitute.d.ts.map +1 -1
- package/dist/refresh/reverse-substitute.js +2 -2
- package/dist/refresh/wrapped-lz-sdk.d.ts.map +1 -1
- package/dist/refresh/wrapped-lz-sdk.js +3 -3
- package/dist/transaction.d.ts +660 -60
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +3 -3
- package/package.json +10 -10
- package/dist/42L4RKH6.js.map +0 -1
- package/dist/5N5IZWFQ.js.map +0 -1
- package/dist/HF5HP2EX.js.map +0 -1
- package/dist/ODJN4O2R.js.map +0 -1
- package/dist/PXHLNX4K.js.map +0 -1
- package/dist/QSQZYJB6.js.map +0 -1
- package/dist/SEKD553P.js.map +0 -1
- package/dist/WLHCBBAJ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/refresh/reverse-substitute.ts"],"names":["BLOB_KEY","substituteCidsToRefs","value","cidToRef","ref","get","Array","isArray","map","item","out","key","Object","entries","substituteRefsToCids","resolve","items","Promise","all","parseCantonDeferredValueOrThrow","type","flat","Error","templateId","fromEntries"],"mappings":";;;;AAGA,IAAMA,QAAAA,GAAW,kBAAA;AAEV,IAAMC,oBAAAA,mBAAuB,MAAA,CAAA,CAAIC,KAAAA,EAAUC,QAAAA,KAAAA;AAC9C,EAAA,IAAI,OAAOD,UAAU,QAAA,EAAU;AAC3B,IAAA,MAAME,GAAAA,GAAMD,QAAAA,CAASE,GAAAA,CAAIH,KAAAA,CAAAA;AACzB,IAAA,OAAQE,GAAAA,IAAOF,KAAAA;AACnB,EAAA;AACA,EAAA,IAAII,KAAAA,CAAMC,OAAAA,CAAQL,KAAAA,CAAAA,EAAQ;AACtB,IAAA,OAAOA,MAAMM,GAAAA,CAAI,CAACC,SAASR,oBAAAA,CAAqBQ,IAAAA,EAAMN,QAAAA,CAAAA,CAAAA;AAC1D,EAAA;AACA,EAAA,IAAID,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA,EAAU;AAC7C,IAAA,MAAMQ,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAACC,GAAAA,EAAKF,IAAAA,KAASG,MAAAA,CAAOC,OAAAA,CAAQX,KAAAA,CAAAA,EAAmC;AACxEQ,MAAAA,GAAAA,CAAIC,GAAAA,CAAAA,GAAOA,GAAAA,KAAQX,WAAWS,IAAAA,GAAOR,oBAAAA,CAAqBQ,MAAMN,QAAAA,CAAAA;AACpE,IAAA;AACA,IAAA,OAAOO,GAAAA;AACX,EAAA;AACA,EAAA,OAAOR,KAAAA;AACX,CAAA,EAhBoC,sBAAA;AAqB7B,IAAMY,oBAAAA,mBAAuB,MAAA,CAAA,OAAUZ,KAAAA,EAAUa,OAAAA,KAAAA;AACpD,EAAA,IAAIT,KAAAA,CAAMC,OAAAA,CAAQL,KAAAA,CAAAA,EAAQ;AACtB,IAAA,MAAMc,QAAQ,MAAMC,OAAAA,CAAQC,IACxBhB,KAAAA,CAAMM,GAAAA,CAAI,OAAOC,IAAAA,KAAAA;AACb,MAAA,MAAML,IAAAA,GAAMe,gCAAgCV,IAAAA,CAAAA;AAC5C,MAAA,OAAOL,MAAKgB,IAAAA,KAAS,mBAAA,GACb,MAAML,OAAAA,CAAQX,IAAAA,CAAAA,GAChB;QAAC,MAAMU,oBAAAA,CAAqBL,MAAMM,OAAAA;;AAC5C,IAAA,CAAA,CAAA,CAAA;AAEJ,IAAA,OAAOC,MAAMK,IAAAA,EAAI;AACrB,EAAA;AAEA,EAAA,MAAMjB,GAAAA,GAAMe,gCAAgCjB,KAAAA,CAAAA;AAC5C,EAAA,IAAIE,GAAAA,EAAK;AACL,IAAA,IAAIA,GAAAA,CAAIgB,SAAS,mBAAA,EAAqB;AAClC,MAAA,MAAM,IAAIE,KAAAA,CACN,CAAA,YAAA,EAAelB,GAAAA,CAAImB,UAAU,CAAA,uEAAA,CAAyE,CAAA;AAE9G,IAAA;AACA,IAAA,OAAQ,MAAMR,QAAQX,GAAAA,CAAAA;AAC1B,EAAA;AAEA,EAAA,IAAIF,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA,EAAU;AAC7C,IAAA,MAAMW,OAAAA,GAAU,MAAMI,OAAAA,CAAQC,GAAAA,CAC1BN,MAAAA,CAAOC,OAAAA,CAAQX,KAAAA,CAAAA,CAAkCM,GAAAA,CAAI,OAAO,CAACG,GAAAA,EAAKF,IAAAA,CAAAA,KAAU;AACxEE,MAAAA,GAAAA;MACA,MAAMG,oBAAAA,CAAqBL,MAAMM,OAAAA;KACpC,CAAA,CAAA;AAEL,IAAA,OAAOH,MAAAA,CAAOY,YAAYX,OAAAA,CAAAA;AAC9B,EAAA;AAEA,EAAA,OAAOX,KAAAA;AACX,CAAA,EAlCoC,sBAAA","file":"BSVJEBKM.js","sourcesContent":["import { type CantonDeferredValue, parseCantonDeferredValueOrThrow } from '../deferredValue';\n\n// Opaque base64 — swapping a cid here would corrupt it.\nconst BLOB_KEY = 'createdEventBlob';\n\nexport const substituteCidsToRefs = <T>(value: T, cidToRef: Map<string, string>): T => {\n if (typeof value === 'string') {\n const ref = cidToRef.get(value);\n return (ref ?? value) as T;\n }\n if (Array.isArray(value)) {\n return value.map((item) => substituteCidsToRefs(item, cidToRef)) as T;\n }\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n out[key] = key === BLOB_KEY ? item : substituteCidsToRefs(item, cidToRef);\n }\n return out as T;\n }\n return value;\n};\n\nexport type ResolveRef = (ref: CantonDeferredValue) => Promise<unknown>;\n\n/** A plural activeContractIds ref expands in place — must be inside an array; a scalar slot throws. */\nexport const substituteRefsToCids = async <T>(value: T, resolve: ResolveRef): Promise<T> => {\n if (Array.isArray(value)) {\n const items = await Promise.all(\n value.map(async (item) => {\n const ref = parseCantonDeferredValueOrThrow(item);\n return ref?.type === 'activeContractIds'\n ? ((await resolve(ref)) as unknown[])\n : [await substituteRefsToCids(item, resolve)];\n }),\n );\n return items.flat() as T;\n }\n\n const ref = parseCantonDeferredValueOrThrow(value);\n if (ref) {\n if (ref.type === 'activeContractIds') {\n throw new Error(\n `Refresh for ${ref.templateId} resolves to multiple contract ids, but the ref was not inside an array`,\n );\n }\n return (await resolve(ref)) as T;\n }\n\n if (value !== null && typeof value === 'object') {\n const entries = await Promise.all(\n Object.entries(value as Record<string, unknown>).map(async ([key, item]) => [\n key,\n await substituteRefsToCids(item, resolve),\n ]),\n );\n return Object.fromEntries(entries) as T;\n }\n\n return value;\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { resolveCantonRefreshPlan } from './
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { AMULET_INSTRUMENT_ID } from './
|
|
1
|
+
import { resolveCantonRefreshPlan } from './RZLTCZ5M.js';
|
|
2
|
+
import { substituteRefsToCids } from './BSVJEBKM.js';
|
|
3
|
+
import { createContractAddressResolver } from './HMB7QXTW.js';
|
|
4
|
+
import { AMULET_INSTRUMENT_ID } from './QEE5QCHB.js';
|
|
5
5
|
import { __name } from './VUOMXK5T.js';
|
|
6
6
|
|
|
7
7
|
// src/refresh/resolve.ts
|
|
@@ -78,5 +78,5 @@ var resolveCantonTransaction = /* @__PURE__ */ __name(async ({ unresolvedCommand
|
|
|
78
78
|
}, "resolveCantonTransaction");
|
|
79
79
|
|
|
80
80
|
export { resolveCantonTransaction };
|
|
81
|
-
//# sourceMappingURL=
|
|
82
|
-
//# sourceMappingURL=
|
|
81
|
+
//# sourceMappingURL=C3ZXB6LJ.js.map
|
|
82
|
+
//# sourceMappingURL=C3ZXB6LJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","refreshPlan","senderParty","signingParties","client","resolveCantonRefreshPlan","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":"
|
|
1
|
+
{"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","refreshPlan","senderParty","signingParties","client","resolveCantonRefreshPlan","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":"C3ZXB6LJ.js","sourcesContent":["import { AMULET_INSTRUMENT_ID, type ChoiceContext } from '../client/amulet';\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type {\n CantonCommands,\n CantonDisclosedContracts,\n CantonUnresolvedCommands,\n} from '../transaction';\nimport { createContractAddressResolver } from './address-resolver';\nimport type { CantonRefreshPlan } from './plan';\nimport { resolveCantonRefreshPlan } from './resolve-plan';\nimport { substituteRefsToCids } from './reverse-substitute';\n\nexport interface ResolveCantonAddressParams {\n unresolvedCommands: CantonUnresolvedCommands;\n unresolvedDisclosedContracts: CantonDisclosedContracts;\n refreshPlan?: CantonRefreshPlan;\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 refreshPlan,\n senderParty,\n signingParties,\n client,\n}: ResolveCantonAddressParams): Promise<{\n commands: CantonCommands;\n disclosedContracts: CantonDisclosedContracts;\n}> => {\n if (refreshPlan) {\n return resolveCantonRefreshPlan({\n unresolvedCommands,\n unresolvedDisclosedContracts,\n refreshPlan,\n senderParty,\n signingParties,\n client,\n });\n }\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,4 +1,4 @@
|
|
|
1
|
-
import { cantonRefreshPlanSchema } from './
|
|
1
|
+
import { cantonRefreshPlanSchema } from './UGGRFD54.js';
|
|
2
2
|
import { __name } from './VUOMXK5T.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { transactionSchema, buildTransactionWithResultSchema, assignedTransactionSchema, signedTransactionSchema, minedTransactionSchema } from '@layerzerolabs/common-chain-model';
|
|
@@ -120,5 +120,5 @@ var buildCantonTransaction = /* @__PURE__ */ __name(async (chainName, tx) => {
|
|
|
120
120
|
}, "buildCantonTransaction");
|
|
121
121
|
|
|
122
122
|
export { buildCantonTransaction, cantonAssignedTransactionSchema, cantonCommandSchema, cantonDisclosedContractSchema, cantonMinedTransactionSchema, cantonSignedTransactionSchema, cantonTransactionSchema, cantonTransactionWithResultSchema, unresolvedCantonCommandSchema };
|
|
123
|
-
//# sourceMappingURL=
|
|
124
|
-
//# sourceMappingURL=
|
|
123
|
+
//# sourceMappingURL=FE2U6OQD.js.map
|
|
124
|
+
//# sourceMappingURL=FE2U6OQD.js.map
|
|
@@ -1 +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","unresolvedCantonCommandSchema","cantonDisclosedContractSchema","optional","createdEventBlob","synchronizerId","cantonTransactionSchema","transactionSchema","extend","populatedTransaction","unresolvedCommands","array","unresolvedDisclosedContracts","actAs","partyToSenderEntity","record","deploymentSpec","packageName","ownerField","identityKeys","refreshPlan","cantonRefreshPlanSchema","cantonTransactionWithResultSchema","buildTransactionWithResultSchema","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":"RELCLANB.js","sourcesContent":["import { z } from 'zod';\n\nimport {\n assignedTransactionSchema,\n buildTransactionWithResultSchema,\n minedTransactionSchema,\n signedTransactionSchema,\n transactionSchema,\n} from '@layerzerolabs/common-chain-model';\nimport type { PartialBy } from '@layerzerolabs/typescript-utils';\n\nimport type { CantonDeferredRef, CantonExpectedSignatories } from './deferredValue';\nimport { cantonRefreshPlanSchema } from './refresh/plan';\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\n/**\n * Like cantonCommandSchema but with contractId typed as CantonDeferredRef | string.\n * Used for unresolvedCommands where exercise contractIds are deferred sentinels.\n * At runtime the validation is identical (z.string()); only the TypeScript type differs.\n */\nexport const unresolvedCantonCommandSchema = cantonCommandSchema as unknown as z.ZodType<\n | z.infer<typeof cantonCommandSchema>\n | {\n exerciseCommand: {\n templateId: string;\n contractId: CantonDeferredRef | string;\n choice: string;\n choiceArgument: unknown;\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(unresolvedCantonCommandSchema),\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. At sign time: multi-party transactions must map every actAs\n * party or signing throws; single-party transactions may omit the map and sign()\n * falls back to the queue's senderEntityName. Multiple entries = a multisig party\n * (decentralized namespace) whose keys must all sign. */\n partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional(),\n /** Deployment spec set at prepare time; the deployment activity resolves the live address ref from this + the createCommand. */\n deploymentSpec: z\n .object({\n packageName: z.string(),\n ownerField: z.string(),\n identityKeys: z.array(z.string()),\n })\n .optional(),\n /** Build-time replacements for volatile command inputs and disclosures. */\n refreshPlan: cantonRefreshPlanSchema.optional(),\n }),\n});\n\nexport const cantonTransactionWithResultSchema =\n buildTransactionWithResultSchema(cantonTransactionSchema);\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/** Identifies a contract by data so its live cid can be re-resolved at sign time. */\nexport interface ContractDataIdentifier {\n cid: string;\n templateId: string;\n /** ACS query / visibility party (`partyToFilter`). */\n party: string;\n /**\n * Authority parties that must all be ledger signatories at refresh time.\n * Typically `[party]`; use a different list when querying as an observer\n * (e.g. gateway) while authenticating the admin signatory.\n *\n * Non-empty; same type as the deferred-ref wire field.\n */\n expectedSignatories: CantonExpectedSignatories;\n contractStateFilter?: Record<string, unknown>;\n}\n\nexport type CantonTx = z.infer<typeof cantonTransactionSchema>;\nexport type CantonPopulatedTransaction = CantonTx['populatedTransaction'];\nexport type CantonCommands = z.infer<typeof cantonCommandSchema>[];\nexport type CantonUnresolvedCommands = z.infer<typeof unresolvedCantonCommandSchema>[];\nexport type CantonDisclosedContracts = z.infer<typeof cantonDisclosedContractSchema>[];\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/transaction.ts"],"names":["cantonCommandSchema","z","union","object","createCommand","templateId","string","createArguments","any","exerciseCommand","contractId","choice","choiceArgument","createAndExerciseCommand","exerciseByKeyCommand","contractKey","unresolvedCantonCommandSchema","cantonDisclosedContractSchema","optional","createdEventBlob","synchronizerId","cantonTransactionSchema","transactionSchema","extend","populatedTransaction","unresolvedCommands","array","unresolvedDisclosedContracts","actAs","partyToSenderEntity","record","deploymentSpec","packageName","ownerField","identityKeys","refreshPlan","cantonRefreshPlanSchema","cantonTransactionWithResultSchema","buildTransactionWithResultSchema","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":"FE2U6OQD.js","sourcesContent":["import { z } from 'zod';\n\nimport {\n assignedTransactionSchema,\n buildTransactionWithResultSchema,\n minedTransactionSchema,\n signedTransactionSchema,\n transactionSchema,\n} from '@layerzerolabs/common-chain-model';\nimport type { PartialBy } from '@layerzerolabs/typescript-utils';\n\nimport type { CantonDeferredRef, CantonExpectedSignatories } from './deferredValue';\nimport { cantonRefreshPlanSchema } from './refresh/plan';\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\n/**\n * Like cantonCommandSchema but with contractId typed as CantonDeferredRef | string.\n * Used for unresolvedCommands where exercise contractIds are deferred sentinels.\n * At runtime the validation is identical (z.string()); only the TypeScript type differs.\n */\nexport const unresolvedCantonCommandSchema = cantonCommandSchema as unknown as z.ZodType<\n | z.infer<typeof cantonCommandSchema>\n | {\n exerciseCommand: {\n templateId: string;\n contractId: CantonDeferredRef | string;\n choice: string;\n choiceArgument: unknown;\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(unresolvedCantonCommandSchema),\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. At sign time: multi-party transactions must map every actAs\n * party or signing throws; single-party transactions may omit the map and sign()\n * falls back to the queue's senderEntityName. Multiple entries = a multisig party\n * (decentralized namespace) whose keys must all sign. */\n partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional(),\n /** Deployment spec set at prepare time; the deployment activity resolves the live address ref from this + the createCommand. */\n deploymentSpec: z\n .object({\n packageName: z.string(),\n ownerField: z.string(),\n identityKeys: z.array(z.string()),\n })\n .optional(),\n /** Build-time replacements for volatile command inputs and disclosures. */\n refreshPlan: cantonRefreshPlanSchema.optional(),\n }),\n});\n\nexport const cantonTransactionWithResultSchema =\n buildTransactionWithResultSchema(cantonTransactionSchema);\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/** Identifies a contract by data so its live cid can be re-resolved at sign time. */\nexport interface ContractDataIdentifier {\n cid: string;\n templateId: string;\n /** ACS query / visibility party (`partyToFilter`). */\n party: string;\n /**\n * Authority parties that must all be ledger signatories at refresh time.\n * Typically `[party]`; use a different list when querying as an observer\n * (e.g. gateway) while authenticating the admin signatory.\n *\n * Non-empty; same type as the deferred-ref wire field.\n */\n expectedSignatories: CantonExpectedSignatories;\n contractStateFilter?: Record<string, unknown>;\n}\n\nexport type CantonTx = z.infer<typeof cantonTransactionSchema>;\nexport type CantonPopulatedTransaction = CantonTx['populatedTransaction'];\nexport type CantonCommands = z.infer<typeof cantonCommandSchema>[];\nexport type CantonUnresolvedCommands = z.infer<typeof unresolvedCantonCommandSchema>[];\nexport type CantonDisclosedContracts = z.infer<typeof cantonDisclosedContractSchema>[];\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"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getCreateArgumentField, areExpectedSignatories } from './SWY4QT4I.js';
|
|
2
|
-
import { CANTON_DEFERRED_SENDER, isCantonDeferredSender } from './
|
|
2
|
+
import { CANTON_DEFERRED_SENDER, isCantonDeferredSender } from './PWKI6T6A.js';
|
|
3
3
|
import { __name } from './VUOMXK5T.js';
|
|
4
|
-
import { NonRetryableError } from '@layerzerolabs/common-error-utils';
|
|
5
4
|
|
|
5
|
+
// src/refresh/address-resolver.ts
|
|
6
6
|
var isAmuletHoldingTemplateId = /* @__PURE__ */ __name((templateId) => templateId.endsWith(":Splice.Amulet:Amulet"), "isAmuletHoldingTemplateId");
|
|
7
7
|
var isConcreteActiveContractRef = /* @__PURE__ */ __name((ref) => (ref.type === "activeContractId" || ref.type === "activeContractIds") && ref.partyToFilter !== CANTON_DEFERRED_SENDER, "isConcreteActiveContractRef");
|
|
8
8
|
var matchesContractStateFilter = /* @__PURE__ */ __name((contract, contractStateFilter) => {
|
|
@@ -38,15 +38,47 @@ var isRefAlive = /* @__PURE__ */ __name(async (client, ref) => {
|
|
|
38
38
|
return ref.type === "activeContractId" ? contracts.length === 1 : contracts.length > 0;
|
|
39
39
|
}, "isRefAlive");
|
|
40
40
|
var queryLiveContractsForRef = /* @__PURE__ */ __name(async (client, party, ref) => {
|
|
41
|
+
let interfaceId = ref.interfaceId;
|
|
42
|
+
if (interfaceId?.startsWith("#")) {
|
|
43
|
+
const [packageName, moduleName, entityName, ...extra] = interfaceId.slice(1).split(":");
|
|
44
|
+
if (!packageName || !moduleName || !entityName || extra.length) {
|
|
45
|
+
throw new Error(`Invalid package-name-qualified interface ID: ${interfaceId}`);
|
|
46
|
+
}
|
|
47
|
+
const packageId = await client.getPackageId(packageName, [
|
|
48
|
+
party
|
|
49
|
+
]);
|
|
50
|
+
interfaceId = `${packageId}:${moduleName}:${entityName}`;
|
|
51
|
+
}
|
|
41
52
|
const offset = await client.getLedgerEndOffset();
|
|
42
53
|
const expectedSignatories = resolveExpectedSignatories(ref.expectedSignatories, party, ref.templateId);
|
|
43
54
|
const contractStateFilter = resolveContractStateFilter(ref.contractStateFilter, party);
|
|
44
|
-
|
|
55
|
+
const contracts = interfaceId ? await client.queryActiveContractsByInterface([
|
|
56
|
+
party
|
|
57
|
+
], offset, [
|
|
58
|
+
interfaceId
|
|
59
|
+
], {
|
|
60
|
+
includeCreatedEventBlob: true
|
|
61
|
+
}) : await client.queryActiveContracts(party, offset, {
|
|
45
62
|
templateIds: [
|
|
46
63
|
ref.templateId
|
|
47
64
|
],
|
|
48
65
|
includeCreatedEventBlob: true
|
|
49
|
-
})
|
|
66
|
+
});
|
|
67
|
+
return contracts.filter((contract) => {
|
|
68
|
+
if (expectedSignatories !== void 0 && !areExpectedSignatories(contract.createdEvent, expectedSignatories)) return false;
|
|
69
|
+
if (!interfaceId) return matchesContractStateFilter(contract, contractStateFilter);
|
|
70
|
+
const views = (contract.createdEvent.interfaceViews ?? []).filter((view) => view.interfaceId === interfaceId);
|
|
71
|
+
if (views.length !== 1 || views[0].viewValue == null || views[0].viewStatus?.code !== 0) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return matchesContractStateFilter({
|
|
75
|
+
...contract,
|
|
76
|
+
createdEvent: {
|
|
77
|
+
...contract.createdEvent,
|
|
78
|
+
createArgument: views[0].viewValue
|
|
79
|
+
}
|
|
80
|
+
}, contractStateFilter);
|
|
81
|
+
});
|
|
50
82
|
}, "queryLiveContractsForRef");
|
|
51
83
|
var queryLiveContractIdsForRef = /* @__PURE__ */ __name(async (client, ref, senderParty) => {
|
|
52
84
|
if (ref.type !== "activeContractId" && ref.type !== "activeContractIds") return [];
|
|
@@ -59,7 +91,7 @@ var createContractAddressResolver = /* @__PURE__ */ __name((deps) => {
|
|
|
59
91
|
const { client, senderParty, signingParties, appendDisclosures } = deps;
|
|
60
92
|
const requireSender = /* @__PURE__ */ __name((templateId) => {
|
|
61
93
|
if (!senderParty) {
|
|
62
|
-
throw new
|
|
94
|
+
throw new Error(`Refresh entry for ${templateId} needs a resolved sender party, but none was provided`);
|
|
63
95
|
}
|
|
64
96
|
return senderParty;
|
|
65
97
|
}, "requireSender");
|
|
@@ -76,7 +108,7 @@ var createContractAddressResolver = /* @__PURE__ */ __name((deps) => {
|
|
|
76
108
|
const query = (async () => {
|
|
77
109
|
const contracts = await queryLiveContractsForRef(client, party, ref);
|
|
78
110
|
if (contracts.length === 0) {
|
|
79
|
-
throw new
|
|
111
|
+
throw new Error(`Party ${party} has no matching active contracts of ${ref.templateId}`);
|
|
80
112
|
}
|
|
81
113
|
return contracts;
|
|
82
114
|
})();
|
|
@@ -97,7 +129,7 @@ var createContractAddressResolver = /* @__PURE__ */ __name((deps) => {
|
|
|
97
129
|
const contractId = contract.createdEvent.contractId;
|
|
98
130
|
const createdEventBlob = contract.createdEvent.createdEventBlob;
|
|
99
131
|
if (!createdEventBlob) {
|
|
100
|
-
throw new
|
|
132
|
+
throw new Error(`Could not disclose ${contractId} (template ${ref.templateId}) \u2014 ACS result omitted createdEventBlob`);
|
|
101
133
|
}
|
|
102
134
|
return {
|
|
103
135
|
contractId,
|
|
@@ -111,7 +143,7 @@ var createContractAddressResolver = /* @__PURE__ */ __name((deps) => {
|
|
|
111
143
|
const resolveActiveContractId = /* @__PURE__ */ __name(async (ref) => {
|
|
112
144
|
const contracts = await queryAsParty(ref);
|
|
113
145
|
if (contracts.length !== 1) {
|
|
114
|
-
throw new
|
|
146
|
+
throw new Error(`Refresh for ${ref.templateId} matched ${contracts.length} contracts, but a scalar ref expects exactly one`);
|
|
115
147
|
}
|
|
116
148
|
await discloseContracts(ref, contracts);
|
|
117
149
|
return contracts[0].createdEvent.contractId;
|
|
@@ -131,5 +163,5 @@ var createContractAddressResolver = /* @__PURE__ */ __name((deps) => {
|
|
|
131
163
|
}, "createContractAddressResolver");
|
|
132
164
|
|
|
133
165
|
export { createContractAddressResolver, isConcreteActiveContractRef, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef, resolveContractStateFilter, resolveExpectedSignatories };
|
|
134
|
-
//# sourceMappingURL=
|
|
135
|
-
//# sourceMappingURL=
|
|
166
|
+
//# sourceMappingURL=HMB7QXTW.js.map
|
|
167
|
+
//# sourceMappingURL=HMB7QXTW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/refresh/address-resolver.ts"],"names":["isAmuletHoldingTemplateId","templateId","endsWith","isConcreteActiveContractRef","ref","type","partyToFilter","CANTON_DEFERRED_SENDER","matchesContractStateFilter","contract","contractStateFilter","createArgument","createdEvent","Object","entries","every","key","value","actual","getCreateArgumentField","undefined","JSON","stringify","resolveExpectedSignatories","expectedSignatories","queryParty","length","map","party","isCantonDeferredSender","resolveContractStateFilter","fromEntries","isRefAlive","client","contracts","queryLiveContractsForRef","interfaceId","startsWith","packageName","moduleName","entityName","extra","slice","split","Error","packageId","getPackageId","offset","getLedgerEndOffset","queryActiveContractsByInterface","includeCreatedEventBlob","queryActiveContracts","templateIds","filter","areExpectedSignatories","views","interfaceViews","view","viewValue","viewStatus","code","queryLiveContractIdsForRef","senderParty","c","contractId","createContractAddressResolver","deps","signingParties","appendDisclosures","requireSender","resolveQueryParty","queryCache","Map","queryAsParty","cacheKey","cached","get","query","set","needsDisclosure","stakeholders","Set","signatories","observers","some","has","discloseContracts","toDisclose","disclosures","createdEventBlob","synchronizerId","resolveActiveContractId","resolveActiveContractIds","resolveActiveContracts","discloseActiveContracts","requireSenderParty"],"mappings":"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","file":"HMB7QXTW.js","sourcesContent":["import type { ICantonClient } from '../client/interface';\nimport {\n CANTON_DEFERRED_SENDER,\n type CantonDeferredValue,\n isCantonDeferredSender,\n} from '../deferredValue';\nimport type { JsActiveContract } from '../open-api/models';\nimport type { CantonDisclosedContracts } from '../transaction';\nimport { areExpectedSignatories, getCreateArgumentField } from '../trusted-origin';\n\n/** CIP-56 Amulet holding — DSO is the sole signatory; owner is payload/observer. */\nconst isAmuletHoldingTemplateId = (templateId: string): boolean =>\n templateId.endsWith(':Splice.Amulet:Amulet');\n\nexport type ActiveContractRef = Extract<\n CantonDeferredValue,\n { type: 'activeContractId' | 'activeContractIds' }\n> & { interfaceId?: string };\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 !== CANTON_DEFERRED_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\n/**\n * Match create-argument fields, including dotted paths (`instrumentId.admin`).\n */\nexport const matchesContractStateFilter = (\n contract: JsActiveContract,\n contractStateFilter: ActiveContractRef['contractStateFilter'],\n): boolean => {\n if (!contractStateFilter) return true;\n const createArgument = contract.createdEvent.createArgument;\n return Object.entries(contractStateFilter).every(([key, value]) => {\n const actual = getCreateArgumentField(createArgument, key);\n // Missing / unresolvable paths must not match (fail closed).\n if (actual === undefined) return false;\n return JSON.stringify(actual) === JSON.stringify(value);\n });\n};\n\n/**\n * Resolve {@link CANTON_DEFERRED_SENDER} entries to the ACS query party.\n * Missing lists default to `[queryParty]` except CIP-56 Amulet holdings, where\n * the owner is not a signatory — omit the filter so pre-PR refs still resolve.\n */\nexport const resolveExpectedSignatories = (\n expectedSignatories: readonly string[] | undefined,\n queryParty: string,\n templateId: string,\n): string[] | undefined => {\n if (expectedSignatories?.length) {\n return expectedSignatories.map((party) =>\n isCantonDeferredSender(party) ? queryParty : party,\n );\n }\n if (isAmuletHoldingTemplateId(templateId)) {\n return undefined;\n }\n return [queryParty];\n};\n\n/** Resolve {@link CANTON_DEFERRED_SENDER} values in `contractStateFilter` to the ACS query party. */\nexport const resolveContractStateFilter = (\n contractStateFilter: ActiveContractRef['contractStateFilter'],\n queryParty: string,\n): ActiveContractRef['contractStateFilter'] => {\n if (!contractStateFilter) return contractStateFilter;\n return Object.fromEntries(\n Object.entries(contractStateFilter).map(([key, value]) => [\n key,\n isCantonDeferredSender(value) ? queryParty : value,\n ]),\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/**\n * Query ACS for `party` + template, apply state filter, then\n * authenticate-then-count: keep only contracts where every resolved\n * `expectedSignatories` entry is a ledger signatory.\n *\n * `partyToFilter` is visibility (may be an observer). `expectedSignatories` is\n * authority (defaults to the query party when omitted, except Amulet holdings).\n * Optional `contractStateFilter` disambiguates / binds payload roles (supports\n * dotted paths; {@link CANTON_DEFERRED_SENDER} values resolve).\n */\nexport const queryLiveContractsForRef = async (\n client: ICantonClient,\n party: string,\n ref: ActiveContractRef,\n): Promise<JsActiveContract[]> => {\n let interfaceId = ref.interfaceId;\n if (interfaceId?.startsWith('#')) {\n const [packageName, moduleName, entityName, ...extra] = interfaceId.slice(1).split(':');\n if (!packageName || !moduleName || !entityName || extra.length) {\n throw new Error(`Invalid package-name-qualified interface ID: ${interfaceId}`);\n }\n const packageId = await client.getPackageId(packageName, [party]);\n interfaceId = `${packageId}:${moduleName}:${entityName}`;\n }\n const offset = await client.getLedgerEndOffset();\n const expectedSignatories = resolveExpectedSignatories(\n ref.expectedSignatories,\n party,\n ref.templateId,\n );\n const contractStateFilter = resolveContractStateFilter(ref.contractStateFilter, party);\n const contracts = interfaceId\n ? await client.queryActiveContractsByInterface([party], offset, [interfaceId], {\n includeCreatedEventBlob: true,\n })\n : await client.queryActiveContracts(party, offset, {\n templateIds: [ref.templateId],\n includeCreatedEventBlob: true,\n });\n return contracts.filter((contract) => {\n if (\n expectedSignatories !== undefined &&\n !areExpectedSignatories(contract.createdEvent, expectedSignatories)\n )\n return false;\n if (!interfaceId) return matchesContractStateFilter(contract, contractStateFilter);\n const views = (contract.createdEvent.interfaceViews ?? []).filter(\n (view) => view.interfaceId === interfaceId,\n );\n if (views.length !== 1 || views[0]!.viewValue == null || views[0]!.viewStatus?.code !== 0) {\n return false;\n }\n return matchesContractStateFilter(\n {\n ...contract,\n createdEvent: { ...contract.createdEvent, createArgument: views[0]!.viewValue },\n },\n contractStateFilter,\n );\n });\n};\n\n/**\n * Returns the contractIds of all live contracts matching ref.\n * Resolves {@link CANTON_DEFERRED_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 =\n ref.partyToFilter === CANTON_DEFERRED_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 Error(\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 === CANTON_DEFERRED_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 Error(\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 disclosures = toDisclose.map((contract) => {\n const contractId = contract.createdEvent.contractId;\n const createdEventBlob = contract.createdEvent.createdEventBlob;\n if (!createdEventBlob) {\n throw new Error(\n `Could not disclose ${contractId} (template ${ref.templateId}) — ACS result omitted createdEventBlob`,\n );\n }\n return {\n contractId,\n templateId: contract.createdEvent.templateId,\n createdEventBlob,\n synchronizerId: contract.synchronizerId,\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 Error(\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 {\n resolveActiveContractId,\n resolveActiveContractIds,\n resolveActiveContracts: queryAsParty,\n discloseActiveContracts: discloseContracts,\n requireSenderParty: requireSender,\n };\n};\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { substituteCidsToRefs } from './
|
|
2
|
-
import { cantonActiveContractIdRef } from './
|
|
1
|
+
import { substituteCidsToRefs } from './BSVJEBKM.js';
|
|
2
|
+
import { cantonActiveContractIdRef } from './PWKI6T6A.js';
|
|
3
3
|
import { __name } from './VUOMXK5T.js';
|
|
4
|
-
import { NonRetryableError } from '@layerzerolabs/common-error-utils';
|
|
5
4
|
import { isPromise } from '@layerzerolabs/typescript-utils';
|
|
6
5
|
|
|
7
6
|
var applyRefs = /* @__PURE__ */ __name((result) => {
|
|
@@ -10,7 +9,7 @@ var applyRefs = /* @__PURE__ */ __name((result) => {
|
|
|
10
9
|
const contractIdToRef = new Map(refs.map((ref) => {
|
|
11
10
|
const expectedSignatories = ref.expectedSignatories;
|
|
12
11
|
if (!expectedSignatories[0]) {
|
|
13
|
-
throw new
|
|
12
|
+
throw new Error(`ContractDataIdentifier for ${ref.cid} missing expectedSignatories`);
|
|
14
13
|
}
|
|
15
14
|
return [
|
|
16
15
|
ref.cid,
|
|
@@ -45,5 +44,5 @@ var wrapLzSdk = /* @__PURE__ */ __name((sdk) => new Proxy(sdk, {
|
|
|
45
44
|
}), "wrapLzSdk");
|
|
46
45
|
|
|
47
46
|
export { wrapLzSdk };
|
|
48
|
-
//# sourceMappingURL=
|
|
49
|
-
//# sourceMappingURL=
|
|
47
|
+
//# sourceMappingURL=I5ERUZDD.js.map
|
|
48
|
+
//# sourceMappingURL=I5ERUZDD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/refresh/wrapped-lz-sdk.ts"],"names":["applyRefs","result","refs","referencedContracts","length","contractIdToRef","Map","map","ref","expectedSignatories","Error","cid","cantonActiveContractIdRef","partyToFilter","party","templateId","contractStateFilter","_dropped","rest","disclosed","disclosedContracts","Array","isArray","filter","disclosure","has","contractId","substituteCidsToRefs","wrapLzSdk","sdk","Proxy","get","target","prop","receiver","member","Reflect","args","apply","isPromise","then"],"mappings":";;;;;AAkBA,IAAMA,SAAAA,2BAAgBC,MAAAA,KAAAA;AAClB,EAAA,MAAMC,OAAQD,MAAAA,EACRE,mBAAAA;AACN,EAAA,IAAI,CAACD,IAAAA,EAAME,MAAAA,EAAQ,OAAOH,MAAAA;AAE1B,EAAA,MAAMI,kBAAkB,IAAIC,GAAAA,CACxBJ,IAAAA,CAAKK,GAAAA,CAAI,CAACC,GAAAA,KAAAA;AACN,IAAA,MAAMC,sBAAsBD,GAAAA,CAAIC,mBAAAA;AAChC,IAAA,IAAI,CAACA,mBAAAA,CAAoB,CAAA,CAAA,EAAI;AACzB,MAAA,MAAM,IAAIC,KAAAA,CACN,CAAA,2BAAA,EAA8BF,GAAAA,CAAIG,GAAG,CAAA,4BAAA,CAA8B,CAAA;AAE3E,IAAA;AACA,IAAA,OAAO;MACHH,GAAAA,CAAIG,GAAAA;MACJC,yBAAAA,CAA0B;QACtBC,aAAAA,EAAe;AAAEC,UAAAA,KAAAA,EAAON,GAAAA,CAAIM;AAAM,SAAA;AAClCL,QAAAA,mBAAAA;AACAM,QAAAA,UAAAA,EAAYP,GAAAA,CAAIO,UAAAA;AAChB,QAAA,GAAIP,IAAIQ,mBAAAA,GACF;AAAEA,UAAAA,mBAAAA,EAAqBR,GAAAA,CAAIQ;AAAoB,SAAA,GAC/C;OACV;;AAER,EAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAM,EAAEb,mBAAAA,EAAqBc,QAAAA,EAAU,GAAGC,MAAAA,GAASjB,MAAAA;AACnD,EAAA,MAAMkB,YAAaD,IAAAA,CACdE,kBAAAA;AACL,EAAA,IAAIC,KAAAA,CAAMC,OAAAA,CAAQH,SAAAA,CAAAA,EAAY;AACzBD,IAAAA,IAAAA,CAAyCE,kBAAAA,GAAqBD,SAAAA,CAAUI,MAAAA,CACrE,CAACC,UAAAA,KAAe,CAACnB,eAAAA,CAAgBoB,GAAAA,CAAID,UAAAA,CAAWE,UAAU,CAAA,CAAA;AAElE,EAAA;AACA,EAAA,OAAOC,oBAAAA,CAAqBT,MAAMb,eAAAA,CAAAA;AACtC,CAAA,EApCkB,WAAA,CAAA;AAuCX,IAAMuB,SAAAA,mBAAY,MAAA,CAAA,CAAmBC,GAAAA,KACxC,IAAIC,MAAMD,GAAAA,EAAK;EACXE,GAAAA,CAAIC,MAAAA,EAAQC,MAAMC,QAAAA,EAAQ;AACtB,IAAA,MAAMC,MAAAA,GAASC,OAAAA,CAAQL,GAAAA,CAAIC,MAAAA,EAAQC,MAAMC,QAAAA,CAAAA;AACzC,IAAA,IAAI,OAAOC,MAAAA,KAAW,UAAA,EAAY,OAAOA,MAAAA;AACzC,IAAA,OAAO,IAAIE,IAAAA,KAAAA;AACP,MAAA,MAAMpC,MAAAA,GAAUkC,MAAAA,CAAqBG,KAAAA,CAAMN,MAAAA,EAAQK,IAAAA,CAAAA;AACnD,MAAA,OAAOE,UAAUtC,MAAAA,CAAAA,GAAUA,MAAAA,CAAOuC,IAAAA,CAAKxC,SAAAA,CAAAA,GAAaC,MAAAA;AACxD,IAAA,CAAA;AACJ,EAAA;AACJ,CAAA,CAAA,EAVqB,WAAA","file":"I5ERUZDD.js","sourcesContent":["import { isPromise } from '@layerzerolabs/typescript-utils';\n\nimport { cantonActiveContractIdRef, type CantonDeferredRef } from '../deferredValue';\nimport type { ContractDataIdentifier } from '../transaction';\nimport { substituteCidsToRefs } from './reverse-substitute';\n\ntype AnyMethod = (...args: unknown[]) => unknown;\n\ntype WithRefsInjected<R> = R extends { referencedContracts?: unknown }\n ? Omit<R, 'referencedContracts'>\n : R;\n\ntype LzWrapped<T> = {\n [K in keyof T]: T[K] extends (...a: infer A) => Promise<infer R>\n ? (...a: A) => Promise<WithRefsInjected<R>>\n : T[K];\n};\n\nconst applyRefs = <R>(result: R): WithRefsInjected<R> => {\n const refs = (result as { referencedContracts?: Array<ContractDataIdentifier> })\n ?.referencedContracts;\n if (!refs?.length) return result as WithRefsInjected<R>;\n\n const contractIdToRef = new Map<string, CantonDeferredRef>(\n refs.map((ref) => {\n const expectedSignatories = ref.expectedSignatories;\n if (!expectedSignatories[0]) {\n throw new Error(\n `ContractDataIdentifier for ${ref.cid} missing expectedSignatories`,\n );\n }\n return [\n ref.cid,\n cantonActiveContractIdRef({\n partyToFilter: { party: ref.party },\n expectedSignatories,\n templateId: ref.templateId,\n ...(ref.contractStateFilter\n ? { contractStateFilter: ref.contractStateFilter }\n : {}),\n }),\n ];\n }),\n );\n\n const { referencedContracts: _dropped, ...rest } = result as Record<string, unknown>;\n const disclosed = (rest as { disclosedContracts?: Array<{ contractId: string }> })\n .disclosedContracts;\n if (Array.isArray(disclosed)) {\n (rest as { disclosedContracts: unknown }).disclosedContracts = disclosed.filter(\n (disclosure) => !contractIdToRef.has(disclosure.contractId),\n );\n }\n return substituteCidsToRefs(rest, contractIdToRef) as WithRefsInjected<R>;\n};\n\n/** Rewrites the cids a contract SDK reports in `referencedContracts` to sign-time refs. */\nexport const wrapLzSdk = <T extends object>(sdk: T): LzWrapped<T> =>\n new Proxy(sdk, {\n get(target, prop, receiver) {\n const member = Reflect.get(target, prop, receiver);\n if (typeof member !== 'function') return member;\n return (...args: unknown[]): unknown => {\n const result = (member as AnyMethod).apply(target, args);\n return isPromise(result) ? result.then(applyRefs) : result;\n };\n },\n }) as LzWrapped<T>;\n"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { __name } from './VUOMXK5T.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { NonRetryableError } from '@layerzerolabs/common-error-utils';
|
|
4
3
|
|
|
5
4
|
var CANTON_DEFERRED_SENDER = "sender";
|
|
6
5
|
var cantonDeferredSenderSchema = z.literal(CANTON_DEFERRED_SENDER);
|
|
@@ -65,7 +64,7 @@ var parseCantonDeferredValueOrThrow = /* @__PURE__ */ __name((value) => {
|
|
|
65
64
|
const ref = parseCantonDeferredValue(value);
|
|
66
65
|
if (ref) return ref;
|
|
67
66
|
if (isCantonDeferredSentinel(value)) {
|
|
68
|
-
throw new
|
|
67
|
+
throw new Error(`Invalid Canton deferred ref: ${value}`);
|
|
69
68
|
}
|
|
70
69
|
return void 0;
|
|
71
70
|
}, "parseCantonDeferredValueOrThrow");
|
|
@@ -89,5 +88,5 @@ var cantonAmuletContextRef = /* @__PURE__ */ __name(() => encodeCantonDeferredVa
|
|
|
89
88
|
var isCantonPlaceholder = /* @__PURE__ */ __name((value) => parseCantonDeferredValue(value) !== void 0, "isCantonPlaceholder");
|
|
90
89
|
|
|
91
90
|
export { CANTON_DEFERRED_SENDER, CANTON_DEFERRED_VALUE_PREFIX, CANTON_DEFERRED_VALUE_SUFFIX, cantonActiveContractIdRef, cantonActiveContractIdsRef, cantonAmuletContextRef, cantonAmuletRulesCidRef, cantonDeferredSenderSchema, cantonDeferredValueSchema, cantonExpectedSignatoriesSchema, cantonRefreshPartyFilterSchema, cantonSenderPartyRef, encodeCantonDeferredValue, isCantonDeferredSender, isCantonDeferredSentinel, isCantonPlaceholder, parseCantonDeferredValue, parseCantonDeferredValueOrThrow };
|
|
92
|
-
//# sourceMappingURL=
|
|
93
|
-
//# sourceMappingURL=
|
|
91
|
+
//# sourceMappingURL=PWKI6T6A.js.map
|
|
92
|
+
//# sourceMappingURL=PWKI6T6A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/deferredValue.ts"],"names":["CANTON_DEFERRED_SENDER","cantonDeferredSenderSchema","z","literal","isCantonDeferredSender","value","cantonRefreshPartyFilterSchema","union","object","party","string","cantonExpectedSignatoriesSchema","array","min","nonempty","cantonActiveContractRefFields","partyToFilter","expectedSignatories","optional","templateId","contractStateFilter","partialRecord","any","cantonDeferredValueSchema","discriminatedUnion","type","CANTON_DEFERRED_VALUE_PREFIX","CANTON_DEFERRED_VALUE_SUFFIX","isCantonDeferredSentinel","startsWith","endsWith","encodeCantonDeferredValue","JSON","stringify","parseCantonDeferredValue","undefined","parsedJson","parse","slice","length","parseCantonDeferredValueOrThrow","ref","Error","cantonSenderPartyRef","cantonActiveContractIdRef","cantonActiveContractIdsRef","cantonAmuletRulesCidRef","cantonAmuletContextRef","isCantonPlaceholder"],"mappings":"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","file":"PWKI6T6A.js","sourcesContent":["import { z } from 'zod';\n\n/** Filter / authority token resolved to the ACS query (funding) party at refresh. */\nexport const CANTON_DEFERRED_SENDER = 'sender' as const;\nexport type CantonDeferredSender = typeof CANTON_DEFERRED_SENDER;\n\nexport const cantonDeferredSenderSchema = z.literal(CANTON_DEFERRED_SENDER);\n\nexport const isCantonDeferredSender = (value: unknown): value is CantonDeferredSender =>\n value === CANTON_DEFERRED_SENDER;\n\nexport const cantonRefreshPartyFilterSchema = z.union([\n cantonDeferredSenderSchema,\n z.object({ party: z.string() }),\n]);\n\n/** Non-empty list of parties that must all appear in created-event signatories. */\nexport const cantonExpectedSignatoriesSchema = z\n .array(z.union([cantonDeferredSenderSchema, z.string().min(1)]))\n .nonempty();\n\nconst cantonActiveContractRefFields = {\n partyToFilter: cantonRefreshPartyFilterSchema,\n /**\n * Authority parties that must all be ledger signatories (authenticate-then-count).\n * Use {@link CANTON_DEFERRED_SENDER} for the resolved funding/query party.\n * Omitted on pre-existing persisted refs; refresh then defaults to the query\n * party, except CIP-56 Amulet holdings (owner is not a signatory).\n */\n expectedSignatories: cantonExpectedSignatoriesSchema.optional(),\n templateId: z.string(),\n contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),\n};\n\nexport const cantonDeferredValueSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('senderParty') }),\n z.object({\n type: z.literal('activeContractId'),\n ...cantonActiveContractRefFields,\n }),\n z.object({\n type: z.literal('activeContractIds'),\n ...cantonActiveContractRefFields,\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 CantonExpectedSignatories = z.infer<typeof cantonExpectedSignatoriesSchema>;\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\n/**\n * Branded encoded form of a {@link CantonDeferredValue}: a sign-time reference\n * string that a resolver turns into a live contract id / party. Branding keeps it\n * distinct from a plain `string` so the ref-substitution stays type-checked.\n */\nexport type CantonDeferredRef = string & { readonly __cantonDeferredRef: unique symbol };\n\nexport const CANTON_DEFERRED_VALUE_PREFIX = '<<CANTON_DEFERRED:';\nexport const CANTON_DEFERRED_VALUE_SUFFIX = '>>';\n\n/** True when `value` has deferred-ref framing, whether or not the payload parses. */\nexport const isCantonDeferredSentinel = (value: unknown): value is string =>\n typeof value === 'string' &&\n value.startsWith(CANTON_DEFERRED_VALUE_PREFIX) &&\n value.endsWith(CANTON_DEFERRED_VALUE_SUFFIX);\n\nexport const encodeCantonDeferredValue = (value: CantonDeferredValue): CantonDeferredRef =>\n `${CANTON_DEFERRED_VALUE_PREFIX}${JSON.stringify(value)}${CANTON_DEFERRED_VALUE_SUFFIX}` as CantonDeferredRef;\n\nexport const parseCantonDeferredValue = (value: unknown): CantonDeferredValue | undefined => {\n if (!isCantonDeferredSentinel(value)) {\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\n/**\n * Parse a deferred ref. Non-sentinels return `undefined`. A framed sentinel\n * that fails schema validation throws — callers must not treat corrupt refs\n * as plain strings.\n */\nexport const parseCantonDeferredValueOrThrow = (\n value: unknown,\n): CantonDeferredValue | undefined => {\n const ref = parseCantonDeferredValue(value);\n if (ref) return ref;\n if (isCantonDeferredSentinel(value)) {\n throw new Error(`Invalid Canton deferred ref: ${value}`);\n }\n return undefined;\n};\n\nexport const cantonSenderPartyRef = (): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'senderParty' });\n\nexport const cantonActiveContractIdRef = (value: CantonActiveContractIdRef): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'activeContractId', ...value });\n\nexport const cantonActiveContractIdsRef = (value: CantonActiveContractIdsRef): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'activeContractIds', ...value });\n\nexport const cantonAmuletRulesCidRef = (): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'amuletRulesCid' });\n\nexport const cantonAmuletContextRef = (): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'amuletContext' });\n\n/** Returns true if `value` is a valid Canton deferred-value sentinel. */\nexport const isCantonPlaceholder = (value: string): boolean =>\n parseCantonDeferredValue(value) !== undefined;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CantonProtocolError } from './3K5JL2TP.js';
|
|
2
2
|
import { __name } from './VUOMXK5T.js';
|
|
3
|
-
import { NonRetryableError } from '@layerzerolabs/common-error-utils';
|
|
4
3
|
|
|
4
|
+
// src/client/amulet.ts
|
|
5
5
|
var AMULET_INSTRUMENT_ID = "Amulet";
|
|
6
6
|
var CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS = 60 * 60 * 1e3;
|
|
7
7
|
var fetchAmuletContext = /* @__PURE__ */ __name(async (walletUrl, token, instrumentId) => {
|
|
@@ -81,7 +81,7 @@ var fetchAcceptContext = /* @__PURE__ */ __name(async (args) => {
|
|
|
81
81
|
var injectExternalPartyAmuletRules = /* @__PURE__ */ __name((amuletContext, disclosedContracts) => {
|
|
82
82
|
const externalRulesContract = disclosedContracts.find((contract) => contract.templateId?.includes("ExternalPartyAmuletRules"));
|
|
83
83
|
if (!externalRulesContract) {
|
|
84
|
-
throw new
|
|
84
|
+
throw new Error("ExternalPartyAmuletRules not found in disclosed contracts from amulet context");
|
|
85
85
|
}
|
|
86
86
|
return {
|
|
87
87
|
amuletContext: {
|
|
@@ -141,5 +141,5 @@ var toDisclosedContract = /* @__PURE__ */ __name((entry) => ({
|
|
|
141
141
|
}), "toDisclosedContract");
|
|
142
142
|
|
|
143
143
|
export { AMULET_INSTRUMENT_ID, fetchAcceptContext, fetchAmuletContext, fetchAmuletRules, fetchDsoParty, fetchOpenAndIssuingMiningRounds, injectExternalPartyAmuletRules, toDisclosedContract };
|
|
144
|
-
//# sourceMappingURL=
|
|
145
|
-
//# sourceMappingURL=
|
|
144
|
+
//# sourceMappingURL=QEE5QCHB.js.map
|
|
145
|
+
//# sourceMappingURL=QEE5QCHB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client/amulet.ts"],"names":["AMULET_INSTRUMENT_ID","CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS","fetchAmuletContext","walletUrl","token","instrumentId","now","Date","later","getTime","response","fetch","URL","method","headers","Authorization","body","JSON","stringify","choiceArguments","expectedAdmin","admin","transfer","sender","receiver","amount","requestedAt","toISOString","executeBefore","inputHoldingCids","meta","values","extraArgs","context","ok","text","CantonProtocolError","status","data","json","disclosedContracts","choiceContextData","amuletContext","choiceContext","fetchAcceptContext","args","encodeURIComponent","contractId","excludeDebugFields","injectExternalPartyAmuletRules","externalRulesContract","find","contract","templateId","includes","Error","tag","value","externalPartyAmuletRulesCid","fetchDsoParty","dso_party_id","scanProxyGet","path","fetchAmuletRules","amulet_rules","fetchOpenAndIssuingMiningRounds","open_mining_rounds","issuing_mining_rounds","toDisclosedContract","entry","contract_id","template_id","createdEventBlob","created_event_blob","synchronizerId","domain_id"],"mappings":"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","file":"QEE5QCHB.js","sourcesContent":["import type { TokenProvider } from '../auth/token-provider';\nimport { CantonProtocolError } from '../errors';\nimport type { DisclosedContract } from '../open-api/models';\n\n/** Validator-wallet access a {@link CantonClient} needs to serve amulet endpoints. */\nexport type CantonClientWalletConfig = {\n /** Validator wallet URL for scan-proxy CIP-56 endpoints. */\n walletUrl: string;\n /** Bearer-token source for wallet requests. */\n tokenProvider: TokenProvider;\n};\n\n/** The single Amulet instrument id used across Canton Network fee flows. */\nexport const AMULET_INSTRUMENT_ID = 'Amulet';\n\n/** Instrument identifier for an amulet context probe. */\nexport type InstrumentId = { admin: string; id: string };\n\n/** DAML ChoiceContext — a bag of named AnyValues passed to fee-bearing choices. */\nexport type ChoiceContext = { values: Record<string, unknown> };\n\nexport type AmuletContextResult = {\n amuletContext: ChoiceContext;\n disclosedContracts: DisclosedContract[];\n externalPartyAmuletRulesCid: string;\n};\n\n// The probe (amount 0, sender = receiver = admin) never executes — it only fetches context; 1-hour window is ample.\nconst CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS = 60 * 60 * 1000;\n\ntype AmuletContextResponse = {\n choiceContext: {\n disclosedContracts: DisclosedContract[];\n choiceContextData: ChoiceContext;\n };\n};\n\n/** Amulet ChoiceContext from the validator scan-proxy — same call for all fee-bearing choices. */\nexport const fetchAmuletContext = async (\n walletUrl: string,\n token: string,\n instrumentId: InstrumentId,\n): Promise<{ amuletContext: ChoiceContext; disclosedContracts: DisclosedContract[] }> => {\n const now = new Date();\n const later = new Date(now.getTime() + CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS);\n\n const response = await fetch(\n new URL(\n '/api/validator/v0/scan-proxy/registry/transfer-instruction/v1/transfer-factory',\n walletUrl,\n ),\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n choiceArguments: {\n expectedAdmin: instrumentId.admin,\n transfer: {\n sender: instrumentId.admin,\n receiver: instrumentId.admin,\n amount: '0',\n instrumentId,\n requestedAt: now.toISOString(),\n executeBefore: later.toISOString(),\n inputHoldingCids: [],\n meta: { values: {} },\n },\n extraArgs: { context: { values: {} }, meta: { values: {} } },\n },\n }),\n },\n );\n\n if (!response.ok) {\n const text = await response.text();\n throw new CantonProtocolError(`Failed to get amulet context: ${response.status} ${text}`);\n }\n\n const data = (await response.json()) as AmuletContextResponse;\n const { disclosedContracts, choiceContextData: amuletContext } = data.choiceContext;\n\n return { amuletContext, disclosedContracts };\n};\n\n// Validators disagree on where they nest the accept context: some return it under\n// `choiceContext.choiceContextData`, others at the top level, with or without a `values` wrapper.\ntype AcceptContextResponse = {\n choiceContextData?: { values?: Record<string, unknown> } | Record<string, unknown>;\n choiceContext?: {\n choiceContextData?: { values?: Record<string, unknown> };\n disclosedContracts?: DisclosedContract[];\n };\n disclosedContracts?: DisclosedContract[];\n};\n\n/** ChoiceContext for `TransferInstruction_Accept` on a single pending instruction. */\nexport const fetchAcceptContext = async (args: {\n walletUrl: string;\n token: string;\n contractId: string;\n}): Promise<{ choiceContext: ChoiceContext; disclosedContracts: DisclosedContract[] }> => {\n const response = await fetch(\n new URL(\n `/api/validator/v0/scan-proxy/registry/transfer-instruction/v1/${encodeURIComponent(\n args.contractId,\n )}/choice-contexts/accept`,\n args.walletUrl,\n ),\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${args.token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ excludeDebugFields: true }),\n },\n );\n\n if (!response.ok) {\n const text = await response.text();\n throw new CantonProtocolError(`Failed to get accept context: ${response.status} ${text}`);\n }\n\n const data = (await response.json()) as AcceptContextResponse;\n const choiceContextData = data.choiceContext?.choiceContextData ??\n data.choiceContextData ?? { values: {} };\n const disclosedContracts =\n data.choiceContext?.disclosedContracts ?? data.disclosedContracts ?? [];\n const values =\n 'values' in choiceContextData &&\n choiceContextData.values &&\n typeof choiceContextData.values === 'object'\n ? (choiceContextData.values as Record<string, unknown>)\n : choiceContextData;\n\n return { choiceContext: { values }, disclosedContracts };\n};\n\n/** Injects ExternalPartyAmuletRules cid into the ChoiceContext — required by every flow hitting FeeUtils.validateContext. */\nexport const injectExternalPartyAmuletRules = (\n amuletContext: ChoiceContext,\n disclosedContracts: DisclosedContract[],\n): { amuletContext: ChoiceContext; externalPartyAmuletRulesCid: string } => {\n const externalRulesContract = disclosedContracts.find((contract) =>\n contract.templateId?.includes('ExternalPartyAmuletRules'),\n );\n\n if (!externalRulesContract) {\n throw new Error(\n 'ExternalPartyAmuletRules not found in disclosed contracts from amulet context',\n );\n }\n\n return {\n amuletContext: {\n values: {\n ...amuletContext.values,\n 'external-party-amulet-rules': {\n tag: 'AV_ContractId',\n value: externalRulesContract.contractId,\n },\n },\n },\n externalPartyAmuletRulesCid: externalRulesContract.contractId,\n };\n};\n\n/** Fetch the DSO party id from the validator scan-proxy API. */\nexport const fetchDsoParty = async (walletUrl: string, token: string): Promise<string> => {\n const response = await fetch(new URL('/api/validator/v0/scan-proxy/dso-party-id', walletUrl), {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!response.ok) {\n throw new CantonProtocolError(`Failed to get DSO party: ${response.status}`);\n }\n const data = (await response.json()) as { dso_party_id: string };\n return data.dso_party_id;\n};\n\n/** Scan-proxy contract envelope (`amulet-rules`, mining rounds). */\nexport type ScanContractEntry = {\n contract: {\n template_id: string;\n contract_id: string;\n payload?: unknown;\n created_event_blob: string;\n created_at?: string;\n };\n domain_id: string;\n};\n\nexport type OpenAndIssuingMiningRounds = {\n open_mining_rounds: Record<string, ScanContractEntry>;\n issuing_mining_rounds: Record<string, ScanContractEntry>;\n};\n\nconst scanProxyGet = async <T>(walletUrl: string, token: string, path: string): Promise<T> => {\n const response = await fetch(new URL(path, walletUrl), {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n });\n if (!response.ok) {\n const text = await response.text();\n throw new CantonProtocolError(`Scan-proxy ${path} failed: ${response.status} ${text}`);\n }\n return (await response.json()) as T;\n};\n\nexport const fetchAmuletRules = async (\n walletUrl: string,\n token: string,\n): Promise<ScanContractEntry> => {\n const data = await scanProxyGet<{ amulet_rules: ScanContractEntry }>(\n walletUrl,\n token,\n '/api/validator/v0/scan-proxy/amulet-rules',\n );\n return data.amulet_rules;\n};\n\nexport const fetchOpenAndIssuingMiningRounds = async (\n walletUrl: string,\n token: string,\n): Promise<OpenAndIssuingMiningRounds> => {\n const data = await scanProxyGet<OpenAndIssuingMiningRounds>(\n walletUrl,\n token,\n '/api/validator/v0/scan-proxy/open-and-issuing-mining-rounds',\n );\n return {\n open_mining_rounds: data.open_mining_rounds ?? {},\n issuing_mining_rounds: data.issuing_mining_rounds ?? {},\n };\n};\n\nexport const toDisclosedContract = (entry: ScanContractEntry): DisclosedContract => ({\n contractId: entry.contract.contract_id,\n templateId: entry.contract.template_id,\n createdEventBlob: entry.contract.created_event_blob,\n synchronizerId: entry.domain_id,\n});\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { templateIdMatches } from './
|
|
2
|
-
import { cantonTransactionWithResultSchema } from './
|
|
1
|
+
import { templateIdMatches } from './BQWTGHOG.js';
|
|
2
|
+
import { cantonTransactionWithResultSchema } from './FE2U6OQD.js';
|
|
3
3
|
import { __name } from './VUOMXK5T.js';
|
|
4
4
|
import { NonEmittableError } from '@layerzerolabs/common-error-utils';
|
|
5
5
|
|
|
@@ -49,5 +49,5 @@ var getExercisedEvent = /* @__PURE__ */ __name((transaction, contractId) => {
|
|
|
49
49
|
}, "getExercisedEvent");
|
|
50
50
|
|
|
51
51
|
export { cantonDeploymentSucceeded, fetchCreatedEvents, findMatchingCreatedEvent, findMatchingCreatedEventFromTx, getExercisedEvent, waitForArchival };
|
|
52
|
-
//# sourceMappingURL=
|
|
53
|
-
//# sourceMappingURL=
|
|
52
|
+
//# sourceMappingURL=RKO3QWCF.js.map
|
|
53
|
+
//# sourceMappingURL=RKO3QWCF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/events.ts"],"names":["findMatchingCreatedEvent","createdEvents","expectedTemplateId","expectedSignatories","expectedSet","Set","find","event","templateIdMatches","templateId","signatories","length","every","s","has","fetchCreatedEvents","client","updateId","parties","cantonTx","fetchTransactionByUpdateId","events","filter","map","CreatedEvent","findMatchingCreatedEventFromTx","tx","parsed","cantonTransactionWithResultSchema","safeParse","success","data","result","type","populatedTransaction","actAs","unresolvedCommands","minedTxHash","createCommand","cmd","cantonDeploymentSucceeded","txWithResult","waitForArchival","contractId","archived","fetchEventsByContractId","fetchTransactionByOffset","offset","NonEmittableError","getExercisedEvent","transaction","ExercisedEvent","exercised","undefined"],"mappings":"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","file":"
|
|
1
|
+
{"version":3,"sources":["../src/events.ts"],"names":["findMatchingCreatedEvent","createdEvents","expectedTemplateId","expectedSignatories","expectedSet","Set","find","event","templateIdMatches","templateId","signatories","length","every","s","has","fetchCreatedEvents","client","updateId","parties","cantonTx","fetchTransactionByUpdateId","events","filter","map","CreatedEvent","findMatchingCreatedEventFromTx","tx","parsed","cantonTransactionWithResultSchema","safeParse","success","data","result","type","populatedTransaction","actAs","unresolvedCommands","minedTxHash","createCommand","cmd","cantonDeploymentSucceeded","txWithResult","waitForArchival","contractId","archived","fetchEventsByContractId","fetchTransactionByOffset","offset","NonEmittableError","getExercisedEvent","transaction","ExercisedEvent","exercised","undefined"],"mappings":"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","file":"RKO3QWCF.js","sourcesContent":["import { NonEmittableError } from '@layerzerolabs/common-error-utils';\n\nimport type { CantonTransaction, ICantonClient } from './client';\nimport type { CreatedEvent, ExercisedEvent } from './open-api/models';\nimport { templateIdMatches } from './refresh/deployment-address';\nimport { cantonTransactionWithResultSchema } from './transaction';\n\n/**\n * Finds a CreatedEvent matching the expected templateId whose signatories\n * are a subset of the provided actAs parties (ledger signatories ⊆ expected).\n * Opposite of `areExpectedSignatories` on the refresh path.\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 (!templateIdMatches(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 * 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 * 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 = cantonTransactionWithResultSchema.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.find((cmd) => 'createCommand' in cmd);\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 * Waits for a contract to be archived and returns the transaction that archived it.\n * Throws NonEmittableError if the contract is not yet archived.\n */\nexport const waitForArchival = async (\n client: ICantonClient,\n contractId: string,\n parties: string[],\n): Promise<CantonTransaction> => {\n const { archived } = await client.fetchEventsByContractId(contractId, parties);\n if (archived) {\n return client.fetchTransactionByOffset(archived.offset, parties);\n }\n throw new NonEmittableError(`Contract ${contractId} is not archived yet`);\n};\n\n/** Returns the first exercised event on `contractId` in a transaction tree, if any. */\nexport const getExercisedEvent = (\n transaction: CantonTransaction,\n contractId: string,\n): ExercisedEvent | undefined => {\n for (const event of transaction.events ?? []) {\n if (!('ExercisedEvent' in event)) continue;\n const { ExercisedEvent: exercised } = event;\n if (exercised.contractId === contractId) {\n return exercised;\n }\n }\n return undefined;\n};\n"]}
|