@layerzerolabs/common-canton 1.2.81 → 1.2.82
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/{ABHGT5DF.js → PDVMANRS.js} +7 -7
- package/dist/{ABHGT5DF.js.map → PDVMANRS.js.map} +1 -1
- package/dist/{TB5OSYHO.js → W5CHA5AA.js} +3 -3
- package/dist/{TB5OSYHO.js.map → W5CHA5AA.js.map} +1 -1
- package/dist/{3HAVU6NI.js → XENB5GVW.js} +3 -3
- package/dist/{3HAVU6NI.js.map → XENB5GVW.js.map} +1 -1
- package/dist/{RLUQWVZ6.js → ZZUOA324.js} +3 -3
- package/dist/{RLUQWVZ6.js.map → ZZUOA324.js.map} +1 -1
- package/dist/client/grpc.js +2 -2
- package/dist/client/index.js +2 -2
- package/dist/index.js +13 -13
- package/dist/provider.js +3 -3
- package/dist/refresh/index.js +9 -9
- package/dist/refresh/resolve-plan.js +6 -6
- package/dist/refresh/resolve.js +7 -7
- package/package.json +10 -10
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { selectContractAmounts, parseDamlDecimal } from './Q3BYU6GJ.js';
|
|
3
|
-
import { resolveCantonOneSigConfigContext } from './IUQEDBC6.js';
|
|
1
|
+
import { CantonSdk } from './5W44RCVL.js';
|
|
4
2
|
import { resolveCantonOneSigDiscoveryContext } from './5CADV7BB.js';
|
|
5
3
|
import { resolveCantonOneSigRequestContext } from './XCOORR26.js';
|
|
6
4
|
import { resolveCantonOneSigScopeContext } from './NGED2YCU.js';
|
|
7
5
|
import { resolveCantonOneSigTransferInstructionContext } from './SA63DYLV.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { resolveCantonOneSigTransferBatch } from './BZXMNRDO.js';
|
|
7
|
+
import { selectContractAmounts, parseDamlDecimal } from './Q3BYU6GJ.js';
|
|
10
8
|
import { createContractAddressResolver } from './RVJRKYSC.js';
|
|
9
|
+
import { resolveCantonFinalizeCallback } from './MV4DFHZP.js';
|
|
10
|
+
import { resolveCantonOneSigConfigContext } from './IUQEDBC6.js';
|
|
11
11
|
import { cantonRefreshPlanSchema, cantonFinalizeCallbackRefreshSchema, cantonOneSigTransferBatchRefreshSchema, cantonOneSigTransferInstructionContextRefreshSchema, cantonOneSigConfigContextRefreshSchema, cantonOneSigScopeContextRefreshSchema, cantonOneSigDiscoveryContextRefreshSchema, cantonOneSigRequestContextRefreshSchema, cantonTransferInstructionAcceptContextRefreshSchema } from './MO6W6SKU.js';
|
|
12
12
|
import { getCreateArgumentField } from './SWY4QT4I.js';
|
|
13
13
|
import { isCantonDeferredSentinel, cantonSenderPartyRef, isCantonDeferredSender } from './PWKI6T6A.js';
|
|
@@ -553,5 +553,5 @@ var resolveCantonRefreshPlan = /* @__PURE__ */ __name(async (args) => {
|
|
|
553
553
|
}, "resolveCantonRefreshPlan");
|
|
554
554
|
|
|
555
555
|
export { resolveCantonActiveContracts, resolveCantonRefreshPlan, selectContractsByGte };
|
|
556
|
-
//# sourceMappingURL=
|
|
557
|
-
//# sourceMappingURL=
|
|
556
|
+
//# sourceMappingURL=PDVMANRS.js.map
|
|
557
|
+
//# sourceMappingURL=PDVMANRS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/refresh/resolve-plan.ts"],"names":["CANTON_TIME_PATTERN","resolveParty","partyRef","senderParty","label","isCantonDeferredSender","party","Error","getContractNumericField","contract","field","raw","getCreateArgumentField","createdEvent","createArgument","value","initialAmount","parseDamlDecimal","contractId","selectContractsByGte","contracts","requestedValue","selectContractAmounts","makeActiveContractRef","selector","type","partyToFilter","queryAs","expectedSignatories","templateId","interfaceId","contractStateFilter","stateFilter","resolveSelectorContracts","resolver","resolveActiveContracts","source","length","filter","resolveContractValue","selectActiveContracts","selection","kind","resolveCantonActiveContracts","args","queryParty","createContractAddressResolver","client","signingParties","appendDisclosures","undefined","selected","contractIds","map","isRecord","Array","isArray","isCantonTime","test","Number","isFinite","Date","parse","isActiveContractRefresh","refresh","isActiveContractValueRefresh","isAmuletContextRefresh","isTimestampRefresh","replaceAtPath","root","path","current","position","segment","entries","isLast","index","damlMapKey","matches","entry","readAtPath","readTarget","commands","target","command","commandIndex","exerciseCommand","choice","choiceArgument","createCommand","template","createArguments","applyPatch","applyTarget","argument","arguments","containsDeferredSentinel","isCantonDeferredSentinel","some","item","Object","values","child","hasDisclosureSentinel","disclosures","createdEventBlob","_blob","fields","disclosuresEqual","left","right","synchronizerId","resolveCantonRefreshPlan","replacements","cantonRefreshPlanSchema","shape","replaceSentinels","refreshPlan","structuredClone","unresolvedCommands","trim","replacement","targets","cantonSenderPartyRef","unresolvedDisclosedContracts","callback","cantonFinalizeCallbackRefreshSchema","contextIndices","sort","cidIndices","callbackCidTargets","JSON","stringify","pendingCallbackCid","disclosureMap","Map","disclosure","existing","get","set","ref","discloseActiveContracts","resolved","transfer","cantonOneSigTransferBatchRefreshSchema","firstTarget","calls","transferIndices","flatMap","call","tag","indices","Set","size","includes","bundle","resolveCantonOneSigTransferBatch","CantonSdk","disclosedContracts","forEach","contexts","instruction","cantonOneSigTransferInstructionContextRefreshSchema","slice","transferInstructionCid","resolveCantonOneSigTransferInstructionContext","context","config","cantonOneSigConfigContextRefreshSchema","expected","operation","oappId","admin","id","expectedHandler","resolveCantonOneSigConfigContext","scope","cantonOneSigScopeContextRefreshSchema","contextTag","category","resolveCantonOneSigScopeContext","discovery","cantonOneSigDiscoveryContextRefreshSchema","timestamp","feeAmount","feeDsoParty","dso","resolveCantonOneSigDiscoveryContext","request","cantonOneSigRequestContextRefreshSchema","requestTags","dsoParty","String","resolveCantonOneSigRequestContext","resolveCantonFinalizeCallback","executeContext","callbackCid","acceptance","cantonTransferInstructionAcceptContextRefreshSchema","getTransferInstructionAcceptContext","choiceContext","getAmuletContextWithExternalRules","amuletContext","contractIdTargets","externalPartyAmuletRulesCid","now","offsetMs","iso","getTime","toISOString"],"mappings":"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","file":"ABHGT5DF.js","sourcesContent":["import type { ICantonClient } from '../client/interface';\nimport {\n type CantonRefreshPartyFilter,\n cantonSenderPartyRef,\n isCantonDeferredSender,\n isCantonDeferredSentinel,\n} from '../deferredValue';\nimport type { JsActiveContract } from '../open-api/models';\nimport { CantonSdk } from '../sdk/canton-sdk';\nimport type {\n CantonCommand,\n CantonDisclosedContract,\n CantonUnresolvedCommand,\n} from '../transaction';\nimport { getCreateArgumentField } from '../trusted-origin';\nimport { type ActiveContractRef, createContractAddressResolver } from './address-resolver';\nimport { resolveCantonFinalizeCallback } from './callback';\nimport { resolveCantonOneSigConfigContext } from './onesig-config';\nimport { resolveCantonOneSigDiscoveryContext } from './onesig-discovery';\nimport { resolveCantonOneSigRequestContext } from './onesig-request';\nimport { resolveCantonOneSigScopeContext } from './onesig-scope';\nimport { resolveCantonOneSigTransferBatch } from './onesig-transfer';\nimport { resolveCantonOneSigTransferInstructionContext } from './onesig-transfer-instruction';\nimport {\n type CantonActiveContractRefresh,\n type CantonActiveContractSelection,\n type CantonActiveContractValue,\n type CantonActiveContractValueRefresh,\n type CantonAmuletContextRefresh,\n type CantonArgumentRefreshTarget,\n type CantonContractSelector,\n cantonFinalizeCallbackRefreshSchema,\n cantonOneSigConfigContextRefreshSchema,\n cantonOneSigDiscoveryContextRefreshSchema,\n cantonOneSigRequestContextRefreshSchema,\n cantonOneSigScopeContextRefreshSchema,\n cantonOneSigTransferBatchRefreshSchema,\n cantonOneSigTransferInstructionContextRefreshSchema,\n type CantonRefresh,\n type CantonRefreshPath,\n type CantonRefreshPlan,\n cantonRefreshPlanSchema,\n type CantonRefreshTarget,\n type CantonTimestampRefresh,\n cantonTransferInstructionAcceptContextRefreshSchema,\n} from './plan';\nimport { parseDamlDecimal, selectContractAmounts } from './select-contracts';\n\nconst CANTON_TIME_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?Z$/;\n\nconst resolveParty = (\n partyRef: CantonRefreshPartyFilter,\n senderParty: string | undefined,\n label: string,\n): string => {\n if (!isCantonDeferredSender(partyRef)) return partyRef.party;\n if (!senderParty) {\n throw new Error(`${label} requires a resolved sender party`);\n }\n return senderParty;\n};\n\nconst getContractNumericField = (contract: JsActiveContract, field: string): bigint => {\n const raw = getCreateArgumentField(contract.createdEvent.createArgument, field);\n const value =\n raw !== null && typeof raw === 'object' && 'initialAmount' in raw\n ? (raw as { initialAmount?: unknown }).initialAmount\n : raw;\n return parseDamlDecimal(\n value,\n `Contract ${contract.createdEvent.contractId} numeric field ${field}`,\n );\n};\n\nexport const selectContractsByGte = (\n contracts: JsActiveContract[],\n field: string,\n requestedValue: string,\n): JsActiveContract[] =>\n selectContractAmounts(contracts, field, requestedValue, (contract) =>\n getContractNumericField(contract, field),\n );\n\nconst makeActiveContractRef = (selector: CantonContractSelector): ActiveContractRef => ({\n type: 'activeContractIds',\n partyToFilter: selector.queryAs,\n expectedSignatories: selector.expectedSignatories,\n templateId: selector.templateId ?? selector.interfaceId,\n interfaceId: selector.interfaceId,\n contractStateFilter: selector.stateFilter,\n});\n\nconst resolveSelectorContracts = async (\n resolver: ReturnType<typeof createContractAddressResolver>,\n selector: CantonContractSelector,\n): Promise<JsActiveContract[]> => {\n const contracts = await resolver.resolveActiveContracts(makeActiveContractRef(selector));\n if (!selector.contractId) return contracts;\n const source = await resolver.resolveActiveContracts(\n makeActiveContractRef(selector.contractId.selector),\n );\n if (source.length !== 1)\n throw new Error(\n `Contract ID source matched ${source.length} contracts, expected exactly one`,\n );\n const contractId = getCreateArgumentField(\n source[0]!.createdEvent.createArgument,\n selector.contractId.field,\n );\n if (typeof contractId !== 'string' || !contractId)\n throw new Error('Contract ID source must contain a nonempty contract ID');\n return contracts.filter((contract) => contract.createdEvent.contractId === contractId);\n};\n\nconst resolveContractValue = async (\n resolver: ReturnType<typeof createContractAddressResolver>,\n source: CantonActiveContractValue,\n): Promise<string> => {\n const contracts = await resolveSelectorContracts(resolver, source.selector);\n if (contracts.length !== 1) {\n throw new Error(\n `Active contract value matched ${contracts.length} contracts, expected exactly one`,\n );\n }\n const value = getCreateArgumentField(contracts[0]!.createdEvent.createArgument, source.field);\n if (parseDamlDecimal(value, `Contract value ${source.field}`) <= 0n) {\n throw new Error(`Contract value ${source.field} must be positive`);\n }\n return value as string;\n};\n\nconst selectActiveContracts = async (\n contracts: JsActiveContract[],\n selection: CantonActiveContractSelection,\n resolver: ReturnType<typeof createContractAddressResolver>,\n): Promise<JsActiveContract[]> => {\n switch (selection.kind) {\n case 'exactlyOne':\n if (contracts.length !== 1) {\n throw new Error(\n `Active contract selection matched ${contracts.length} contracts, expected exactly one`,\n );\n }\n return contracts;\n case 'all':\n return contracts;\n case 'gte':\n return selectContractsByGte(\n contracts,\n selection.field,\n typeof selection.value === 'string'\n ? selection.value\n : await resolveContractValue(resolver, selection.value),\n );\n }\n};\n\nexport const resolveCantonActiveContracts = async (args: {\n client: ICantonClient;\n selector: CantonContractSelector;\n selection: CantonActiveContractSelection;\n senderParty?: string;\n}): Promise<{ contractIds: string[] }> => {\n const queryParty = resolveParty(\n args.selector.queryAs,\n args.senderParty,\n 'Active contract selection',\n );\n const resolver = createContractAddressResolver({\n client: args.client,\n senderParty: args.senderParty,\n signingParties: [queryParty],\n appendDisclosures: () => undefined,\n });\n const selected = await selectActiveContracts(\n await resolveSelectorContracts(resolver, args.selector),\n args.selection,\n resolver,\n );\n return {\n contractIds: selected.map(({ createdEvent }) => createdEvent.contractId),\n };\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value);\n\nconst isCantonTime = (value: unknown): value is string =>\n typeof value === 'string' &&\n CANTON_TIME_PATTERN.test(value) &&\n Number.isFinite(Date.parse(value));\n\nconst isActiveContractRefresh = (refresh: CantonRefresh): refresh is CantonActiveContractRefresh =>\n refresh.resolver.type === 'activeContract';\n\nconst isActiveContractValueRefresh = (\n refresh: CantonRefresh,\n): refresh is CantonActiveContractValueRefresh => refresh.resolver.type === 'activeContractValue';\n\nconst isAmuletContextRefresh = (refresh: CantonRefresh): refresh is CantonAmuletContextRefresh =>\n refresh.resolver.type === 'amuletContext';\n\nconst isTimestampRefresh = (refresh: CantonRefresh): refresh is CantonTimestampRefresh =>\n refresh.resolver.type === 'timestamp';\n\nconst replaceAtPath = (root: unknown, path: CantonRefreshPath, value: unknown): unknown => {\n if (path.length === 0) return value;\n\n let current = root;\n for (const [position, segment] of path.entries()) {\n const isLast = position === path.length - 1;\n if ('field' in segment) {\n if (!isRecord(current) || !(segment.field in current)) {\n throw new Error(`Refresh target field \"${segment.field}\" does not exist`);\n }\n if (isLast) {\n current[segment.field] = value;\n return root;\n }\n current = current[segment.field];\n continue;\n }\n if ('index' in segment) {\n if (!Array.isArray(current) || segment.index >= current.length) {\n throw new Error(`Refresh target array index ${segment.index} does not exist`);\n }\n if (isLast) {\n current[segment.index] = value;\n return root;\n }\n current = current[segment.index];\n continue;\n }\n\n if (!Array.isArray(current)) {\n throw new Error(`Refresh target DAML map \"${segment.damlMapKey}\" is not an array`);\n }\n const matches = current.filter(\n (entry): entry is [string, unknown] =>\n Array.isArray(entry) && entry.length === 2 && entry[0] === segment.damlMapKey,\n );\n if (matches.length !== 1) {\n throw new Error(\n `Refresh target DAML map key \"${segment.damlMapKey}\" matched ${matches.length} entries`,\n );\n }\n if (isLast) {\n matches[0]![1] = value;\n return root;\n }\n current = matches[0]![1];\n }\n return root;\n};\n\nconst readAtPath = (root: unknown, path: CantonRefreshPath): unknown => {\n let current = root;\n for (const segment of path) {\n if ('field' in segment) {\n if (!isRecord(current) || !(segment.field in current)) {\n throw new Error(`Refresh target field \"${segment.field}\" does not exist`);\n }\n current = current[segment.field];\n continue;\n }\n if ('index' in segment) {\n if (!Array.isArray(current) || segment.index >= current.length) {\n throw new Error(`Refresh target array index ${segment.index} does not exist`);\n }\n current = current[segment.index];\n continue;\n }\n\n if (!Array.isArray(current)) {\n throw new Error(`Refresh target DAML map \"${segment.damlMapKey}\" is not an array`);\n }\n const matches = current.filter(\n (entry): entry is [string, unknown] =>\n Array.isArray(entry) && entry.length === 2 && entry[0] === segment.damlMapKey,\n );\n if (matches.length !== 1) {\n throw new Error(\n `Refresh target DAML map key \"${segment.damlMapKey}\" matched ${matches.length} entries`,\n );\n }\n current = matches[0]![1];\n }\n return current;\n};\n\nconst readTarget = (\n commands: CantonUnresolvedCommand[],\n target: CantonArgumentRefreshTarget,\n path: CantonRefreshPath,\n): unknown => {\n const command = commands[target.commandIndex];\n if (!command) {\n throw new Error(`Refresh command index ${target.commandIndex} does not exist`);\n }\n\n if (target.command === 'exercise') {\n if (!('exerciseCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not an exercise`);\n }\n if (command.exerciseCommand.choice !== target.choice) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected choice ${target.choice}, found ${command.exerciseCommand.choice}`,\n );\n }\n return readAtPath(command.exerciseCommand.choiceArgument, path);\n }\n\n if (!('createCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not a create`);\n }\n if (command.createCommand.templateId !== target.template) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected template ${target.template}, found ${command.createCommand.templateId}`,\n );\n }\n return readAtPath(command.createCommand.createArguments, path);\n};\n\nconst applyPatch = (\n commands: CantonUnresolvedCommand[],\n target: CantonArgumentRefreshTarget,\n path: CantonRefreshPath,\n value: unknown,\n): void => {\n const command = commands[target.commandIndex];\n if (!command) {\n throw new Error(`Refresh command index ${target.commandIndex} does not exist`);\n }\n\n if (target.command === 'exercise') {\n if (!('exerciseCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not an exercise`);\n }\n if (command.exerciseCommand.choice !== target.choice) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected choice ${target.choice}, found ${command.exerciseCommand.choice}`,\n );\n }\n command.exerciseCommand.choiceArgument = replaceAtPath(\n command.exerciseCommand.choiceArgument,\n path,\n value,\n );\n return;\n }\n\n if (!('createCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not a create`);\n }\n if (command.createCommand.templateId !== target.template) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected template ${target.template}, found ${command.createCommand.templateId}`,\n );\n }\n command.createCommand.createArguments = replaceAtPath(\n command.createCommand.createArguments,\n path,\n value,\n );\n};\n\nconst applyTarget = (\n commands: CantonUnresolvedCommand[],\n target: CantonRefreshTarget,\n value: unknown,\n): void => {\n if ('field' in target) {\n const command = commands[target.commandIndex];\n if (!command) {\n throw new Error(`Refresh command index ${target.commandIndex} does not exist`);\n }\n if (!('exerciseCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not an exercise`);\n }\n if (target.choice !== undefined && command.exerciseCommand.choice !== target.choice) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected choice ${target.choice}, found ${command.exerciseCommand.choice}`,\n );\n }\n if (typeof value !== 'string') {\n throw new Error('Exercise contract ID refresh must resolve to a string');\n }\n command.exerciseCommand.contractId = value;\n return;\n }\n\n for (const argument of target.arguments) {\n applyPatch(commands, target, argument.path, value);\n }\n};\n\nconst containsDeferredSentinel = (value: unknown): boolean => {\n if (isCantonDeferredSentinel(value)) return true;\n if (Array.isArray(value)) return value.some((item) => containsDeferredSentinel(item));\n if (!isRecord(value)) return false;\n return Object.values(value).some((child) => containsDeferredSentinel(child));\n};\n\n// TODO: Remove disclosure sentinel validation once all legacy deferred-resolution paths are retired.\nconst hasDisclosureSentinel = (disclosures: CantonDisclosedContract[]): boolean =>\n disclosures.some(({ createdEventBlob: _blob, ...fields }) => containsDeferredSentinel(fields));\n\nconst disclosuresEqual = (left: CantonDisclosedContract, right: CantonDisclosedContract): boolean =>\n left.contractId === right.contractId &&\n left.templateId === right.templateId &&\n left.createdEventBlob === right.createdEventBlob &&\n left.synchronizerId === right.synchronizerId;\n\nexport const resolveCantonRefreshPlan = async (args: {\n unresolvedCommands: CantonUnresolvedCommand[];\n unresolvedDisclosedContracts: CantonDisclosedContract[];\n refreshPlan: CantonRefreshPlan;\n senderParty?: string;\n signingParties: string[];\n client: ICantonClient;\n}): Promise<{ commands: CantonCommand[]; disclosedContracts: CantonDisclosedContract[] }> => {\n const replacements = cantonRefreshPlanSchema.shape.replaceSentinels.parse(\n args.refreshPlan.replaceSentinels,\n );\n const commands = structuredClone(args.unresolvedCommands);\n if (replacements) {\n if (\n typeof args.senderParty !== 'string' ||\n !args.senderParty.trim() ||\n isCantonDeferredSentinel(args.senderParty)\n ) {\n throw new Error('Sender binding requires a resolved sender party');\n }\n for (const replacement of replacements) {\n for (const target of replacement.targets) {\n for (const { path } of target.arguments) {\n if (readTarget(commands, target, path) !== cantonSenderPartyRef()) {\n throw new Error(\n 'Sender binding target must contain cantonSenderPartyRef()',\n );\n }\n applyPatch(commands, target, path, args.senderParty);\n }\n }\n }\n }\n if (\n containsDeferredSentinel(commands) ||\n hasDisclosureSentinel(args.unresolvedDisclosedContracts)\n ) {\n throw new Error('Canton refreshPlan cannot be combined with deferred sentinels');\n }\n\n for (const entry of args.refreshPlan.commands) {\n if (entry.resolver.type !== 'finalizeCallback') continue;\n const callback = cantonFinalizeCallbackRefreshSchema.parse(entry);\n const contextIndices = callback.targets.map((target) => target.commandIndex).sort();\n const cidIndices = callback.callbackCidTargets.map((target) => target.commandIndex).sort();\n if (JSON.stringify(contextIndices) !== JSON.stringify(cidIndices)) {\n throw new Error(\n 'Callback context and contract ID targets must address the same commands',\n );\n }\n for (const target of [...callback.targets, ...callback.callbackCidTargets]) {\n readTarget(commands, target, target.arguments[0].path);\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n !isRecord(command.exerciseCommand.choiceArgument) ||\n command.exerciseCommand.choiceArgument.pendingCallbackCid !==\n callback.resolver.pendingCallbackCid\n ) {\n throw new Error('Callback target must match the pinned PendingCallback');\n }\n }\n }\n\n const disclosureMap = new Map<string, CantonDisclosedContract>();\n const appendDisclosures = (disclosures: CantonDisclosedContract[]): void => {\n for (const disclosure of disclosures) {\n const existing = disclosureMap.get(disclosure.contractId);\n if (existing && !disclosuresEqual(existing, disclosure)) {\n throw new Error(`Conflicting disclosures for contract ${disclosure.contractId}`);\n }\n disclosureMap.set(disclosure.contractId, disclosure);\n }\n };\n appendDisclosures(args.unresolvedDisclosedContracts);\n\n const resolver = createContractAddressResolver({\n client: args.client,\n senderParty: args.senderParty,\n signingParties: args.signingParties,\n appendDisclosures,\n });\n\n for (const refresh of args.refreshPlan.commands) {\n if (isActiveContractRefresh(refresh)) {\n const ref = makeActiveContractRef(refresh.resolver.selector);\n const selected = await selectActiveContracts(\n await resolveSelectorContracts(resolver, refresh.resolver.selector),\n refresh.resolver.selection,\n resolver,\n );\n await resolver.discloseActiveContracts(ref, selected);\n const contractIds = selected.map(({ createdEvent }) => createdEvent.contractId);\n const resolved =\n refresh.resolver.selection.kind === 'exactlyOne' ? contractIds[0]! : contractIds;\n for (const target of refresh.targets) applyTarget(commands, target, resolved);\n continue;\n }\n\n if (isActiveContractValueRefresh(refresh)) {\n const value = await resolveContractValue(resolver, refresh.resolver);\n for (const target of refresh.targets) applyTarget(commands, target, value);\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigTransferBatch') {\n const transfer = cantonOneSigTransferBatchRefreshSchema.parse(refresh);\n const firstTarget = transfer.targets[0]!;\n const commandIndex = firstTarget.commandIndex;\n const calls = readTarget(commands, firstTarget, [\n { field: 'transaction' },\n { field: 'calls' },\n ]);\n if (!Array.isArray(calls)) throw new Error('OneSig transfer target requires calls');\n const transferIndices = calls.flatMap((entry, index) =>\n isRecord(entry) && isRecord(entry.call) && entry.call.tag === 'OpTransfer'\n ? [index]\n : [],\n );\n const indices = transfer.targets.map((target) => target.arguments[0].path[2].index);\n if (\n transfer.targets.some((target) => target.commandIndex !== commandIndex) ||\n indices.length !== transferIndices.length ||\n new Set(indices).size !== indices.length ||\n transferIndices.some((index) => !indices.includes(index)) ||\n args.refreshPlan.commands.filter(\n (entry) =>\n entry.resolver.type === 'oneSigTransferBatch' &&\n entry.targets.some((target) => target.commandIndex === commandIndex),\n ).length !== 1\n ) {\n throw new Error(\n 'OneSig transfer targets must cover every Transfer context exactly once',\n );\n }\n for (const target of transfer.targets) {\n const current = readTarget(commands, target, target.arguments[0].path);\n if (\n !isRecord(current) ||\n current.tag !== 'TransferFactoryContext' ||\n !isRecord(current.value)\n )\n throw new Error('OneSig transfer target context mismatch');\n }\n const bundle = await resolveCantonOneSigTransferBatch(\n new CantonSdk(args.client),\n transfer.resolver,\n indices.map((index) => calls[index].call),\n args.client,\n );\n appendDisclosures(bundle.disclosedContracts);\n transfer.targets.forEach((target, index) =>\n applyTarget(commands, target, bundle.contexts[index]),\n );\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigTransferInstructionContext') {\n const instruction = cantonOneSigTransferInstructionContextRefreshSchema.parse(refresh);\n const target = instruction.targets[0]!;\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [...path.slice(0, -1), { field: 'call' }]);\n if (\n !isRecord(current) ||\n current.tag !== 'TransferInstructionContext' ||\n !isRecord(current.value) ||\n current.value.transferInstructionCid !== instruction.resolver.transferInstructionCid\n ) {\n throw new Error(\n 'OneSig instruction target must match the pinned transfer instruction',\n );\n }\n const bundle = await resolveCantonOneSigTransferInstructionContext(\n new CantonSdk(args.client),\n instruction.resolver,\n call,\n args.client,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigConfigContext') {\n const config = cantonOneSigConfigContextRefreshSchema.parse(refresh);\n for (const target of config.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = config.resolver;\n if (\n !isRecord(call) ||\n !isRecord(call.value) ||\n call.tag !== expected.operation ||\n !isRecord(call.value.oappId) ||\n call.value.oappId.admin !== expected.oappId.admin ||\n call.value.oappId.id !== expected.oappId.id ||\n !isRecord(current) ||\n current.tag !== 'ConfigContext' ||\n !isRecord(current.value) ||\n (expected.operation === 'OpSetRequestFactory' &&\n call.value.expectedHandler !== expected.expectedHandler)\n ) {\n throw new Error('OneSig config target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigConfigContext(\n new CantonSdk(args.client),\n expected,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigScopeContext') {\n const scope = cantonOneSigScopeContextRefreshSchema.parse(refresh);\n for (const target of scope.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = scope.resolver;\n const contextTag =\n expected.operation === 'OpSetMinFee'\n ? 'MinFeeContext'\n : expected.operation === 'OpSetMinPayoutValue'\n ? 'MinPayoutValueContext'\n : expected.operation === 'OpSetProtocolLedgerTimeValidityPeriod'\n ? 'LedgerTimeValidityContext'\n : 'AccessControlContext';\n if (\n !isRecord(call) ||\n !isRecord(call.value) ||\n call.tag !== expected.operation ||\n !isRecord(call.value.scope) ||\n call.value.scope.category !== expected.scope.category ||\n call.value.scope.admin !== expected.scope.admin ||\n call.value.scope.id !== expected.scope.id ||\n (expected.operation === 'OpAcceptDefaultAdmin' &&\n expected.scope.category === 'oapp') ||\n !isRecord(current) ||\n current.tag !== contextTag ||\n !isRecord(current.value)\n ) {\n throw new Error('OneSig scope target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigScopeContext(\n new CantonSdk(args.client),\n expected,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigDiscoveryContext') {\n const discovery = cantonOneSigDiscoveryContextRefreshSchema.parse(refresh);\n for (const target of discovery.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = discovery.resolver;\n if (\n !isRecord(call) ||\n call.tag !== 'OpSetDiscoveryUrl' ||\n !isRecord(call.value) ||\n !isRecord(call.value.oappId) ||\n call.value.oappId.admin !== expected.oappId.admin ||\n call.value.oappId.id !== expected.oappId.id ||\n !isRecord(current) ||\n current.tag !== 'OAppDiscoveryContext' ||\n !isRecord(current.value) ||\n !isCantonTime(current.value.timestamp) ||\n (parseDamlDecimal(call.value.feeAmount, 'Discovery fee') > 0n\n ? expected.feeDsoParty !== call.value.dso\n : expected.feeDsoParty !== undefined)\n ) {\n throw new Error('OneSig discovery target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigDiscoveryContext(\n new CantonSdk(args.client),\n expected,\n current.value.timestamp,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigRequestContext') {\n const request = cantonOneSigRequestContextRefreshSchema.parse(refresh);\n for (const target of request.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = request.resolver.request;\n const requestTags = [\n 'OpCreateOAppRequest',\n 'OpSkip',\n 'OpBurn',\n 'OpClear',\n 'OpNilify',\n ];\n if (\n !isRecord(call) ||\n !isRecord(call.value) ||\n call.value.dso !== request.resolver.dsoParty ||\n !isRecord(current) ||\n !isRecord(current.value) ||\n !isCantonTime(current.value.timestamp) ||\n (expected.kind === 'request'\n ? call.tag !== 'OpCreateRequest' || current.tag !== 'RequestContext'\n : expected.kind === 'oappAccept'\n ? call.tag !== 'OpAcceptDefaultAdmin' ||\n current.tag !== 'OAppRequestContext' ||\n !isRecord(call.value.scope) ||\n call.value.scope.category !== 'oapp' ||\n call.value.scope.admin !== expected.oappId.admin ||\n call.value.scope.id !== expected.oappId.id ||\n parseDamlDecimal(call.value.feeAmount, 'OApp Accept fee') <= 0n\n : !requestTags.includes(String(call.tag)) ||\n current.tag !== 'OAppRequestContext' ||\n !isRecord(call.value.oappId) ||\n call.value.oappId.admin !== expected.oappId.admin ||\n call.value.oappId.id !== expected.oappId.id)\n ) {\n throw new Error('OneSig request target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigRequestContext(\n new CantonSdk(args.client),\n request.resolver,\n current.value.timestamp,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'finalizeCallback') {\n const callback = cantonFinalizeCallbackRefreshSchema.parse(refresh);\n const bundle = await resolveCantonFinalizeCallback(\n new CantonSdk(args.client),\n callback.resolver,\n );\n appendDisclosures(bundle.disclosedContracts);\n for (const target of callback.targets)\n applyTarget(commands, target, bundle.executeContext);\n for (const target of callback.callbackCidTargets)\n applyTarget(commands, target, bundle.callbackCid);\n continue;\n }\n\n if (refresh.resolver.type === 'transferInstructionAcceptContext') {\n const acceptance = cantonTransferInstructionAcceptContextRefreshSchema.parse(refresh);\n for (const target of acceptance.targets) {\n readTarget(commands, target, target.arguments[0]!.path);\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n command.exerciseCommand.contractId !== acceptance.resolver.contractId\n ) {\n throw new Error(\n 'Accept context target must match the pinned transfer instruction',\n );\n }\n }\n const bundle = await args.client.getTransferInstructionAcceptContext({\n contractId: acceptance.resolver.contractId,\n });\n appendDisclosures(bundle.disclosedContracts);\n for (const target of acceptance.targets) {\n applyTarget(commands, target, bundle.choiceContext);\n }\n continue;\n }\n\n if (isAmuletContextRefresh(refresh)) {\n const bundle = await args.client.getAmuletContextWithExternalRules({\n admin: refresh.resolver.dsoParty,\n id: 'Amulet',\n });\n appendDisclosures(bundle.disclosedContracts);\n for (const target of refresh.targets) {\n applyTarget(commands, target, bundle.amuletContext);\n }\n for (const target of refresh.contractIdTargets ?? []) {\n applyTarget(commands, target, bundle.externalPartyAmuletRulesCid);\n }\n }\n }\n\n // Timestamp refreshes run after all external reads so their shared instant is\n // as close as possible to prepareForSigning, regardless of declaration order.\n const now = new Date();\n for (const refresh of args.refreshPlan.commands) {\n if (!isTimestampRefresh(refresh)) continue;\n\n for (const target of refresh.targets) {\n for (const { path, offsetMs = 0 } of target.arguments) {\n const iso = new Date(now.getTime() + offsetMs).toISOString();\n const current = readTarget(commands, target, path);\n let value: unknown;\n if (isCantonTime(current)) {\n value = iso;\n } else if (\n isRecord(current) &&\n current.tag === 'AV_Time' &&\n isCantonTime(current.value)\n ) {\n value = { ...current, value: iso };\n } else {\n throw new Error('Timestamp refresh target must contain a Canton Time value');\n }\n applyPatch(commands, target, path, value);\n }\n }\n }\n\n for (const refresh of args.refreshPlan.commands) {\n if (refresh.resolver.type !== 'transferInstructionAcceptContext') continue;\n for (const target of refresh.targets) {\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n command.exerciseCommand.contractId !== refresh.resolver.contractId\n ) {\n throw new Error('Accept context target must match the pinned transfer instruction');\n }\n }\n }\n\n for (const refresh of args.refreshPlan.commands) {\n if (refresh.resolver.type !== 'finalizeCallback') continue;\n const callback = cantonFinalizeCallbackRefreshSchema.parse(refresh);\n for (const target of [...callback.targets, ...callback.callbackCidTargets]) {\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n !isRecord(command.exerciseCommand.choiceArgument) ||\n command.exerciseCommand.choiceArgument.pendingCallbackCid !==\n callback.resolver.pendingCallbackCid\n ) {\n throw new Error('Callback target must match the pinned PendingCallback');\n }\n }\n }\n\n for (const replacement of replacements ?? []) {\n for (const target of replacement.targets) {\n for (const { path } of target.arguments) {\n if (readTarget(commands, target, path) !== args.senderParty) {\n throw new Error('Refresh cannot change the bound sender party');\n }\n }\n }\n }\n const disclosedContracts = [...disclosureMap.values()];\n if (containsDeferredSentinel(commands) || hasDisclosureSentinel(disclosedContracts)) {\n throw new Error('Canton refreshPlan cannot return deferred sentinels');\n }\n\n return {\n commands: commands as CantonCommand[],\n disclosedContracts,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/refresh/resolve-plan.ts"],"names":["CANTON_TIME_PATTERN","resolveParty","partyRef","senderParty","label","isCantonDeferredSender","party","Error","getContractNumericField","contract","field","raw","getCreateArgumentField","createdEvent","createArgument","value","initialAmount","parseDamlDecimal","contractId","selectContractsByGte","contracts","requestedValue","selectContractAmounts","makeActiveContractRef","selector","type","partyToFilter","queryAs","expectedSignatories","templateId","interfaceId","contractStateFilter","stateFilter","resolveSelectorContracts","resolver","resolveActiveContracts","source","length","filter","resolveContractValue","selectActiveContracts","selection","kind","resolveCantonActiveContracts","args","queryParty","createContractAddressResolver","client","signingParties","appendDisclosures","undefined","selected","contractIds","map","isRecord","Array","isArray","isCantonTime","test","Number","isFinite","Date","parse","isActiveContractRefresh","refresh","isActiveContractValueRefresh","isAmuletContextRefresh","isTimestampRefresh","replaceAtPath","root","path","current","position","segment","entries","isLast","index","damlMapKey","matches","entry","readAtPath","readTarget","commands","target","command","commandIndex","exerciseCommand","choice","choiceArgument","createCommand","template","createArguments","applyPatch","applyTarget","argument","arguments","containsDeferredSentinel","isCantonDeferredSentinel","some","item","Object","values","child","hasDisclosureSentinel","disclosures","createdEventBlob","_blob","fields","disclosuresEqual","left","right","synchronizerId","resolveCantonRefreshPlan","replacements","cantonRefreshPlanSchema","shape","replaceSentinels","refreshPlan","structuredClone","unresolvedCommands","trim","replacement","targets","cantonSenderPartyRef","unresolvedDisclosedContracts","callback","cantonFinalizeCallbackRefreshSchema","contextIndices","sort","cidIndices","callbackCidTargets","JSON","stringify","pendingCallbackCid","disclosureMap","Map","disclosure","existing","get","set","ref","discloseActiveContracts","resolved","transfer","cantonOneSigTransferBatchRefreshSchema","firstTarget","calls","transferIndices","flatMap","call","tag","indices","Set","size","includes","bundle","resolveCantonOneSigTransferBatch","CantonSdk","disclosedContracts","forEach","contexts","instruction","cantonOneSigTransferInstructionContextRefreshSchema","slice","transferInstructionCid","resolveCantonOneSigTransferInstructionContext","context","config","cantonOneSigConfigContextRefreshSchema","expected","operation","oappId","admin","id","expectedHandler","resolveCantonOneSigConfigContext","scope","cantonOneSigScopeContextRefreshSchema","contextTag","category","resolveCantonOneSigScopeContext","discovery","cantonOneSigDiscoveryContextRefreshSchema","timestamp","feeAmount","feeDsoParty","dso","resolveCantonOneSigDiscoveryContext","request","cantonOneSigRequestContextRefreshSchema","requestTags","dsoParty","String","resolveCantonOneSigRequestContext","resolveCantonFinalizeCallback","executeContext","callbackCid","acceptance","cantonTransferInstructionAcceptContextRefreshSchema","getTransferInstructionAcceptContext","choiceContext","getAmuletContextWithExternalRules","amuletContext","contractIdTargets","externalPartyAmuletRulesCid","now","offsetMs","iso","getTime","toISOString"],"mappings":"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","file":"PDVMANRS.js","sourcesContent":["import type { ICantonClient } from '../client/interface';\nimport {\n type CantonRefreshPartyFilter,\n cantonSenderPartyRef,\n isCantonDeferredSender,\n isCantonDeferredSentinel,\n} from '../deferredValue';\nimport type { JsActiveContract } from '../open-api/models';\nimport { CantonSdk } from '../sdk/canton-sdk';\nimport type {\n CantonCommand,\n CantonDisclosedContract,\n CantonUnresolvedCommand,\n} from '../transaction';\nimport { getCreateArgumentField } from '../trusted-origin';\nimport { type ActiveContractRef, createContractAddressResolver } from './address-resolver';\nimport { resolveCantonFinalizeCallback } from './callback';\nimport { resolveCantonOneSigConfigContext } from './onesig-config';\nimport { resolveCantonOneSigDiscoveryContext } from './onesig-discovery';\nimport { resolveCantonOneSigRequestContext } from './onesig-request';\nimport { resolveCantonOneSigScopeContext } from './onesig-scope';\nimport { resolveCantonOneSigTransferBatch } from './onesig-transfer';\nimport { resolveCantonOneSigTransferInstructionContext } from './onesig-transfer-instruction';\nimport {\n type CantonActiveContractRefresh,\n type CantonActiveContractSelection,\n type CantonActiveContractValue,\n type CantonActiveContractValueRefresh,\n type CantonAmuletContextRefresh,\n type CantonArgumentRefreshTarget,\n type CantonContractSelector,\n cantonFinalizeCallbackRefreshSchema,\n cantonOneSigConfigContextRefreshSchema,\n cantonOneSigDiscoveryContextRefreshSchema,\n cantonOneSigRequestContextRefreshSchema,\n cantonOneSigScopeContextRefreshSchema,\n cantonOneSigTransferBatchRefreshSchema,\n cantonOneSigTransferInstructionContextRefreshSchema,\n type CantonRefresh,\n type CantonRefreshPath,\n type CantonRefreshPlan,\n cantonRefreshPlanSchema,\n type CantonRefreshTarget,\n type CantonTimestampRefresh,\n cantonTransferInstructionAcceptContextRefreshSchema,\n} from './plan';\nimport { parseDamlDecimal, selectContractAmounts } from './select-contracts';\n\nconst CANTON_TIME_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?Z$/;\n\nconst resolveParty = (\n partyRef: CantonRefreshPartyFilter,\n senderParty: string | undefined,\n label: string,\n): string => {\n if (!isCantonDeferredSender(partyRef)) return partyRef.party;\n if (!senderParty) {\n throw new Error(`${label} requires a resolved sender party`);\n }\n return senderParty;\n};\n\nconst getContractNumericField = (contract: JsActiveContract, field: string): bigint => {\n const raw = getCreateArgumentField(contract.createdEvent.createArgument, field);\n const value =\n raw !== null && typeof raw === 'object' && 'initialAmount' in raw\n ? (raw as { initialAmount?: unknown }).initialAmount\n : raw;\n return parseDamlDecimal(\n value,\n `Contract ${contract.createdEvent.contractId} numeric field ${field}`,\n );\n};\n\nexport const selectContractsByGte = (\n contracts: JsActiveContract[],\n field: string,\n requestedValue: string,\n): JsActiveContract[] =>\n selectContractAmounts(contracts, field, requestedValue, (contract) =>\n getContractNumericField(contract, field),\n );\n\nconst makeActiveContractRef = (selector: CantonContractSelector): ActiveContractRef => ({\n type: 'activeContractIds',\n partyToFilter: selector.queryAs,\n expectedSignatories: selector.expectedSignatories,\n templateId: selector.templateId ?? selector.interfaceId,\n interfaceId: selector.interfaceId,\n contractStateFilter: selector.stateFilter,\n});\n\nconst resolveSelectorContracts = async (\n resolver: ReturnType<typeof createContractAddressResolver>,\n selector: CantonContractSelector,\n): Promise<JsActiveContract[]> => {\n const contracts = await resolver.resolveActiveContracts(makeActiveContractRef(selector));\n if (!selector.contractId) return contracts;\n const source = await resolver.resolveActiveContracts(\n makeActiveContractRef(selector.contractId.selector),\n );\n if (source.length !== 1)\n throw new Error(\n `Contract ID source matched ${source.length} contracts, expected exactly one`,\n );\n const contractId = getCreateArgumentField(\n source[0]!.createdEvent.createArgument,\n selector.contractId.field,\n );\n if (typeof contractId !== 'string' || !contractId)\n throw new Error('Contract ID source must contain a nonempty contract ID');\n return contracts.filter((contract) => contract.createdEvent.contractId === contractId);\n};\n\nconst resolveContractValue = async (\n resolver: ReturnType<typeof createContractAddressResolver>,\n source: CantonActiveContractValue,\n): Promise<string> => {\n const contracts = await resolveSelectorContracts(resolver, source.selector);\n if (contracts.length !== 1) {\n throw new Error(\n `Active contract value matched ${contracts.length} contracts, expected exactly one`,\n );\n }\n const value = getCreateArgumentField(contracts[0]!.createdEvent.createArgument, source.field);\n if (parseDamlDecimal(value, `Contract value ${source.field}`) <= 0n) {\n throw new Error(`Contract value ${source.field} must be positive`);\n }\n return value as string;\n};\n\nconst selectActiveContracts = async (\n contracts: JsActiveContract[],\n selection: CantonActiveContractSelection,\n resolver: ReturnType<typeof createContractAddressResolver>,\n): Promise<JsActiveContract[]> => {\n switch (selection.kind) {\n case 'exactlyOne':\n if (contracts.length !== 1) {\n throw new Error(\n `Active contract selection matched ${contracts.length} contracts, expected exactly one`,\n );\n }\n return contracts;\n case 'all':\n return contracts;\n case 'gte':\n return selectContractsByGte(\n contracts,\n selection.field,\n typeof selection.value === 'string'\n ? selection.value\n : await resolveContractValue(resolver, selection.value),\n );\n }\n};\n\nexport const resolveCantonActiveContracts = async (args: {\n client: ICantonClient;\n selector: CantonContractSelector;\n selection: CantonActiveContractSelection;\n senderParty?: string;\n}): Promise<{ contractIds: string[] }> => {\n const queryParty = resolveParty(\n args.selector.queryAs,\n args.senderParty,\n 'Active contract selection',\n );\n const resolver = createContractAddressResolver({\n client: args.client,\n senderParty: args.senderParty,\n signingParties: [queryParty],\n appendDisclosures: () => undefined,\n });\n const selected = await selectActiveContracts(\n await resolveSelectorContracts(resolver, args.selector),\n args.selection,\n resolver,\n );\n return {\n contractIds: selected.map(({ createdEvent }) => createdEvent.contractId),\n };\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value);\n\nconst isCantonTime = (value: unknown): value is string =>\n typeof value === 'string' &&\n CANTON_TIME_PATTERN.test(value) &&\n Number.isFinite(Date.parse(value));\n\nconst isActiveContractRefresh = (refresh: CantonRefresh): refresh is CantonActiveContractRefresh =>\n refresh.resolver.type === 'activeContract';\n\nconst isActiveContractValueRefresh = (\n refresh: CantonRefresh,\n): refresh is CantonActiveContractValueRefresh => refresh.resolver.type === 'activeContractValue';\n\nconst isAmuletContextRefresh = (refresh: CantonRefresh): refresh is CantonAmuletContextRefresh =>\n refresh.resolver.type === 'amuletContext';\n\nconst isTimestampRefresh = (refresh: CantonRefresh): refresh is CantonTimestampRefresh =>\n refresh.resolver.type === 'timestamp';\n\nconst replaceAtPath = (root: unknown, path: CantonRefreshPath, value: unknown): unknown => {\n if (path.length === 0) return value;\n\n let current = root;\n for (const [position, segment] of path.entries()) {\n const isLast = position === path.length - 1;\n if ('field' in segment) {\n if (!isRecord(current) || !(segment.field in current)) {\n throw new Error(`Refresh target field \"${segment.field}\" does not exist`);\n }\n if (isLast) {\n current[segment.field] = value;\n return root;\n }\n current = current[segment.field];\n continue;\n }\n if ('index' in segment) {\n if (!Array.isArray(current) || segment.index >= current.length) {\n throw new Error(`Refresh target array index ${segment.index} does not exist`);\n }\n if (isLast) {\n current[segment.index] = value;\n return root;\n }\n current = current[segment.index];\n continue;\n }\n\n if (!Array.isArray(current)) {\n throw new Error(`Refresh target DAML map \"${segment.damlMapKey}\" is not an array`);\n }\n const matches = current.filter(\n (entry): entry is [string, unknown] =>\n Array.isArray(entry) && entry.length === 2 && entry[0] === segment.damlMapKey,\n );\n if (matches.length !== 1) {\n throw new Error(\n `Refresh target DAML map key \"${segment.damlMapKey}\" matched ${matches.length} entries`,\n );\n }\n if (isLast) {\n matches[0]![1] = value;\n return root;\n }\n current = matches[0]![1];\n }\n return root;\n};\n\nconst readAtPath = (root: unknown, path: CantonRefreshPath): unknown => {\n let current = root;\n for (const segment of path) {\n if ('field' in segment) {\n if (!isRecord(current) || !(segment.field in current)) {\n throw new Error(`Refresh target field \"${segment.field}\" does not exist`);\n }\n current = current[segment.field];\n continue;\n }\n if ('index' in segment) {\n if (!Array.isArray(current) || segment.index >= current.length) {\n throw new Error(`Refresh target array index ${segment.index} does not exist`);\n }\n current = current[segment.index];\n continue;\n }\n\n if (!Array.isArray(current)) {\n throw new Error(`Refresh target DAML map \"${segment.damlMapKey}\" is not an array`);\n }\n const matches = current.filter(\n (entry): entry is [string, unknown] =>\n Array.isArray(entry) && entry.length === 2 && entry[0] === segment.damlMapKey,\n );\n if (matches.length !== 1) {\n throw new Error(\n `Refresh target DAML map key \"${segment.damlMapKey}\" matched ${matches.length} entries`,\n );\n }\n current = matches[0]![1];\n }\n return current;\n};\n\nconst readTarget = (\n commands: CantonUnresolvedCommand[],\n target: CantonArgumentRefreshTarget,\n path: CantonRefreshPath,\n): unknown => {\n const command = commands[target.commandIndex];\n if (!command) {\n throw new Error(`Refresh command index ${target.commandIndex} does not exist`);\n }\n\n if (target.command === 'exercise') {\n if (!('exerciseCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not an exercise`);\n }\n if (command.exerciseCommand.choice !== target.choice) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected choice ${target.choice}, found ${command.exerciseCommand.choice}`,\n );\n }\n return readAtPath(command.exerciseCommand.choiceArgument, path);\n }\n\n if (!('createCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not a create`);\n }\n if (command.createCommand.templateId !== target.template) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected template ${target.template}, found ${command.createCommand.templateId}`,\n );\n }\n return readAtPath(command.createCommand.createArguments, path);\n};\n\nconst applyPatch = (\n commands: CantonUnresolvedCommand[],\n target: CantonArgumentRefreshTarget,\n path: CantonRefreshPath,\n value: unknown,\n): void => {\n const command = commands[target.commandIndex];\n if (!command) {\n throw new Error(`Refresh command index ${target.commandIndex} does not exist`);\n }\n\n if (target.command === 'exercise') {\n if (!('exerciseCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not an exercise`);\n }\n if (command.exerciseCommand.choice !== target.choice) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected choice ${target.choice}, found ${command.exerciseCommand.choice}`,\n );\n }\n command.exerciseCommand.choiceArgument = replaceAtPath(\n command.exerciseCommand.choiceArgument,\n path,\n value,\n );\n return;\n }\n\n if (!('createCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not a create`);\n }\n if (command.createCommand.templateId !== target.template) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected template ${target.template}, found ${command.createCommand.templateId}`,\n );\n }\n command.createCommand.createArguments = replaceAtPath(\n command.createCommand.createArguments,\n path,\n value,\n );\n};\n\nconst applyTarget = (\n commands: CantonUnresolvedCommand[],\n target: CantonRefreshTarget,\n value: unknown,\n): void => {\n if ('field' in target) {\n const command = commands[target.commandIndex];\n if (!command) {\n throw new Error(`Refresh command index ${target.commandIndex} does not exist`);\n }\n if (!('exerciseCommand' in command)) {\n throw new Error(`Refresh command index ${target.commandIndex} is not an exercise`);\n }\n if (target.choice !== undefined && command.exerciseCommand.choice !== target.choice) {\n throw new Error(\n `Refresh command index ${target.commandIndex} expected choice ${target.choice}, found ${command.exerciseCommand.choice}`,\n );\n }\n if (typeof value !== 'string') {\n throw new Error('Exercise contract ID refresh must resolve to a string');\n }\n command.exerciseCommand.contractId = value;\n return;\n }\n\n for (const argument of target.arguments) {\n applyPatch(commands, target, argument.path, value);\n }\n};\n\nconst containsDeferredSentinel = (value: unknown): boolean => {\n if (isCantonDeferredSentinel(value)) return true;\n if (Array.isArray(value)) return value.some((item) => containsDeferredSentinel(item));\n if (!isRecord(value)) return false;\n return Object.values(value).some((child) => containsDeferredSentinel(child));\n};\n\n// TODO: Remove disclosure sentinel validation once all legacy deferred-resolution paths are retired.\nconst hasDisclosureSentinel = (disclosures: CantonDisclosedContract[]): boolean =>\n disclosures.some(({ createdEventBlob: _blob, ...fields }) => containsDeferredSentinel(fields));\n\nconst disclosuresEqual = (left: CantonDisclosedContract, right: CantonDisclosedContract): boolean =>\n left.contractId === right.contractId &&\n left.templateId === right.templateId &&\n left.createdEventBlob === right.createdEventBlob &&\n left.synchronizerId === right.synchronizerId;\n\nexport const resolveCantonRefreshPlan = async (args: {\n unresolvedCommands: CantonUnresolvedCommand[];\n unresolvedDisclosedContracts: CantonDisclosedContract[];\n refreshPlan: CantonRefreshPlan;\n senderParty?: string;\n signingParties: string[];\n client: ICantonClient;\n}): Promise<{ commands: CantonCommand[]; disclosedContracts: CantonDisclosedContract[] }> => {\n const replacements = cantonRefreshPlanSchema.shape.replaceSentinels.parse(\n args.refreshPlan.replaceSentinels,\n );\n const commands = structuredClone(args.unresolvedCommands);\n if (replacements) {\n if (\n typeof args.senderParty !== 'string' ||\n !args.senderParty.trim() ||\n isCantonDeferredSentinel(args.senderParty)\n ) {\n throw new Error('Sender binding requires a resolved sender party');\n }\n for (const replacement of replacements) {\n for (const target of replacement.targets) {\n for (const { path } of target.arguments) {\n if (readTarget(commands, target, path) !== cantonSenderPartyRef()) {\n throw new Error(\n 'Sender binding target must contain cantonSenderPartyRef()',\n );\n }\n applyPatch(commands, target, path, args.senderParty);\n }\n }\n }\n }\n if (\n containsDeferredSentinel(commands) ||\n hasDisclosureSentinel(args.unresolvedDisclosedContracts)\n ) {\n throw new Error('Canton refreshPlan cannot be combined with deferred sentinels');\n }\n\n for (const entry of args.refreshPlan.commands) {\n if (entry.resolver.type !== 'finalizeCallback') continue;\n const callback = cantonFinalizeCallbackRefreshSchema.parse(entry);\n const contextIndices = callback.targets.map((target) => target.commandIndex).sort();\n const cidIndices = callback.callbackCidTargets.map((target) => target.commandIndex).sort();\n if (JSON.stringify(contextIndices) !== JSON.stringify(cidIndices)) {\n throw new Error(\n 'Callback context and contract ID targets must address the same commands',\n );\n }\n for (const target of [...callback.targets, ...callback.callbackCidTargets]) {\n readTarget(commands, target, target.arguments[0].path);\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n !isRecord(command.exerciseCommand.choiceArgument) ||\n command.exerciseCommand.choiceArgument.pendingCallbackCid !==\n callback.resolver.pendingCallbackCid\n ) {\n throw new Error('Callback target must match the pinned PendingCallback');\n }\n }\n }\n\n const disclosureMap = new Map<string, CantonDisclosedContract>();\n const appendDisclosures = (disclosures: CantonDisclosedContract[]): void => {\n for (const disclosure of disclosures) {\n const existing = disclosureMap.get(disclosure.contractId);\n if (existing && !disclosuresEqual(existing, disclosure)) {\n throw new Error(`Conflicting disclosures for contract ${disclosure.contractId}`);\n }\n disclosureMap.set(disclosure.contractId, disclosure);\n }\n };\n appendDisclosures(args.unresolvedDisclosedContracts);\n\n const resolver = createContractAddressResolver({\n client: args.client,\n senderParty: args.senderParty,\n signingParties: args.signingParties,\n appendDisclosures,\n });\n\n for (const refresh of args.refreshPlan.commands) {\n if (isActiveContractRefresh(refresh)) {\n const ref = makeActiveContractRef(refresh.resolver.selector);\n const selected = await selectActiveContracts(\n await resolveSelectorContracts(resolver, refresh.resolver.selector),\n refresh.resolver.selection,\n resolver,\n );\n await resolver.discloseActiveContracts(ref, selected);\n const contractIds = selected.map(({ createdEvent }) => createdEvent.contractId);\n const resolved =\n refresh.resolver.selection.kind === 'exactlyOne' ? contractIds[0]! : contractIds;\n for (const target of refresh.targets) applyTarget(commands, target, resolved);\n continue;\n }\n\n if (isActiveContractValueRefresh(refresh)) {\n const value = await resolveContractValue(resolver, refresh.resolver);\n for (const target of refresh.targets) applyTarget(commands, target, value);\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigTransferBatch') {\n const transfer = cantonOneSigTransferBatchRefreshSchema.parse(refresh);\n const firstTarget = transfer.targets[0]!;\n const commandIndex = firstTarget.commandIndex;\n const calls = readTarget(commands, firstTarget, [\n { field: 'transaction' },\n { field: 'calls' },\n ]);\n if (!Array.isArray(calls)) throw new Error('OneSig transfer target requires calls');\n const transferIndices = calls.flatMap((entry, index) =>\n isRecord(entry) && isRecord(entry.call) && entry.call.tag === 'OpTransfer'\n ? [index]\n : [],\n );\n const indices = transfer.targets.map((target) => target.arguments[0].path[2].index);\n if (\n transfer.targets.some((target) => target.commandIndex !== commandIndex) ||\n indices.length !== transferIndices.length ||\n new Set(indices).size !== indices.length ||\n transferIndices.some((index) => !indices.includes(index)) ||\n args.refreshPlan.commands.filter(\n (entry) =>\n entry.resolver.type === 'oneSigTransferBatch' &&\n entry.targets.some((target) => target.commandIndex === commandIndex),\n ).length !== 1\n ) {\n throw new Error(\n 'OneSig transfer targets must cover every Transfer context exactly once',\n );\n }\n for (const target of transfer.targets) {\n const current = readTarget(commands, target, target.arguments[0].path);\n if (\n !isRecord(current) ||\n current.tag !== 'TransferFactoryContext' ||\n !isRecord(current.value)\n )\n throw new Error('OneSig transfer target context mismatch');\n }\n const bundle = await resolveCantonOneSigTransferBatch(\n new CantonSdk(args.client),\n transfer.resolver,\n indices.map((index) => calls[index].call),\n args.client,\n );\n appendDisclosures(bundle.disclosedContracts);\n transfer.targets.forEach((target, index) =>\n applyTarget(commands, target, bundle.contexts[index]),\n );\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigTransferInstructionContext') {\n const instruction = cantonOneSigTransferInstructionContextRefreshSchema.parse(refresh);\n const target = instruction.targets[0]!;\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [...path.slice(0, -1), { field: 'call' }]);\n if (\n !isRecord(current) ||\n current.tag !== 'TransferInstructionContext' ||\n !isRecord(current.value) ||\n current.value.transferInstructionCid !== instruction.resolver.transferInstructionCid\n ) {\n throw new Error(\n 'OneSig instruction target must match the pinned transfer instruction',\n );\n }\n const bundle = await resolveCantonOneSigTransferInstructionContext(\n new CantonSdk(args.client),\n instruction.resolver,\n call,\n args.client,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigConfigContext') {\n const config = cantonOneSigConfigContextRefreshSchema.parse(refresh);\n for (const target of config.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = config.resolver;\n if (\n !isRecord(call) ||\n !isRecord(call.value) ||\n call.tag !== expected.operation ||\n !isRecord(call.value.oappId) ||\n call.value.oappId.admin !== expected.oappId.admin ||\n call.value.oappId.id !== expected.oappId.id ||\n !isRecord(current) ||\n current.tag !== 'ConfigContext' ||\n !isRecord(current.value) ||\n (expected.operation === 'OpSetRequestFactory' &&\n call.value.expectedHandler !== expected.expectedHandler)\n ) {\n throw new Error('OneSig config target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigConfigContext(\n new CantonSdk(args.client),\n expected,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigScopeContext') {\n const scope = cantonOneSigScopeContextRefreshSchema.parse(refresh);\n for (const target of scope.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = scope.resolver;\n const contextTag =\n expected.operation === 'OpSetMinFee'\n ? 'MinFeeContext'\n : expected.operation === 'OpSetMinPayoutValue'\n ? 'MinPayoutValueContext'\n : expected.operation === 'OpSetProtocolLedgerTimeValidityPeriod'\n ? 'LedgerTimeValidityContext'\n : 'AccessControlContext';\n if (\n !isRecord(call) ||\n !isRecord(call.value) ||\n call.tag !== expected.operation ||\n !isRecord(call.value.scope) ||\n call.value.scope.category !== expected.scope.category ||\n call.value.scope.admin !== expected.scope.admin ||\n call.value.scope.id !== expected.scope.id ||\n (expected.operation === 'OpAcceptDefaultAdmin' &&\n expected.scope.category === 'oapp') ||\n !isRecord(current) ||\n current.tag !== contextTag ||\n !isRecord(current.value)\n ) {\n throw new Error('OneSig scope target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigScopeContext(\n new CantonSdk(args.client),\n expected,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigDiscoveryContext') {\n const discovery = cantonOneSigDiscoveryContextRefreshSchema.parse(refresh);\n for (const target of discovery.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = discovery.resolver;\n if (\n !isRecord(call) ||\n call.tag !== 'OpSetDiscoveryUrl' ||\n !isRecord(call.value) ||\n !isRecord(call.value.oappId) ||\n call.value.oappId.admin !== expected.oappId.admin ||\n call.value.oappId.id !== expected.oappId.id ||\n !isRecord(current) ||\n current.tag !== 'OAppDiscoveryContext' ||\n !isRecord(current.value) ||\n !isCantonTime(current.value.timestamp) ||\n (parseDamlDecimal(call.value.feeAmount, 'Discovery fee') > 0n\n ? expected.feeDsoParty !== call.value.dso\n : expected.feeDsoParty !== undefined)\n ) {\n throw new Error('OneSig discovery target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigDiscoveryContext(\n new CantonSdk(args.client),\n expected,\n current.value.timestamp,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'oneSigRequestContext') {\n const request = cantonOneSigRequestContextRefreshSchema.parse(refresh);\n for (const target of request.targets) {\n const path = target.arguments[0].path;\n const current = readTarget(commands, target, path);\n const call = readTarget(commands, target, [\n ...path.slice(0, -1),\n { field: 'call' },\n ]);\n const expected = request.resolver.request;\n const requestTags = [\n 'OpCreateOAppRequest',\n 'OpSkip',\n 'OpBurn',\n 'OpClear',\n 'OpNilify',\n ];\n if (\n !isRecord(call) ||\n !isRecord(call.value) ||\n call.value.dso !== request.resolver.dsoParty ||\n !isRecord(current) ||\n !isRecord(current.value) ||\n !isCantonTime(current.value.timestamp) ||\n (expected.kind === 'request'\n ? call.tag !== 'OpCreateRequest' || current.tag !== 'RequestContext'\n : expected.kind === 'oappAccept'\n ? call.tag !== 'OpAcceptDefaultAdmin' ||\n current.tag !== 'OAppRequestContext' ||\n !isRecord(call.value.scope) ||\n call.value.scope.category !== 'oapp' ||\n call.value.scope.admin !== expected.oappId.admin ||\n call.value.scope.id !== expected.oappId.id ||\n parseDamlDecimal(call.value.feeAmount, 'OApp Accept fee') <= 0n\n : !requestTags.includes(String(call.tag)) ||\n current.tag !== 'OAppRequestContext' ||\n !isRecord(call.value.oappId) ||\n call.value.oappId.admin !== expected.oappId.admin ||\n call.value.oappId.id !== expected.oappId.id)\n ) {\n throw new Error('OneSig request target does not match signed call identity');\n }\n const bundle = await resolveCantonOneSigRequestContext(\n new CantonSdk(args.client),\n request.resolver,\n current.value.timestamp,\n );\n appendDisclosures(bundle.disclosedContracts);\n applyTarget(commands, target, bundle.context);\n }\n continue;\n }\n\n if (refresh.resolver.type === 'finalizeCallback') {\n const callback = cantonFinalizeCallbackRefreshSchema.parse(refresh);\n const bundle = await resolveCantonFinalizeCallback(\n new CantonSdk(args.client),\n callback.resolver,\n );\n appendDisclosures(bundle.disclosedContracts);\n for (const target of callback.targets)\n applyTarget(commands, target, bundle.executeContext);\n for (const target of callback.callbackCidTargets)\n applyTarget(commands, target, bundle.callbackCid);\n continue;\n }\n\n if (refresh.resolver.type === 'transferInstructionAcceptContext') {\n const acceptance = cantonTransferInstructionAcceptContextRefreshSchema.parse(refresh);\n for (const target of acceptance.targets) {\n readTarget(commands, target, target.arguments[0]!.path);\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n command.exerciseCommand.contractId !== acceptance.resolver.contractId\n ) {\n throw new Error(\n 'Accept context target must match the pinned transfer instruction',\n );\n }\n }\n const bundle = await args.client.getTransferInstructionAcceptContext({\n contractId: acceptance.resolver.contractId,\n });\n appendDisclosures(bundle.disclosedContracts);\n for (const target of acceptance.targets) {\n applyTarget(commands, target, bundle.choiceContext);\n }\n continue;\n }\n\n if (isAmuletContextRefresh(refresh)) {\n const bundle = await args.client.getAmuletContextWithExternalRules({\n admin: refresh.resolver.dsoParty,\n id: 'Amulet',\n });\n appendDisclosures(bundle.disclosedContracts);\n for (const target of refresh.targets) {\n applyTarget(commands, target, bundle.amuletContext);\n }\n for (const target of refresh.contractIdTargets ?? []) {\n applyTarget(commands, target, bundle.externalPartyAmuletRulesCid);\n }\n }\n }\n\n // Timestamp refreshes run after all external reads so their shared instant is\n // as close as possible to prepareForSigning, regardless of declaration order.\n const now = new Date();\n for (const refresh of args.refreshPlan.commands) {\n if (!isTimestampRefresh(refresh)) continue;\n\n for (const target of refresh.targets) {\n for (const { path, offsetMs = 0 } of target.arguments) {\n const iso = new Date(now.getTime() + offsetMs).toISOString();\n const current = readTarget(commands, target, path);\n let value: unknown;\n if (isCantonTime(current)) {\n value = iso;\n } else if (\n isRecord(current) &&\n current.tag === 'AV_Time' &&\n isCantonTime(current.value)\n ) {\n value = { ...current, value: iso };\n } else {\n throw new Error('Timestamp refresh target must contain a Canton Time value');\n }\n applyPatch(commands, target, path, value);\n }\n }\n }\n\n for (const refresh of args.refreshPlan.commands) {\n if (refresh.resolver.type !== 'transferInstructionAcceptContext') continue;\n for (const target of refresh.targets) {\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n command.exerciseCommand.contractId !== refresh.resolver.contractId\n ) {\n throw new Error('Accept context target must match the pinned transfer instruction');\n }\n }\n }\n\n for (const refresh of args.refreshPlan.commands) {\n if (refresh.resolver.type !== 'finalizeCallback') continue;\n const callback = cantonFinalizeCallbackRefreshSchema.parse(refresh);\n for (const target of [...callback.targets, ...callback.callbackCidTargets]) {\n const command = commands[target.commandIndex]!;\n if (\n !('exerciseCommand' in command) ||\n !isRecord(command.exerciseCommand.choiceArgument) ||\n command.exerciseCommand.choiceArgument.pendingCallbackCid !==\n callback.resolver.pendingCallbackCid\n ) {\n throw new Error('Callback target must match the pinned PendingCallback');\n }\n }\n }\n\n for (const replacement of replacements ?? []) {\n for (const target of replacement.targets) {\n for (const { path } of target.arguments) {\n if (readTarget(commands, target, path) !== args.senderParty) {\n throw new Error('Refresh cannot change the bound sender party');\n }\n }\n }\n }\n const disclosedContracts = [...disclosureMap.values()];\n if (containsDeferredSentinel(commands) || hasDisclosureSentinel(disclosedContracts)) {\n throw new Error('Canton refreshPlan cannot return deferred sentinels');\n }\n\n return {\n commands: commands as CantonCommand[],\n disclosedContracts,\n };\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CantonClient } from './N3QRG2AK.js';
|
|
2
2
|
import { Configuration } from './XVX7EVTW.js';
|
|
3
|
-
import { CantonGrpcClient } from './
|
|
3
|
+
import { CantonGrpcClient } from './XENB5GVW.js';
|
|
4
4
|
import { LocalTokenProvider } from './YF7P4UQM.js';
|
|
5
5
|
import { ClientCredentialsTokenProvider } from './V2H2WXKE.js';
|
|
6
6
|
import { __name } from './VUOMXK5T.js';
|
|
@@ -99,5 +99,5 @@ function createTokenProvider(params, isLocal) {
|
|
|
99
99
|
__name(createTokenProvider, "createTokenProvider");
|
|
100
100
|
|
|
101
101
|
export { createCantonChainProvider, parseCantonChainUri };
|
|
102
|
-
//# sourceMappingURL=
|
|
103
|
-
//# sourceMappingURL=
|
|
102
|
+
//# sourceMappingURL=W5CHA5AA.js.map
|
|
103
|
+
//# sourceMappingURL=W5CHA5AA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider.ts"],"names":["parseCantonChainUri","uri","url","URL","adminApiHost","searchParams","get","Error","userId","actAsParam","actAs","split","map","party","trim","filter","length","walletUrl","tokenUrl","undefined","clientId","clientSecret","process","env","CANTON_CLIENT_SECRET","scope","audience","key","delete","jsonApiUrl","toString","replace","oauth2","createCantonChainProvider","isLocal","params","tokenProvider","createTokenProvider","configuration","Configuration","basePath","accessToken","getToken","client","CantonClient","grpcClient","CantonGrpcClient","host","insecureTransport","LocalTokenProvider","admin","ClientCredentialsTokenProvider"],"mappings":"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","file":"TB5OSYHO.js","sourcesContent":["import {\n ClientCredentialsTokenProvider,\n type ClientCredentialsTokenProviderConfig,\n} from './auth/client-credentials-token-provider';\nimport { LocalTokenProvider } from './auth/local-token-provider';\nimport type { TokenProvider } from './auth/token-provider';\nimport { CantonClient } from './client/canton-client';\nimport { CantonGrpcClient } from './client/grpc';\nimport type { ICantonClient } from './client/interface';\nimport { Configuration } from './open-api/runtime';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Type\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * - {@link client} — JSON Ledger API (commands, queries, updates)\n * - {@link grpcClient} — gRPC Admin API (topology transactions, namespace queries)\n * - {@link tokenProvider} — Shared Bearer-token source used by both transports\n * - {@link walletUrl} — Canton Network validator wallet (scan-proxy CIP-56 endpoints)\n */\nexport type CantonChainProvider = {\n client: ICantonClient;\n grpcClient: CantonGrpcClient;\n tokenProvider: TokenProvider;\n /** Validator wallet URL for scan-proxy CIP-56 endpoints. Required. */\n walletUrl: string;\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// URI Parsing\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type CantonChainUriParams = {\n /** Base URL of the JSON Ledger API (e.g. \"http://localhost:5975\") */\n jsonApiUrl: string;\n /** Host:port of the gRPC Admin API (e.g. \"localhost:5076\") */\n adminApiHost: string;\n /** Ledger API user ID (default: \"participant_admin\") */\n userId: string;\n /** Parties granted `actAs` on localnet tokens (comma-separated in the URI). */\n actAs: string[];\n /** Validator wallet URL for scan-proxy CIP-56 endpoints (e.g. \"http://localhost:7201\"). Required. */\n walletUrl: string;\n /** OAuth2 client credentials config — present only for non-local environments */\n oauth2?: ClientCredentialsTokenProviderConfig;\n};\n\n/**\n * Parse a Canton chain provider URI into its constituent parts.\n *\n * URI format:\n * `<json-api-base>?admin-api=<host:port>&user-id=<id>&wallet-url=<url>[&token-url=...&client-id=...&client-secret=...&scope=...&audience=...]`\n *\n * The base URL (everything before the query string) is the JSON Ledger API endpoint.\n * Canton-specific params are extracted and removed; any remaining query params are\n * preserved on the JSON API URL.\n *\n * When `client-secret` is omitted from the URI, `CANTON_CLIENT_SECRET` is read from the\n * environment.\n */\nexport function parseCantonChainUri(uri: string): CantonChainUriParams {\n const url = new URL(uri);\n\n const adminApiHost = url.searchParams.get('admin-api');\n if (!adminApiHost) {\n throw new Error('Canton provider URI missing required \"admin-api\" query parameter');\n }\n\n const userId = url.searchParams.get('user-id') ?? 'participant_admin';\n const actAsParam = url.searchParams.get('act-as');\n const actAs =\n actAsParam\n ?.split(',')\n .map((party) => party.trim())\n .filter((party) => party.length > 0) ?? [];\n const walletUrl = url.searchParams.get('wallet-url');\n if (!walletUrl) {\n throw new Error('Canton provider URI missing required \"wallet-url\" query parameter');\n }\n const tokenUrl = url.searchParams.get('token-url') ?? undefined;\n const clientId = url.searchParams.get('client-id') ?? undefined;\n // Prefer URI param; fall back to env so secrets are not committed in provider configs.\n const clientSecret =\n url.searchParams.get('client-secret') ??\n // eslint-disable-next-line turbo/no-undeclared-env-vars -- runtime OAuth secret, not a turbo task input\n process.env.CANTON_CLIENT_SECRET ??\n undefined;\n const scope = url.searchParams.get('scope') ?? undefined;\n const audience = url.searchParams.get('audience') ?? undefined;\n\n for (const key of [\n 'admin-api',\n 'user-id',\n 'act-as',\n 'wallet-url',\n 'sequencer-url',\n 'sequencer-validators',\n 'sequencer-quorum',\n 'token-url',\n 'client-id',\n 'client-secret',\n 'scope',\n 'audience',\n ]) {\n url.searchParams.delete(key);\n }\n\n const jsonApiUrl = url.toString().replace(/\\/$/, '');\n\n const oauth2 =\n tokenUrl && clientId && clientSecret\n ? { tokenUrl, clientId, clientSecret, scope, audience }\n : undefined;\n\n return {\n jsonApiUrl,\n adminApiHost,\n userId,\n actAs,\n walletUrl,\n oauth2,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type CreateCantonChainProviderOptions = {\n /** Raw provider URI (from provider config) */\n uri: string;\n /** When true, uses LocalTokenProvider (self-signed JWTs) instead of OAuth2 */\n isLocal: boolean;\n};\n\n/**\n * Create a {@link CantonChainProvider} from a provider URI.\n *\n * - **isLocal=true**: Uses {@link LocalTokenProvider} with admin-level access (self-signed JWTs)\n * over an unencrypted admin channel, allowed for a loopback admin host only.\n * - **isLocal=false**: Uses {@link ClientCredentialsTokenProvider} with OAuth2 client\n * credentials extracted from the URI query parameters, over a TLS admin channel.\n */\nexport function createCantonChainProvider({\n uri,\n isLocal,\n}: CreateCantonChainProviderOptions): CantonChainProvider {\n const params = parseCantonChainUri(uri);\n\n const tokenProvider = createTokenProvider(params, isLocal);\n\n // ── JSON Ledger API Client ──────────────────────────────────────────\n const configuration = new Configuration({\n basePath: params.jsonApiUrl,\n accessToken: () => tokenProvider.getToken(),\n });\n const client = new CantonClient(configuration, params.userId, {\n walletUrl: params.walletUrl,\n tokenProvider,\n });\n\n // ── gRPC Admin API Client ───────────────────────────────────────────\n const grpcClient = new CantonGrpcClient({\n host: params.adminApiHost,\n tokenProvider,\n insecureTransport: isLocal,\n });\n\n return {\n client,\n grpcClient,\n tokenProvider,\n walletUrl: params.walletUrl,\n };\n}\n\nfunction createTokenProvider(params: CantonChainUriParams, isLocal: boolean): TokenProvider {\n if (isLocal) {\n return new LocalTokenProvider({\n userId: params.userId,\n actAs: params.actAs,\n admin: true,\n });\n }\n\n // TODO(canton): add other prod auth methods (direct JWT passthrough, etc.).\n if (!params.oauth2) {\n throw new Error(\n 'Canton provider requires OAuth2 credentials (token-url, client-id, client-secret in URI or CANTON_CLIENT_SECRET)',\n );\n }\n\n return new ClientCredentialsTokenProvider(params.oauth2);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider.ts"],"names":["parseCantonChainUri","uri","url","URL","adminApiHost","searchParams","get","Error","userId","actAsParam","actAs","split","map","party","trim","filter","length","walletUrl","tokenUrl","undefined","clientId","clientSecret","process","env","CANTON_CLIENT_SECRET","scope","audience","key","delete","jsonApiUrl","toString","replace","oauth2","createCantonChainProvider","isLocal","params","tokenProvider","createTokenProvider","configuration","Configuration","basePath","accessToken","getToken","client","CantonClient","grpcClient","CantonGrpcClient","host","insecureTransport","LocalTokenProvider","admin","ClientCredentialsTokenProvider"],"mappings":"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","file":"W5CHA5AA.js","sourcesContent":["import {\n ClientCredentialsTokenProvider,\n type ClientCredentialsTokenProviderConfig,\n} from './auth/client-credentials-token-provider';\nimport { LocalTokenProvider } from './auth/local-token-provider';\nimport type { TokenProvider } from './auth/token-provider';\nimport { CantonClient } from './client/canton-client';\nimport { CantonGrpcClient } from './client/grpc';\nimport type { ICantonClient } from './client/interface';\nimport { Configuration } from './open-api/runtime';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Type\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * - {@link client} — JSON Ledger API (commands, queries, updates)\n * - {@link grpcClient} — gRPC Admin API (topology transactions, namespace queries)\n * - {@link tokenProvider} — Shared Bearer-token source used by both transports\n * - {@link walletUrl} — Canton Network validator wallet (scan-proxy CIP-56 endpoints)\n */\nexport type CantonChainProvider = {\n client: ICantonClient;\n grpcClient: CantonGrpcClient;\n tokenProvider: TokenProvider;\n /** Validator wallet URL for scan-proxy CIP-56 endpoints. Required. */\n walletUrl: string;\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// URI Parsing\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type CantonChainUriParams = {\n /** Base URL of the JSON Ledger API (e.g. \"http://localhost:5975\") */\n jsonApiUrl: string;\n /** Host:port of the gRPC Admin API (e.g. \"localhost:5076\") */\n adminApiHost: string;\n /** Ledger API user ID (default: \"participant_admin\") */\n userId: string;\n /** Parties granted `actAs` on localnet tokens (comma-separated in the URI). */\n actAs: string[];\n /** Validator wallet URL for scan-proxy CIP-56 endpoints (e.g. \"http://localhost:7201\"). Required. */\n walletUrl: string;\n /** OAuth2 client credentials config — present only for non-local environments */\n oauth2?: ClientCredentialsTokenProviderConfig;\n};\n\n/**\n * Parse a Canton chain provider URI into its constituent parts.\n *\n * URI format:\n * `<json-api-base>?admin-api=<host:port>&user-id=<id>&wallet-url=<url>[&token-url=...&client-id=...&client-secret=...&scope=...&audience=...]`\n *\n * The base URL (everything before the query string) is the JSON Ledger API endpoint.\n * Canton-specific params are extracted and removed; any remaining query params are\n * preserved on the JSON API URL.\n *\n * When `client-secret` is omitted from the URI, `CANTON_CLIENT_SECRET` is read from the\n * environment.\n */\nexport function parseCantonChainUri(uri: string): CantonChainUriParams {\n const url = new URL(uri);\n\n const adminApiHost = url.searchParams.get('admin-api');\n if (!adminApiHost) {\n throw new Error('Canton provider URI missing required \"admin-api\" query parameter');\n }\n\n const userId = url.searchParams.get('user-id') ?? 'participant_admin';\n const actAsParam = url.searchParams.get('act-as');\n const actAs =\n actAsParam\n ?.split(',')\n .map((party) => party.trim())\n .filter((party) => party.length > 0) ?? [];\n const walletUrl = url.searchParams.get('wallet-url');\n if (!walletUrl) {\n throw new Error('Canton provider URI missing required \"wallet-url\" query parameter');\n }\n const tokenUrl = url.searchParams.get('token-url') ?? undefined;\n const clientId = url.searchParams.get('client-id') ?? undefined;\n // Prefer URI param; fall back to env so secrets are not committed in provider configs.\n const clientSecret =\n url.searchParams.get('client-secret') ??\n // eslint-disable-next-line turbo/no-undeclared-env-vars -- runtime OAuth secret, not a turbo task input\n process.env.CANTON_CLIENT_SECRET ??\n undefined;\n const scope = url.searchParams.get('scope') ?? undefined;\n const audience = url.searchParams.get('audience') ?? undefined;\n\n for (const key of [\n 'admin-api',\n 'user-id',\n 'act-as',\n 'wallet-url',\n 'sequencer-url',\n 'sequencer-validators',\n 'sequencer-quorum',\n 'token-url',\n 'client-id',\n 'client-secret',\n 'scope',\n 'audience',\n ]) {\n url.searchParams.delete(key);\n }\n\n const jsonApiUrl = url.toString().replace(/\\/$/, '');\n\n const oauth2 =\n tokenUrl && clientId && clientSecret\n ? { tokenUrl, clientId, clientSecret, scope, audience }\n : undefined;\n\n return {\n jsonApiUrl,\n adminApiHost,\n userId,\n actAs,\n walletUrl,\n oauth2,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type CreateCantonChainProviderOptions = {\n /** Raw provider URI (from provider config) */\n uri: string;\n /** When true, uses LocalTokenProvider (self-signed JWTs) instead of OAuth2 */\n isLocal: boolean;\n};\n\n/**\n * Create a {@link CantonChainProvider} from a provider URI.\n *\n * - **isLocal=true**: Uses {@link LocalTokenProvider} with admin-level access (self-signed JWTs)\n * over an unencrypted admin channel, allowed for a loopback admin host only.\n * - **isLocal=false**: Uses {@link ClientCredentialsTokenProvider} with OAuth2 client\n * credentials extracted from the URI query parameters, over a TLS admin channel.\n */\nexport function createCantonChainProvider({\n uri,\n isLocal,\n}: CreateCantonChainProviderOptions): CantonChainProvider {\n const params = parseCantonChainUri(uri);\n\n const tokenProvider = createTokenProvider(params, isLocal);\n\n // ── JSON Ledger API Client ──────────────────────────────────────────\n const configuration = new Configuration({\n basePath: params.jsonApiUrl,\n accessToken: () => tokenProvider.getToken(),\n });\n const client = new CantonClient(configuration, params.userId, {\n walletUrl: params.walletUrl,\n tokenProvider,\n });\n\n // ── gRPC Admin API Client ───────────────────────────────────────────\n const grpcClient = new CantonGrpcClient({\n host: params.adminApiHost,\n tokenProvider,\n insecureTransport: isLocal,\n });\n\n return {\n client,\n grpcClient,\n tokenProvider,\n walletUrl: params.walletUrl,\n };\n}\n\nfunction createTokenProvider(params: CantonChainUriParams, isLocal: boolean): TokenProvider {\n if (isLocal) {\n return new LocalTokenProvider({\n userId: params.userId,\n actAs: params.actAs,\n admin: true,\n });\n }\n\n // TODO(canton): add other prod auth methods (direct JWT passthrough, etc.).\n if (!params.oauth2) {\n throw new Error(\n 'Canton provider requires OAuth2 credentials (token-url, client-id, client-secret in URI or CANTON_CLIENT_SECRET)',\n );\n }\n\n return new ClientCredentialsTokenProvider(params.oauth2);\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { buildChannelCredentials, synchronizerStore, headStateBaseQuery, computeDecentralizedNamespace } from './K7FRAGGM.js';
|
|
2
1
|
import { buildNamespaceDelegationMapping, buildDecentralizedNamespaceDefinitionMapping, buildPartyToKeyMapping, buildPartyToParticipantMapping } from './RVQWP4JU.js';
|
|
3
2
|
import { SynchronizerConnectivityServiceClient } from './VJ4PVZYL.js';
|
|
3
|
+
import { buildChannelCredentials, synchronizerStore, headStateBaseQuery, computeDecentralizedNamespace } from './K7FRAGGM.js';
|
|
4
4
|
import { computePublicKeyFingerprint } from './WLV6EHDB.js';
|
|
5
5
|
import { CantonProtocolError, CantonError } from './NYEJEKEY.js';
|
|
6
6
|
import { __name } from './VUOMXK5T.js';
|
|
@@ -331,5 +331,5 @@ var CantonGrpcClient = class {
|
|
|
331
331
|
};
|
|
332
332
|
|
|
333
333
|
export { CantonGrpcClient };
|
|
334
|
-
//# sourceMappingURL=
|
|
335
|
-
//# sourceMappingURL=
|
|
334
|
+
//# sourceMappingURL=XENB5GVW.js.map
|
|
335
|
+
//# sourceMappingURL=XENB5GVW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/grpc.ts"],"names":["DEFAULT_GRPC_CLIENT_OPTIONS","CantonGrpcClient","opts","tokenProvider","synchronizerId","GrpcTransport","host","channelCredentials","buildChannelCredentials","insecureTransport","clientOptions","grpcClientOptions","TopologyManagerReadServiceClient","TopologyManagerWriteServiceClient","SynchronizerConnectivityServiceClient","token","getToken","Authorization","response","listConnectedSynchronizers","meta","synchronizer","connectedSynchronizers","CantonProtocolError","mapping","serial","generateTransactions","GenerateTransactionsRequest","create","proposals","GenerateTransactionsRequest_Proposal","operation","Enums_TopologyChangeOp","ADD_REPLACE","store","synchronizerStore","generated","generatedTransactions","getNamespaceDelegation","namespaceFingerprint","listNamespaceDelegation","ListNamespaceDelegationRequest","baseQuery","headStateBaseQuery","filterNamespace","filterTargetKeyFingerprint","results","flatMap","result","item","publicKey","targetKey","namespace","targetKeyFingerprint","computePublicKeyFingerprint","isRootDelegation","context","getDecentralizedNamespaceDefinition","listDecentralizedNamespaceDefinition","ListDecentralizedNamespaceDefinitionRequest","decentralizedNamespace","threshold","owners","getPartyToKeyMapping","partyId","listPartyToKeyMapping","ListPartyToKeyMappingRequest","filterParty","party","signingKeyFingerprints","signingKeys","map","key","getPartyToParticipantMapping","listPartyToParticipant","ListPartyToParticipantRequest","filterParticipant","participants","participant","participantUid","permission","createNamespaceDelegationTx","params","buildNamespaceDelegationMapping","publicKeyDer","createDecentralizedNamespaceDefinitionTx","computeDecentralizedNamespace","buildDecentralizedNamespaceDefinitionMapping","updateDecentralizedNamespaceDefinitionTx","createPartyToKeyTx","buildPartyToKeyMapping","signingPublicKeyDers","createPartyToParticipantTx","buildPartyToParticipantMapping","participantIds","submitTopologyTransactions","transactions","length","CantonError","addTransactions","AddTransactionsRequest","close"],"mappings":";;;;;;;;;AA+CA,IAAMA,2BAAAA,GAA8B;AAChC,EAAA,iCAAA,EAAmC,MAAM,IAAA,GAAO,IAAA;AAChD,EAAA,8BAAA,EAAgC,MAAM,IAAA,GAAO;AACjD,CAAA;AAWO,IAAMC,mBAAN,MAAMA;EA7Db;;;AA8Da,EAAA,UAAA;AACA,EAAA,aAAA;AACA,EAAA,cAAA;AACA,EAAA,aAAA;AACA,EAAA,cAAA;AACT,EAAA,eAAA;;;;AAKA,EAAA,WAAA,CAAYC,IAAAA,EAA+B;AACvC,IAAA,IAAA,CAAK,iBAAiBA,IAAAA,CAAKC,aAAAA;AAC3B,IAAA,IAAA,CAAK,kBAAkBD,IAAAA,CAAKE,cAAAA;AAC5B,IAAA,IAAA,CAAK,UAAA,GAAa,IAAIC,aAAAA,CAAc;AAChCC,MAAAA,IAAAA,EAAMJ,IAAAA,CAAKI,IAAAA;AACXC,MAAAA,kBAAAA,EAAoBC,uBAAAA,CAAwBN,IAAAA,CAAKI,IAAAA,EAAMJ,IAAAA,CAAKO,iBAAiB,CAAA;AAC7EC,MAAAA,aAAAA,EAAeR,KAAKS,iBAAAA,IAAqBX;KAC7C,CAAA;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAIY,gCAAAA,CAAiC,IAAA,CAAK,UAAU,CAAA;AACzE,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAIC,iCAAAA,CAAkC,IAAA,CAAK,UAAU,CAAA;AAC3E,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAIC,qCAAAA,CAAsC,IAAA,CAAK,UAAU,CAAA;AAClF,EAAA;;AAGA,EAAA,MAAM,QAAA,GAAQ;AACV,IAAA,MAAMC,KAAAA,GAAQ,MAAM,IAAA,CAAK,cAAA,CAAeC,QAAAA,EAAQ;AAChD,IAAA,OAAO;AAAEC,MAAAA,aAAAA,EAAe,UAAUF,KAAAA,CAAAA;AAAQ,KAAA;AAC9C,EAAA;;;;;;AAOA,EAAA,MAAM,kBAAA,GAAkB;AACpB,IAAA,IAAI,KAAK,eAAA,EAAiB;AACtB,MAAA,OAAO,IAAA,CAAK,eAAA;AAChB,IAAA;AACA,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAM,IAAA,CAAK,uBAAA,EAAuB;AACzD,IAAA,OAAO,IAAA,CAAK,eAAA;AAChB,EAAA;;;;;;AAOA,EAAA,MAAM,uBAAA,GAAuB;AACzB,IAAA,MAAM,EAAEG,UAAQ,GAAK,MAAM,KAAK,aAAA,CAAcC,0BAAAA,CAC1C,EAAC,EACD;MAAEC,IAAAA,EAAM,MAAM,KAAK,QAAA;KAAW,CAAA;AAElC,IAAA,KAAA,MAAWC,YAAAA,IAAgBH,SAASI,sBAAAA,EAAwB;AACxD,MAAA,IAAID,aAAajB,cAAAA,EAAgB;AAC7B,QAAA,OAAOiB,YAAAA,CAAajB,cAAAA;AACxB,MAAA;AACJ,IAAA;AACA,IAAA,MAAM,IAAImB,oBAAoB,kDAAA,CAAA;AAClC,EAAA;;;;;;;;;;EAWA,MAAM,4BAAA,CACFnB,cAAAA,EACAoB,OAAAA,EACAC,MAAAA,EAAc;AAEd,IAAA,MAAM,EAAEP,UAAQ,GAAK,MAAM,KAAK,cAAA,CAAeQ,oBAAAA,CAC3CC,4BAA4BC,MAAAA,CAAO;MAC/BC,SAAAA,EAAW;AACPC,QAAAA,oCAAAA,CAAqCF,MAAAA,CAAO;AACxCG,UAAAA,SAAAA,EAAWC,sBAAAA,CAAuBC,WAAAA;AAClCR,UAAAA,MAAAA;AACAD,UAAAA,OAAAA;AACAU,UAAAA,KAAAA,EAAOC,kBAAkB/B,cAAAA;SAC7B;;AAER,KAAA,CAAA,EACA;MAAEgB,IAAAA,EAAM,MAAM,KAAK,QAAA;KAAW,CAAA;AAGlC,IAAA,MAAMgB,SAAAA,GAAYlB,QAAAA,CAASmB,qBAAAA,CAAsB,CAAA,CAAA;AAEjD,IAAA,IAAI,CAACD,SAAAA,EAAW;AACZ,MAAA,MAAM,IAAIb,oBAAoB,uDAAA,CAAA;AAClC,IAAA;AAEA,IAAA,OAAOa,SAAAA;AACX,EAAA;;;;;;;;;;AAWA,EAAA,MAAME,uBACFC,oBAAAA,EACmC;AACnC,IAAA,MAAMnC,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAM,EAAEc,UAAQ,GAAK,MAAM,KAAK,aAAA,CAAcsB,uBAAAA,CAC1CC,+BAA+Bb,MAAAA,CAAO;AAClCc,MAAAA,SAAAA,EAAWC,mBAAmBvC,cAAAA,CAAAA;MAC9BwC,eAAAA,EAAiBL,oBAAAA;;MAEjBM,0BAAAA,EAA4B;AAChC,KAAA,CAAA,EACA;MAAEzB,IAAAA,EAAM,MAAM,KAAK,QAAA;KAAW,CAAA;AAGlC,IAAA,OAAOF,QAAAA,CAAS4B,OAAAA,CAAQC,OAAAA,CAAQ,CAACC,MAAAA,KAAAA;AAC7B,MAAA,MAAMC,OAAOD,MAAAA,CAAOC,IAAAA;AACpB,MAAA,MAAMC,SAAAA,GAAYD,MAAME,SAAAA,EAAWD,SAAAA;AACnC,MAAA,IAAI,CAACD,IAAAA,IAAQ,CAACC,SAAAA,EAAW;AACrB,QAAA,OAAO,EAAA;AACX,MAAA;AACA,MAAA,OAAO;AACH,QAAA;AACIE,UAAAA,SAAAA,EAAWH,IAAAA,CAAKG,SAAAA;AAChBC,UAAAA,oBAAAA,EAAsBC,4BAA4BJ,SAAAA,CAAAA;AAClDK,UAAAA,gBAAAA,EAAkBN,IAAAA,CAAKM,gBAAAA;UACvB9B,MAAAA,EAAQuB,MAAAA,CAAOQ,SAAS/B,MAAAA,IAAU;AACtC;;IAER,CAAA,CAAA;AACJ,EAAA;;;;;;;;;;AAWA,EAAA,MAAMgC,oCACFlB,oBAAAA,EACgD;AAChD,IAAA,MAAMnC,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAM,EAAEc,UAAQ,GAAK,MAAM,KAAK,aAAA,CAAcwC,oCAAAA,CAC1CC,4CAA4C/B,MAAAA,CAAO;AAC/Cc,MAAAA,SAAAA,EAAWC,mBAAmBvC,cAAAA,CAAAA;MAC9BwC,eAAAA,EAAiBL;AACrB,KAAA,CAAA,EACA;MAAEnB,IAAAA,EAAM,MAAM,KAAK,QAAA;KAAW,CAAA;AAGlC,IAAA,OAAOF,QAAAA,CAAS4B,OAAAA,CAAQC,OAAAA,CAAQ,CAACC,MAAAA,KAAAA;AAC7B,MAAA,MAAMC,OAAOD,MAAAA,CAAOC,IAAAA;AACpB,MAAA,IAAI,CAACA,IAAAA,EAAM;AACP,QAAA,OAAO,EAAA;AACX,MAAA;AACA,MAAA,OAAO;AACH,QAAA;AACIG,UAAAA,SAAAA,EAAWH,IAAAA,CAAKW,sBAAAA;AAChBC,UAAAA,SAAAA,EAAWZ,IAAAA,CAAKY,SAAAA;UAChBC,MAAAA,EAAQ;eAAIb,IAAAA,CAAKa;;UACjBrC,MAAAA,EAAQuB,MAAAA,CAAOQ,SAAS/B,MAAAA,IAAU;AACtC;;IAER,CAAA,CAAA;AACJ,EAAA;;;;;;;;;AAUA,EAAA,MAAMsC,qBAAqBC,OAAAA,EAAoD;AAC3E,IAAA,MAAM5D,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAM,EAAEc,UAAQ,GAAK,MAAM,KAAK,aAAA,CAAc+C,qBAAAA,CAC1CC,6BAA6BtC,MAAAA,CAAO;AAChCc,MAAAA,SAAAA,EAAWC,mBAAmBvC,cAAAA,CAAAA;MAC9B+D,WAAAA,EAAaH;AACjB,KAAA,CAAA,EACA;MAAE5C,IAAAA,EAAM,MAAM,KAAK,QAAA;KAAW,CAAA;AAGlC,IAAA,OAAOF,QAAAA,CAAS4B,OAAAA,CAAQC,OAAAA,CAAQ,CAACC,MAAAA,KAAAA;AAC7B,MAAA,MAAMC,OAAOD,MAAAA,CAAOC,IAAAA;AACpB,MAAA,IAAI,CAACA,IAAAA,EAAM;AACP,QAAA,OAAO,EAAA;AACX,MAAA;AACA,MAAA,OAAO;AACH,QAAA;AACImB,UAAAA,KAAAA,EAAOnB,IAAAA,CAAKmB,KAAAA;AACZP,UAAAA,SAAAA,EAAWZ,IAAAA,CAAKY,SAAAA;UAChBQ,sBAAAA,EAAwBpB,IAAAA,CAAKqB,YAAYC,GAAAA,CAAI,CAACC,QAC1ClB,2BAAAA,CAA4BkB,GAAAA,CAAItB,SAAS,CAAA,CAAA;UAE7CzB,MAAAA,EAAQuB,MAAAA,CAAOQ,SAAS/B,MAAAA,IAAU;AACtC;;IAER,CAAA,CAAA;AACJ,EAAA;;;;;;;;;;EAWA,MAAMgD,4BAAAA,CACFT,OAAAA,EACAnC,SAAAA,GAAY,KAAA,EAC6B;AACzC,IAAA,MAAMzB,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAM,EAAEc,UAAQ,GAAK,MAAM,KAAK,aAAA,CAAcwD,sBAAAA,CAC1CC,8BAA8B/C,MAAAA,CAAO;MACjCc,SAAAA,EAAWC,kBAAAA,CAAmBvC,gBAAgByB,SAAAA,CAAAA;MAC9CsC,WAAAA,EAAaH,OAAAA;;MAEbY,iBAAAA,EAAmB;AACvB,KAAA,CAAA,EACA;MAAExD,IAAAA,EAAM,MAAM,KAAK,QAAA;KAAW,CAAA;AAGlC,IAAA,OAAOF,QAAAA,CAAS4B,OAAAA,CAAQC,OAAAA,CAAQ,CAACC,MAAAA,KAAAA;AAC7B,MAAA,MAAMC,OAAOD,MAAAA,CAAOC,IAAAA;AACpB,MAAA,IAAI,CAACA,IAAAA,EAAM;AACP,QAAA,OAAO,EAAA;AACX,MAAA;AACA,MAAA,OAAO;AACH,QAAA;AACImB,UAAAA,KAAAA,EAAOnB,IAAAA,CAAKmB,KAAAA;AACZP,UAAAA,SAAAA,EAAWZ,IAAAA,CAAKY,SAAAA;AAChBgB,UAAAA,YAAAA,EAAc5B,IAAAA,CAAK4B,YAAAA,CAAaN,GAAAA,CAAI,CAACO,WAAAA,MAAiB;AAClDC,YAAAA,cAAAA,EAAgBD,WAAAA,CAAYC,cAAAA;AAC5BC,YAAAA,UAAAA,EAAYF,WAAAA,CAAYE;WAC5B,CAAA,CAAA;UACAvD,MAAAA,EAAQuB,MAAAA,CAAOQ,SAAS/B,MAAAA,IAAU;AACtC;;IAER,CAAA,CAAA;AACJ,EAAA;;;;;;;;;;AAWA,EAAA,MAAMwD,4BACFC,MAAAA,EACqC;AACrC,IAAA,MAAM9E,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAMoB,OAAAA,GAAU2D,+BAAAA,CAAgCD,MAAAA,CAAOE,YAAY,CAAA;AACnE,IAAA,OAAO,KAAK,4BAAA,CAA6BhF,cAAAA,EAAgBoB,OAAAA,EAAS0D,MAAAA,CAAOzD,UAAU,CAAA,CAAA;AACvF,EAAA;;;;;;;;;;AAWA,EAAA,MAAM4D,yCACFH,MAAAA,EACqC;AACrC,IAAA,MAAM9E,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAMwD,sBAAAA,GAAyB0B,6BAAAA,CAA8BJ,MAAAA,CAAOpB,MAAM,CAAA;AAC1E,IAAA,MAAMtC,UAAU+D,4CAAAA,CACZ3B,sBAAAA,EACAsB,MAAAA,CAAOrB,SAAAA,EACPqB,OAAOpB,MAAM,CAAA;AAEjB,IAAA,OAAO,KAAK,4BAAA,CAA6B1D,cAAAA,EAAgBoB,OAAAA,EAAS0D,MAAAA,CAAOzD,UAAU,CAAA,CAAA;AACvF,EAAA;AAEA,EAAA,MAAM+D,yCACFN,MAAAA,EACqC;AACrC,IAAA,MAAM9E,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAMoB,UAAU+D,4CAAAA,CACZL,MAAAA,CAAO9B,WACP8B,MAAAA,CAAOrB,SAAAA,EACPqB,OAAOpB,MAAM,CAAA;AAEjB,IAAA,OAAO,KAAK,4BAAA,CAA6B1D,cAAAA,EAAgBoB,OAAAA,EAAS0D,MAAAA,CAAOzD,UAAU,CAAA,CAAA;AACvF,EAAA;;;;;;;;;AAUA,EAAA,MAAMgE,mBACFP,MAAAA,EACqC;AACrC,IAAA,MAAM9E,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAMoB,UAAUkE,sBAAAA,CACZR,MAAAA,CAAOlB,SACPkB,MAAAA,CAAOS,oBAAAA,EACPT,OAAOrB,SAAS,CAAA;AAEpB,IAAA,OAAO,KAAK,4BAAA,CAA6BzD,cAAAA,EAAgBoB,OAAAA,EAAS0D,MAAAA,CAAOzD,UAAU,CAAA,CAAA;AACvF,EAAA;;;;;;;;;;AAWA,EAAA,MAAMmE,2BACFV,MAAAA,EACqC;AACrC,IAAA,MAAM9E,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAMoB,UAAUqE,8BAAAA,CACZX,MAAAA,CAAOlB,SACPkB,MAAAA,CAAOY,cAAAA,EACPZ,OAAOrB,SAAS,CAAA;AAEpB,IAAA,OAAO,KAAK,4BAAA,CAA6BzD,cAAAA,EAAgBoB,OAAAA,EAAS0D,MAAAA,CAAOzD,UAAU,CAAA,CAAA;AACvF,EAAA;;;;;;;;;;;;;;AAeA,EAAA,MAAMsE,2BACFC,YAAAA,EACa;AACb,IAAA,IAAIA,YAAAA,CAAaC,WAAW,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAIC,YAAY,mDAAA,CAAA;AAC1B,IAAA;AACA,IAAA,MAAM9F,cAAAA,GAAiB,MAAM,IAAA,CAAK,kBAAA,EAAkB;AACpD,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe+F,eAAAA,CACtBC,sBAAAA,CAAuBxE,MAAAA,CAAO;MAC1BoE,YAAAA,EAAc;AAAIA,QAAAA,GAAAA;;AAClB9D,MAAAA,KAAAA,EAAOC,kBAAkB/B,cAAAA;AAC7B,KAAA,CAAA,EACA;MAAEgB,IAAAA,EAAM,MAAM,KAAK,QAAA;KAAW,CAAA;AAEtC,EAAA;;EAGAiF,KAAAA,GAAc;AACV,IAAA,IAAA,CAAK,WAAWA,KAAAA,EAAK;AACzB,EAAA;AACJ","file":"3HAVU6NI.js","sourcesContent":["import {\n AddTransactionsRequest,\n Enums_TopologyChangeOp,\n GenerateTransactionsRequest,\n GenerateTransactionsRequest_Proposal,\n ListDecentralizedNamespaceDefinitionRequest,\n ListNamespaceDelegationRequest,\n ListPartyToKeyMappingRequest,\n ListPartyToParticipantRequest,\n type SignedTopologyTransaction,\n TopologyManagerReadServiceClient,\n TopologyManagerWriteServiceClient,\n type TopologyMapping,\n} from '@canton-network/core-ledger-proto';\nimport { GrpcTransport } from '@protobuf-ts/grpc-transport';\n\nimport type { TokenProvider } from '../auth/token-provider';\nimport { CantonError, CantonProtocolError } from '../errors';\nimport {\n buildDecentralizedNamespaceDefinitionMapping,\n buildNamespaceDelegationMapping,\n buildPartyToKeyMapping,\n buildPartyToParticipantMapping,\n} from './topology/mappings';\nimport { SynchronizerConnectivityServiceClient } from './topology/synchronizer-connectivity';\nimport type {\n CantonGrpcClientOptions,\n CreateDecentralizedNamespaceDefinitionTxParams,\n CreateNamespaceDelegationTxParams,\n CreatePartyToKeyMappingTxParams,\n CreatePartyToParticipantMappingTxParams,\n DecentralizedNamespaceDefinitionState,\n GeneratedTopologyTransaction,\n NamespaceDelegationState,\n PartyToKeyMappingState,\n PartyToParticipantMappingState,\n UpdateDecentralizedNamespaceDefinitionTxParams,\n} from './topology/types';\nimport {\n buildChannelCredentials,\n computeDecentralizedNamespace,\n headStateBaseQuery,\n synchronizerStore,\n} from './topology/utils';\nimport { computePublicKeyFingerprint } from './utils';\n\n/** Default gRPC client options: 128 MiB message-size limits for large admin responses. */\nconst DEFAULT_GRPC_CLIENT_OPTIONS = {\n 'grpc.max_receive_message_length': 128 * 1024 * 1024,\n 'grpc.max_send_message_length': 128 * 1024 * 1024,\n} as const;\n\n/**\n * gRPC client for the Canton participant admin Topology Manager API.\n *\n * Exposes read queries for topology mappings and write helpers that call\n * `GenerateTransactions` to produce unsigned topology transactions and\n * `AddTransactions` to submit signed ones.\n *\n * A fresh Bearer token is attached to each RPC via {@link TokenProvider}.\n */\nexport class CantonGrpcClient {\n readonly #transport: GrpcTransport;\n readonly #topologyRead: TopologyManagerReadServiceClient;\n readonly #topologyWrite: TopologyManagerWriteServiceClient;\n readonly #connectivity: SynchronizerConnectivityServiceClient;\n readonly #tokenProvider: TokenProvider;\n #synchronizerId?: string;\n\n /**\n * @param opts - Admin API host, auth, optional synchronizer id, and transport security.\n */\n constructor(opts: CantonGrpcClientOptions) {\n this.#tokenProvider = opts.tokenProvider;\n this.#synchronizerId = opts.synchronizerId;\n this.#transport = new GrpcTransport({\n host: opts.host,\n channelCredentials: buildChannelCredentials(opts.host, opts.insecureTransport),\n clientOptions: opts.grpcClientOptions ?? DEFAULT_GRPC_CLIENT_OPTIONS,\n });\n this.#topologyRead = new TopologyManagerReadServiceClient(this.#transport);\n this.#topologyWrite = new TopologyManagerWriteServiceClient(this.#transport);\n this.#connectivity = new SynchronizerConnectivityServiceClient(this.#transport);\n }\n\n /** Returns per-RPC gRPC metadata with a fresh Bearer token. */\n async #getMeta(): Promise<Record<string, string>> {\n const token = await this.#tokenProvider.getToken();\n return { Authorization: `Bearer ${token}` };\n }\n\n /**\n * Returns the client synchronizer id, discovering it on first use when omitted at construction.\n *\n * @throws {CantonProtocolError} If the participant exposes no synchronizer store.\n */\n async #getSynchronizerId(): Promise<string> {\n if (this.#synchronizerId) {\n return this.#synchronizerId;\n }\n this.#synchronizerId = await this.#discoverSynchronizerId();\n return this.#synchronizerId;\n }\n\n /**\n * Resolves the logical id of the first synchronizer the participant is connected to.\n *\n * @throws {CantonProtocolError} If the participant is not connected to any synchronizer.\n */\n async #discoverSynchronizerId(): Promise<string> {\n const { response } = await this.#connectivity.listConnectedSynchronizers(\n {},\n { meta: await this.#getMeta() },\n );\n for (const synchronizer of response.connectedSynchronizers) {\n if (synchronizer.synchronizerId) {\n return synchronizer.synchronizerId;\n }\n }\n throw new CantonProtocolError('Participant is not connected to any synchronizer');\n }\n\n /**\n * Calls `GenerateTransactions` for a single ADD_REPLACE mapping.\n *\n * @param synchronizerId - Synchronizer store to target.\n * @param mapping - Topology mapping to encode into the transaction.\n * @param serial - Topology serial (`0` lets Canton auto-determine).\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n * @throws {CantonProtocolError} If the RPC returns no generated transaction.\n */\n async #generateTopologyTransaction(\n synchronizerId: string,\n mapping: TopologyMapping,\n serial: number,\n ): Promise<GeneratedTopologyTransaction> {\n const { response } = await this.#topologyWrite.generateTransactions(\n GenerateTransactionsRequest.create({\n proposals: [\n GenerateTransactionsRequest_Proposal.create({\n operation: Enums_TopologyChangeOp.ADD_REPLACE,\n serial,\n mapping,\n store: synchronizerStore(synchronizerId),\n }),\n ],\n }),\n { meta: await this.#getMeta() },\n );\n\n const generated = response.generatedTransactions[0];\n\n if (!generated) {\n throw new CantonProtocolError('GenerateTransactions returned no topology transaction');\n }\n\n return generated;\n }\n\n /**\n * Lists Namespace Delegation (NSD) mappings for a namespace.\n *\n * Queries topology head state on the synchronizer. Returns every result from\n * the list RPC.\n *\n * @param namespaceFingerprint - Namespace to filter on (for root NSD, the owner key fingerprint).\n * @returns All matching NSD mappings, or an empty array if none exist.\n */\n async getNamespaceDelegation(\n namespaceFingerprint: string,\n ): Promise<NamespaceDelegationState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listNamespaceDelegation(\n ListNamespaceDelegationRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId),\n filterNamespace: namespaceFingerprint,\n // Empty string = no target-key filter; return all delegations for this namespace.\n filterTargetKeyFingerprint: '',\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n const publicKey = item?.targetKey?.publicKey;\n if (!item || !publicKey) {\n return [];\n }\n return [\n {\n namespace: item.namespace,\n targetKeyFingerprint: computePublicKeyFingerprint(publicKey),\n isRootDelegation: item.isRootDelegation,\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Lists Decentralized Namespace Definition (DND) mappings for a namespace.\n *\n * Queries topology head state on the synchronizer. For a party id `hint::1220…`,\n * pass the `1220…` suffix as `namespaceFingerprint`.\n *\n * @param namespaceFingerprint - Decentralized namespace fingerprint to filter on.\n * @returns All matching DND mappings, or an empty array if none exist.\n */\n async getDecentralizedNamespaceDefinition(\n namespaceFingerprint: string,\n ): Promise<DecentralizedNamespaceDefinitionState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listDecentralizedNamespaceDefinition(\n ListDecentralizedNamespaceDefinitionRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId),\n filterNamespace: namespaceFingerprint,\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n if (!item) {\n return [];\n }\n return [\n {\n namespace: item.decentralizedNamespace,\n threshold: item.threshold,\n owners: [...item.owners],\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Lists Party-to-Key (PTK) mappings for a party.\n *\n * Queries topology head state on the synchronizer.\n *\n * @param partyId - Full party identifier (e.g. `hint::1220…`).\n * @returns All matching PTK mappings, or an empty array if none exist.\n */\n async getPartyToKeyMapping(partyId: string): Promise<PartyToKeyMappingState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listPartyToKeyMapping(\n ListPartyToKeyMappingRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId),\n filterParty: partyId,\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n if (!item) {\n return [];\n }\n return [\n {\n party: item.party,\n threshold: item.threshold,\n signingKeyFingerprints: item.signingKeys.map((key) =>\n computePublicKeyFingerprint(key.publicKey),\n ),\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Lists Party-to-Participant (PTP) mappings for a party.\n *\n * Queries topology head state on the synchronizer.\n *\n * @param partyId - Full party identifier (e.g. `hint::1220…`).\n * @param proposals - If `true`, query pending proposals instead of authorized mappings.\n * @returns All matching PTP mappings, or an empty array if none exist.\n */\n async getPartyToParticipantMapping(\n partyId: string,\n proposals = false,\n ): Promise<PartyToParticipantMappingState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listPartyToParticipant(\n ListPartyToParticipantRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId, proposals),\n filterParty: partyId,\n // Empty string = no participant filter; return all hosting mappings for this party.\n filterParticipant: '',\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n if (!item) {\n return [];\n }\n return [\n {\n party: item.party,\n threshold: item.threshold,\n participants: item.participants.map((participant) => ({\n participantUid: participant.participantUid,\n permission: participant.permission,\n })),\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Builds an unsigned Namespace Delegation (NSD) topology transaction.\n *\n * Calls `GenerateTransactions` with an ADD_REPLACE mapping. The returned\n * `transactionHash` must be signed by the namespace key.\n *\n * @param params - Owner public key and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createNamespaceDelegationTx(\n params: CreateNamespaceDelegationTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildNamespaceDelegationMapping(params.publicKeyDer);\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Builds an unsigned Decentralized Namespace Definition (DND) topology transaction.\n *\n * The decentralized namespace id is derived from `params.owners`. All owners\n * must sign the transaction hash.\n *\n * @param params - Owner fingerprints, threshold, and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createDecentralizedNamespaceDefinitionTx(\n params: CreateDecentralizedNamespaceDefinitionTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const decentralizedNamespace = computeDecentralizedNamespace(params.owners);\n const mapping = buildDecentralizedNamespaceDefinitionMapping(\n decentralizedNamespace,\n params.threshold,\n params.owners,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n async updateDecentralizedNamespaceDefinitionTx(\n params: UpdateDecentralizedNamespaceDefinitionTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildDecentralizedNamespaceDefinitionMapping(\n params.namespace,\n params.threshold,\n params.owners,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Builds an unsigned Party-to-Key (PTK) topology transaction.\n *\n * Decentralized namespace owners must sign the transaction hash.\n *\n * @param params - Party id, signing keys, threshold, and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createPartyToKeyTx(\n params: CreatePartyToKeyMappingTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildPartyToKeyMapping(\n params.partyId,\n params.signingPublicKeyDers,\n params.threshold,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Builds an unsigned Party-to-Participant (PTP) topology transaction.\n *\n * Party owners sign the transaction hash. On submit, set `proposal: true` on the\n * signed transaction so the hosting participant can authorize via `Authorize`.\n *\n * @param params - Party id, participant ids, threshold, and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createPartyToParticipantTx(\n params: CreatePartyToParticipantMappingTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildPartyToParticipantMapping(\n params.partyId,\n params.participantIds,\n params.threshold,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Submits signed topology transactions to the synchronizer store.\n *\n * Multiple transactions are submitted atomically in one `AddTransactions` call.\n * When batching, sign `computeMultiTransactionHash` over all transaction hashes\n * and attach the same `MultiTransactionSignatures` to each entry.\n *\n * Set `proposal: true` on a transaction when the hosting participant must\n * authorize that mapping afterward.\n *\n * @param transactions - One or more signed topology transactions.\n * @throws {CantonError} If `transactions` is empty.\n */\n async submitTopologyTransactions(\n transactions: readonly SignedTopologyTransaction[],\n ): Promise<void> {\n if (transactions.length === 0) {\n throw new CantonError('AddTransactions requires at least one transaction');\n }\n const synchronizerId = await this.#getSynchronizerId();\n await this.#topologyWrite.addTransactions(\n AddTransactionsRequest.create({\n transactions: [...transactions],\n store: synchronizerStore(synchronizerId),\n }),\n { meta: await this.#getMeta() },\n );\n }\n\n /** Closes the underlying gRPC transport. */\n close(): void {\n this.#transport.close();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/grpc.ts"],"names":["DEFAULT_GRPC_CLIENT_OPTIONS","CantonGrpcClient","opts","tokenProvider","synchronizerId","GrpcTransport","host","channelCredentials","buildChannelCredentials","insecureTransport","clientOptions","grpcClientOptions","TopologyManagerReadServiceClient","TopologyManagerWriteServiceClient","SynchronizerConnectivityServiceClient","token","getToken","Authorization","response","listConnectedSynchronizers","meta","synchronizer","connectedSynchronizers","CantonProtocolError","mapping","serial","generateTransactions","GenerateTransactionsRequest","create","proposals","GenerateTransactionsRequest_Proposal","operation","Enums_TopologyChangeOp","ADD_REPLACE","store","synchronizerStore","generated","generatedTransactions","getNamespaceDelegation","namespaceFingerprint","listNamespaceDelegation","ListNamespaceDelegationRequest","baseQuery","headStateBaseQuery","filterNamespace","filterTargetKeyFingerprint","results","flatMap","result","item","publicKey","targetKey","namespace","targetKeyFingerprint","computePublicKeyFingerprint","isRootDelegation","context","getDecentralizedNamespaceDefinition","listDecentralizedNamespaceDefinition","ListDecentralizedNamespaceDefinitionRequest","decentralizedNamespace","threshold","owners","getPartyToKeyMapping","partyId","listPartyToKeyMapping","ListPartyToKeyMappingRequest","filterParty","party","signingKeyFingerprints","signingKeys","map","key","getPartyToParticipantMapping","listPartyToParticipant","ListPartyToParticipantRequest","filterParticipant","participants","participant","participantUid","permission","createNamespaceDelegationTx","params","buildNamespaceDelegationMapping","publicKeyDer","createDecentralizedNamespaceDefinitionTx","computeDecentralizedNamespace","buildDecentralizedNamespaceDefinitionMapping","updateDecentralizedNamespaceDefinitionTx","createPartyToKeyTx","buildPartyToKeyMapping","signingPublicKeyDers","createPartyToParticipantTx","buildPartyToParticipantMapping","participantIds","submitTopologyTransactions","transactions","length","CantonError","addTransactions","AddTransactionsRequest","close"],"mappings":"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","file":"XENB5GVW.js","sourcesContent":["import {\n AddTransactionsRequest,\n Enums_TopologyChangeOp,\n GenerateTransactionsRequest,\n GenerateTransactionsRequest_Proposal,\n ListDecentralizedNamespaceDefinitionRequest,\n ListNamespaceDelegationRequest,\n ListPartyToKeyMappingRequest,\n ListPartyToParticipantRequest,\n type SignedTopologyTransaction,\n TopologyManagerReadServiceClient,\n TopologyManagerWriteServiceClient,\n type TopologyMapping,\n} from '@canton-network/core-ledger-proto';\nimport { GrpcTransport } from '@protobuf-ts/grpc-transport';\n\nimport type { TokenProvider } from '../auth/token-provider';\nimport { CantonError, CantonProtocolError } from '../errors';\nimport {\n buildDecentralizedNamespaceDefinitionMapping,\n buildNamespaceDelegationMapping,\n buildPartyToKeyMapping,\n buildPartyToParticipantMapping,\n} from './topology/mappings';\nimport { SynchronizerConnectivityServiceClient } from './topology/synchronizer-connectivity';\nimport type {\n CantonGrpcClientOptions,\n CreateDecentralizedNamespaceDefinitionTxParams,\n CreateNamespaceDelegationTxParams,\n CreatePartyToKeyMappingTxParams,\n CreatePartyToParticipantMappingTxParams,\n DecentralizedNamespaceDefinitionState,\n GeneratedTopologyTransaction,\n NamespaceDelegationState,\n PartyToKeyMappingState,\n PartyToParticipantMappingState,\n UpdateDecentralizedNamespaceDefinitionTxParams,\n} from './topology/types';\nimport {\n buildChannelCredentials,\n computeDecentralizedNamespace,\n headStateBaseQuery,\n synchronizerStore,\n} from './topology/utils';\nimport { computePublicKeyFingerprint } from './utils';\n\n/** Default gRPC client options: 128 MiB message-size limits for large admin responses. */\nconst DEFAULT_GRPC_CLIENT_OPTIONS = {\n 'grpc.max_receive_message_length': 128 * 1024 * 1024,\n 'grpc.max_send_message_length': 128 * 1024 * 1024,\n} as const;\n\n/**\n * gRPC client for the Canton participant admin Topology Manager API.\n *\n * Exposes read queries for topology mappings and write helpers that call\n * `GenerateTransactions` to produce unsigned topology transactions and\n * `AddTransactions` to submit signed ones.\n *\n * A fresh Bearer token is attached to each RPC via {@link TokenProvider}.\n */\nexport class CantonGrpcClient {\n readonly #transport: GrpcTransport;\n readonly #topologyRead: TopologyManagerReadServiceClient;\n readonly #topologyWrite: TopologyManagerWriteServiceClient;\n readonly #connectivity: SynchronizerConnectivityServiceClient;\n readonly #tokenProvider: TokenProvider;\n #synchronizerId?: string;\n\n /**\n * @param opts - Admin API host, auth, optional synchronizer id, and transport security.\n */\n constructor(opts: CantonGrpcClientOptions) {\n this.#tokenProvider = opts.tokenProvider;\n this.#synchronizerId = opts.synchronizerId;\n this.#transport = new GrpcTransport({\n host: opts.host,\n channelCredentials: buildChannelCredentials(opts.host, opts.insecureTransport),\n clientOptions: opts.grpcClientOptions ?? DEFAULT_GRPC_CLIENT_OPTIONS,\n });\n this.#topologyRead = new TopologyManagerReadServiceClient(this.#transport);\n this.#topologyWrite = new TopologyManagerWriteServiceClient(this.#transport);\n this.#connectivity = new SynchronizerConnectivityServiceClient(this.#transport);\n }\n\n /** Returns per-RPC gRPC metadata with a fresh Bearer token. */\n async #getMeta(): Promise<Record<string, string>> {\n const token = await this.#tokenProvider.getToken();\n return { Authorization: `Bearer ${token}` };\n }\n\n /**\n * Returns the client synchronizer id, discovering it on first use when omitted at construction.\n *\n * @throws {CantonProtocolError} If the participant exposes no synchronizer store.\n */\n async #getSynchronizerId(): Promise<string> {\n if (this.#synchronizerId) {\n return this.#synchronizerId;\n }\n this.#synchronizerId = await this.#discoverSynchronizerId();\n return this.#synchronizerId;\n }\n\n /**\n * Resolves the logical id of the first synchronizer the participant is connected to.\n *\n * @throws {CantonProtocolError} If the participant is not connected to any synchronizer.\n */\n async #discoverSynchronizerId(): Promise<string> {\n const { response } = await this.#connectivity.listConnectedSynchronizers(\n {},\n { meta: await this.#getMeta() },\n );\n for (const synchronizer of response.connectedSynchronizers) {\n if (synchronizer.synchronizerId) {\n return synchronizer.synchronizerId;\n }\n }\n throw new CantonProtocolError('Participant is not connected to any synchronizer');\n }\n\n /**\n * Calls `GenerateTransactions` for a single ADD_REPLACE mapping.\n *\n * @param synchronizerId - Synchronizer store to target.\n * @param mapping - Topology mapping to encode into the transaction.\n * @param serial - Topology serial (`0` lets Canton auto-determine).\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n * @throws {CantonProtocolError} If the RPC returns no generated transaction.\n */\n async #generateTopologyTransaction(\n synchronizerId: string,\n mapping: TopologyMapping,\n serial: number,\n ): Promise<GeneratedTopologyTransaction> {\n const { response } = await this.#topologyWrite.generateTransactions(\n GenerateTransactionsRequest.create({\n proposals: [\n GenerateTransactionsRequest_Proposal.create({\n operation: Enums_TopologyChangeOp.ADD_REPLACE,\n serial,\n mapping,\n store: synchronizerStore(synchronizerId),\n }),\n ],\n }),\n { meta: await this.#getMeta() },\n );\n\n const generated = response.generatedTransactions[0];\n\n if (!generated) {\n throw new CantonProtocolError('GenerateTransactions returned no topology transaction');\n }\n\n return generated;\n }\n\n /**\n * Lists Namespace Delegation (NSD) mappings for a namespace.\n *\n * Queries topology head state on the synchronizer. Returns every result from\n * the list RPC.\n *\n * @param namespaceFingerprint - Namespace to filter on (for root NSD, the owner key fingerprint).\n * @returns All matching NSD mappings, or an empty array if none exist.\n */\n async getNamespaceDelegation(\n namespaceFingerprint: string,\n ): Promise<NamespaceDelegationState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listNamespaceDelegation(\n ListNamespaceDelegationRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId),\n filterNamespace: namespaceFingerprint,\n // Empty string = no target-key filter; return all delegations for this namespace.\n filterTargetKeyFingerprint: '',\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n const publicKey = item?.targetKey?.publicKey;\n if (!item || !publicKey) {\n return [];\n }\n return [\n {\n namespace: item.namespace,\n targetKeyFingerprint: computePublicKeyFingerprint(publicKey),\n isRootDelegation: item.isRootDelegation,\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Lists Decentralized Namespace Definition (DND) mappings for a namespace.\n *\n * Queries topology head state on the synchronizer. For a party id `hint::1220…`,\n * pass the `1220…` suffix as `namespaceFingerprint`.\n *\n * @param namespaceFingerprint - Decentralized namespace fingerprint to filter on.\n * @returns All matching DND mappings, or an empty array if none exist.\n */\n async getDecentralizedNamespaceDefinition(\n namespaceFingerprint: string,\n ): Promise<DecentralizedNamespaceDefinitionState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listDecentralizedNamespaceDefinition(\n ListDecentralizedNamespaceDefinitionRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId),\n filterNamespace: namespaceFingerprint,\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n if (!item) {\n return [];\n }\n return [\n {\n namespace: item.decentralizedNamespace,\n threshold: item.threshold,\n owners: [...item.owners],\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Lists Party-to-Key (PTK) mappings for a party.\n *\n * Queries topology head state on the synchronizer.\n *\n * @param partyId - Full party identifier (e.g. `hint::1220…`).\n * @returns All matching PTK mappings, or an empty array if none exist.\n */\n async getPartyToKeyMapping(partyId: string): Promise<PartyToKeyMappingState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listPartyToKeyMapping(\n ListPartyToKeyMappingRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId),\n filterParty: partyId,\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n if (!item) {\n return [];\n }\n return [\n {\n party: item.party,\n threshold: item.threshold,\n signingKeyFingerprints: item.signingKeys.map((key) =>\n computePublicKeyFingerprint(key.publicKey),\n ),\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Lists Party-to-Participant (PTP) mappings for a party.\n *\n * Queries topology head state on the synchronizer.\n *\n * @param partyId - Full party identifier (e.g. `hint::1220…`).\n * @param proposals - If `true`, query pending proposals instead of authorized mappings.\n * @returns All matching PTP mappings, or an empty array if none exist.\n */\n async getPartyToParticipantMapping(\n partyId: string,\n proposals = false,\n ): Promise<PartyToParticipantMappingState[]> {\n const synchronizerId = await this.#getSynchronizerId();\n const { response } = await this.#topologyRead.listPartyToParticipant(\n ListPartyToParticipantRequest.create({\n baseQuery: headStateBaseQuery(synchronizerId, proposals),\n filterParty: partyId,\n // Empty string = no participant filter; return all hosting mappings for this party.\n filterParticipant: '',\n }),\n { meta: await this.#getMeta() },\n );\n\n return response.results.flatMap((result) => {\n const item = result.item;\n if (!item) {\n return [];\n }\n return [\n {\n party: item.party,\n threshold: item.threshold,\n participants: item.participants.map((participant) => ({\n participantUid: participant.participantUid,\n permission: participant.permission,\n })),\n serial: result.context?.serial ?? 0,\n },\n ];\n });\n }\n\n /**\n * Builds an unsigned Namespace Delegation (NSD) topology transaction.\n *\n * Calls `GenerateTransactions` with an ADD_REPLACE mapping. The returned\n * `transactionHash` must be signed by the namespace key.\n *\n * @param params - Owner public key and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createNamespaceDelegationTx(\n params: CreateNamespaceDelegationTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildNamespaceDelegationMapping(params.publicKeyDer);\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Builds an unsigned Decentralized Namespace Definition (DND) topology transaction.\n *\n * The decentralized namespace id is derived from `params.owners`. All owners\n * must sign the transaction hash.\n *\n * @param params - Owner fingerprints, threshold, and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createDecentralizedNamespaceDefinitionTx(\n params: CreateDecentralizedNamespaceDefinitionTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const decentralizedNamespace = computeDecentralizedNamespace(params.owners);\n const mapping = buildDecentralizedNamespaceDefinitionMapping(\n decentralizedNamespace,\n params.threshold,\n params.owners,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n async updateDecentralizedNamespaceDefinitionTx(\n params: UpdateDecentralizedNamespaceDefinitionTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildDecentralizedNamespaceDefinitionMapping(\n params.namespace,\n params.threshold,\n params.owners,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Builds an unsigned Party-to-Key (PTK) topology transaction.\n *\n * Decentralized namespace owners must sign the transaction hash.\n *\n * @param params - Party id, signing keys, threshold, and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createPartyToKeyTx(\n params: CreatePartyToKeyMappingTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildPartyToKeyMapping(\n params.partyId,\n params.signingPublicKeyDers,\n params.threshold,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Builds an unsigned Party-to-Participant (PTP) topology transaction.\n *\n * Party owners sign the transaction hash. On submit, set `proposal: true` on the\n * signed transaction so the hosting participant can authorize via `Authorize`.\n *\n * @param params - Party id, participant ids, threshold, and optional serial.\n * @returns Unsigned topology transaction (`serializedTransaction`, `transactionHash`).\n */\n async createPartyToParticipantTx(\n params: CreatePartyToParticipantMappingTxParams,\n ): Promise<GeneratedTopologyTransaction> {\n const synchronizerId = await this.#getSynchronizerId();\n const mapping = buildPartyToParticipantMapping(\n params.partyId,\n params.participantIds,\n params.threshold,\n );\n return this.#generateTopologyTransaction(synchronizerId, mapping, params.serial ?? 0);\n }\n\n /**\n * Submits signed topology transactions to the synchronizer store.\n *\n * Multiple transactions are submitted atomically in one `AddTransactions` call.\n * When batching, sign `computeMultiTransactionHash` over all transaction hashes\n * and attach the same `MultiTransactionSignatures` to each entry.\n *\n * Set `proposal: true` on a transaction when the hosting participant must\n * authorize that mapping afterward.\n *\n * @param transactions - One or more signed topology transactions.\n * @throws {CantonError} If `transactions` is empty.\n */\n async submitTopologyTransactions(\n transactions: readonly SignedTopologyTransaction[],\n ): Promise<void> {\n if (transactions.length === 0) {\n throw new CantonError('AddTransactions requires at least one transaction');\n }\n const synchronizerId = await this.#getSynchronizerId();\n await this.#topologyWrite.addTransactions(\n AddTransactionsRequest.create({\n transactions: [...transactions],\n store: synchronizerStore(synchronizerId),\n }),\n { meta: await this.#getMeta() },\n );\n }\n\n /** Closes the underlying gRPC transport. */\n close(): void {\n this.#transport.close();\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveCantonRefreshPlan } from './
|
|
1
|
+
import { resolveCantonRefreshPlan } from './PDVMANRS.js';
|
|
2
2
|
import { substituteRefsToCids } from './BSVJEBKM.js';
|
|
3
3
|
import { createContractAddressResolver } from './RVJRKYSC.js';
|
|
4
4
|
import { AMULET_INSTRUMENT_ID } from './P7PG4R5T.js';
|
|
@@ -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=ZZUOA324.js.map
|
|
82
|
+
//# sourceMappingURL=ZZUOA324.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":"ZZUOA324.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 CantonCommand,\n CantonDisclosedContract,\n CantonUnresolvedCommand,\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: CantonUnresolvedCommand[];\n unresolvedDisclosedContracts: CantonDisclosedContract[];\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: CantonCommand[];\n disclosedContracts: CantonDisclosedContract[];\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: CantonDisclosedContract[]): 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: CantonDisclosedContract[] = [];\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"]}
|
package/dist/client/grpc.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { CantonGrpcClient } from '../
|
|
2
|
-
import '../K7FRAGGM.js';
|
|
1
|
+
export { CantonGrpcClient } from '../XENB5GVW.js';
|
|
3
2
|
import '../RVQWP4JU.js';
|
|
4
3
|
import '../VJ4PVZYL.js';
|
|
4
|
+
import '../K7FRAGGM.js';
|
|
5
5
|
import '../WLV6EHDB.js';
|
|
6
6
|
import '../CMDFOA7C.js';
|
|
7
7
|
import '../NYEJEKEY.js';
|
package/dist/client/index.js
CHANGED
|
@@ -284,10 +284,10 @@ import '../XVX7EVTW.js';
|
|
|
284
284
|
export { AMULET_INSTRUMENT_ID, fetchAcceptContext, fetchAmuletContext, fetchAmuletRules, fetchAmuletTransferFactoryContext, fetchDsoParty, fetchOpenAndIssuingMiningRounds, fetchTransferInstructionContext, findAmuletRulesDisclosures, injectExternalPartyAmuletRules, toDisclosedContract } from '../P7PG4R5T.js';
|
|
285
285
|
import '../L64D74BZ.js';
|
|
286
286
|
import '../YMXOSAU4.js';
|
|
287
|
-
export { CantonGrpcClient } from '../
|
|
288
|
-
export { computeDecentralizedNamespace, computeMultiTransactionHash } from '../K7FRAGGM.js';
|
|
287
|
+
export { CantonGrpcClient } from '../XENB5GVW.js';
|
|
289
288
|
import '../RVQWP4JU.js';
|
|
290
289
|
import '../VJ4PVZYL.js';
|
|
290
|
+
export { computeDecentralizedNamespace, computeMultiTransactionHash } from '../K7FRAGGM.js';
|
|
291
291
|
export { cantonMultihash, computeCantonFingerprint, computePublicKeyFingerprint, extractTransactions } from '../WLV6EHDB.js';
|
|
292
292
|
import '../CMDFOA7C.js';
|
|
293
293
|
import '../NYEJEKEY.js';
|
package/dist/index.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
+
import './5GUYLHA7.js';
|
|
1
2
|
import './NQWAH7C4.js';
|
|
3
|
+
export { resolveCantonTransaction } from './ZZUOA324.js';
|
|
4
|
+
export { resolveCantonActiveContracts, resolveCantonRefreshPlan, selectContractsByGte } from './PDVMANRS.js';
|
|
2
5
|
export { wrapLzSdk } from './I5ERUZDD.js';
|
|
3
|
-
export { prepareRefreshableAmuletTransfer } from './VJKB367I.js';
|
|
4
|
-
export { prepareRefreshableTransferInstructionAcceptance } from './G4IAVHVV.js';
|
|
5
|
-
export { resolveCantonTransaction } from './RLUQWVZ6.js';
|
|
6
|
-
export { resolveCantonActiveContracts, resolveCantonRefreshPlan, selectContractsByGte } from './ABHGT5DF.js';
|
|
7
|
-
export { resolveCantonOneSigTransferBatch } from './BZXMNRDO.js';
|
|
8
|
-
import './Q3BYU6GJ.js';
|
|
9
6
|
export { substituteCidsToRefs, substituteRefsToCids } from './BSVJEBKM.js';
|
|
10
|
-
export {
|
|
7
|
+
export { CantonSdk } from './5W44RCVL.js';
|
|
11
8
|
export { resolveCantonOneSigDiscoveryContext } from './5CADV7BB.js';
|
|
12
9
|
export { resolveCantonOneSigRequestContext } from './XCOORR26.js';
|
|
13
10
|
export { resolveCantonOneSigScopeContext } from './NGED2YCU.js';
|
|
14
11
|
export { resolveCantonOneSigTransferInstructionContext } from './SA63DYLV.js';
|
|
15
|
-
export {
|
|
16
|
-
import './
|
|
17
|
-
export {
|
|
12
|
+
export { resolveCantonOneSigTransferBatch } from './BZXMNRDO.js';
|
|
13
|
+
import './Q3BYU6GJ.js';
|
|
14
|
+
export { prepareRefreshableAmuletTransfer } from './VJKB367I.js';
|
|
15
|
+
export { prepareRefreshableTransferInstructionAcceptance } from './G4IAVHVV.js';
|
|
18
16
|
export { createContractAddressResolver, isConcreteActiveContractRef, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef, resolveContractStateFilter, resolveExpectedSignatories } from './RVJRKYSC.js';
|
|
17
|
+
export { cantonAdapterCallbackReceivers, cantonBurnMintCallbackEntries, cantonCallbackAppUid, cantonFinalizeCallbackBaseEntries, cantonLockUnlockCallbackEntries, getCantonCallbackFnArgs, hasPositiveCantonCallbackOutflow, resolveCantonFinalizeCallback, shouldIncludeCantonCallbackRateLimiter } from './MV4DFHZP.js';
|
|
19
18
|
export { resolveBurnMintCallbackContext } from './43KGTQUU.js';
|
|
20
19
|
export { resolveLockUnlockCallbackContext } from './7JEW4NHI.js';
|
|
20
|
+
export { resolveCantonOneSigConfigContext } from './IUQEDBC6.js';
|
|
21
21
|
import './7JX6NIYS.js';
|
|
22
22
|
export { buildMultiTransactionSignatures, buildSignedTransaction } from './WKC6X2E3.js';
|
|
23
23
|
import './IIWYAFUO.js';
|
|
24
24
|
export { parseMinFeeValue } from './M3GPMXME.js';
|
|
25
|
-
export { createCantonChainProvider, parseCantonChainUri } from './
|
|
25
|
+
export { createCantonChainProvider, parseCantonChainUri } from './W5CHA5AA.js';
|
|
26
26
|
export { CantonClient } from './N3QRG2AK.js';
|
|
27
27
|
import './YQ7YDN2E.js';
|
|
28
28
|
import './YBJJNRKE.js';
|
|
@@ -306,10 +306,10 @@ export { Configuration, ResponseError } from './XVX7EVTW.js';
|
|
|
306
306
|
export { AMULET_INSTRUMENT_ID, fetchAcceptContext, fetchAmuletContext, fetchAmuletRules, fetchAmuletTransferFactoryContext, fetchDsoParty, fetchOpenAndIssuingMiningRounds, fetchTransferInstructionContext, findAmuletRulesDisclosures, injectExternalPartyAmuletRules, toDisclosedContract } from './P7PG4R5T.js';
|
|
307
307
|
export { assertSafeRegistryUrl, contractIdsFromAnyValue, discloseUtilityCredentials, discoveryUrlsForAppUid, mergeTransferFactoryContexts, partyIdFromRegistryFingerprint } from './L64D74BZ.js';
|
|
308
308
|
export { callbackDisclosure, callbackInterfaceView } from './YMXOSAU4.js';
|
|
309
|
-
export { CantonGrpcClient } from './
|
|
310
|
-
export { computeDecentralizedNamespace, computeMultiTransactionHash } from './K7FRAGGM.js';
|
|
309
|
+
export { CantonGrpcClient } from './XENB5GVW.js';
|
|
311
310
|
import './RVQWP4JU.js';
|
|
312
311
|
import './VJ4PVZYL.js';
|
|
312
|
+
export { computeDecentralizedNamespace, computeMultiTransactionHash } from './K7FRAGGM.js';
|
|
313
313
|
export { cantonMultihash, computeCantonFingerprint, computePublicKeyFingerprint, extractTransactions } from './WLV6EHDB.js';
|
|
314
314
|
export { CommandStatus, IntLikeSchema, buildTemplateId, canonicalizeDamlDecimal, smallestUnitsToDamlDecimal } from './4WZTQJXP.js';
|
|
315
315
|
import './35ELVFTS.js';
|
package/dist/provider.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createCantonChainProvider, parseCantonChainUri } from './
|
|
1
|
+
export { createCantonChainProvider, parseCantonChainUri } from './W5CHA5AA.js';
|
|
2
2
|
import './N3QRG2AK.js';
|
|
3
3
|
import './YQ7YDN2E.js';
|
|
4
4
|
import './YBJJNRKE.js';
|
|
@@ -282,10 +282,10 @@ import './XVX7EVTW.js';
|
|
|
282
282
|
import './P7PG4R5T.js';
|
|
283
283
|
import './L64D74BZ.js';
|
|
284
284
|
import './YMXOSAU4.js';
|
|
285
|
-
import './
|
|
286
|
-
import './K7FRAGGM.js';
|
|
285
|
+
import './XENB5GVW.js';
|
|
287
286
|
import './RVQWP4JU.js';
|
|
288
287
|
import './VJ4PVZYL.js';
|
|
288
|
+
import './K7FRAGGM.js';
|
|
289
289
|
import './WLV6EHDB.js';
|
|
290
290
|
import './YF7P4UQM.js';
|
|
291
291
|
import './V2H2WXKE.js';
|
package/dist/refresh/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import '../NQWAH7C4.js';
|
|
2
|
+
export { resolveCantonTransaction } from '../ZZUOA324.js';
|
|
3
|
+
export { resolveCantonActiveContracts, resolveCantonRefreshPlan, selectContractsByGte } from '../PDVMANRS.js';
|
|
2
4
|
export { wrapLzSdk } from '../I5ERUZDD.js';
|
|
3
|
-
export { prepareRefreshableAmuletTransfer } from '../VJKB367I.js';
|
|
4
|
-
export { prepareRefreshableTransferInstructionAcceptance } from '../G4IAVHVV.js';
|
|
5
|
-
export { resolveCantonTransaction } from '../RLUQWVZ6.js';
|
|
6
|
-
export { resolveCantonActiveContracts, resolveCantonRefreshPlan, selectContractsByGte } from '../ABHGT5DF.js';
|
|
7
|
-
export { resolveCantonOneSigTransferBatch } from '../BZXMNRDO.js';
|
|
8
|
-
import '../Q3BYU6GJ.js';
|
|
9
5
|
export { substituteCidsToRefs, substituteRefsToCids } from '../BSVJEBKM.js';
|
|
10
|
-
|
|
6
|
+
import '../5W44RCVL.js';
|
|
11
7
|
export { resolveCantonOneSigDiscoveryContext } from '../5CADV7BB.js';
|
|
12
8
|
export { resolveCantonOneSigRequestContext } from '../XCOORR26.js';
|
|
13
9
|
export { resolveCantonOneSigScopeContext } from '../NGED2YCU.js';
|
|
14
10
|
export { resolveCantonOneSigTransferInstructionContext } from '../SA63DYLV.js';
|
|
15
|
-
export {
|
|
16
|
-
import '../
|
|
11
|
+
export { resolveCantonOneSigTransferBatch } from '../BZXMNRDO.js';
|
|
12
|
+
import '../Q3BYU6GJ.js';
|
|
13
|
+
export { prepareRefreshableAmuletTransfer } from '../VJKB367I.js';
|
|
14
|
+
export { prepareRefreshableTransferInstructionAcceptance } from '../G4IAVHVV.js';
|
|
17
15
|
export { createContractAddressResolver, isConcreteActiveContractRef, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef, resolveContractStateFilter, resolveExpectedSignatories } from '../RVJRKYSC.js';
|
|
16
|
+
export { cantonAdapterCallbackReceivers, cantonBurnMintCallbackEntries, cantonCallbackAppUid, cantonFinalizeCallbackBaseEntries, cantonLockUnlockCallbackEntries, getCantonCallbackFnArgs, hasPositiveCantonCallbackOutflow, resolveCantonFinalizeCallback, shouldIncludeCantonCallbackRateLimiter } from '../MV4DFHZP.js';
|
|
18
17
|
export { resolveBurnMintCallbackContext } from '../43KGTQUU.js';
|
|
19
18
|
export { resolveLockUnlockCallbackContext } from '../7JEW4NHI.js';
|
|
19
|
+
export { resolveCantonOneSigConfigContext } from '../IUQEDBC6.js';
|
|
20
20
|
import '../P7PG4R5T.js';
|
|
21
21
|
export { assertSafeRegistryUrl, contractIdsFromAnyValue, discloseUtilityCredentials, discoveryUrlsForAppUid, mergeTransferFactoryContexts, partyIdFromRegistryFingerprint } from '../L64D74BZ.js';
|
|
22
22
|
export { callbackDisclosure, callbackInterfaceView } from '../YMXOSAU4.js';
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export { resolveCantonActiveContracts, resolveCantonRefreshPlan, selectContractsByGte } from '../
|
|
2
|
-
import '../
|
|
3
|
-
import '../Q3BYU6GJ.js';
|
|
4
|
-
import '../IUQEDBC6.js';
|
|
1
|
+
export { resolveCantonActiveContracts, resolveCantonRefreshPlan, selectContractsByGte } from '../PDVMANRS.js';
|
|
2
|
+
import '../5W44RCVL.js';
|
|
5
3
|
import '../5CADV7BB.js';
|
|
6
4
|
import '../XCOORR26.js';
|
|
7
5
|
import '../NGED2YCU.js';
|
|
8
6
|
import '../SA63DYLV.js';
|
|
9
|
-
import '../
|
|
10
|
-
import '../
|
|
7
|
+
import '../BZXMNRDO.js';
|
|
8
|
+
import '../Q3BYU6GJ.js';
|
|
11
9
|
import '../RVJRKYSC.js';
|
|
10
|
+
import '../MV4DFHZP.js';
|
|
12
11
|
import '../43KGTQUU.js';
|
|
13
12
|
import '../7JEW4NHI.js';
|
|
13
|
+
import '../IUQEDBC6.js';
|
|
14
14
|
import '../L64D74BZ.js';
|
|
15
15
|
import '../YMXOSAU4.js';
|
|
16
16
|
import '../4WZTQJXP.js';
|
package/dist/refresh/resolve.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
export { resolveCantonTransaction } from '../
|
|
2
|
-
import '../
|
|
3
|
-
import '../BZXMNRDO.js';
|
|
4
|
-
import '../Q3BYU6GJ.js';
|
|
1
|
+
export { resolveCantonTransaction } from '../ZZUOA324.js';
|
|
2
|
+
import '../PDVMANRS.js';
|
|
5
3
|
import '../BSVJEBKM.js';
|
|
6
|
-
import '../
|
|
4
|
+
import '../5W44RCVL.js';
|
|
7
5
|
import '../5CADV7BB.js';
|
|
8
6
|
import '../XCOORR26.js';
|
|
9
7
|
import '../NGED2YCU.js';
|
|
10
8
|
import '../SA63DYLV.js';
|
|
11
|
-
import '../
|
|
12
|
-
import '../
|
|
9
|
+
import '../BZXMNRDO.js';
|
|
10
|
+
import '../Q3BYU6GJ.js';
|
|
13
11
|
import '../RVJRKYSC.js';
|
|
12
|
+
import '../MV4DFHZP.js';
|
|
14
13
|
import '../43KGTQUU.js';
|
|
15
14
|
import '../7JEW4NHI.js';
|
|
15
|
+
import '../IUQEDBC6.js';
|
|
16
16
|
import '../P7PG4R5T.js';
|
|
17
17
|
import '../L64D74BZ.js';
|
|
18
18
|
import '../YMXOSAU4.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/common-canton",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.82",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Canton VM client and utilities",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"@canton-network/core-ledger-proto": "^1.7.0",
|
|
33
33
|
"@daml/types": "3.4.8",
|
|
34
34
|
"@grpc/grpc-js": "^1.12.0",
|
|
35
|
-
"@layerzerolabs/common-chain-model": "1.2.
|
|
36
|
-
"@layerzerolabs/common-encoding-utils": "1.2.
|
|
37
|
-
"@layerzerolabs/common-error-utils": "1.2.
|
|
38
|
-
"@layerzerolabs/typescript-utils": "1.2.
|
|
35
|
+
"@layerzerolabs/common-chain-model": "1.2.82",
|
|
36
|
+
"@layerzerolabs/common-encoding-utils": "1.2.82",
|
|
37
|
+
"@layerzerolabs/common-error-utils": "1.2.82",
|
|
38
|
+
"@layerzerolabs/typescript-utils": "1.2.82",
|
|
39
39
|
"@mojotech/json-type-validation": "^3.1.0",
|
|
40
40
|
"@noble/hashes": "^1.8.0",
|
|
41
41
|
"@noble/secp256k1": "1.7.1",
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
"zod": "4.3.5"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@layerzerolabs/eslint-configuration": "^1.2.
|
|
50
|
-
"@layerzerolabs/tsup-configuration": "1.2.
|
|
51
|
-
"@layerzerolabs/typescript-configuration": "1.2.
|
|
52
|
-
"@layerzerolabs/vitest-configuration": "1.2.
|
|
53
|
-
"@layerzerolabs/vm-tooling-canton": "1.2.
|
|
49
|
+
"@layerzerolabs/eslint-configuration": "^1.2.82",
|
|
50
|
+
"@layerzerolabs/tsup-configuration": "1.2.82",
|
|
51
|
+
"@layerzerolabs/typescript-configuration": "1.2.82",
|
|
52
|
+
"@layerzerolabs/vitest-configuration": "1.2.82",
|
|
53
|
+
"@layerzerolabs/vm-tooling-canton": "1.2.82",
|
|
54
54
|
"@vitest/coverage-v8": "4.1.10",
|
|
55
55
|
"eslint": "9.39.1",
|
|
56
56
|
"tsup": "^8.4.0",
|