@layerzerolabs/common-canton 0.2.116 → 0.2.118

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 (107) hide show
  1. package/.turbo/turbo-build.log +649 -614
  2. package/.turbo/turbo-test.log +18 -21
  3. package/dist/57KDDFEU.js +52 -0
  4. package/dist/57KDDFEU.js.map +1 -0
  5. package/dist/{SMLSAWCA.js → 7IWE7Y2N.js} +30 -3
  6. package/dist/7IWE7Y2N.js.map +1 -0
  7. package/dist/AQJMQQ4W.js +3 -0
  8. package/dist/AQJMQQ4W.js.map +1 -0
  9. package/dist/AYF4OAKH.js +86 -0
  10. package/dist/AYF4OAKH.js.map +1 -0
  11. package/dist/CAJCIAM3.js +71 -0
  12. package/dist/CAJCIAM3.js.map +1 -0
  13. package/dist/I6Z5XG3N.js +33 -0
  14. package/dist/I6Z5XG3N.js.map +1 -0
  15. package/dist/{4CJTJBWF.js → JW6XB3KU.js} +9 -6
  16. package/dist/JW6XB3KU.js.map +1 -0
  17. package/dist/{FPRRDKT5.js → M5WKPPPH.js} +4 -4
  18. package/dist/M5WKPPPH.js.map +1 -0
  19. package/dist/QRFMJ32P.js +103 -0
  20. package/dist/QRFMJ32P.js.map +1 -0
  21. package/dist/RJSKBZMO.js +41 -0
  22. package/dist/RJSKBZMO.js.map +1 -0
  23. package/dist/TM5LJKTE.js +31 -0
  24. package/dist/TM5LJKTE.js.map +1 -0
  25. package/dist/{EYLCZMM4.js → WHTAP4A3.js} +9 -3
  26. package/dist/WHTAP4A3.js.map +1 -0
  27. package/dist/XE6H2SH4.js +3 -0
  28. package/dist/XE6H2SH4.js.map +1 -0
  29. package/dist/{5PRNJEPB.js → Z35TKEFU.js} +5 -7
  30. package/dist/Z35TKEFU.js.map +1 -0
  31. package/dist/address.d.ts +16 -0
  32. package/dist/address.d.ts.map +1 -0
  33. package/dist/address.js +5 -0
  34. package/dist/address.js.map +1 -0
  35. package/dist/auth/index.js +1 -1
  36. package/dist/client/amulet.d.ts +38 -0
  37. package/dist/client/amulet.d.ts.map +1 -0
  38. package/dist/client/amulet.js +5 -0
  39. package/dist/client/amulet.js.map +1 -0
  40. package/dist/client/canton-client.d.ts +5 -1
  41. package/dist/client/canton-client.d.ts.map +1 -1
  42. package/dist/client/canton-client.js +2 -1
  43. package/dist/client/index.d.ts +1 -0
  44. package/dist/client/index.d.ts.map +1 -1
  45. package/dist/client/index.js +5 -4
  46. package/dist/client/interface.d.ts +4 -0
  47. package/dist/client/interface.d.ts.map +1 -1
  48. package/dist/deferredValue.d.ts +16 -8
  49. package/dist/deferredValue.d.ts.map +1 -1
  50. package/dist/deferredValue.js +1 -1
  51. package/dist/events.js +2 -2
  52. package/dist/index.d.ts +3 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +25 -17
  55. package/dist/provider.d.ts.map +1 -1
  56. package/dist/provider.js +6 -5
  57. package/dist/refresh/address-resolver.d.ts +29 -0
  58. package/dist/refresh/address-resolver.d.ts.map +1 -0
  59. package/dist/refresh/address-resolver.js +4 -0
  60. package/dist/refresh/address-resolver.js.map +1 -0
  61. package/dist/refresh/deployment-address.d.ts +14 -0
  62. package/dist/refresh/deployment-address.d.ts.map +1 -0
  63. package/dist/refresh/deployment-address.js +5 -0
  64. package/dist/refresh/deployment-address.js.map +1 -0
  65. package/dist/refresh/index.d.ts +6 -0
  66. package/dist/refresh/index.d.ts.map +1 -0
  67. package/dist/refresh/index.js +12 -0
  68. package/dist/refresh/index.js.map +1 -0
  69. package/dist/refresh/resolve.d.ts +15 -0
  70. package/dist/refresh/resolve.d.ts.map +1 -0
  71. package/dist/refresh/resolve.js +9 -0
  72. package/dist/refresh/resolve.js.map +1 -0
  73. package/dist/refresh/reverse-substitute.d.ts +6 -0
  74. package/dist/refresh/reverse-substitute.d.ts.map +1 -0
  75. package/dist/refresh/reverse-substitute.js +5 -0
  76. package/dist/refresh/reverse-substitute.js.map +1 -0
  77. package/dist/refresh/wrapped-lz-sdk.d.ts +10 -0
  78. package/dist/refresh/wrapped-lz-sdk.d.ts.map +1 -0
  79. package/dist/refresh/wrapped-lz-sdk.js +6 -0
  80. package/dist/refresh/wrapped-lz-sdk.js.map +1 -0
  81. package/dist/transaction.d.ts +37 -2
  82. package/dist/transaction.d.ts.map +1 -1
  83. package/dist/transaction.js +1 -1
  84. package/package.json +10 -10
  85. package/src/address.ts +50 -0
  86. package/src/client/amulet.ts +126 -0
  87. package/src/client/canton-client.ts +48 -2
  88. package/src/client/index.ts +1 -0
  89. package/src/client/interface.ts +6 -0
  90. package/src/deferredValue.ts +16 -11
  91. package/src/events.ts +1 -1
  92. package/src/index.ts +3 -13
  93. package/src/provider.ts +4 -1
  94. package/src/refresh/address-resolver.ts +161 -0
  95. package/src/refresh/deployment-address.ts +45 -0
  96. package/src/refresh/index.ts +5 -0
  97. package/src/refresh/resolve.ts +101 -0
  98. package/src/refresh/reverse-substitute.ts +63 -0
  99. package/src/refresh/wrapped-lz-sdk.ts +59 -0
  100. package/src/transaction.ts +18 -1
  101. package/dist/4CJTJBWF.js.map +0 -1
  102. package/dist/5PRNJEPB.js.map +0 -1
  103. package/dist/DYPWWRBK.js +0 -3
  104. package/dist/DYPWWRBK.js.map +0 -1
  105. package/dist/EYLCZMM4.js.map +0 -1
  106. package/dist/FPRRDKT5.js.map +0 -1
  107. package/dist/SMLSAWCA.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ import { cantonActiveContractIdRef } from './Z35TKEFU.js';
2
+ import { __name } from './VUOMXK5T.js';
3
+ import { NonRetryableError } from '@layerzerolabs/common-error-utils';
4
+
5
+ var qualifiedTemplateName = /* @__PURE__ */ __name((templateId) => {
6
+ const firstColon = templateId.indexOf(":");
7
+ return firstColon === -1 ? templateId : templateId.slice(firstColon + 1);
8
+ }, "qualifiedTemplateName");
9
+ var buildCantonDeployedContractAddressRef = /* @__PURE__ */ __name((createdEvent, spec) => {
10
+ const qualifiedName = qualifiedTemplateName(createdEvent.templateId);
11
+ const createArgument = createdEvent.createArgument ?? {};
12
+ const ownerParty = createArgument[spec.ownerField];
13
+ if (typeof ownerParty !== "string") {
14
+ throw new NonRetryableError(`Template '${qualifiedName}' create argument is missing string owner field '${spec.ownerField}'`);
15
+ }
16
+ const contractStateFilter = spec.identityKeys.length ? Object.fromEntries(spec.identityKeys.map((key) => [
17
+ key,
18
+ createArgument[key]
19
+ ])) : void 0;
20
+ return cantonActiveContractIdRef({
21
+ partyToFilter: {
22
+ party: ownerParty
23
+ },
24
+ templateId: `#${spec.packageName}:${qualifiedName}`,
25
+ ...contractStateFilter ? {
26
+ contractStateFilter
27
+ } : {}
28
+ });
29
+ }, "buildCantonDeployedContractAddressRef");
30
+
31
+ export { buildCantonDeployedContractAddressRef, qualifiedTemplateName };
32
+ //# sourceMappingURL=I6Z5XG3N.js.map
33
+ //# sourceMappingURL=I6Z5XG3N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/refresh/deployment-address.ts"],"names":["qualifiedTemplateName","templateId","firstColon","indexOf","slice","buildCantonDeployedContractAddressRef","createdEvent","spec","qualifiedName","createArgument","ownerParty","ownerField","NonRetryableError","contractStateFilter","identityKeys","length","Object","fromEntries","map","key","undefined","cantonActiveContractIdRef","partyToFilter","party","packageName"],"mappings":";;;;AAYO,IAAMA,qBAAAA,2BAAyBC,UAAAA,KAAAA;AAClC,EAAA,MAAMC,UAAAA,GAAaD,UAAAA,CAAWE,OAAAA,CAAQ,GAAA,CAAA;AACtC,EAAA,OAAOD,eAAe,EAAA,GAAKD,UAAAA,GAAaA,UAAAA,CAAWG,KAAAA,CAAMF,aAAa,CAAA,CAAA;AAC1E,CAAA,EAHqC,uBAAA;AAU9B,IAAMG,qCAAAA,mBAAwC,MAAA,CAAA,CACjDC,YAAAA,EACAC,IAAAA,KAAAA;AAEA,EAAA,MAAMC,aAAAA,GAAgBR,qBAAAA,CAAsBM,YAAAA,CAAaL,UAAU,CAAA;AACnE,EAAA,MAAMQ,cAAAA,GAAkBH,YAAAA,CAAaG,cAAAA,IAAkB,EAAC;AACxD,EAAA,MAAMC,UAAAA,GAAaD,cAAAA,CAAeF,IAAAA,CAAKI,UAAU,CAAA;AACjD,EAAA,IAAI,OAAOD,eAAe,QAAA,EAAU;AAChC,IAAA,MAAM,IAAIE,iBAAAA,CACN,CAAA,UAAA,EAAaJ,aAAAA,CAAAA,iDAAAA,EAAiED,IAAAA,CAAKI,UAAU,CAAA,CAAA,CAAG,CAAA;AAExG,EAAA;AAEA,EAAA,MAAME,mBAAAA,GAAsBN,IAAAA,CAAKO,YAAAA,CAAaC,MAAAA,GACxCC,MAAAA,CAAOC,YAAYV,IAAAA,CAAKO,YAAAA,CAAaI,GAAAA,CAAI,CAACC,GAAAA,KAAQ;AAACA,IAAAA,GAAAA;AAAKV,IAAAA,cAAAA,CAAeU,GAAAA;AAAK,GAAA,CAAA,CAAA,GAC5EC,MAAAA;AAEN,EAAA,OAAOC,yBAAAA,CAA0B;IAC7BC,aAAAA,EAAe;MAAEC,KAAAA,EAAOb;AAAW,KAAA;AACnCT,IAAAA,UAAAA,EAAY,CAAA,CAAA,EAAIM,IAAAA,CAAKiB,WAAW,CAAA,CAAA,EAAIhB,aAAAA,CAAAA,CAAAA;AACpC,IAAA,GAAIK,mBAAAA,GAAsB;AAAEA,MAAAA;AAAoB,KAAA,GAAI;GACxD,CAAA;AACJ,CAAA,EAtBqD,uCAAA","file":"I6Z5XG3N.js","sourcesContent":["import { NonRetryableError } from '@layerzerolabs/common-error-utils';\n\nimport { cantonActiveContractIdRef, type CantonDeferredRef } from '../deferredValue';\n\nexport interface CantonDeployedTemplateSpec {\n packageName: string;\n ownerField: string;\n // Immutable disambiguating fields only — mutable fields break recreate-survival.\n identityKeys: string[];\n}\n\n// Canton returns `<packageId>:Module:Entity`; the package id has no colon.\nexport const qualifiedTemplateName = (templateId: string): string => {\n const firstColon = templateId.indexOf(':');\n return firstColon === -1 ? templateId : templateId.slice(firstColon + 1);\n};\n\ninterface DeployedCreatedEvent {\n templateId: string;\n createArgument?: unknown;\n}\n\nexport const buildCantonDeployedContractAddressRef = (\n createdEvent: DeployedCreatedEvent,\n spec: CantonDeployedTemplateSpec,\n): CantonDeferredRef => {\n const qualifiedName = qualifiedTemplateName(createdEvent.templateId);\n const createArgument = (createdEvent.createArgument ?? {}) as Record<string, unknown>;\n const ownerParty = createArgument[spec.ownerField];\n if (typeof ownerParty !== 'string') {\n throw new NonRetryableError(\n `Template '${qualifiedName}' create argument is missing string owner field '${spec.ownerField}'`,\n );\n }\n\n const contractStateFilter = spec.identityKeys.length\n ? Object.fromEntries(spec.identityKeys.map((key) => [key, createArgument[key]]))\n : undefined;\n\n return cantonActiveContractIdRef({\n partyToFilter: { party: ownerParty },\n templateId: `#${spec.packageName}:${qualifiedName}`,\n ...(contractStateFilter ? { contractStateFilter } : {}),\n });\n};\n"]}
@@ -1,8 +1,8 @@
1
+ import { CantonClient } from './7IWE7Y2N.js';
2
+ import { CantonGrpcClient } from './YHW7AKHX.js';
3
+ import { Configuration } from './KBNUN3MF.js';
1
4
  import { ClientCredentialsTokenProvider } from './V2H2WXKE.js';
2
5
  import { LocalTokenProvider } from './SCEF7TLZ.js';
3
- import { CantonClient } from './SMLSAWCA.js';
4
- import { Configuration } from './KBNUN3MF.js';
5
- import { CantonGrpcClient } from './YHW7AKHX.js';
6
6
  import { __name } from './VUOMXK5T.js';
7
7
 
8
8
  // src/provider.ts
@@ -65,7 +65,10 @@ function createCantonChainProvider({ uri, isLocal }) {
65
65
  basePath: params.jsonApiUrl,
66
66
  accessToken: /* @__PURE__ */ __name(() => tokenProvider.getToken(), "accessToken")
67
67
  });
68
- const client = new CantonClient(configuration, params.userId);
68
+ const client = new CantonClient(configuration, params.userId, {
69
+ walletUrl: params.walletUrl,
70
+ tokenProvider
71
+ });
69
72
  const grpcClient = new CantonGrpcClient({
70
73
  host: params.adminApiHost,
71
74
  tokenProvider
@@ -94,5 +97,5 @@ function createTokenProvider(params, isLocal) {
94
97
  __name(createTokenProvider, "createTokenProvider");
95
98
 
96
99
  export { createCantonChainProvider, parseCantonChainUri };
97
- //# sourceMappingURL=4CJTJBWF.js.map
98
- //# sourceMappingURL=4CJTJBWF.js.map
100
+ //# sourceMappingURL=JW6XB3KU.js.map
101
+ //# sourceMappingURL=JW6XB3KU.js.map
@@ -0,0 +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","scope","audience","key","delete","jsonApiUrl","toString","replace","oauth2","createCantonChainProvider","isLocal","params","tokenProvider","createTokenProvider","configuration","Configuration","basePath","accessToken","getToken","client","CantonClient","grpcClient","CantonGrpcClient","host","LocalTokenProvider","admin","ClientCredentialsTokenProvider"],"mappings":"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","file":"JW6XB3KU.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 */\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 const clientSecret = url.searchParams.get('client-secret') ?? 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 * - **isLocal=false**: Uses {@link ClientCredentialsTokenProvider} with OAuth2 client\n * credentials extracted from the URI query parameters.\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 });\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: [],\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 the provider URI',\n );\n }\n\n return new ClientCredentialsTokenProvider(params.oauth2);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { cantonTransactionWithResultSchema } from './EYLCZMM4.js';
1
+ import { cantonTransactionWithResultSchema } from './WHTAP4A3.js';
2
2
  import { __name } from './VUOMXK5T.js';
3
3
  import { NonEmittableError } from '@layerzerolabs/common-error-utils';
4
4
 
@@ -21,7 +21,7 @@ var findMatchingCreatedEventFromTx = /* @__PURE__ */ __name(async (client, tx) =
21
21
  const { populatedTransaction: { actAs, unresolvedCommands } } = parsed.data;
22
22
  const updateId = parsed.data.result.minedTxHash;
23
23
  if (!updateId || !actAs.length) return null;
24
- const createCommand = unresolvedCommands[0];
24
+ const createCommand = unresolvedCommands.find((cmd) => "createCommand" in cmd);
25
25
  if (!createCommand || !("createCommand" in createCommand)) return null;
26
26
  const createdEvents = await fetchCreatedEvents(client, updateId, actAs);
27
27
  return findMatchingCreatedEvent(createdEvents, createCommand.createCommand.templateId, actAs) ?? null;
@@ -48,5 +48,5 @@ var getExercisedEvent = /* @__PURE__ */ __name((transaction, contractId) => {
48
48
  }, "getExercisedEvent");
49
49
 
50
50
  export { cantonDeploymentSucceeded, fetchCreatedEvents, findMatchingCreatedEvent, findMatchingCreatedEventFromTx, getExercisedEvent, waitForArchival };
51
- //# sourceMappingURL=FPRRDKT5.js.map
52
- //# sourceMappingURL=FPRRDKT5.js.map
51
+ //# sourceMappingURL=M5WKPPPH.js.map
52
+ //# sourceMappingURL=M5WKPPPH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/events.ts"],"names":["findMatchingCreatedEvent","createdEvents","expectedTemplateId","expectedSignatories","expectedSet","Set","find","event","templateId","signatories","length","every","s","has","fetchCreatedEvents","client","updateId","parties","cantonTx","fetchTransactionByUpdateId","events","filter","map","CreatedEvent","findMatchingCreatedEventFromTx","tx","parsed","cantonTransactionWithResultSchema","safeParse","success","data","result","type","populatedTransaction","actAs","unresolvedCommands","minedTxHash","createCommand","cmd","cantonDeploymentSucceeded","txWithResult","waitForArchival","contractId","archived","fetchEventsByContractId","fetchTransactionByOffset","offset","NonEmittableError","getExercisedEvent","transaction","ExercisedEvent","exercised","undefined"],"mappings":"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","file":"M5WKPPPH.js","sourcesContent":["import { NonEmittableError } from '@layerzerolabs/common-error-utils';\n\nimport type { CantonTransaction, ICantonClient } from './client';\nimport type { CreatedEvent, ExercisedEvent } from './open-api/models';\nimport { cantonTransactionWithResultSchema } from './transaction';\n\n/**\n * Finds a CreatedEvent matching the expected templateId whose signatories\n * are a subset of the provided actAs parties.\n */\nexport const findMatchingCreatedEvent = (\n createdEvents: CreatedEvent[],\n expectedTemplateId: string,\n expectedSignatories: string[],\n): CreatedEvent | undefined => {\n const expectedSet = new Set(expectedSignatories);\n return createdEvents.find((event) => {\n if (event.templateId !== expectedTemplateId) return false;\n const signatories = event.signatories ?? [];\n return signatories.length > 0 && signatories.every((s) => expectedSet.has(s));\n });\n};\n\n/**\n * Fetches a transaction by updateId and returns all CreatedEvents.\n */\nexport const fetchCreatedEvents = async (\n client: ICantonClient,\n updateId: string,\n parties: string[],\n): Promise<CreatedEvent[]> => {\n const cantonTx = await client.fetchTransactionByUpdateId(updateId, parties);\n return (\n cantonTx.events\n ?.filter((event): event is { CreatedEvent: CreatedEvent } => 'CreatedEvent' in event)\n .map((event) => event.CreatedEvent) ?? []\n );\n};\n\n/**\n * Parses a Canton transaction-with-result, fetches the created events from the ledger,\n * and returns the first CreatedEvent matching the submitted command's templateId and actAs\n * signatories. Returns null if the transaction is falsy, not successful, or has no match.\n */\nexport const findMatchingCreatedEventFromTx = async (\n client: ICantonClient,\n tx: unknown,\n): Promise<CreatedEvent | null> => {\n const parsed = cantonTransactionWithResultSchema.safeParse(tx);\n if (!parsed.success) return null;\n\n if (parsed.data.result.type !== 'success') return null;\n\n const {\n populatedTransaction: { actAs, unresolvedCommands },\n } = parsed.data;\n const updateId = parsed.data.result.minedTxHash;\n\n if (!updateId || !actAs.length) return null;\n\n const createCommand = unresolvedCommands.find((cmd) => 'createCommand' in cmd);\n if (!createCommand || !('createCommand' in createCommand)) return null;\n\n const createdEvents = await fetchCreatedEvents(client, updateId, actAs);\n return (\n findMatchingCreatedEvent(createdEvents, createCommand.createCommand.templateId, actAs) ??\n null\n );\n};\n\n/**\n * Checks that a Canton deploy transaction resulted in a CreatedEvent\n * matching the submitted command's templateId and actAs signatories.\n */\nexport const cantonDeploymentSucceeded = async (\n client: ICantonClient,\n txWithResult: unknown,\n): Promise<boolean> => {\n return (await findMatchingCreatedEventFromTx(client, txWithResult)) != null;\n};\n\n/**\n * Waits for a contract to be archived and returns the transaction that archived it.\n * Throws NonEmittableError if the contract is not yet archived.\n */\nexport const waitForArchival = async (\n client: ICantonClient,\n contractId: string,\n parties: string[],\n): Promise<CantonTransaction> => {\n const { archived } = await client.fetchEventsByContractId(contractId, parties);\n if (archived) {\n return client.fetchTransactionByOffset(archived.offset, parties);\n }\n throw new NonEmittableError(`Contract ${contractId} is not archived yet`);\n};\n\n/** Returns the first exercised event on `contractId` in a transaction tree, if any. */\nexport const getExercisedEvent = (\n transaction: CantonTransaction,\n contractId: string,\n): ExercisedEvent | undefined => {\n for (const event of transaction.events ?? []) {\n if (!('ExercisedEvent' in event)) continue;\n const { ExercisedEvent: exercised } = event;\n if (exercised.contractId === contractId) {\n return exercised;\n }\n }\n return undefined;\n};\n"]}
@@ -0,0 +1,103 @@
1
+ import { __name } from './VUOMXK5T.js';
2
+ import { NonRetryableError } from '@layerzerolabs/common-error-utils';
3
+
4
+ var matchesContractStateFilter = /* @__PURE__ */ __name((contract, contractStateFilter) => {
5
+ if (!contractStateFilter) return true;
6
+ const createArgument = contract.createdEvent.createArgument;
7
+ return Object.entries(contractStateFilter).every(([key, value]) => JSON.stringify(createArgument[key]) === JSON.stringify(value));
8
+ }, "matchesContractStateFilter");
9
+ var isRefAlive = /* @__PURE__ */ __name(async (client, ref) => {
10
+ if (ref.type !== "activeContractId" && ref.type !== "activeContractIds") return false;
11
+ if (ref.partyToFilter === "sender") return false;
12
+ const contracts = await queryLiveContractsForRef(client, ref.partyToFilter.party, ref);
13
+ return ref.type === "activeContractId" ? contracts.length === 1 : contracts.length > 0;
14
+ }, "isRefAlive");
15
+ var queryLiveContractsForRef = /* @__PURE__ */ __name(async (client, party, ref) => {
16
+ const offset = await client.getLedgerEndOffset();
17
+ return (await client.queryActiveContracts(party, offset, {
18
+ templateIds: [
19
+ ref.templateId
20
+ ]
21
+ })).filter((contract) => matchesContractStateFilter(contract, ref.contractStateFilter));
22
+ }, "queryLiveContractsForRef");
23
+ var queryLiveContractIdsForRef = /* @__PURE__ */ __name(async (client, ref, senderParty) => {
24
+ if (ref.type !== "activeContractId" && ref.type !== "activeContractIds") return [];
25
+ const party = ref.partyToFilter === "sender" ? senderParty : ref.partyToFilter.party;
26
+ if (!party) return [];
27
+ const contracts = await queryLiveContractsForRef(client, party, ref);
28
+ return contracts.map((c) => c.createdEvent.contractId);
29
+ }, "queryLiveContractIdsForRef");
30
+ var createContractAddressResolver = /* @__PURE__ */ __name((deps) => {
31
+ const { client, senderParty, signingParties, appendDisclosures } = deps;
32
+ const requireSender = /* @__PURE__ */ __name((templateId) => {
33
+ if (!senderParty) {
34
+ throw new NonRetryableError(`Refresh entry for ${templateId} needs a resolved sender party, but none was provided`);
35
+ }
36
+ return senderParty;
37
+ }, "requireSender");
38
+ const resolveQueryParty = /* @__PURE__ */ __name(({ partyToFilter, templateId }) => partyToFilter === "sender" ? requireSender(templateId) : partyToFilter.party, "resolveQueryParty");
39
+ const queryCache = /* @__PURE__ */ new Map();
40
+ const queryAsParty = /* @__PURE__ */ __name(async (ref) => {
41
+ const party = resolveQueryParty(ref);
42
+ const cacheKey = JSON.stringify({
43
+ ...ref,
44
+ party
45
+ });
46
+ const cached = queryCache.get(cacheKey);
47
+ if (cached) return cached;
48
+ const query = (async () => {
49
+ const contracts = await queryLiveContractsForRef(client, party, ref);
50
+ if (contracts.length === 0) {
51
+ throw new NonRetryableError(`Party ${party} has no matching active contracts of ${ref.templateId}`);
52
+ }
53
+ return contracts;
54
+ })();
55
+ queryCache.set(cacheKey, query);
56
+ return query;
57
+ }, "queryAsParty");
58
+ const needsDisclosure = /* @__PURE__ */ __name((contract) => {
59
+ const stakeholders = /* @__PURE__ */ new Set([
60
+ ...contract.createdEvent.signatories ?? [],
61
+ ...contract.createdEvent.observers ?? []
62
+ ]);
63
+ return !signingParties.some((party) => stakeholders.has(party));
64
+ }, "needsDisclosure");
65
+ const discloseContracts = /* @__PURE__ */ __name(async (ref, contracts) => {
66
+ const toDisclose = contracts.filter(needsDisclosure);
67
+ if (toDisclose.length === 0) return;
68
+ const party = resolveQueryParty(ref);
69
+ const disclosures = await Promise.all(toDisclose.map(async (contract) => {
70
+ const contractId = contract.createdEvent.contractId;
71
+ const disclosure = await client.createDisclosure(contractId, [
72
+ party
73
+ ]);
74
+ if (!disclosure) {
75
+ throw new NonRetryableError(`Could not disclose ${contractId} (template ${ref.templateId}) \u2014 no longer active`);
76
+ }
77
+ return disclosure;
78
+ }));
79
+ appendDisclosures(disclosures);
80
+ }, "discloseContracts");
81
+ const resolveActiveContractId = /* @__PURE__ */ __name(async (ref) => {
82
+ const contracts = await queryAsParty(ref);
83
+ if (contracts.length !== 1) {
84
+ throw new NonRetryableError(`Refresh for ${ref.templateId} matched ${contracts.length} contracts, but a scalar ref expects exactly one`);
85
+ }
86
+ await discloseContracts(ref, contracts);
87
+ return contracts[0].createdEvent.contractId;
88
+ }, "resolveActiveContractId");
89
+ const resolveActiveContractIds = /* @__PURE__ */ __name(async (ref) => {
90
+ const contracts = await queryAsParty(ref);
91
+ await discloseContracts(ref, contracts);
92
+ return contracts.map((contract) => contract.createdEvent.contractId);
93
+ }, "resolveActiveContractIds");
94
+ return {
95
+ resolveActiveContractId,
96
+ resolveActiveContractIds,
97
+ requireSenderParty: requireSender
98
+ };
99
+ }, "createContractAddressResolver");
100
+
101
+ export { createContractAddressResolver, isRefAlive, matchesContractStateFilter, queryLiveContractIdsForRef, queryLiveContractsForRef };
102
+ //# sourceMappingURL=QRFMJ32P.js.map
103
+ //# sourceMappingURL=QRFMJ32P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/refresh/address-resolver.ts"],"names":["matchesContractStateFilter","contract","contractStateFilter","createArgument","createdEvent","Object","entries","every","key","value","JSON","stringify","isRefAlive","client","ref","type","partyToFilter","contracts","queryLiveContractsForRef","party","length","offset","getLedgerEndOffset","queryActiveContracts","templateIds","templateId","filter","queryLiveContractIdsForRef","senderParty","map","c","contractId","createContractAddressResolver","deps","signingParties","appendDisclosures","requireSender","NonRetryableError","resolveQueryParty","queryCache","Map","queryAsParty","cacheKey","cached","get","query","set","needsDisclosure","stakeholders","Set","signatories","observers","some","has","discloseContracts","toDisclose","disclosures","Promise","all","disclosure","createDisclosure","resolveActiveContractId","resolveActiveContractIds","requireSenderParty"],"mappings":"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","file":"QRFMJ32P.js","sourcesContent":["import type { ContractId } from '@daml/types';\n\nimport { NonRetryableError } from '@layerzerolabs/common-error-utils';\n\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type { JsActiveContract } from '../open-api/models';\nimport type { CantonDisclosedContracts } from '../transaction';\n\nexport type ActiveContractRef = Extract<\n CantonDeferredValue,\n { type: 'activeContractId' | 'activeContractIds' }\n>;\n\nexport interface ContractAddressResolverDeps {\n client: ICantonClient;\n senderParty?: string;\n /** A contract is only disclosed when none of these parties is already a stakeholder on it. */\n signingParties: string[];\n appendDisclosures: (disclosures: CantonDisclosedContracts) => void;\n}\n\nexport const matchesContractStateFilter = (\n contract: JsActiveContract,\n contractStateFilter: ActiveContractRef['contractStateFilter'],\n): boolean => {\n if (!contractStateFilter) return true;\n const createArgument = contract.createdEvent.createArgument as Record<string, unknown>;\n return Object.entries(contractStateFilter).every(\n ([key, value]) => JSON.stringify(createArgument[key]) === JSON.stringify(value),\n );\n};\n\nexport const isRefAlive = async (\n client: ICantonClient,\n ref: CantonDeferredValue,\n): Promise<boolean> => {\n if (ref.type !== 'activeContractId' && ref.type !== 'activeContractIds') return false;\n if (ref.partyToFilter === 'sender') return false;\n const contracts = await queryLiveContractsForRef(client, ref.partyToFilter.party, ref);\n return ref.type === 'activeContractId' ? contracts.length === 1 : contracts.length > 0;\n};\n\n/** partyToFilter: 'sender' is resolved per-caller — this function takes an already-resolved party string. */\nexport const queryLiveContractsForRef = async (\n client: ICantonClient,\n party: string,\n ref: ActiveContractRef,\n): Promise<JsActiveContract[]> => {\n const offset = await client.getLedgerEndOffset();\n return (\n await client.queryActiveContracts(party, offset, { templateIds: [ref.templateId] })\n ).filter((contract) => matchesContractStateFilter(contract, ref.contractStateFilter));\n};\n\n/**\n * Returns the contractIds of all live contracts matching ref.\n * Resolves 'sender' to senderParty when provided; returns [] if unresolvable.\n */\nexport const queryLiveContractIdsForRef = async (\n client: ICantonClient,\n ref: CantonDeferredValue,\n senderParty?: string,\n): Promise<string[]> => {\n if (ref.type !== 'activeContractId' && ref.type !== 'activeContractIds') return [];\n const party = ref.partyToFilter === 'sender' ? senderParty : ref.partyToFilter.party;\n if (!party) return [];\n const contracts = await queryLiveContractsForRef(client, party, ref);\n return contracts.map((c) => c.createdEvent.contractId);\n};\n\nexport const createContractAddressResolver = (deps: ContractAddressResolverDeps) => {\n const { client, senderParty, signingParties, appendDisclosures } = deps;\n\n const requireSender = (templateId: string): string => {\n if (!senderParty) {\n throw new NonRetryableError(\n `Refresh entry for ${templateId} needs a resolved sender party, but none was provided`,\n );\n }\n return senderParty;\n };\n\n const resolveQueryParty = ({ partyToFilter, templateId }: ActiveContractRef): string =>\n partyToFilter === 'sender' ? requireSender(templateId) : partyToFilter.party;\n\n const queryCache = new Map<string, Promise<JsActiveContract[]>>();\n const queryAsParty = async (ref: ActiveContractRef): Promise<JsActiveContract[]> => {\n const party = resolveQueryParty(ref);\n const cacheKey = JSON.stringify({ ...ref, party });\n const cached = queryCache.get(cacheKey);\n if (cached) return cached;\n\n const query = (async () => {\n const contracts = await queryLiveContractsForRef(client, party, ref);\n if (contracts.length === 0) {\n throw new NonRetryableError(\n `Party ${party} has no matching active contracts of ${ref.templateId}`,\n );\n }\n return contracts;\n })();\n queryCache.set(cacheKey, query);\n return query;\n };\n\n // A signing party that is already a stakeholder can see the contract on its\n // own stream, so only disclose to parties that aren't signatories/observers.\n const needsDisclosure = (contract: JsActiveContract): boolean => {\n const stakeholders = new Set([\n ...(contract.createdEvent.signatories ?? []),\n ...(contract.createdEvent.observers ?? []),\n ]);\n return !signingParties.some((party) => stakeholders.has(party));\n };\n\n const discloseContracts = async (\n ref: ActiveContractRef,\n contracts: JsActiveContract[],\n ): Promise<void> => {\n const toDisclose = contracts.filter(needsDisclosure);\n if (toDisclose.length === 0) return;\n\n const party = resolveQueryParty(ref);\n const disclosures = await Promise.all(\n toDisclose.map(async (contract) => {\n const contractId = contract.createdEvent.contractId;\n const disclosure = await client.createDisclosure(\n contractId as ContractId<unknown>,\n [party],\n );\n if (!disclosure) {\n throw new NonRetryableError(\n `Could not disclose ${contractId} (template ${ref.templateId}) — no longer active`,\n );\n }\n return disclosure;\n }),\n );\n appendDisclosures(disclosures);\n };\n\n const resolveActiveContractId = async (ref: ActiveContractRef): Promise<string> => {\n const contracts = await queryAsParty(ref);\n if (contracts.length !== 1) {\n throw new NonRetryableError(\n `Refresh for ${ref.templateId} matched ${contracts.length} contracts, but a scalar ref expects exactly one`,\n );\n }\n await discloseContracts(ref, contracts);\n return contracts[0]!.createdEvent.contractId;\n };\n\n const resolveActiveContractIds = async (ref: ActiveContractRef): Promise<string[]> => {\n const contracts = await queryAsParty(ref);\n await discloseContracts(ref, contracts);\n return contracts.map((contract) => contract.createdEvent.contractId);\n };\n\n return { resolveActiveContractId, resolveActiveContractIds, requireSenderParty: requireSender };\n};\n"]}
@@ -0,0 +1,41 @@
1
+ import { substituteCidsToRefs } from './57KDDFEU.js';
2
+ import { cantonActiveContractIdRef } from './Z35TKEFU.js';
3
+ import { __name } from './VUOMXK5T.js';
4
+ import { isPromise } from '@layerzerolabs/typescript-utils';
5
+
6
+ var applyRefs = /* @__PURE__ */ __name((result) => {
7
+ const refs = result?.referencedContracts;
8
+ if (!refs?.length) return result;
9
+ const contractIdToRef = new Map(refs.map((ref) => [
10
+ ref.cid,
11
+ cantonActiveContractIdRef({
12
+ partyToFilter: {
13
+ party: ref.party
14
+ },
15
+ templateId: ref.templateId,
16
+ ...ref.contractStateFilter ? {
17
+ contractStateFilter: ref.contractStateFilter
18
+ } : {}
19
+ })
20
+ ]));
21
+ const { referencedContracts: _dropped, ...rest } = result;
22
+ const disclosed = rest.disclosedContracts;
23
+ if (Array.isArray(disclosed)) {
24
+ rest.disclosedContracts = disclosed.filter((disclosure) => !contractIdToRef.has(disclosure.contractId));
25
+ }
26
+ return substituteCidsToRefs(rest, contractIdToRef);
27
+ }, "applyRefs");
28
+ var wrapLzSdk = /* @__PURE__ */ __name((sdk) => new Proxy(sdk, {
29
+ get(target, prop, receiver) {
30
+ const member = Reflect.get(target, prop, receiver);
31
+ if (typeof member !== "function") return member;
32
+ return (...args) => {
33
+ const result = member.apply(target, args);
34
+ return isPromise(result) ? result.then(applyRefs) : result;
35
+ };
36
+ }
37
+ }), "wrapLzSdk");
38
+
39
+ export { wrapLzSdk };
40
+ //# sourceMappingURL=RJSKBZMO.js.map
41
+ //# sourceMappingURL=RJSKBZMO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/refresh/wrapped-lz-sdk.ts"],"names":["applyRefs","result","refs","referencedContracts","length","contractIdToRef","Map","map","ref","cid","cantonActiveContractIdRef","partyToFilter","party","templateId","contractStateFilter","_dropped","rest","disclosed","disclosedContracts","Array","isArray","filter","disclosure","has","contractId","substituteCidsToRefs","wrapLzSdk","sdk","Proxy","get","target","prop","receiver","member","Reflect","args","apply","isPromise","then"],"mappings":";;;;;AAkBA,IAAMA,SAAAA,2BAAgBC,MAAAA,KAAAA;AAClB,EAAA,MAAMC,OAAQD,MAAAA,EACRE,mBAAAA;AACN,EAAA,IAAI,CAACD,IAAAA,EAAME,MAAAA,EAAQ,OAAOH,MAAAA;AAE1B,EAAA,MAAMI,kBAAkB,IAAIC,GAAAA,CACxBJ,IAAAA,CAAKK,GAAAA,CAAI,CAACC,GAAAA,KAAQ;IACdA,GAAAA,CAAIC,GAAAA;IACJC,yBAAAA,CAA0B;MACtBC,aAAAA,EAAe;AAAEC,QAAAA,KAAAA,EAAOJ,GAAAA,CAAII;AAAM,OAAA;AAClCC,MAAAA,UAAAA,EAAYL,GAAAA,CAAIK,UAAAA;AAChB,MAAA,GAAIL,IAAIM,mBAAAA,GACF;AAAEA,QAAAA,mBAAAA,EAAqBN,GAAAA,CAAIM;AAAoB,OAAA,GAC/C;KACV;GACH,CAAA,CAAA;AAGL,EAAA,MAAM,EAAEX,mBAAAA,EAAqBY,QAAAA,EAAU,GAAGC,MAAAA,GAASf,MAAAA;AACnD,EAAA,MAAMgB,YAAaD,IAAAA,CACdE,kBAAAA;AACL,EAAA,IAAIC,KAAAA,CAAMC,OAAAA,CAAQH,SAAAA,CAAAA,EAAY;AACzBD,IAAAA,IAAAA,CAAyCE,kBAAAA,GAAqBD,SAAAA,CAAUI,MAAAA,CACrE,CAACC,UAAAA,KAAe,CAACjB,eAAAA,CAAgBkB,GAAAA,CAAID,UAAAA,CAAWE,UAAU,CAAA,CAAA;AAElE,EAAA;AACA,EAAA,OAAOC,oBAAAA,CAAqBT,MAAMX,eAAAA,CAAAA;AACtC,CAAA,EA3BkB,WAAA,CAAA;AA8BX,IAAMqB,SAAAA,mBAAY,MAAA,CAAA,CAAmBC,GAAAA,KACxC,IAAIC,MAAMD,GAAAA,EAAK;EACXE,GAAAA,CAAIC,MAAAA,EAAQC,MAAMC,QAAAA,EAAQ;AACtB,IAAA,MAAMC,MAAAA,GAASC,OAAAA,CAAQL,GAAAA,CAAIC,MAAAA,EAAQC,MAAMC,QAAAA,CAAAA;AACzC,IAAA,IAAI,OAAOC,MAAAA,KAAW,UAAA,EAAY,OAAOA,MAAAA;AACzC,IAAA,OAAO,IAAIE,IAAAA,KAAAA;AACP,MAAA,MAAMlC,MAAAA,GAAUgC,MAAAA,CAAqBG,KAAAA,CAAMN,MAAAA,EAAQK,IAAAA,CAAAA;AACnD,MAAA,OAAOE,UAAUpC,MAAAA,CAAAA,GAAUA,MAAAA,CAAOqC,IAAAA,CAAKtC,SAAAA,CAAAA,GAAaC,MAAAA;AACxD,IAAA,CAAA;AACJ,EAAA;AACJ,CAAA,CAAA,EAVqB,WAAA","file":"RJSKBZMO.js","sourcesContent":["import { isPromise } from '@layerzerolabs/typescript-utils';\n\nimport { cantonActiveContractIdRef, type CantonDeferredRef } from '../deferredValue';\nimport type { ContractDataIdentifier } from '../transaction';\nimport { substituteCidsToRefs } from './reverse-substitute';\n\ntype AnyMethod = (...args: unknown[]) => unknown;\n\ntype WithRefsInjected<R> = R extends { referencedContracts?: unknown }\n ? Omit<R, 'referencedContracts'>\n : R;\n\ntype LzWrapped<T> = {\n [K in keyof T]: T[K] extends (...a: infer A) => Promise<infer R>\n ? (...a: A) => Promise<WithRefsInjected<R>>\n : T[K];\n};\n\nconst applyRefs = <R>(result: R): WithRefsInjected<R> => {\n const refs = (result as { referencedContracts?: Array<ContractDataIdentifier> })\n ?.referencedContracts;\n if (!refs?.length) return result as WithRefsInjected<R>;\n\n const contractIdToRef = new Map<string, CantonDeferredRef>(\n refs.map((ref) => [\n ref.cid,\n cantonActiveContractIdRef({\n partyToFilter: { party: ref.party },\n templateId: ref.templateId,\n ...(ref.contractStateFilter\n ? { contractStateFilter: ref.contractStateFilter }\n : {}),\n }),\n ]),\n );\n\n const { referencedContracts: _dropped, ...rest } = result as Record<string, unknown>;\n const disclosed = (rest as { disclosedContracts?: Array<{ contractId: string }> })\n .disclosedContracts;\n if (Array.isArray(disclosed)) {\n (rest as { disclosedContracts: unknown }).disclosedContracts = disclosed.filter(\n (disclosure) => !contractIdToRef.has(disclosure.contractId),\n );\n }\n return substituteCidsToRefs(rest, contractIdToRef) as WithRefsInjected<R>;\n};\n\n/** Rewrites the cids a contract SDK reports in `referencedContracts` to sign-time refs. */\nexport const wrapLzSdk = <T extends object>(sdk: T): LzWrapped<T> =>\n new Proxy(sdk, {\n get(target, prop, receiver) {\n const member = Reflect.get(target, prop, receiver);\n if (typeof member !== 'function') return member;\n return (...args: unknown[]): unknown => {\n const result = (member as AnyMethod).apply(target, args);\n return isPromise(result) ? result.then(applyRefs) : result;\n };\n },\n }) as LzWrapped<T>;\n"]}
@@ -0,0 +1,31 @@
1
+ import { CANTON_DEFERRED_VALUE_SUFFIX, CANTON_DEFERRED_VALUE_PREFIX } from './Z35TKEFU.js';
2
+ import { __name } from './VUOMXK5T.js';
3
+ import { trim0x } from '@layerzerolabs/common-encoding-utils';
4
+
5
+ var CANTON_PARTY_ID_REGEX = /^(.+)::([0-9a-fA-F]+)$/;
6
+ var CANTON_CONTRACT_ID_HEX_LENGTH = 138;
7
+ var CANTON_PARTY_ADDRESS_PREFIX = "<<CANTON_PARTY::";
8
+ var CANTON_CID_ADDRESS_PREFIX = "<<CANTON_CID::";
9
+ var cantonPartyAddress = /* @__PURE__ */ __name((hint, fingerprint) => `${CANTON_PARTY_ADDRESS_PREFIX}${hint}::${fingerprint}${CANTON_DEFERRED_VALUE_SUFFIX}`, "cantonPartyAddress");
10
+ var cantonCidAddress = /* @__PURE__ */ __name((contractId) => `${CANTON_CID_ADDRESS_PREFIX}${contractId}${CANTON_DEFERRED_VALUE_SUFFIX}`, "cantonCidAddress");
11
+ var cantonDeferredAddress = /* @__PURE__ */ __name((sentinel) => sentinel, "cantonDeferredAddress");
12
+ var toCantonAddress = /* @__PURE__ */ __name((raw) => {
13
+ if (raw.startsWith(CANTON_DEFERRED_VALUE_PREFIX) && raw.endsWith(CANTON_DEFERRED_VALUE_SUFFIX)) {
14
+ return cantonDeferredAddress(raw);
15
+ }
16
+ const partyMatch = CANTON_PARTY_ID_REGEX.exec(raw);
17
+ if (partyMatch) {
18
+ const [, hint, fingerprint] = partyMatch;
19
+ return cantonPartyAddress(hint, fingerprint);
20
+ }
21
+ const bare = trim0x(raw);
22
+ if (bare.length === CANTON_CONTRACT_ID_HEX_LENGTH && bare.startsWith("00")) {
23
+ return cantonCidAddress(bare);
24
+ }
25
+ throw new Error(`Not a Canton-native address: ${raw}`);
26
+ }, "toCantonAddress");
27
+ var isCantonAddress = /* @__PURE__ */ __name((value) => value.startsWith(CANTON_PARTY_ADDRESS_PREFIX) || value.startsWith(CANTON_CID_ADDRESS_PREFIX) || value.startsWith(CANTON_DEFERRED_VALUE_PREFIX), "isCantonAddress");
28
+
29
+ export { CANTON_CID_ADDRESS_PREFIX, CANTON_PARTY_ADDRESS_PREFIX, cantonCidAddress, cantonDeferredAddress, cantonPartyAddress, isCantonAddress, toCantonAddress };
30
+ //# sourceMappingURL=TM5LJKTE.js.map
31
+ //# sourceMappingURL=TM5LJKTE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/address.ts"],"names":["CANTON_PARTY_ID_REGEX","CANTON_CONTRACT_ID_HEX_LENGTH","CANTON_PARTY_ADDRESS_PREFIX","CANTON_CID_ADDRESS_PREFIX","cantonPartyAddress","hint","fingerprint","CANTON_DEFERRED_VALUE_SUFFIX","cantonCidAddress","contractId","cantonDeferredAddress","sentinel","toCantonAddress","raw","startsWith","CANTON_DEFERRED_VALUE_PREFIX","endsWith","partyMatch","exec","bare","trim0x","length","Error","isCantonAddress","value"],"mappings":";;;;AAKA,IAAMA,qBAAAA,GAAwB,wBAAA;AAC9B,IAAMC,6BAAAA,GAAgC,GAAA;AAE/B,IAAMC,2BAAAA,GAA8B;AACpC,IAAMC,yBAAAA,GAA4B;AAMlC,IAAMC,kBAAAA,mBAAqB,MAAA,CAAA,CAACC,IAAAA,EAAcC,WAAAA,KAC7C,CAAA,EAAGJ,2BAAAA,CAAAA,EAA8BG,IAAAA,CAAAA,EAAAA,EAASC,WAAAA,CAAAA,EAAcC,4BAAAA,CAAAA,CAAAA,EAD1B,oBAAA;AAI3B,IAAMC,gBAAAA,2BAAoBC,UAAAA,KAC7B,CAAA,EAAGN,yBAAAA,CAAAA,EAA4BM,UAAAA,CAAAA,EAAaF,4BAAAA,CAAAA,CAAAA,EADhB,kBAAA;AAIzB,IAAMG,qBAAAA,mBAAwB,MAAA,CAAA,CAACC,QAAAA,KAAoCA,QAAAA,EAArC,uBAAA;AAG9B,IAAMC,eAAAA,2BAAmBC,GAAAA,KAAAA;AAC5B,EAAA,IACIA,IAAIC,UAAAA,CAAWC,4BAAAA,KACfF,GAAAA,CAAIG,QAAAA,CAAST,4BAAAA,CAAAA,EACf;AACE,IAAA,OAAOG,sBAAsBG,GAAAA,CAAAA;AACjC,EAAA;AACA,EAAA,MAAMI,UAAAA,GAAajB,qBAAAA,CAAsBkB,IAAAA,CAAKL,GAAAA,CAAAA;AAC9C,EAAA,IAAII,UAAAA,EAAY;AACZ,IAAA,MAAM,GAAGZ,IAAAA,EAAMC,WAAAA,CAAAA,GAAeW,UAAAA;AAC9B,IAAA,OAAOb,kBAAAA,CAAmBC,MAAOC,WAAAA,CAAAA;AACrC,EAAA;AACA,EAAA,MAAMa,IAAAA,GAAOC,OAAOP,GAAAA,CAAAA;AACpB,EAAA,IAAIM,KAAKE,MAAAA,KAAWpB,6BAAAA,IAAiCkB,IAAAA,CAAKL,UAAAA,CAAW,IAAA,CAAA,EAAO;AACxE,IAAA,OAAON,iBAAiBW,IAAAA,CAAAA;AAC5B,EAAA;AACA,EAAA,MAAM,IAAIG,KAAAA,CAAM,CAAA,6BAAA,EAAgCT,GAAAA,CAAAA,CAAK,CAAA;AACzD,CAAA,EAjB+B,iBAAA;AAoBxB,IAAMU,eAAAA,mBAAkB,MAAA,CAAA,CAACC,KAAAA,KAC5BA,KAAAA,CAAMV,WAAWZ,2BAAAA,CAAAA,IACjBsB,KAAAA,CAAMV,UAAAA,CAAWX,yBAAAA,CAAAA,IACjBqB,KAAAA,CAAMV,UAAAA,CAAWC,4BAAAA,CAAAA,EAHU,iBAAA","file":"TM5LJKTE.js","sourcesContent":["import { trim0x } from '@layerzerolabs/common-encoding-utils';\nimport type { Branded } from '@layerzerolabs/typescript-utils';\n\nimport { CANTON_DEFERRED_VALUE_PREFIX, CANTON_DEFERRED_VALUE_SUFFIX } from './deferredValue';\n\nconst CANTON_PARTY_ID_REGEX = /^(.+)::([0-9a-fA-F]+)$/;\nconst CANTON_CONTRACT_ID_HEX_LENGTH = 138; // 69 bytes\n\nexport const CANTON_PARTY_ADDRESS_PREFIX = '<<CANTON_PARTY::';\nexport const CANTON_CID_ADDRESS_PREFIX = '<<CANTON_CID::';\n\n/** A Canton native address — a branded string with one of three sentinel-prefix forms. */\nexport type CantonAddress = Branded<string, 'CantonAddress'>;\n\n/** Construct a party `CantonAddress` from hint and fingerprint. */\nexport const cantonPartyAddress = (hint: string, fingerprint: string): CantonAddress =>\n `${CANTON_PARTY_ADDRESS_PREFIX}${hint}::${fingerprint}${CANTON_DEFERRED_VALUE_SUFFIX}` as CantonAddress;\n\n/** Construct a contract-ID `CantonAddress` from the raw 69-byte hex contract id. */\nexport const cantonCidAddress = (contractId: string): CantonAddress =>\n `${CANTON_CID_ADDRESS_PREFIX}${contractId}${CANTON_DEFERRED_VALUE_SUFFIX}` as CantonAddress;\n\n/** Wrap a deferred-ref sentinel (`<<CANTON_DEFERRED:{json}>>`) as a `CantonAddress`. */\nexport const cantonDeferredAddress = (sentinel: string): CantonAddress => sentinel as CantonAddress;\n\n/** Wrap a raw Canton ledger value (party id, contract id, or deferred sentinel) as `CantonAddress`. */\nexport const toCantonAddress = (raw: string): CantonAddress => {\n if (\n raw.startsWith(CANTON_DEFERRED_VALUE_PREFIX) &&\n raw.endsWith(CANTON_DEFERRED_VALUE_SUFFIX)\n ) {\n return cantonDeferredAddress(raw);\n }\n const partyMatch = CANTON_PARTY_ID_REGEX.exec(raw);\n if (partyMatch) {\n const [, hint, fingerprint] = partyMatch;\n return cantonPartyAddress(hint!, fingerprint!);\n }\n const bare = trim0x(raw);\n if (bare.length === CANTON_CONTRACT_ID_HEX_LENGTH && bare.startsWith('00')) {\n return cantonCidAddress(bare);\n }\n throw new Error(`Not a Canton-native address: ${raw}`);\n};\n\n/** Returns true if `value` is a valid `CantonAddress` sentinel string. */\nexport const isCantonAddress = (value: string): value is CantonAddress =>\n value.startsWith(CANTON_PARTY_ADDRESS_PREFIX) ||\n value.startsWith(CANTON_CID_ADDRESS_PREFIX) ||\n value.startsWith(CANTON_DEFERRED_VALUE_PREFIX);\n"]}
@@ -51,7 +51,13 @@ var cantonTransactionSchema = transactionSchema.extend({
51
51
  * payloads parse; by sign time every actAs party must map, or signing throws.
52
52
  * Multiple entries = a multisig party (decentralized namespace) whose keys must
53
53
  * all sign. */
54
- partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional()
54
+ partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional(),
55
+ /** Deployment spec set at prepare time; the deployment activity resolves the live address ref from this + the createCommand. */
56
+ deploymentSpec: z.object({
57
+ packageName: z.string(),
58
+ ownerField: z.string(),
59
+ identityKeys: z.array(z.string())
60
+ }).optional()
55
61
  })
56
62
  });
57
63
  var cantonTransactionWithResultSchema = buildTransactionWithResultSchema(cantonTransactionSchema);
@@ -109,5 +115,5 @@ var buildCantonTransaction = /* @__PURE__ */ __name(async (chainName, tx) => {
109
115
  }, "buildCantonTransaction");
110
116
 
111
117
  export { buildCantonTransaction, cantonAssignedTransactionSchema, cantonCommandSchema, cantonDisclosedContractSchema, cantonMinedTransactionSchema, cantonSignedTransactionSchema, cantonTransactionSchema, cantonTransactionWithResultSchema };
112
- //# sourceMappingURL=EYLCZMM4.js.map
113
- //# sourceMappingURL=EYLCZMM4.js.map
118
+ //# sourceMappingURL=WHTAP4A3.js.map
119
+ //# sourceMappingURL=WHTAP4A3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transaction.ts"],"names":["cantonCommandSchema","z","union","object","createCommand","templateId","string","createArguments","any","exerciseCommand","contractId","choice","choiceArgument","createAndExerciseCommand","exerciseByKeyCommand","contractKey","cantonDisclosedContractSchema","optional","createdEventBlob","synchronizerId","cantonTransactionSchema","transactionSchema","extend","populatedTransaction","unresolvedCommands","array","unresolvedDisclosedContracts","actAs","partyToSenderEntity","record","deploymentSpec","packageName","ownerField","identityKeys","cantonTransactionWithResultSchema","buildTransactionWithResultSchema","cantonInflightTransactionSchema","preparedTransaction","preparedTransactionHash","hashingSchemeVersion","enum","commandId","completionOffset","number","cantonAssignedTransactionSchema","assignedTransactionSchema","shape","inflightTransaction","cantonSignedTransactionSchema","signedTransactionSchema","commands","disclosedContracts","signedTransaction","signatures","party","format","signature","signedBy","signingAlgorithmSpec","cantonMinedTransactionSchema","minedTransactionSchema","buildCantonTransaction","chainName","tx","timestamps","created","Date","now"],"mappings":"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","file":"WHTAP4A3.js","sourcesContent":["import { z } from 'zod';\n\nimport {\n assignedTransactionSchema,\n buildTransactionWithResultSchema,\n minedTransactionSchema,\n signedTransactionSchema,\n transactionSchema,\n} from '@layerzerolabs/common-chain-model';\nimport type { PartialBy } from '@layerzerolabs/typescript-utils';\n\n// === Component schemas ===\n\nexport const cantonCommandSchema = z.union([\n z.object({\n createCommand: z.object({\n templateId: z.string(),\n createArguments: z.any(),\n }),\n }),\n z.object({\n exerciseCommand: z.object({\n templateId: z.string(),\n contractId: z.string(),\n choice: z.string(),\n choiceArgument: z.any(),\n }),\n }),\n z.object({\n createAndExerciseCommand: z.object({\n templateId: z.string(),\n createArguments: z.any(),\n choice: z.string(),\n choiceArgument: z.any(),\n }),\n }),\n z.object({\n exerciseByKeyCommand: z.object({\n templateId: z.string(),\n contractKey: z.any(),\n choice: z.string(),\n choiceArgument: z.any(),\n }),\n }),\n]);\n\nexport const cantonDisclosedContractSchema = z.object({\n templateId: z.string().optional(),\n contractId: z.string(),\n createdEventBlob: z.string(),\n synchronizerId: z.string(),\n});\n\n// === Lifecycle schemas ===\n\n/**\n * Canton transaction schema for Daml Ledger API commands.\n */\nexport const cantonTransactionSchema = transactionSchema.extend({\n populatedTransaction: z.object({\n unresolvedCommands: z.array(cantonCommandSchema),\n unresolvedDisclosedContracts: z.array(cantonDisclosedContractSchema),\n\n /** Parties submitting the command (actAs) */\n actAs: z.array(z.string()),\n /** Maps each actAs party → the senderEntityName(s) controlling its signing\n * key(s), always as an array. `.optional()` only so deferred-sender create-time\n * payloads parse; by sign time every actAs party must map, or signing throws.\n * Multiple entries = a multisig party (decentralized namespace) whose keys must\n * all sign. */\n partyToSenderEntity: z.record(z.string(), z.array(z.string())).optional(),\n /** Deployment spec set at prepare time; the deployment activity resolves the live address ref from this + the createCommand. */\n deploymentSpec: z\n .object({\n packageName: z.string(),\n ownerField: z.string(),\n identityKeys: z.array(z.string()),\n })\n .optional(),\n }),\n});\n\nexport const cantonTransactionWithResultSchema =\n buildTransactionWithResultSchema(cantonTransactionSchema);\n\nconst cantonInflightTransactionSchema = z.object({\n /** The prepared transaction blob */\n preparedTransaction: z.string(),\n /** Hash of the prepared transaction (what was signed) */\n preparedTransactionHash: z.string(),\n /** Hashing scheme version used */\n hashingSchemeVersion: z.enum([\n 'HASHING_SCHEME_VERSION_UNSPECIFIED',\n 'HASHING_SCHEME_VERSION_V2',\n ]),\n /** Command ID for tracking */\n commandId: z.string(),\n // Ledger offset at which the submission landed — used as `beginExclusive`\n // for waitForCommand to avoid polling from the start of the ledger.\n // Optional: only present after send(); absent for old/retry scenarios.\n completionOffset: z.number().optional(),\n});\n\n/**\n * Assigned transaction includes the inflight transaction data.\n */\nexport const cantonAssignedTransactionSchema = assignedTransactionSchema.extend({\n ...cantonTransactionSchema.shape,\n inflightTransaction: cantonInflightTransactionSchema.optional(),\n});\n\n/**\n * Signed transaction includes the DER-encoded ECDSA signature.\n */\nexport const cantonSignedTransactionSchema = signedTransactionSchema.extend({\n ...cantonAssignedTransactionSchema.shape,\n // Resolved commands and contracts\n commands: z.array(cantonCommandSchema),\n disclosedContracts: z.array(cantonDisclosedContractSchema),\n signedTransaction: z.object({\n /** Per-party signatures in the format expected by Canton's submitSigned */\n signatures: z.array(\n z.object({\n party: z.string(),\n signatures: z.array(\n z.object({\n format: z.string(),\n signature: z.string(),\n signedBy: z.string(),\n signingAlgorithmSpec: z.string(),\n }),\n ),\n }),\n ),\n }),\n});\n\n/**\n * Mined transaction with confirmation result.\n */\nexport const cantonMinedTransactionSchema = minedTransactionSchema.extend({\n ...cantonSignedTransactionSchema.shape,\n inflightTransaction: cantonInflightTransactionSchema,\n});\n\n/** Identifies a contract by data so its live cid can be re-resolved at sign time. */\nexport interface ContractDataIdentifier {\n cid: string;\n templateId: string;\n party: string;\n contractStateFilter?: Record<string, unknown>;\n}\n\nexport type CantonTx = z.infer<typeof cantonTransactionSchema>;\nexport type CantonPopulatedTransaction = CantonTx['populatedTransaction'];\nexport type CantonCommands = z.infer<typeof cantonCommandSchema>[];\nexport type CantonDisclosedContracts = z.infer<typeof cantonDisclosedContractSchema>[];\nexport type CantonAssignedTx = z.infer<typeof cantonAssignedTransactionSchema>;\nexport type CantonSignedTx = z.infer<typeof cantonSignedTransactionSchema>;\nexport type CantonMinedTx = z.infer<typeof cantonMinedTransactionSchema>;\n\n// === Builder ===\n\nexport type BuildCantonTransactionInput = PartialBy<CantonTx, 'chainName' | 'timestamps'>;\n\nexport const buildCantonTransaction = async (\n chainName: string,\n tx: BuildCantonTransactionInput,\n): Promise<CantonTx> => {\n return {\n ...tx,\n chainName,\n timestamps: {\n created: tx.timestamps?.created ?? Date.now(),\n },\n };\n};\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=XE6H2SH4.js.map
3
+ //# sourceMappingURL=XE6H2SH4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"XE6H2SH4.js"}
@@ -15,15 +15,13 @@ var cantonDeferredValueSchema = z.discriminatedUnion("type", [
15
15
  type: z.literal("activeContractId"),
16
16
  partyToFilter: cantonRefreshPartyFilterSchema,
17
17
  templateId: z.string(),
18
- contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),
19
- disclose: z.boolean().optional()
18
+ contractStateFilter: z.partialRecord(z.string(), z.any()).optional()
20
19
  }),
21
20
  z.object({
22
21
  type: z.literal("activeContractIds"),
23
22
  partyToFilter: cantonRefreshPartyFilterSchema,
24
23
  templateId: z.string(),
25
- contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),
26
- disclose: z.boolean().optional()
24
+ contractStateFilter: z.partialRecord(z.string(), z.any()).optional()
27
25
  }),
28
26
  z.object({
29
27
  type: z.literal("amuletRulesCid")
@@ -65,6 +63,6 @@ var cantonAmuletContextRef = /* @__PURE__ */ __name(() => encodeCantonDeferredVa
65
63
  }), "cantonAmuletContextRef");
66
64
  var isCantonPlaceholder = /* @__PURE__ */ __name((value) => parseCantonDeferredValue(value) !== void 0, "isCantonPlaceholder");
67
65
 
68
- export { cantonActiveContractIdRef, cantonActiveContractIdsRef, cantonAmuletContextRef, cantonAmuletRulesCidRef, cantonDeferredValueSchema, cantonRefreshPartyFilterSchema, cantonSenderPartyRef, encodeCantonDeferredValue, isCantonPlaceholder, parseCantonDeferredValue };
69
- //# sourceMappingURL=5PRNJEPB.js.map
70
- //# sourceMappingURL=5PRNJEPB.js.map
66
+ export { CANTON_DEFERRED_VALUE_PREFIX, CANTON_DEFERRED_VALUE_SUFFIX, cantonActiveContractIdRef, cantonActiveContractIdsRef, cantonAmuletContextRef, cantonAmuletRulesCidRef, cantonDeferredValueSchema, cantonRefreshPartyFilterSchema, cantonSenderPartyRef, encodeCantonDeferredValue, isCantonPlaceholder, parseCantonDeferredValue };
67
+ //# sourceMappingURL=Z35TKEFU.js.map
68
+ //# sourceMappingURL=Z35TKEFU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deferredValue.ts"],"names":["cantonRefreshPartyFilterSchema","z","union","literal","object","party","string","cantonDeferredValueSchema","discriminatedUnion","type","partyToFilter","templateId","contractStateFilter","partialRecord","any","optional","CANTON_DEFERRED_VALUE_PREFIX","CANTON_DEFERRED_VALUE_SUFFIX","encodeCantonDeferredValue","value","JSON","stringify","parseCantonDeferredValue","startsWith","endsWith","undefined","parsedJson","parse","slice","length","cantonSenderPartyRef","cantonActiveContractIdRef","cantonActiveContractIdsRef","cantonAmuletRulesCidRef","cantonAmuletContextRef","isCantonPlaceholder"],"mappings":"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","file":"Z35TKEFU.js","sourcesContent":["import { z } from 'zod';\n\nexport const cantonRefreshPartyFilterSchema = z.union([\n z.literal('sender'),\n z.object({ party: z.string() }),\n]);\n\nexport const cantonDeferredValueSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('senderParty') }),\n z.object({\n type: z.literal('activeContractId'),\n partyToFilter: cantonRefreshPartyFilterSchema,\n templateId: z.string(),\n contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),\n }),\n z.object({\n type: z.literal('activeContractIds'),\n partyToFilter: cantonRefreshPartyFilterSchema,\n templateId: z.string(),\n contractStateFilter: z.partialRecord(z.string(), z.any()).optional(),\n }),\n z.object({ type: z.literal('amuletRulesCid') }),\n z.object({ type: z.literal('amuletContext') }),\n]);\n\nexport type CantonRefreshPartyFilter = z.infer<typeof cantonRefreshPartyFilterSchema>;\nexport type CantonDeferredValue = z.infer<typeof cantonDeferredValueSchema>;\ntype CantonActiveContractIdRef = Omit<\n Extract<CantonDeferredValue, { type: 'activeContractId' }>,\n 'type'\n>;\ntype CantonActiveContractIdsRef = Omit<\n Extract<CantonDeferredValue, { type: 'activeContractIds' }>,\n 'type'\n>;\n\n/**\n * Branded encoded form of a {@link CantonDeferredValue}: a sign-time reference\n * string that a resolver turns into a live contract id / party. Branding keeps it\n * distinct from a plain `string` so the ref-substitution stays type-checked.\n */\nexport type CantonDeferredRef = string & { readonly __cantonDeferredRef: unique symbol };\n\nexport const CANTON_DEFERRED_VALUE_PREFIX = '<<CANTON_DEFERRED:';\nexport const CANTON_DEFERRED_VALUE_SUFFIX = '>>';\n\nexport const encodeCantonDeferredValue = (value: CantonDeferredValue): CantonDeferredRef =>\n `${CANTON_DEFERRED_VALUE_PREFIX}${JSON.stringify(value)}${CANTON_DEFERRED_VALUE_SUFFIX}` as CantonDeferredRef;\n\nexport const parseCantonDeferredValue = (value: unknown): CantonDeferredValue | undefined => {\n if (\n typeof value !== 'string' ||\n !value.startsWith(CANTON_DEFERRED_VALUE_PREFIX) ||\n !value.endsWith(CANTON_DEFERRED_VALUE_SUFFIX)\n ) {\n return undefined;\n }\n\n try {\n const parsedJson = JSON.parse(\n value.slice(CANTON_DEFERRED_VALUE_PREFIX.length, -CANTON_DEFERRED_VALUE_SUFFIX.length),\n );\n return cantonDeferredValueSchema.parse(parsedJson);\n } catch {\n return undefined;\n }\n};\n\nexport const cantonSenderPartyRef = (): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'senderParty' });\n\nexport const cantonActiveContractIdRef = (value: CantonActiveContractIdRef): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'activeContractId', ...value });\n\nexport const cantonActiveContractIdsRef = (value: CantonActiveContractIdsRef): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'activeContractIds', ...value });\n\nexport const cantonAmuletRulesCidRef = (): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'amuletRulesCid' });\n\nexport const cantonAmuletContextRef = (): CantonDeferredRef =>\n encodeCantonDeferredValue({ type: 'amuletContext' });\n\n/** Returns true if `value` is a Canton deferred-value sentinel. */\nexport const isCantonPlaceholder = (value: string): boolean =>\n parseCantonDeferredValue(value) !== undefined;\n"]}
@@ -0,0 +1,16 @@
1
+ import type { Branded } from '@layerzerolabs/typescript-utils';
2
+ export declare const CANTON_PARTY_ADDRESS_PREFIX = "<<CANTON_PARTY::";
3
+ export declare const CANTON_CID_ADDRESS_PREFIX = "<<CANTON_CID::";
4
+ /** A Canton native address — a branded string with one of three sentinel-prefix forms. */
5
+ export type CantonAddress = Branded<string, 'CantonAddress'>;
6
+ /** Construct a party `CantonAddress` from hint and fingerprint. */
7
+ export declare const cantonPartyAddress: (hint: string, fingerprint: string) => CantonAddress;
8
+ /** Construct a contract-ID `CantonAddress` from the raw 69-byte hex contract id. */
9
+ export declare const cantonCidAddress: (contractId: string) => CantonAddress;
10
+ /** Wrap a deferred-ref sentinel (`<<CANTON_DEFERRED:{json}>>`) as a `CantonAddress`. */
11
+ export declare const cantonDeferredAddress: (sentinel: string) => CantonAddress;
12
+ /** Wrap a raw Canton ledger value (party id, contract id, or deferred sentinel) as `CantonAddress`. */
13
+ export declare const toCantonAddress: (raw: string) => CantonAddress;
14
+ /** Returns true if `value` is a valid `CantonAddress` sentinel string. */
15
+ export declare const isCantonAddress: (value: string) => value is CantonAddress;
16
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../src/address.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAO/D,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAC9D,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE7D,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,KAAG,aACoC,CAAC;AAE5G,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,aACyC,CAAC;AAEhG,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,KAAG,aAA0C,CAAC;AAEpG,uGAAuG;AACvG,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,aAiB7C,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,KAAK,IAAI,aAGP,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { CANTON_CID_ADDRESS_PREFIX, CANTON_PARTY_ADDRESS_PREFIX, cantonCidAddress, cantonDeferredAddress, cantonPartyAddress, isCantonAddress, toCantonAddress } from './TM5LJKTE.js';
2
+ import './Z35TKEFU.js';
3
+ import './VUOMXK5T.js';
4
+ //# sourceMappingURL=address.js.map
5
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"address.js"}
@@ -1,7 +1,7 @@
1
1
  import '../35ELVFTS.js';
2
- import '../RSV7WS7X.js';
3
2
  export { ClientCredentialsTokenProvider } from '../V2H2WXKE.js';
4
3
  export { LocalTokenProvider } from '../SCEF7TLZ.js';
4
+ import '../RSV7WS7X.js';
5
5
  import '../VUOMXK5T.js';
6
6
  //# sourceMappingURL=index.js.map
7
7
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,38 @@
1
+ import type { TokenProvider } from '../auth/token-provider';
2
+ import type { DisclosedContract } from '../open-api/models';
3
+ /** Validator-wallet access a {@link CantonClient} needs to serve amulet endpoints. */
4
+ export type CantonClientWalletConfig = {
5
+ /** Validator wallet URL for scan-proxy CIP-56 endpoints. */
6
+ walletUrl: string;
7
+ /** Bearer-token source for wallet requests. */
8
+ tokenProvider: TokenProvider;
9
+ };
10
+ /** The single Amulet instrument id used across Canton Network fee flows. */
11
+ export declare const AMULET_INSTRUMENT_ID = "Amulet";
12
+ /** Instrument identifier for an amulet context probe. */
13
+ export type InstrumentId = {
14
+ admin: string;
15
+ id: string;
16
+ };
17
+ /** DAML ChoiceContext — a bag of named AnyValues passed to fee-bearing choices. */
18
+ export type ChoiceContext = {
19
+ values: Record<string, unknown>;
20
+ };
21
+ export type AmuletContextResult = {
22
+ amuletContext: ChoiceContext;
23
+ disclosedContracts: DisclosedContract[];
24
+ externalPartyAmuletRulesCid: string;
25
+ };
26
+ /** Amulet ChoiceContext from the validator scan-proxy — same call for all fee-bearing choices. */
27
+ export declare const fetchAmuletContext: (walletUrl: string, token: string, instrumentId: InstrumentId) => Promise<{
28
+ amuletContext: ChoiceContext;
29
+ disclosedContracts: DisclosedContract[];
30
+ }>;
31
+ /** Injects ExternalPartyAmuletRules cid into the ChoiceContext — required by every flow hitting FeeUtils.validateContext. */
32
+ export declare const injectExternalPartyAmuletRules: (amuletContext: ChoiceContext, disclosedContracts: DisclosedContract[]) => {
33
+ amuletContext: ChoiceContext;
34
+ externalPartyAmuletRulesCid: string;
35
+ };
36
+ /** Fetch the DSO party id from the validator scan-proxy API. */
37
+ export declare const fetchDsoParty: (walletUrl: string, token: string) => Promise<string>;
38
+ //# sourceMappingURL=amulet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amulet.d.ts","sourceRoot":"","sources":["../../src/client/amulet.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,sFAAsF;AACtF,MAAM,MAAM,wBAAwB,GAAG;IACnC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,aAAa,EAAE,aAAa,CAAC;CAChC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAE7C,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,2BAA2B,EAAE,MAAM,CAAC;CACvC,CAAC;AAYF,kGAAkG;AAClG,eAAO,MAAM,kBAAkB,GAC3B,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,cAAc,YAAY,KAC3B,OAAO,CAAC;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAwCnF,CAAC;AAEF,6HAA6H;AAC7H,eAAO,MAAM,8BAA8B,GACvC,eAAe,aAAa,EAC5B,oBAAoB,iBAAiB,EAAE,KACxC;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,2BAA2B,EAAE,MAAM,CAAA;CAuBrE,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,aAAa,GAAU,WAAW,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CASpF,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { AMULET_INSTRUMENT_ID, fetchAmuletContext, fetchDsoParty, injectExternalPartyAmuletRules } from '../AYF4OAKH.js';
2
+ import '../A7Z5O57E.js';
3
+ import '../VUOMXK5T.js';
4
+ //# sourceMappingURL=amulet.js.map
5
+ //# sourceMappingURL=amulet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"amulet.js"}