@layerzerolabs/common-canton 1.2.99 → 1.2.101

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/{D3KVE5XQ.js → 3H5UAMWJ.js} +12 -9
  2. package/dist/3H5UAMWJ.js.map +1 -0
  3. package/dist/{YBGD26CU.js → 45C3KMUJ.js} +12 -6
  4. package/dist/45C3KMUJ.js.map +1 -0
  5. package/dist/{5BK6GCUD.js → 5VT3BVW6.js} +4 -4
  6. package/dist/{5BK6GCUD.js.map → 5VT3BVW6.js.map} +1 -1
  7. package/dist/{CMFVLC7C.js → 6GIDRO6Y.js} +3 -3
  8. package/dist/{CMFVLC7C.js.map → 6GIDRO6Y.js.map} +1 -1
  9. package/dist/{4SK2ZV46.js → 7DFFQF5Y.js} +37 -14
  10. package/dist/7DFFQF5Y.js.map +1 -0
  11. package/dist/{RFGCLYQN.js → 7Z6L2FXT.js} +3 -3
  12. package/dist/{RFGCLYQN.js.map → 7Z6L2FXT.js.map} +1 -1
  13. package/dist/{NSHNCUWI.js → A4HRBTRS.js} +5 -5
  14. package/dist/{NSHNCUWI.js.map → A4HRBTRS.js.map} +1 -1
  15. package/dist/{HQMIA66Y.js → DELPT7WC.js} +3 -3
  16. package/dist/{HQMIA66Y.js.map → DELPT7WC.js.map} +1 -1
  17. package/dist/{4WZTQJXP.js → KDLPAZ3P.js} +2 -2
  18. package/dist/{4WZTQJXP.js.map → KDLPAZ3P.js.map} +1 -1
  19. package/dist/{YV6LAB6R.js → KGEOWAAR.js} +3 -3
  20. package/dist/{YV6LAB6R.js.map → KGEOWAAR.js.map} +1 -1
  21. package/dist/{K7FRAGGM.js → KLMACWXT.js} +3 -3
  22. package/dist/KLMACWXT.js.map +1 -0
  23. package/dist/{UG2M23HF.js → MM7EIOP4.js} +3 -3
  24. package/dist/{UG2M23HF.js.map → MM7EIOP4.js.map} +1 -1
  25. package/dist/{E6W3YWXU.js → MRAAJXQA.js} +4 -4
  26. package/dist/{E6W3YWXU.js.map → MRAAJXQA.js.map} +1 -1
  27. package/dist/{NGED2YCU.js → OK7GQCQM.js} +9 -5
  28. package/dist/OK7GQCQM.js.map +1 -0
  29. package/dist/{JJDWTXLN.js → QOVYNKLD.js} +3 -3
  30. package/dist/{JJDWTXLN.js.map → QOVYNKLD.js.map} +1 -1
  31. package/dist/{HC2GOOAL.js → QWU4V7O2.js} +138 -24
  32. package/dist/QWU4V7O2.js.map +1 -0
  33. package/dist/{XUXLV3PL.js → SAHSVYH6.js} +2 -2
  34. package/dist/{XUXLV3PL.js.map → SAHSVYH6.js.map} +1 -1
  35. package/dist/{5VKWPQE4.js → SEKZMYNZ.js} +3 -3
  36. package/dist/{5VKWPQE4.js.map → SEKZMYNZ.js.map} +1 -1
  37. package/dist/{DCDLEU2R.js → UUUJS2PY.js} +11 -3
  38. package/dist/UUUJS2PY.js.map +1 -0
  39. package/dist/{M3GPMXME.js → W3ZJSUA6.js} +3 -3
  40. package/dist/{M3GPMXME.js.map → W3ZJSUA6.js.map} +1 -1
  41. package/dist/{IUQEDBC6.js → XKBA43N7.js} +12 -9
  42. package/dist/XKBA43N7.js.map +1 -0
  43. package/dist/{KPFKPA5E.js → XWNGGI4V.js} +6 -6
  44. package/dist/XWNGGI4V.js.map +1 -0
  45. package/dist/{2B3PTIL7.js → ZVEWMW6Q.js} +4 -4
  46. package/dist/{2B3PTIL7.js.map → ZVEWMW6Q.js.map} +1 -1
  47. package/dist/client/amulet.d.ts +11 -1
  48. package/dist/client/amulet.d.ts.map +1 -1
  49. package/dist/client/amulet.js +3 -3
  50. package/dist/client/canton-client.d.ts +13 -4
  51. package/dist/client/canton-client.d.ts.map +1 -1
  52. package/dist/client/canton-client.js +4 -4
  53. package/dist/client/grpc.js +2 -2
  54. package/dist/client/index.d.ts +1 -1
  55. package/dist/client/index.d.ts.map +1 -1
  56. package/dist/client/index.js +6 -6
  57. package/dist/client/interface.d.ts +13 -4
  58. package/dist/client/interface.d.ts.map +1 -1
  59. package/dist/client/topology/utils.d.ts +4 -0
  60. package/dist/client/topology/utils.d.ts.map +1 -1
  61. package/dist/client/topology/utils.js +1 -1
  62. package/dist/events.js +3 -3
  63. package/dist/index.js +23 -23
  64. package/dist/minFee.js +2 -2
  65. package/dist/provider.js +7 -7
  66. package/dist/refresh/callback-burn-mint.js +5 -5
  67. package/dist/refresh/callback-lock-unlock.js +5 -5
  68. package/dist/refresh/callback-registry.js +4 -4
  69. package/dist/refresh/callback.js +7 -7
  70. package/dist/refresh/index.js +17 -17
  71. package/dist/refresh/onesig-config.js +1 -1
  72. package/dist/refresh/onesig-request.js +1 -1
  73. package/dist/refresh/onesig-scope.d.ts.map +1 -1
  74. package/dist/refresh/onesig-scope.js +1 -1
  75. package/dist/refresh/onesig-transfer-instruction.js +8 -8
  76. package/dist/refresh/onesig-transfer.js +9 -9
  77. package/dist/refresh/plan.d.ts +18 -0
  78. package/dist/refresh/plan.d.ts.map +1 -1
  79. package/dist/refresh/plan.js +1 -1
  80. package/dist/refresh/prepare-amulet-transfer.d.ts.map +1 -1
  81. package/dist/refresh/prepare-amulet-transfer.js +4 -4
  82. package/dist/refresh/resolve-plan.d.ts.map +1 -1
  83. package/dist/refresh/resolve-plan.js +15 -15
  84. package/dist/refresh/resolve.js +16 -16
  85. package/dist/sdk/canton-sdk.d.ts +1 -0
  86. package/dist/sdk/canton-sdk.d.ts.map +1 -1
  87. package/dist/sdk/canton-sdk.js +1 -1
  88. package/dist/sdk/index.js +1 -1
  89. package/dist/transaction.d.ts +30 -0
  90. package/dist/transaction.d.ts.map +1 -1
  91. package/dist/transaction.js +2 -2
  92. package/dist/types.d.ts +14 -0
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/types.js +1 -1
  95. package/package.json +10 -10
  96. package/dist/4SK2ZV46.js.map +0 -1
  97. package/dist/D3KVE5XQ.js.map +0 -1
  98. package/dist/DCDLEU2R.js.map +0 -1
  99. package/dist/HC2GOOAL.js.map +0 -1
  100. package/dist/IUQEDBC6.js.map +0 -1
  101. package/dist/K7FRAGGM.js.map +0 -1
  102. package/dist/KPFKPA5E.js.map +0 -1
  103. package/dist/NGED2YCU.js.map +0 -1
  104. package/dist/YBGD26CU.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/refresh/callback.ts"],"names":["IOAPP","CONFIG","REGISTRY","LIMITER","PENDING","OFT_SELF","OFT_CONFIG","LOCK_UNLOCK","LOCK_UNLOCK_CONFIG","BURN_MINT","BURN_MINT_CONFIG","cantonCallbackAppUid","admin","id","bytesToHex","keccak_256","TextEncoder","encode","getCantonCallbackFnArgs","context","appUid","fnName","current","key","Array","isArray","undefined","find","candidate","value","hasPositiveCantonCallbackOutflow","callbackContext","outbound","frozen","amount","Number","NaN","isFinite","shouldIncludeCantonCallbackRateLimiter","args","isGloballyDisabled","isAccept","cantonFinalizeCallbackBaseEntries","entries","cid","push","tag","matchesId","matchesTemplate","event","template","templateId","packageName","slice","indexOf","endsWith","exactlyOne","contracts","label","length","Error","requireDisclosure","sdk","informee","created","archived","fetchEventsByContractId","createDisclosure","decimalSetting","test","resolveCantonFinalizeCallback","input","pendingCallbackCid","contractId","isTrustedOrigin","pending","createArgument","oappId","offset","getLedgerEndOffset","query","interfaceId","gateway","moduleName","entityName","split","packageId","getPackageId","resolvedInterfaceId","queryActiveContractsByInterface","includeCreatedEventBlob","filter","contract","views","createdEvent","interfaceViews","view","viewValue","viewStatus","code","areExpectedSignatories","oappGateway","callbacks","configs","Promise","all","callback","config","error","IOAppResolutionError","wrap","kind","payload","instrumentId","assetInstrumentId","decimals","localDecimals","sharedDecimals","rateLimiterScaleDecimals","rateLimiterConfig","scaleDecimals","treasury","mintEscrow","identity","pendingDisclosure","disclosedContracts","callbackDisclosure","registryCid","lzReceiveParty","receiveArgs","message","fingerprint","registries","registry","hints","fingerprintToHint","some","partyIdFromRegistryFingerprint","rateLimiterStateCid","limiter","adapterContext","burnMintContext","sendArgs","name","resolveLockUnlockCallbackContext","environment","receivers","cantonAdapterCallbackReceivers","pendingCallback","resolveBurnMintCallbackContext","oappAdmin","address","configCid","cantonLockUnlockCallbackEntries","cantonBurnMintCallbackEntries","executeContext","callbackCid","lzSendArgs","parties","Set","parseIndexedPayoutParties","sender","lzReceiveArgs","count","index","party","treasuryAssetCids","map","transferFactoryCid","assetTransferContext","burnMintFactoryCid"],"mappings":"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","file":"E6W3YWXU.js","sourcesContent":["import type { ContractId } from '@daml/types';\nimport { keccak_256 } from '@noble/hashes/sha3';\n\nimport { bytesToHex } from '@layerzerolabs/common-encoding-utils';\n\nimport { IOAppResolutionError } from '../errors';\nimport type { CreatedEvent, JsActiveContract } from '../open-api/models';\nimport type { CantonSdk } from '../sdk/canton-sdk';\nimport type { CantonDisclosedContract } from '../transaction';\nimport { areExpectedSignatories, isTrustedOrigin } from '../trusted-origin';\nimport { resolveBurnMintCallbackContext } from './callback-burn-mint';\nimport { callbackDisclosure } from './callback-contracts';\nimport { resolveLockUnlockCallbackContext } from './callback-lock-unlock';\nimport type { CantonFinalizeCallbackRefresh } from './plan';\nimport { partyIdFromRegistryFingerprint } from './registry-context';\nexport { callbackDisclosure, callbackInterfaceView } from './callback-contracts';\n\nconst IOAPP = '#layerzero-ioapp:IOApp:IOApp';\nconst CONFIG = '#layerzero-ioapp-config:IOAppConfig:IOAppConfig';\nconst REGISTRY = '#layerzero-iregistry:IRegistry:IRegistry';\nconst LIMITER = '#layerzero-irate-limiter:IRateLimitState:IRateLimitState';\nconst PENDING = '#layerzero-request:PendingCallback:PendingCallback';\nconst OFT_SELF = '#layerzero-oft:OftSelf:OftSelf';\nconst OFT_CONFIG = '#layerzero-oft:OftSelfConfig:OftSelfConfig';\nconst LOCK_UNLOCK = '#layerzero-lock-unlock-adapter:LockUnlockAdapter:LockUnlockAdapter';\nconst LOCK_UNLOCK_CONFIG = '#layerzero-lock-unlock-adapter:AdapterConfig:AdapterConfig';\n\nconst BURN_MINT = '#layerzero-burn-mint-adapter:BurnMintAdapter:BurnMintAdapter';\nconst BURN_MINT_CONFIG = '#layerzero-burn-mint-adapter:AdapterConfig:AdapterConfig';\n\nexport type CantonCallbackOAppId = { admin: string; id: string };\ntype CallbackArgs = Array<[string, { tag: string; value: unknown }]>;\ntype CallbackInput = CantonFinalizeCallbackRefresh['resolver'];\ntype CallbackContext = Array<\n [\n string,\n Array<\n [\n { tag: 'Addr_Text'; value: string },\n Array<\n [\n string,\n Array<[{ tag: 'Addr_Text'; value: string }, Array<[string, CallbackArgs]>]>,\n ]\n >,\n ]\n >,\n ]\n>;\ntype CallbackIdentity = CallbackInput['identity'];\ntype PendingCallback = {\n handler: string;\n sender: string;\n oappId: CantonCallbackOAppId;\n callbackContext: unknown;\n isAccept: boolean;\n};\n\nexport const cantonCallbackAppUid = (admin: string, id: string): string =>\n bytesToHex(keccak_256(new TextEncoder().encode(`${admin}|${id}`)));\n\nexport const getCantonCallbackFnArgs = (\n context: unknown,\n appUid: string,\n fnName: string,\n): CallbackArgs | undefined => {\n let current = context;\n for (const key of ['OApp', appUid, 'OApp', appUid, fnName]) {\n if (!Array.isArray(current)) return undefined;\n current = current.find(\n ([candidate]: [unknown]) =>\n candidate === key ||\n (candidate !== null &&\n typeof candidate === 'object' &&\n 'value' in candidate &&\n candidate.value === key),\n )?.[1];\n }\n return current as CallbackArgs | undefined;\n};\n\nexport const hasPositiveCantonCallbackOutflow = (\n callbackContext: unknown,\n appUid: string,\n): boolean => {\n const outbound = getCantonCallbackFnArgs(callbackContext, appUid, 'LzSend_callback');\n const frozen = outbound?.find(([key]) => key === 'rlScaledAmount')?.[1].value;\n const amount =\n typeof frozen === 'number' || typeof frozen === 'string' || typeof frozen === 'bigint'\n ? Number(frozen)\n : NaN;\n return Number.isFinite(amount) && amount > 0;\n};\n\nexport const shouldIncludeCantonCallbackRateLimiter = (args: {\n callbackContext: unknown;\n appUid: string;\n isGloballyDisabled: boolean;\n isAccept: boolean;\n}): boolean => {\n if (hasPositiveCantonCallbackOutflow(args.callbackContext, args.appUid)) return true;\n return (\n !args.isGloballyDisabled &&\n args.isAccept &&\n getCantonCallbackFnArgs(args.callbackContext, args.appUid, 'LzReceive_callback') !==\n undefined\n );\n};\n\nexport const cantonFinalizeCallbackBaseEntries = (args: {\n configCid: string;\n registryCid?: string;\n rateLimiterStateCid?: string;\n}): Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> => {\n const entries: Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> = [];\n for (const key of ['configCid', 'registryCid', 'rateLimiterStateCid'] as const) {\n const cid = args[key];\n if (cid) entries.push([key, [[key, { tag: 'AV_ContractId', value: cid }]]]);\n }\n return entries;\n};\n\nconst matchesId = (candidate: unknown, id: CantonCallbackOAppId): boolean => {\n const value = candidate as CantonCallbackOAppId | undefined;\n return value?.admin === id.admin && value.id === id.id;\n};\nconst matchesTemplate = (event: CreatedEvent, template: string): boolean =>\n event.templateId === template ||\n (event.packageName === template.slice(1, template.indexOf(':')) &&\n event.templateId.endsWith(template.slice(template.indexOf(':'))));\nconst exactlyOne = (contracts: JsActiveContract[], label: string): JsActiveContract => {\n if (contracts.length !== 1)\n throw new Error(`Expected exactly one ${label}, found ${contracts.length}`);\n return contracts[0]!;\n};\nconst requireDisclosure = async (\n sdk: CantonSdk,\n informee: string,\n cid: string,\n): Promise<CantonDisclosedContract> => {\n const { created, archived } = await sdk.fetchEventsByContractId(cid, [informee]);\n if (!created || archived) throw new Error(`Callback dependency ${cid} is missing or archived`);\n const value = await sdk.createDisclosure(cid as ContractId<object>, [informee]);\n if (!value) throw new Error(`Missing disclosure for ${cid}`);\n return value;\n};\nconst decimalSetting = (value: unknown): string => {\n if (typeof value !== 'string' || !/^\\d+$/.test(value)) {\n throw new Error('Callback decimal settings must be Daml Int strings');\n }\n return value;\n};\n\nexport const resolveCantonFinalizeCallback = async (\n sdk: CantonSdk,\n input: Omit<CallbackInput, 'type' | 'oappId' | 'identity'> & {\n oappId?: CantonCallbackOAppId;\n identity?: CallbackIdentity;\n },\n) => {\n const { created, archived } = await sdk.fetchEventsByContractId(input.pendingCallbackCid, [\n input.informee,\n ]);\n if (\n !created ||\n archived ||\n created.contractId !== input.pendingCallbackCid ||\n !matchesTemplate(created, PENDING) ||\n !isTrustedOrigin(created, input.informee, 'handler')\n ) {\n throw new Error(\n 'PendingCallback is missing, archived, or not from the expected handler/template',\n );\n }\n const pending = created.createArgument as PendingCallback;\n if (\n !pending.oappId?.admin ||\n !pending.oappId.id ||\n (input.oappId && !matchesId(pending.oappId, input.oappId))\n ) {\n throw new Error('PendingCallback OApp identity mismatch');\n }\n const oappId = pending.oappId;\n const offset = await sdk.getLedgerEndOffset();\n const query = async (interfaceId: string, gateway?: string) => {\n const [packageName, moduleName, entityName] = interfaceId.slice(1).split(':');\n const packageId = await sdk.getPackageId(packageName!, [input.informee]);\n const resolvedInterfaceId = `${packageId}:${moduleName}:${entityName}`;\n return (\n await sdk.queryActiveContractsByInterface([input.informee], offset, [interfaceId], {\n includeCreatedEventBlob: true,\n })\n ).filter((contract) => {\n const views =\n contract.createdEvent.interfaceViews?.filter(\n (view) => view.interfaceId === resolvedInterfaceId,\n ) ?? [];\n const view = views[0]?.viewValue as Record<string, unknown> | undefined;\n return (\n views.length === 1 &&\n views[0]?.viewStatus?.code === 0 &&\n view != null &&\n areExpectedSignatories(contract.createdEvent, [oappId.admin]) &&\n matchesId(view.oappId, oappId) &&\n (gateway === undefined || view.oappGateway === gateway)\n );\n });\n };\n const [callbacks, configs] = await Promise.all([query(IOAPP, input.informee), query(CONFIG)]);\n let callback: JsActiveContract;\n let config: JsActiveContract;\n try {\n callback = exactlyOne(callbacks, 'callback for OApp/gateway');\n config = exactlyOne(configs, 'callback config for OApp');\n } catch (error) {\n throw IOAppResolutionError.wrap(error, 'Could not resolve callback contracts');\n }\n const kind =\n matchesTemplate(callback.createdEvent, OFT_SELF) &&\n matchesTemplate(config.createdEvent, OFT_CONFIG)\n ? 'oft-self'\n : matchesTemplate(callback.createdEvent, LOCK_UNLOCK) &&\n matchesTemplate(config.createdEvent, LOCK_UNLOCK_CONFIG)\n ? 'lock-unlock-adapter'\n : matchesTemplate(callback.createdEvent, BURN_MINT) &&\n matchesTemplate(config.createdEvent, BURN_MINT_CONFIG)\n ? 'burn-mint-adapter'\n : undefined;\n if (!kind)\n throw new Error('Callback kind changed or is unsupported; repopulate the transaction');\n const payload = config.createdEvent.createArgument as {\n instrumentId?: CantonCallbackOAppId;\n assetInstrumentId?: CantonCallbackOAppId;\n localDecimals: string;\n sharedDecimals: string;\n rateLimiterConfig: { scaleDecimals: string; isGloballyDisabled: boolean };\n };\n const instrumentId = kind === 'oft-self' ? payload.instrumentId : payload.assetInstrumentId;\n if (\n !instrumentId?.admin ||\n !instrumentId.id ||\n (kind === 'oft-self' && !matchesId(instrumentId, oappId))\n ) {\n throw new Error('Callback instrument changed; repopulate the transaction');\n }\n const decimals = {\n instrumentId: { ...instrumentId },\n localDecimals: decimalSetting(payload.localDecimals),\n sharedDecimals: decimalSetting(payload.sharedDecimals),\n rateLimiterScaleDecimals: decimalSetting(payload.rateLimiterConfig.scaleDecimals),\n };\n const treasury = (callback.createdEvent.createArgument as { treasury?: unknown }).treasury;\n if (kind === 'lock-unlock-adapter' && (typeof treasury !== 'string' || !treasury)) {\n throw new Error('Lock/unlock callback treasury is required');\n }\n const mintEscrow = (callback.createdEvent.createArgument as { mintEscrow?: unknown })\n .mintEscrow;\n if (kind === 'burn-mint-adapter' && (typeof mintEscrow !== 'string' || !mintEscrow)) {\n throw new Error('Burn/mint callback mintEscrow is required');\n }\n const identity: CallbackIdentity =\n kind === 'oft-self'\n ? { kind, ...decimals }\n : kind === 'lock-unlock-adapter'\n ? { kind, ...decimals, treasury: treasury as string }\n : { kind, ...decimals, mintEscrow: mintEscrow as string };\n if (\n input.identity &&\n (input.identity.kind !== identity.kind ||\n !matchesId(input.identity.instrumentId, identity.instrumentId) ||\n input.identity.localDecimals !== identity.localDecimals ||\n input.identity.sharedDecimals !== identity.sharedDecimals ||\n input.identity.rateLimiterScaleDecimals !== identity.rateLimiterScaleDecimals ||\n (input.identity.kind === 'lock-unlock-adapter' &&\n identity.kind === 'lock-unlock-adapter' &&\n input.identity.treasury !== identity.treasury) ||\n (input.identity.kind === 'burn-mint-adapter' &&\n identity.kind === 'burn-mint-adapter' &&\n input.identity.mintEscrow !== identity.mintEscrow))\n ) {\n throw new Error('Callback economic identity changed; repopulate the transaction');\n }\n const pendingDisclosure = await sdk.createDisclosure(\n input.pendingCallbackCid as ContractId<object>,\n [input.informee],\n );\n if (!pendingDisclosure) throw new Error(`Missing disclosure for ${input.pendingCallbackCid}`);\n const disclosedContracts = [\n pendingDisclosure,\n callbackDisclosure(callback),\n callbackDisclosure(config),\n ];\n const appUid = cantonCallbackAppUid(oappId.admin, oappId.id);\n let registryCid: string | undefined;\n let lzReceiveParty: string | undefined;\n const receiveArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (pending.isAccept && receiveArgs) {\n const message = receiveArgs.find(([key]) => key === 'lzMessage')?.[1].value;\n if (typeof message !== 'string') throw new Error('lzMessage not found in callbackContext');\n const fingerprint = message.slice(0, 64);\n const registries = (await query(REGISTRY)).filter((registry) => {\n const hints = (registry.createdEvent.createArgument as { fingerprintToHint: unknown })\n .fingerprintToHint;\n return Array.isArray(hints)\n ? hints.some(([key]) => key === fingerprint)\n : hints !== null && typeof hints === 'object' && fingerprint in hints;\n });\n const registry = exactlyOne(registries, `Registry for fingerprint ${fingerprint}`);\n registryCid = registry.createdEvent.contractId;\n if (identity.kind !== 'oft-self') {\n lzReceiveParty = partyIdFromRegistryFingerprint(\n registry.createdEvent.createArgument as { fingerprintToHint: unknown },\n fingerprint,\n );\n }\n disclosedContracts.push(callbackDisclosure(registry));\n }\n let rateLimiterStateCid: string | undefined;\n if (\n shouldIncludeCantonCallbackRateLimiter({\n callbackContext: pending.callbackContext,\n appUid,\n isGloballyDisabled: payload.rateLimiterConfig.isGloballyDisabled,\n isAccept: pending.isAccept,\n })\n ) {\n const limiter = exactlyOne(await query(LIMITER), 'callback rate limiter');\n rateLimiterStateCid = limiter.createdEvent.contractId;\n disclosedContracts.push(callbackDisclosure(limiter));\n }\n let adapterContext: Awaited<ReturnType<typeof resolveLockUnlockCallbackContext>> | undefined;\n let burnMintContext: Awaited<ReturnType<typeof resolveBurnMintCallbackContext>> | undefined;\n if (identity.kind === 'oft-self') {\n const sendArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n for (const key of ['oftHoldingCid', 'payoutHoldingCid']) {\n const cid = sendArgs?.find(([name]) => name === key)?.[1].value;\n if (typeof cid === 'string' && cid)\n disclosedContracts.push(await requireDisclosure(sdk, input.informee, cid));\n }\n } else if (identity.kind === 'lock-unlock-adapter') {\n adapterContext = await resolveLockUnlockCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n treasury: identity.treasury,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n treasury: identity.treasury,\n }),\n });\n disclosedContracts.push(...adapterContext.disclosedContracts);\n } else {\n burnMintContext = await resolveBurnMintCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n oappAdmin: oappId.admin,\n mintEscrow: identity.mintEscrow,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n }),\n });\n disclosedContracts.push(...burnMintContext.disclosedContracts);\n }\n const address = { tag: 'Addr_Text' as const, value: appUid };\n const entries: Array<[string, CallbackArgs]> = cantonFinalizeCallbackBaseEntries({\n configCid: config.createdEvent.contractId,\n registryCid,\n rateLimiterStateCid,\n });\n if (adapterContext) entries.push(...cantonLockUnlockCallbackEntries(adapterContext));\n if (burnMintContext)\n entries.push(\n ...cantonLockUnlockCallbackEntries(burnMintContext),\n ...cantonBurnMintCallbackEntries(burnMintContext),\n );\n const executeContext: CallbackContext = [\n ['OApp', [[address, [['OApp', [[address, entries]]]]]]],\n ];\n return {\n callbackCid: callback.createdEvent.contractId,\n executeContext,\n disclosedContracts,\n oappId,\n identity,\n };\n};\n\nexport type CantonAdapterReceiversInput = {\n pendingCallback: {\n isAccept: boolean;\n sender: string;\n callbackContext: unknown;\n };\n appUid: string;\n lzReceiveParty?: string;\n treasury?: string;\n};\n\nexport const cantonAdapterCallbackReceivers = ({\n pendingCallback,\n appUid,\n lzReceiveParty,\n treasury,\n}: CantonAdapterReceiversInput): string[] => {\n const lzSendArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n if (lzSendArgs) {\n if (pendingCallback.isAccept) {\n const parties = [...new Set(parseIndexedPayoutParties(lzSendArgs))];\n return parties.length > 0 ? parties : treasury ? [treasury] : [];\n }\n return [pendingCallback.sender];\n }\n\n const lzReceiveArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (lzReceiveArgs) {\n if (!pendingCallback.isAccept) {\n return [];\n }\n if (!lzReceiveParty) {\n throw new Error('lzReceiveParty is required for LzReceive accept');\n }\n return [lzReceiveParty];\n }\n\n throw new Error('callbackContext is neither LzSend nor LzReceive');\n};\n\nconst parseIndexedPayoutParties = (\n args: NonNullable<ReturnType<typeof getCantonCallbackFnArgs>>,\n): string[] => {\n const count = Number(args.find(([key]) => key === 'receiverCount')?.[1].value ?? 0);\n\n const parties: string[] = [];\n for (let index = 0; index < count; index += 1) {\n const party = args.find(([key]) => key === `receiver_${index}`)?.[1].value;\n if (typeof party !== 'string' || party === '') {\n throw new Error(`LzSend callback missing receiver_${index}`);\n }\n parties.push(party);\n }\n return parties;\n};\n\nexport const cantonLockUnlockCallbackEntries = (args: {\n treasuryAssetCids?: string[];\n transferFactoryCid?: string;\n assetTransferContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.treasuryAssetCids)\n entries.push([\n 'treasuryAssetCids',\n [\n [\n 'treasuryAssetCids',\n {\n tag: 'AV_List',\n value: args.treasuryAssetCids.map((value) => ({\n tag: 'AV_ContractId',\n value,\n })),\n },\n ],\n ],\n ]);\n if (args.transferFactoryCid)\n entries.push([\n 'transferFactoryCid',\n [\n [\n 'transferFactoryCid',\n {\n tag: 'AV_ContractId',\n value: args.transferFactoryCid,\n },\n ],\n ],\n ]);\n if (args.assetTransferContext)\n entries.push([\n 'assetTransferContext',\n [\n [\n 'assetTransferContext',\n {\n tag: 'AV_Map',\n value: args.assetTransferContext,\n },\n ],\n ],\n ]);\n return entries;\n};\n\nexport const cantonBurnMintCallbackEntries = (args: {\n burnMintFactoryCid?: string;\n burnMintExtraArgs?: Record<string, unknown>;\n burnMintOutputContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.burnMintFactoryCid)\n entries.push([\n 'burnMintFactoryCid',\n [['burnMintFactoryCid', { tag: 'AV_ContractId', value: args.burnMintFactoryCid }]],\n ]);\n for (const key of ['burnMintExtraArgs', 'burnMintOutputContext'] as const) {\n if (args[key]) entries.push([key, [[key, { tag: 'AV_Map', value: args[key] }]]]);\n }\n return entries;\n};\n"]}
1
+ {"version":3,"sources":["../src/refresh/callback.ts"],"names":["IOAPP","CONFIG","REGISTRY","LIMITER","PENDING","OFT_SELF","OFT_CONFIG","LOCK_UNLOCK","LOCK_UNLOCK_CONFIG","BURN_MINT","BURN_MINT_CONFIG","cantonCallbackAppUid","admin","id","bytesToHex","keccak_256","TextEncoder","encode","getCantonCallbackFnArgs","context","appUid","fnName","current","key","Array","isArray","undefined","find","candidate","value","hasPositiveCantonCallbackOutflow","callbackContext","outbound","frozen","amount","Number","NaN","isFinite","shouldIncludeCantonCallbackRateLimiter","args","isGloballyDisabled","isAccept","cantonFinalizeCallbackBaseEntries","entries","cid","push","tag","matchesId","matchesTemplate","event","template","templateId","packageName","slice","indexOf","endsWith","exactlyOne","contracts","label","length","Error","requireDisclosure","sdk","informee","created","archived","fetchEventsByContractId","createDisclosure","decimalSetting","test","resolveCantonFinalizeCallback","input","pendingCallbackCid","contractId","isTrustedOrigin","pending","createArgument","oappId","offset","getLedgerEndOffset","query","interfaceId","gateway","moduleName","entityName","split","packageId","getPackageId","resolvedInterfaceId","queryActiveContractsByInterface","includeCreatedEventBlob","filter","contract","views","createdEvent","interfaceViews","view","viewValue","viewStatus","code","areExpectedSignatories","oappGateway","callbacks","configs","Promise","all","callback","config","error","IOAppResolutionError","wrap","kind","payload","instrumentId","assetInstrumentId","decimals","localDecimals","sharedDecimals","rateLimiterScaleDecimals","rateLimiterConfig","scaleDecimals","treasury","mintEscrow","identity","pendingDisclosure","disclosedContracts","callbackDisclosure","registryCid","lzReceiveParty","receiveArgs","message","fingerprint","registries","registry","hints","fingerprintToHint","some","partyIdFromRegistryFingerprint","rateLimiterStateCid","limiter","adapterContext","burnMintContext","sendArgs","name","resolveLockUnlockCallbackContext","environment","receivers","cantonAdapterCallbackReceivers","pendingCallback","resolveBurnMintCallbackContext","oappAdmin","address","configCid","cantonLockUnlockCallbackEntries","cantonBurnMintCallbackEntries","executeContext","callbackCid","lzSendArgs","parties","Set","parseIndexedPayoutParties","sender","lzReceiveArgs","count","index","party","treasuryAssetCids","map","transferFactoryCid","assetTransferContext","burnMintFactoryCid"],"mappings":"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","file":"MRAAJXQA.js","sourcesContent":["import type { ContractId } from '@daml/types';\nimport { keccak_256 } from '@noble/hashes/sha3';\n\nimport { bytesToHex } from '@layerzerolabs/common-encoding-utils';\n\nimport { IOAppResolutionError } from '../errors';\nimport type { CreatedEvent, JsActiveContract } from '../open-api/models';\nimport type { CantonSdk } from '../sdk/canton-sdk';\nimport type { CantonDisclosedContract } from '../transaction';\nimport { areExpectedSignatories, isTrustedOrigin } from '../trusted-origin';\nimport { resolveBurnMintCallbackContext } from './callback-burn-mint';\nimport { callbackDisclosure } from './callback-contracts';\nimport { resolveLockUnlockCallbackContext } from './callback-lock-unlock';\nimport type { CantonFinalizeCallbackRefresh } from './plan';\nimport { partyIdFromRegistryFingerprint } from './registry-context';\nexport { callbackDisclosure, callbackInterfaceView } from './callback-contracts';\n\nconst IOAPP = '#layerzero-ioapp:IOApp:IOApp';\nconst CONFIG = '#layerzero-ioapp-config:IOAppConfig:IOAppConfig';\nconst REGISTRY = '#layerzero-iregistry:IRegistry:IRegistry';\nconst LIMITER = '#layerzero-irate-limiter:IRateLimitState:IRateLimitState';\nconst PENDING = '#layerzero-request:PendingCallback:PendingCallback';\nconst OFT_SELF = '#layerzero-oft:OftSelf:OftSelf';\nconst OFT_CONFIG = '#layerzero-oft:OftSelfConfig:OftSelfConfig';\nconst LOCK_UNLOCK = '#layerzero-lock-unlock-adapter:LockUnlockAdapter:LockUnlockAdapter';\nconst LOCK_UNLOCK_CONFIG = '#layerzero-lock-unlock-adapter:AdapterConfig:AdapterConfig';\n\nconst BURN_MINT = '#layerzero-burn-mint-adapter:BurnMintAdapter:BurnMintAdapter';\nconst BURN_MINT_CONFIG = '#layerzero-burn-mint-adapter:AdapterConfig:AdapterConfig';\n\nexport type CantonCallbackOAppId = { admin: string; id: string };\ntype CallbackArgs = Array<[string, { tag: string; value: unknown }]>;\ntype CallbackInput = CantonFinalizeCallbackRefresh['resolver'];\ntype CallbackContext = Array<\n [\n string,\n Array<\n [\n { tag: 'Addr_Text'; value: string },\n Array<\n [\n string,\n Array<[{ tag: 'Addr_Text'; value: string }, Array<[string, CallbackArgs]>]>,\n ]\n >,\n ]\n >,\n ]\n>;\ntype CallbackIdentity = CallbackInput['identity'];\ntype PendingCallback = {\n handler: string;\n sender: string;\n oappId: CantonCallbackOAppId;\n callbackContext: unknown;\n isAccept: boolean;\n};\n\nexport const cantonCallbackAppUid = (admin: string, id: string): string =>\n bytesToHex(keccak_256(new TextEncoder().encode(`${admin}|${id}`)));\n\nexport const getCantonCallbackFnArgs = (\n context: unknown,\n appUid: string,\n fnName: string,\n): CallbackArgs | undefined => {\n let current = context;\n for (const key of ['OApp', appUid, 'OApp', appUid, fnName]) {\n if (!Array.isArray(current)) return undefined;\n current = current.find(\n ([candidate]: [unknown]) =>\n candidate === key ||\n (candidate !== null &&\n typeof candidate === 'object' &&\n 'value' in candidate &&\n candidate.value === key),\n )?.[1];\n }\n return current as CallbackArgs | undefined;\n};\n\nexport const hasPositiveCantonCallbackOutflow = (\n callbackContext: unknown,\n appUid: string,\n): boolean => {\n const outbound = getCantonCallbackFnArgs(callbackContext, appUid, 'LzSend_callback');\n const frozen = outbound?.find(([key]) => key === 'rlScaledAmount')?.[1].value;\n const amount =\n typeof frozen === 'number' || typeof frozen === 'string' || typeof frozen === 'bigint'\n ? Number(frozen)\n : NaN;\n return Number.isFinite(amount) && amount > 0;\n};\n\nexport const shouldIncludeCantonCallbackRateLimiter = (args: {\n callbackContext: unknown;\n appUid: string;\n isGloballyDisabled: boolean;\n isAccept: boolean;\n}): boolean => {\n if (hasPositiveCantonCallbackOutflow(args.callbackContext, args.appUid)) return true;\n return (\n !args.isGloballyDisabled &&\n args.isAccept &&\n getCantonCallbackFnArgs(args.callbackContext, args.appUid, 'LzReceive_callback') !==\n undefined\n );\n};\n\nexport const cantonFinalizeCallbackBaseEntries = (args: {\n configCid: string;\n registryCid?: string;\n rateLimiterStateCid?: string;\n}): Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> => {\n const entries: Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> = [];\n for (const key of ['configCid', 'registryCid', 'rateLimiterStateCid'] as const) {\n const cid = args[key];\n if (cid) entries.push([key, [[key, { tag: 'AV_ContractId', value: cid }]]]);\n }\n return entries;\n};\n\nconst matchesId = (candidate: unknown, id: CantonCallbackOAppId): boolean => {\n const value = candidate as CantonCallbackOAppId | undefined;\n return value?.admin === id.admin && value.id === id.id;\n};\nconst matchesTemplate = (event: CreatedEvent, template: string): boolean =>\n event.templateId === template ||\n (event.packageName === template.slice(1, template.indexOf(':')) &&\n event.templateId.endsWith(template.slice(template.indexOf(':'))));\nconst exactlyOne = (contracts: JsActiveContract[], label: string): JsActiveContract => {\n if (contracts.length !== 1)\n throw new Error(`Expected exactly one ${label}, found ${contracts.length}`);\n return contracts[0]!;\n};\nconst requireDisclosure = async (\n sdk: CantonSdk,\n informee: string,\n cid: string,\n): Promise<CantonDisclosedContract> => {\n const { created, archived } = await sdk.fetchEventsByContractId(cid, [informee]);\n if (!created || archived) throw new Error(`Callback dependency ${cid} is missing or archived`);\n const value = await sdk.createDisclosure(cid as ContractId<object>, [informee]);\n if (!value) throw new Error(`Missing disclosure for ${cid}`);\n return value;\n};\nconst decimalSetting = (value: unknown): string => {\n if (typeof value !== 'string' || !/^\\d+$/.test(value)) {\n throw new Error('Callback decimal settings must be Daml Int strings');\n }\n return value;\n};\n\nexport const resolveCantonFinalizeCallback = async (\n sdk: CantonSdk,\n input: Omit<CallbackInput, 'type' | 'oappId' | 'identity'> & {\n oappId?: CantonCallbackOAppId;\n identity?: CallbackIdentity;\n },\n) => {\n const { created, archived } = await sdk.fetchEventsByContractId(input.pendingCallbackCid, [\n input.informee,\n ]);\n if (\n !created ||\n archived ||\n created.contractId !== input.pendingCallbackCid ||\n !matchesTemplate(created, PENDING) ||\n !isTrustedOrigin(created, input.informee, 'handler')\n ) {\n throw new Error(\n 'PendingCallback is missing, archived, or not from the expected handler/template',\n );\n }\n const pending = created.createArgument as PendingCallback;\n if (\n !pending.oappId?.admin ||\n !pending.oappId.id ||\n (input.oappId && !matchesId(pending.oappId, input.oappId))\n ) {\n throw new Error('PendingCallback OApp identity mismatch');\n }\n const oappId = pending.oappId;\n const offset = await sdk.getLedgerEndOffset();\n const query = async (interfaceId: string, gateway?: string) => {\n const [packageName, moduleName, entityName] = interfaceId.slice(1).split(':');\n const packageId = await sdk.getPackageId(packageName!, [input.informee]);\n const resolvedInterfaceId = `${packageId}:${moduleName}:${entityName}`;\n return (\n await sdk.queryActiveContractsByInterface([input.informee], offset, [interfaceId], {\n includeCreatedEventBlob: true,\n })\n ).filter((contract) => {\n const views =\n contract.createdEvent.interfaceViews?.filter(\n (view) => view.interfaceId === resolvedInterfaceId,\n ) ?? [];\n const view = views[0]?.viewValue as Record<string, unknown> | undefined;\n return (\n views.length === 1 &&\n views[0]?.viewStatus?.code === 0 &&\n view != null &&\n areExpectedSignatories(contract.createdEvent, [oappId.admin]) &&\n matchesId(view.oappId, oappId) &&\n (gateway === undefined || view.oappGateway === gateway)\n );\n });\n };\n const [callbacks, configs] = await Promise.all([query(IOAPP, input.informee), query(CONFIG)]);\n let callback: JsActiveContract;\n let config: JsActiveContract;\n try {\n callback = exactlyOne(callbacks, 'callback for OApp/gateway');\n config = exactlyOne(configs, 'callback config for OApp');\n } catch (error) {\n throw IOAppResolutionError.wrap(error, 'Could not resolve callback contracts');\n }\n const kind =\n matchesTemplate(callback.createdEvent, OFT_SELF) &&\n matchesTemplate(config.createdEvent, OFT_CONFIG)\n ? 'oft-self'\n : matchesTemplate(callback.createdEvent, LOCK_UNLOCK) &&\n matchesTemplate(config.createdEvent, LOCK_UNLOCK_CONFIG)\n ? 'lock-unlock-adapter'\n : matchesTemplate(callback.createdEvent, BURN_MINT) &&\n matchesTemplate(config.createdEvent, BURN_MINT_CONFIG)\n ? 'burn-mint-adapter'\n : undefined;\n if (!kind)\n throw new Error('Callback kind changed or is unsupported; repopulate the transaction');\n const payload = config.createdEvent.createArgument as {\n instrumentId?: CantonCallbackOAppId;\n assetInstrumentId?: CantonCallbackOAppId;\n localDecimals: string;\n sharedDecimals: string;\n rateLimiterConfig: { scaleDecimals: string; isGloballyDisabled: boolean };\n };\n const instrumentId = kind === 'oft-self' ? payload.instrumentId : payload.assetInstrumentId;\n if (\n !instrumentId?.admin ||\n !instrumentId.id ||\n (kind === 'oft-self' && !matchesId(instrumentId, oappId))\n ) {\n throw new Error('Callback instrument changed; repopulate the transaction');\n }\n const decimals = {\n instrumentId: { ...instrumentId },\n localDecimals: decimalSetting(payload.localDecimals),\n sharedDecimals: decimalSetting(payload.sharedDecimals),\n rateLimiterScaleDecimals: decimalSetting(payload.rateLimiterConfig.scaleDecimals),\n };\n const treasury = (callback.createdEvent.createArgument as { treasury?: unknown }).treasury;\n if (kind === 'lock-unlock-adapter' && (typeof treasury !== 'string' || !treasury)) {\n throw new Error('Lock/unlock callback treasury is required');\n }\n const mintEscrow = (callback.createdEvent.createArgument as { mintEscrow?: unknown })\n .mintEscrow;\n if (kind === 'burn-mint-adapter' && (typeof mintEscrow !== 'string' || !mintEscrow)) {\n throw new Error('Burn/mint callback mintEscrow is required');\n }\n const identity: CallbackIdentity =\n kind === 'oft-self'\n ? { kind, ...decimals }\n : kind === 'lock-unlock-adapter'\n ? { kind, ...decimals, treasury: treasury as string }\n : { kind, ...decimals, mintEscrow: mintEscrow as string };\n if (\n input.identity &&\n (input.identity.kind !== identity.kind ||\n !matchesId(input.identity.instrumentId, identity.instrumentId) ||\n input.identity.localDecimals !== identity.localDecimals ||\n input.identity.sharedDecimals !== identity.sharedDecimals ||\n input.identity.rateLimiterScaleDecimals !== identity.rateLimiterScaleDecimals ||\n (input.identity.kind === 'lock-unlock-adapter' &&\n identity.kind === 'lock-unlock-adapter' &&\n input.identity.treasury !== identity.treasury) ||\n (input.identity.kind === 'burn-mint-adapter' &&\n identity.kind === 'burn-mint-adapter' &&\n input.identity.mintEscrow !== identity.mintEscrow))\n ) {\n throw new Error('Callback economic identity changed; repopulate the transaction');\n }\n const pendingDisclosure = await sdk.createDisclosure(\n input.pendingCallbackCid as ContractId<object>,\n [input.informee],\n );\n if (!pendingDisclosure) throw new Error(`Missing disclosure for ${input.pendingCallbackCid}`);\n const disclosedContracts = [\n pendingDisclosure,\n callbackDisclosure(callback),\n callbackDisclosure(config),\n ];\n const appUid = cantonCallbackAppUid(oappId.admin, oappId.id);\n let registryCid: string | undefined;\n let lzReceiveParty: string | undefined;\n const receiveArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (pending.isAccept && receiveArgs) {\n const message = receiveArgs.find(([key]) => key === 'lzMessage')?.[1].value;\n if (typeof message !== 'string') throw new Error('lzMessage not found in callbackContext');\n const fingerprint = message.slice(0, 64);\n const registries = (await query(REGISTRY)).filter((registry) => {\n const hints = (registry.createdEvent.createArgument as { fingerprintToHint: unknown })\n .fingerprintToHint;\n return Array.isArray(hints)\n ? hints.some(([key]) => key === fingerprint)\n : hints !== null && typeof hints === 'object' && fingerprint in hints;\n });\n const registry = exactlyOne(registries, `Registry for fingerprint ${fingerprint}`);\n registryCid = registry.createdEvent.contractId;\n if (identity.kind !== 'oft-self') {\n lzReceiveParty = partyIdFromRegistryFingerprint(\n registry.createdEvent.createArgument as { fingerprintToHint: unknown },\n fingerprint,\n );\n }\n disclosedContracts.push(callbackDisclosure(registry));\n }\n let rateLimiterStateCid: string | undefined;\n if (\n shouldIncludeCantonCallbackRateLimiter({\n callbackContext: pending.callbackContext,\n appUid,\n isGloballyDisabled: payload.rateLimiterConfig.isGloballyDisabled,\n isAccept: pending.isAccept,\n })\n ) {\n const limiter = exactlyOne(await query(LIMITER), 'callback rate limiter');\n rateLimiterStateCid = limiter.createdEvent.contractId;\n disclosedContracts.push(callbackDisclosure(limiter));\n }\n let adapterContext: Awaited<ReturnType<typeof resolveLockUnlockCallbackContext>> | undefined;\n let burnMintContext: Awaited<ReturnType<typeof resolveBurnMintCallbackContext>> | undefined;\n if (identity.kind === 'oft-self') {\n const sendArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n for (const key of ['oftHoldingCid', 'payoutHoldingCid']) {\n const cid = sendArgs?.find(([name]) => name === key)?.[1].value;\n if (typeof cid === 'string' && cid)\n disclosedContracts.push(await requireDisclosure(sdk, input.informee, cid));\n }\n } else if (identity.kind === 'lock-unlock-adapter') {\n adapterContext = await resolveLockUnlockCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n treasury: identity.treasury,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n treasury: identity.treasury,\n }),\n });\n disclosedContracts.push(...adapterContext.disclosedContracts);\n } else {\n burnMintContext = await resolveBurnMintCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n oappAdmin: oappId.admin,\n mintEscrow: identity.mintEscrow,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n }),\n });\n disclosedContracts.push(...burnMintContext.disclosedContracts);\n }\n const address = { tag: 'Addr_Text' as const, value: appUid };\n const entries: Array<[string, CallbackArgs]> = cantonFinalizeCallbackBaseEntries({\n configCid: config.createdEvent.contractId,\n registryCid,\n rateLimiterStateCid,\n });\n if (adapterContext) entries.push(...cantonLockUnlockCallbackEntries(adapterContext));\n if (burnMintContext)\n entries.push(\n ...cantonLockUnlockCallbackEntries(burnMintContext),\n ...cantonBurnMintCallbackEntries(burnMintContext),\n );\n const executeContext: CallbackContext = [\n ['OApp', [[address, [['OApp', [[address, entries]]]]]]],\n ];\n return {\n callbackCid: callback.createdEvent.contractId,\n executeContext,\n disclosedContracts,\n oappId,\n identity,\n };\n};\n\nexport type CantonAdapterReceiversInput = {\n pendingCallback: {\n isAccept: boolean;\n sender: string;\n callbackContext: unknown;\n };\n appUid: string;\n lzReceiveParty?: string;\n treasury?: string;\n};\n\nexport const cantonAdapterCallbackReceivers = ({\n pendingCallback,\n appUid,\n lzReceiveParty,\n treasury,\n}: CantonAdapterReceiversInput): string[] => {\n const lzSendArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n if (lzSendArgs) {\n if (pendingCallback.isAccept) {\n const parties = [...new Set(parseIndexedPayoutParties(lzSendArgs))];\n return parties.length > 0 ? parties : treasury ? [treasury] : [];\n }\n return [pendingCallback.sender];\n }\n\n const lzReceiveArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (lzReceiveArgs) {\n if (!pendingCallback.isAccept) {\n return [];\n }\n if (!lzReceiveParty) {\n throw new Error('lzReceiveParty is required for LzReceive accept');\n }\n return [lzReceiveParty];\n }\n\n throw new Error('callbackContext is neither LzSend nor LzReceive');\n};\n\nconst parseIndexedPayoutParties = (\n args: NonNullable<ReturnType<typeof getCantonCallbackFnArgs>>,\n): string[] => {\n const count = Number(args.find(([key]) => key === 'receiverCount')?.[1].value ?? 0);\n\n const parties: string[] = [];\n for (let index = 0; index < count; index += 1) {\n const party = args.find(([key]) => key === `receiver_${index}`)?.[1].value;\n if (typeof party !== 'string' || party === '') {\n throw new Error(`LzSend callback missing receiver_${index}`);\n }\n parties.push(party);\n }\n return parties;\n};\n\nexport const cantonLockUnlockCallbackEntries = (args: {\n treasuryAssetCids?: string[];\n transferFactoryCid?: string;\n assetTransferContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.treasuryAssetCids)\n entries.push([\n 'treasuryAssetCids',\n [\n [\n 'treasuryAssetCids',\n {\n tag: 'AV_List',\n value: args.treasuryAssetCids.map((value) => ({\n tag: 'AV_ContractId',\n value,\n })),\n },\n ],\n ],\n ]);\n if (args.transferFactoryCid)\n entries.push([\n 'transferFactoryCid',\n [\n [\n 'transferFactoryCid',\n {\n tag: 'AV_ContractId',\n value: args.transferFactoryCid,\n },\n ],\n ],\n ]);\n if (args.assetTransferContext)\n entries.push([\n 'assetTransferContext',\n [\n [\n 'assetTransferContext',\n {\n tag: 'AV_Map',\n value: args.assetTransferContext,\n },\n ],\n ],\n ]);\n return entries;\n};\n\nexport const cantonBurnMintCallbackEntries = (args: {\n burnMintFactoryCid?: string;\n burnMintExtraArgs?: Record<string, unknown>;\n burnMintOutputContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.burnMintFactoryCid)\n entries.push([\n 'burnMintFactoryCid',\n [['burnMintFactoryCid', { tag: 'AV_ContractId', value: args.burnMintFactoryCid }]],\n ]);\n for (const key of ['burnMintExtraArgs', 'burnMintOutputContext'] as const) {\n if (args[key]) entries.push([key, [[key, { tag: 'AV_Map', value: args[key] }]]]);\n }\n return entries;\n};\n"]}
@@ -6,15 +6,19 @@ import { __name } from './VUOMXK5T.js';
6
6
  var ACCESS_CONTROL = "#layerzero-iaccess-control:IAccessControl:IAccessControl";
7
7
  var resolveCantonOneSigScopeContext = /* @__PURE__ */ __name(async (sdk, input) => {
8
8
  const offset = await sdk.getLedgerEndOffset();
9
+ const parties = [
10
+ .../* @__PURE__ */ new Set([
11
+ input.informee,
12
+ ...input.readAs ?? []
13
+ ])
14
+ ];
9
15
  const matching = /* @__PURE__ */ __name(async (interfaceId) => {
10
16
  const [name, ...entity] = interfaceId.slice(1).split(":");
11
17
  const packageId = await sdk.getPackageId(name, [
12
18
  input.informee
13
19
  ]);
14
20
  const resolvedId = `${packageId}:${entity.join(":")}`;
15
- return (await sdk.queryActiveContractsByInterface([
16
- input.informee
17
- ], offset, [
21
+ return (await sdk.queryActiveContractsByInterface(parties, offset, [
18
22
  interfaceId
19
23
  ], {
20
24
  includeCreatedEventBlob: true
@@ -71,5 +75,5 @@ var resolveCantonOneSigScopeContext = /* @__PURE__ */ __name(async (sdk, input)
71
75
  }, "resolveCantonOneSigScopeContext");
72
76
 
73
77
  export { resolveCantonOneSigScopeContext };
74
- //# sourceMappingURL=NGED2YCU.js.map
75
- //# sourceMappingURL=NGED2YCU.js.map
78
+ //# sourceMappingURL=OK7GQCQM.js.map
79
+ //# sourceMappingURL=OK7GQCQM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/refresh/onesig-scope.ts"],"names":["ACCESS_CONTROL","resolveCantonOneSigScopeContext","sdk","input","offset","getLedgerEndOffset","parties","Set","informee","readAs","matching","interfaceId","name","entity","slice","split","packageId","getPackageId","resolvedId","join","queryActiveContractsByInterface","includeCreatedEventBlob","filter","createdEvent","views","interfaceViews","view","scope","getCreateArgumentField","viewValue","length","viewStatus","code","areExpectedSignatories","admin","category","id","setter","operation","tag","field","undefined","targets","Error","target","disclosedContracts","callbackDisclosure","context","value","targetContractId","contractId","access","push","accessControlCid"],"mappings":";;;;;AAOA,IAAMA,cAAAA,GAAiB,0DAAA;AAEhB,IAAMC,+BAAAA,mBAAkC,MAAA,CAAA,OAC3CC,GAAAA,EACAC,KAAAA,KAAAA;AAKA,EAAA,MAAMC,MAAAA,GAAS,MAAMF,GAAAA,CAAIG,kBAAAA,EAAkB;AAC3C,EAAA,MAAMC,OAAAA,GAAU;AAAI,IAAA,mBAAA,IAAIC,GAAAA,CAAI;MAACJ,KAAAA,CAAMK,QAAAA;AAAcL,MAAAA,GAAAA,KAAAA,CAAMM,UAAU;AAAI,KAAA;;AACrE,EAAA,MAAMC,QAAAA,iCAAkBC,WAAAA,KAAAA;AACpB,IAAA,MAAM,CAACC,IAAAA,EAAM,GAAGC,MAAAA,CAAAA,GAAUF,YAAYG,KAAAA,CAAM,CAAA,CAAA,CAAGC,KAAAA,CAAM,GAAA,CAAA;AACrD,IAAA,MAAMC,SAAAA,GAAY,MAAMd,GAAAA,CAAIe,YAAAA,CAAaL,IAAAA,EAAO;MAACT,KAAAA,CAAMK;AAAS,KAAA,CAAA;AAChE,IAAA,MAAMU,aAAa,CAAA,EAAGF,SAAAA,IAAaH,MAAAA,CAAOM,IAAAA,CAAK,GAAA,CAAA,CAAA,CAAA;AAC/C,IAAA,OAAA,CACI,MAAMjB,GAAAA,CAAIkB,+BAAAA,CAAgCd,OAAAA,EAASF,MAAAA,EAAQ;AAACO,MAAAA;AAAc,KAAA,EAAA;MACtEU,uBAAAA,EAAyB;AAC7B,KAAA,CAAA,EACFC,MAAAA,CAAO,CAAC,EAAEC,cAAY,KAAE;AACtB,MAAA,MAAMC,KAAAA,GACFD,YAAAA,CAAaE,cAAAA,EAAgBH,MAAAA,CAAO,CAACI,UAASA,KAAAA,CAAKf,WAAAA,KAAgBO,UAAAA,CAAAA,IACnE,EAAA;AACJ,MAAA,MAAMQ,IAAAA,GAAOF,MAAM,CAAA,CAAA;AACnB,MAAA,MAAMG,KAAAA,GAAQC,sBAAAA,CAAuBF,IAAAA,EAAMG,SAAAA,EAAW,OAAA,CAAA;AACtD,MAAA,OACIL,KAAAA,CAAMM,WAAW,CAAA,IACjBJ,IAAAA,EAAMK,YAAYC,IAAAA,KAAS,CAAA,IAC3BC,uBAAuBV,YAAAA,EAAc;AAACpB,QAAAA,KAAAA,CAAMwB,KAAAA,CAAMO;AAAM,OAAA,CAAA,IACxDN,uBAAuBD,KAAAA,EAAO,UAAA,MAAgBxB,KAAAA,CAAMwB,KAAAA,CAAMQ,YAC1DP,sBAAAA,CAAuBD,KAAAA,EAAO,OAAA,CAAA,KAAaxB,KAAAA,CAAMwB,MAAMO,KAAAA,IACvDN,sBAAAA,CAAuBD,OAAO,IAAA,CAAA,KAAUxB,MAAMwB,KAAAA,CAAMS,EAAAA;IAE5D,CAAA,CAAA;EACJ,CAAA,EAvBiB,UAAA,CAAA;AAwBjB,EAAA,MAAMC,MAAAA,GACFlC,KAAAA,CAAMmC,SAAAA,KAAc,aAAA,GACd;IACI3B,WAAAA,EAAa,oCAAA;IACb4B,GAAAA,EAAK,eAAA;IACLC,KAAAA,EAAO;GACX,GACArC,KAAAA,CAAMmC,cAAc,qBAAA,GAClB;IACI3B,WAAAA,EAAa,4DAAA;IACb4B,GAAAA,EAAK,uBAAA;IACLC,KAAAA,EAAO;GACX,GACArC,KAAAA,CAAMmC,cAAc,uCAAA,GAClB;IACI3B,WAAAA,EACI,6FAAA;IACJ4B,GAAAA,EAAK,2BAAA;IACLC,KAAAA,EAAO;GACX,GACAC,MAAAA;AACd,EAAA,MAAMC,OAAAA,GAAU,MAAMhC,QAAAA,CAAS2B,MAAAA,EAAQ1B,eAAeX,cAAAA,CAAAA;AACtD,EAAA,IAAI0C,OAAAA,CAAQZ,WAAW,CAAA,EACnB,MAAM,IAAIa,KAAAA,CAAM,CAAA,yCAAA,EAA4CD,OAAAA,CAAQZ,MAAM,CAAA,CAAE,CAAA;AAChF,EAAA,MAAMc,MAAAA,GAASF,QAAQ,CAAA,CAAA;AACvB,EAAA,MAAMG,kBAAAA,GAAqB;AAACC,IAAAA,kBAAAA,CAAmBF,MAAAA;;AAC/C,EAAA,IAAI,CAACP,QACD,OAAO;IACHU,OAAAA,EAAS;MACLR,GAAAA,EAAK,sBAAA;MACLS,KAAAA,EAAO;AAAEC,QAAAA,gBAAAA,EAAkBL,OAAOrB,YAAAA,CAAa2B;AAAW;AAC9D,KAAA;AACAL,IAAAA;AACJ,GAAA;AACJ,EAAA,MAAMM,MAAAA,GAAS,MAAMzC,QAAAA,CAASV,cAAAA,CAAAA;AAC9B,EAAA,IAAImD,OAAOrB,MAAAA,GAAS,CAAA,EAAG,MAAM,IAAIa,MAAM,gCAAA,CAAA;AACvC,EAAA,IAAIQ,MAAAA,CAAO,CAAA,CAAA,EAAIN,kBAAAA,CAAmBO,KAAKN,kBAAAA,CAAmBK,MAAAA,CAAO,CAAA,CAAE,CAAA,CAAA;AACnE,EAAA,OAAO;IACHJ,OAAAA,EAAS;AACLR,MAAAA,GAAAA,EAAKF,MAAAA,CAAOE,GAAAA;MACZS,KAAAA,EAAO;AACH,QAAA,CAACX,MAAAA,CAAOG,KAAK,GAAGI,MAAAA,CAAOrB,YAAAA,CAAa2B,UAAAA;AACpCG,QAAAA,gBAAAA,EAAkBF,MAAAA,CAAO,CAAA,CAAA,EAAI5B,YAAAA,CAAa2B,UAAAA,IAAc;AAC5D;AACJ,KAAA;AACAL,IAAAA;AACJ,GAAA;AACJ,CAAA,EAhF+C,iCAAA","file":"OK7GQCQM.js","sourcesContent":["import type { JsActiveContract } from '../open-api/models';\nimport type { CantonSdk } from '../sdk/canton-sdk';\nimport type { CantonDisclosedContract } from '../transaction';\nimport { areExpectedSignatories, getCreateArgumentField } from '../trusted-origin';\nimport { callbackDisclosure } from './callback-contracts';\nimport type { CantonOneSigScopeContextRefresh } from './plan';\n\nconst ACCESS_CONTROL = '#layerzero-iaccess-control:IAccessControl:IAccessControl';\ntype Input = CantonOneSigScopeContextRefresh['resolver'];\nexport const resolveCantonOneSigScopeContext = async (\n sdk: CantonSdk,\n input: Input,\n): Promise<{\n context: { tag: string; value: Record<string, string | null> };\n disclosedContracts: CantonDisclosedContract[];\n}> => {\n const offset = await sdk.getLedgerEndOffset();\n const parties = [...new Set([input.informee, ...(input.readAs ?? [])])];\n const matching = async (interfaceId: string): Promise<JsActiveContract[]> => {\n const [name, ...entity] = interfaceId.slice(1).split(':');\n const packageId = await sdk.getPackageId(name!, [input.informee]);\n const resolvedId = `${packageId}:${entity.join(':')}`;\n return (\n await sdk.queryActiveContractsByInterface(parties, offset, [interfaceId], {\n includeCreatedEventBlob: true,\n })\n ).filter(({ createdEvent }) => {\n const views =\n createdEvent.interfaceViews?.filter((view) => view.interfaceId === resolvedId) ??\n [];\n const view = views[0];\n const scope = getCreateArgumentField(view?.viewValue, 'scope');\n return (\n views.length === 1 &&\n view?.viewStatus?.code === 0 &&\n areExpectedSignatories(createdEvent, [input.scope.admin]) &&\n getCreateArgumentField(scope, 'category') === input.scope.category &&\n getCreateArgumentField(scope, 'admin') === input.scope.admin &&\n getCreateArgumentField(scope, 'id') === input.scope.id\n );\n });\n };\n const setter =\n input.operation === 'OpSetMinFee'\n ? {\n interfaceId: '#layerzero-iminfee:IMinFee:IMinFee',\n tag: 'MinFeeContext',\n field: 'minFeeContractId',\n }\n : input.operation === 'OpSetMinPayoutValue'\n ? {\n interfaceId: '#layerzero-iminpayoutvalue:IMinPayoutValue:IMinPayoutValue',\n tag: 'MinPayoutValueContext',\n field: 'minPayoutValueContractId',\n }\n : input.operation === 'OpSetProtocolLedgerTimeValidityPeriod'\n ? {\n interfaceId:\n '#layerzero-iledger-time-validity-period:ILedgerTimeValidityPeriod:ILedgerTimeValidityPeriod',\n tag: 'LedgerTimeValidityContext',\n field: 'ledgerTimeValidityContractId',\n }\n : undefined;\n const targets = await matching(setter?.interfaceId ?? ACCESS_CONTROL);\n if (targets.length !== 1)\n throw new Error(`Expected exactly one scope target, found ${targets.length}`);\n const target = targets[0]!;\n const disclosedContracts = [callbackDisclosure(target)];\n if (!setter)\n return {\n context: {\n tag: 'AccessControlContext',\n value: { targetContractId: target.createdEvent.contractId },\n },\n disclosedContracts,\n };\n const access = await matching(ACCESS_CONTROL);\n if (access.length > 1) throw new Error('Ambiguous scope access control');\n if (access[0]) disclosedContracts.push(callbackDisclosure(access[0]));\n return {\n context: {\n tag: setter.tag,\n value: {\n [setter.field]: target.createdEvent.contractId,\n accessControlCid: access[0]?.createdEvent.contractId ?? null,\n },\n },\n disclosedContracts,\n };\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { resolveCantonRefreshPlan } from './4SK2ZV46.js';
1
+ import { resolveCantonRefreshPlan } from './7DFFQF5Y.js';
2
2
  import { __name } from './VUOMXK5T.js';
3
3
 
4
4
  // src/refresh/resolve.ts
@@ -16,5 +16,5 @@ var resolveCantonTransaction = /* @__PURE__ */ __name(async ({ unresolvedCommand
16
16
  }, "resolveCantonTransaction");
17
17
 
18
18
  export { resolveCantonTransaction };
19
- //# sourceMappingURL=JJDWTXLN.js.map
20
- //# sourceMappingURL=JJDWTXLN.js.map
19
+ //# sourceMappingURL=QOVYNKLD.js.map
20
+ //# sourceMappingURL=QOVYNKLD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","refreshPlan","senderParty","signingParties","client","resolveCantonRefreshPlan","commands"],"mappings":";;;;AAmBO,IAAMA,wBAAAA,iCAAkC,EAC3CC,kBAAAA,EACAC,8BACAC,WAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,MAAAA,EAAM,KACmB;AAIzB,EAAA,OAAOC,wBAAAA,CAAyB;AAC5BN,IAAAA,kBAAAA;AACAC,IAAAA,4BAAAA;AACAC,IAAAA,WAAAA,EAAaA,WAAAA,IAAe;AAAEK,MAAAA,QAAAA,EAAU;AAAG,KAAA;AAC3CJ,IAAAA,WAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA;GACJ,CAAA;AACJ,CAAA,EAnBwC,0BAAA","file":"JJDWTXLN.js","sourcesContent":["import type { ICantonClient } from '../client/interface';\nimport type {\n CantonCommand,\n CantonDisclosedContract,\n CantonUnresolvedCommand,\n} from '../transaction';\nimport type { CantonRefreshPlan } from './plan';\nimport { resolveCantonRefreshPlan } from './resolve-plan';\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 return resolveCantonRefreshPlan({\n unresolvedCommands,\n unresolvedDisclosedContracts,\n refreshPlan: refreshPlan ?? { commands: [] },\n senderParty,\n signingParties,\n client,\n });\n};\n"]}
1
+ {"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","refreshPlan","senderParty","signingParties","client","resolveCantonRefreshPlan","commands"],"mappings":";;;;AAmBO,IAAMA,wBAAAA,iCAAkC,EAC3CC,kBAAAA,EACAC,8BACAC,WAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,MAAAA,EAAM,KACmB;AAIzB,EAAA,OAAOC,wBAAAA,CAAyB;AAC5BN,IAAAA,kBAAAA;AACAC,IAAAA,4BAAAA;AACAC,IAAAA,WAAAA,EAAaA,WAAAA,IAAe;AAAEK,MAAAA,QAAAA,EAAU;AAAG,KAAA;AAC3CJ,IAAAA,WAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA;GACJ,CAAA;AACJ,CAAA,EAnBwC,0BAAA","file":"QOVYNKLD.js","sourcesContent":["import type { ICantonClient } from '../client/interface';\nimport type {\n CantonCommand,\n CantonDisclosedContract,\n CantonUnresolvedCommand,\n} from '../transaction';\nimport type { CantonRefreshPlan } from './plan';\nimport { resolveCantonRefreshPlan } from './resolve-plan';\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 return resolveCantonRefreshPlan({\n unresolvedCommands,\n unresolvedDisclosedContracts,\n refreshPlan: refreshPlan ?? { commands: [] },\n senderParty,\n signingParties,\n client,\n });\n};\n"]}
@@ -1,9 +1,10 @@
1
1
  import { DefaultApi } from './AVTRWMUF.js';
2
2
  import { JsActiveContractFromJSON } from './NGL3CRVI.js';
3
3
  import { ResponseError } from './XVX7EVTW.js';
4
- import { fetchDsoParty, fetchAmuletTransferFactoryContext, fetchTransferInstructionContext, fetchAcceptContext, fetchAmuletContext, injectExternalPartyAmuletRules } from './KPFKPA5E.js';
4
+ import { fetchDsoParty, fetchAmuletTransferFactoryContext, fetchTransferInstructionContext, fetchAcceptContext, fetchAmuletContext, injectExternalPartyAmuletRules } from './XWNGGI4V.js';
5
5
  import { CantonProtocolError, cantonApiErrorFromResponse, CantonTransportError, CantonApiError } from './NYEJEKEY.js';
6
6
  import { __name } from './VUOMXK5T.js';
7
+ import { PreparedTransaction } from '@canton-network/core-ledger-proto';
7
8
  import { once } from 'es-toolkit';
8
9
  import { randomUUID } from 'crypto';
9
10
 
@@ -53,9 +54,9 @@ var CantonClient = class {
53
54
  });
54
55
  }
55
56
  /** Amulet ChoiceContext with ExternalPartyAmuletRules injected — required by every flow hitting FeeUtils.validateContext. */
56
- async getAmuletContextWithExternalRules(instrumentId) {
57
+ async getAmuletContextWithExternalRules(instrumentId, options) {
57
58
  const { walletUrl, tokenProvider } = this.#requireWallet();
58
- const { amuletContext, disclosedContracts } = await fetchAmuletContext(walletUrl, await tokenProvider.getToken(), instrumentId);
59
+ const { amuletContext, disclosedContracts } = await fetchAmuletContext(walletUrl, await tokenProvider.getToken(), instrumentId, options);
59
60
  const { amuletContext: contextWithRules, externalPartyAmuletRulesCid } = injectExternalPartyAmuletRules(amuletContext, disclosedContracts);
60
61
  return {
61
62
  amuletContext: contextWithRules,
@@ -545,6 +546,98 @@ var CantonClient = class {
545
546
  lastCheckedOffset: beginExclusive
546
547
  };
547
548
  }
549
+ async #assertCommandSource(expiry) {
550
+ if (!expiry.userId || expiry.userId !== this.#userId || !expiry.participantId || expiry.participantId !== await this.getLocalParticipantId()) {
551
+ throw new CantonProtocolError("Command source differs from the preparing participant or user");
552
+ }
553
+ }
554
+ async waitForCommandWithExpiry(commandId, opts) {
555
+ const { expiry, parties, timeoutMs = 3e4, poll = {} } = opts;
556
+ await this.#assertCommandSource(expiry);
557
+ let beginExclusive = expiry.completionOffset;
558
+ const maxRecordTime = Date.parse(expiry.maxRecordTime);
559
+ if (!Number.isSafeInteger(beginExclusive) || beginExclusive < 0 || !Number.isFinite(maxRecordTime) || !expiry.synchronizerId) {
560
+ throw new CantonProtocolError("Invalid command expiry metadata");
561
+ }
562
+ const deadline = Date.now() + timeoutMs;
563
+ let backoffMs = poll.backoffMs?.initial ?? 100;
564
+ let rejection;
565
+ while (Date.now() < deadline) {
566
+ const previousOffset = beginExclusive;
567
+ const response = await this.#invoke(() => this.#api.postV2CommandsCompletionsRaw({
568
+ completionStreamRequest: {
569
+ beginExclusive,
570
+ parties,
571
+ userId: this.#userId
572
+ },
573
+ limit: poll.limit ?? 50,
574
+ streamIdleTimeoutMs: poll.streamIdleTimeoutMs ?? 1e3
575
+ }));
576
+ const entries = await response.raw.json();
577
+ let expired = false;
578
+ for (const entry of entries) {
579
+ const item = this.#getField(entry, "completionResponse");
580
+ const checkpointWrapper = this.#getField(item, "offsetCheckpoint");
581
+ const checkpoint = this.#getField(checkpointWrapper, "value") ?? checkpointWrapper;
582
+ const completionWrapper = this.#getField(item, "completion");
583
+ const completion = this.#getField(completionWrapper, "value") ?? completionWrapper;
584
+ if (!checkpoint && !completion) {
585
+ if (this.#getField(item, "empty") !== void 0) continue;
586
+ throw new CantonProtocolError("Unrecognized command completion response");
587
+ }
588
+ const offset = this.#getField(checkpoint ?? completion, "offset");
589
+ if (!Number.isSafeInteger(offset) || offset < 0) {
590
+ throw new CantonProtocolError("Invalid command completion offset");
591
+ }
592
+ if (checkpoint) {
593
+ const times = this.#getField(checkpoint, "synchronizerTimes");
594
+ expired ||= offset >= beginExclusive && !!times?.some((time) => time.synchronizerId === expiry.synchronizerId && Date.parse(time.recordTime) > maxRecordTime);
595
+ } else if (this.#getField(completion, "commandId") === commandId) {
596
+ const status = this.#getField(completion, "status");
597
+ if (status && (!Number.isInteger(status.code) || status.code < 0 || status.code > 16)) {
598
+ throw new CantonProtocolError("Invalid command completion status");
599
+ }
600
+ if (!status || status.code === 0) {
601
+ const updateId = this.#getField(completion, "updateId");
602
+ if (!updateId) throw new CantonProtocolError("Accepted command is missing updateId");
603
+ return {
604
+ status: "accepted",
605
+ commandId,
606
+ updateId,
607
+ offset
608
+ };
609
+ }
610
+ rejection = {
611
+ status: "rejected",
612
+ commandId,
613
+ offset,
614
+ error: {
615
+ code: status.code,
616
+ message: status.message ?? "Unknown rejection",
617
+ details: status.details
618
+ }
619
+ };
620
+ }
621
+ beginExclusive = Math.max(beginExclusive, offset);
622
+ }
623
+ if (expired) return rejection ?? {
624
+ status: "expired",
625
+ commandId
626
+ };
627
+ if (beginExclusive > previousOffset) {
628
+ backoffMs = poll.backoffMs?.initial ?? 100;
629
+ continue;
630
+ }
631
+ const delay = Math.min(backoffMs, poll.backoffMs?.max ?? 5e3, deadline - Date.now());
632
+ if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
633
+ backoffMs = Math.min(backoffMs * 2, poll.backoffMs?.max ?? 5e3);
634
+ }
635
+ return {
636
+ status: "timeout",
637
+ commandId,
638
+ lastCheckedOffset: beginExclusive
639
+ };
640
+ }
548
641
  // ─────────────────────────────────────────────────────────────────────────
549
642
  // Disclosed Contracts
550
643
  // ─────────────────────────────────────────────────────────────────────────
@@ -653,27 +746,23 @@ var CantonClient = class {
653
746
  const updateResponse = await response.raw.json();
654
747
  return this.#parseTransactionFromUpdate(updateResponse, `Update at offset ${offset} is not a transaction`);
655
748
  }
656
- // ─────────────────────────────────────────────────────────────────────────
657
- // External Party / Interactive Submission
658
- // ─────────────────────────────────────────────────────────────────────────
659
- /**
660
- * Prepare commands for external party signing.
661
- *
662
- * Returns a typed PreparedTransaction that preserves the contract type
663
- * through the signing flow. After signing, use submitSigned() to submit.
664
- *
665
- * @typeparam T The contract payload type (phantom type for type safety)
666
- *
667
- * @example
668
- * ```ts
669
- * const prepared = await client.prepareForSigning<Oft>({ actAs: [party] }, [cmd]);
670
- * const signature = await sign(prepared.preparedTransactionHash);
671
- * await client.submitSigned(prepared, [signature]);
672
- * ```
673
- */
674
749
  async prepareForSigning(actors, commands, opts = {}) {
675
750
  const synchronizerId = await this.#ensureSynchronizerId();
676
751
  const commandId = opts.commandId ?? randomUUID();
752
+ let expiry;
753
+ if (opts.maxRecordTime !== void 0) {
754
+ const [participantId, completionOffset] = await Promise.all([
755
+ this.getLocalParticipantId(),
756
+ this.getLedgerEndOffset()
757
+ ]);
758
+ expiry = {
759
+ maxRecordTime: opts.maxRecordTime,
760
+ synchronizerId,
761
+ participantId,
762
+ userId: this.#userId,
763
+ completionOffset
764
+ };
765
+ }
677
766
  const request = {
678
767
  jsPrepareSubmissionRequest: {
679
768
  userId: this.#userId,
@@ -684,11 +773,28 @@ var CantonClient = class {
684
773
  disclosedContracts: opts.disclosedContracts,
685
774
  synchronizerId,
686
775
  verboseHashing: false,
776
+ ...expiry ? {
777
+ maxRecordTime: expiry.maxRecordTime,
778
+ hashingSchemeVersion: "HASHING_SCHEME_VERSION_V3"
779
+ } : {},
687
780
  packageIdSelectionPreference: []
688
781
  }
689
782
  };
690
783
  const response = await this.#invoke(() => this.#api.postV2InteractiveSubmissionPrepare(request));
691
784
  const validated = this.#validatePrepareResponse(response);
785
+ if (expiry) {
786
+ const metadata = PreparedTransaction.fromBinary(Buffer.from(validated.preparedTransaction, "base64")).metadata;
787
+ const deadline = Date.parse(expiry.maxRecordTime);
788
+ if (!Number.isFinite(deadline) || validated.hashingSchemeVersion !== "HASHING_SCHEME_VERSION_V3" || metadata?.maxRecordTime !== BigInt(deadline) * 1000n) {
789
+ throw new CantonProtocolError("Prepared transaction does not contain the requested signed maxRecordTime");
790
+ }
791
+ return {
792
+ ...validated,
793
+ hashingSchemeVersion: "HASHING_SCHEME_VERSION_V3",
794
+ commandId,
795
+ expiry
796
+ };
797
+ }
692
798
  return {
693
799
  ...validated,
694
800
  hashingSchemeVersion: validated.hashingSchemeVersion,
@@ -701,7 +807,15 @@ var CantonClient = class {
701
807
  * The generic type T flows from prepareForSigning() for type documentation.
702
808
  */
703
809
  async submitSigned(prepared, signatures) {
704
- const completionOffset = await this.getLedgerEndOffset();
810
+ const expiry = "expiry" in prepared ? prepared.expiry : void 0;
811
+ if (expiry) await this.#assertCommandSource(expiry);
812
+ const completionOffset = expiry?.completionOffset ?? await this.getLedgerEndOffset();
813
+ if (expiry && Date.now() >= Date.parse(expiry.maxRecordTime)) {
814
+ return {
815
+ commandId: prepared.commandId,
816
+ completionOffset
817
+ };
818
+ }
705
819
  const request = {
706
820
  jsExecuteSubmissionRequest: {
707
821
  preparedTransaction: prepared.preparedTransaction,
@@ -937,5 +1051,5 @@ var CantonClient = class {
937
1051
  };
938
1052
 
939
1053
  export { CantonClient };
940
- //# sourceMappingURL=HC2GOOAL.js.map
941
- //# sourceMappingURL=HC2GOOAL.js.map
1054
+ //# sourceMappingURL=QWU4V7O2.js.map
1055
+ //# sourceMappingURL=QWU4V7O2.js.map