@layerzerolabs/common-canton 1.2.7 → 1.2.9

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 (37) hide show
  1. package/.turbo/turbo-build.log +639 -639
  2. package/.turbo/turbo-test.log +50 -15
  3. package/dist/3K5JL2TP.js +71 -0
  4. package/dist/3K5JL2TP.js.map +1 -0
  5. package/dist/{SLTAV2JF.js → ANKLDEGA.js} +3 -3
  6. package/dist/{SLTAV2JF.js.map → ANKLDEGA.js.map} +1 -1
  7. package/dist/{NRSV2VHQ.js → AWR6H7TM.js} +3 -3
  8. package/dist/{NRSV2VHQ.js.map → AWR6H7TM.js.map} +1 -1
  9. package/dist/{ESNOKXKB.js → DGVHAULK.js} +4 -4
  10. package/dist/{ESNOKXKB.js.map → DGVHAULK.js.map} +1 -1
  11. package/dist/{4G6A7TFX.js → DSYVONFP.js} +3 -3
  12. package/dist/{4G6A7TFX.js.map → DSYVONFP.js.map} +1 -1
  13. package/dist/{ST5U5WZ4.js → FFZGONTK.js} +4 -4
  14. package/dist/{ST5U5WZ4.js.map → FFZGONTK.js.map} +1 -1
  15. package/dist/{3ZCDWNJG.js → HTVAEYFB.js} +72 -128
  16. package/dist/HTVAEYFB.js.map +1 -0
  17. package/dist/client/amulet.js +2 -2
  18. package/dist/client/canton-client.d.ts +1 -1
  19. package/dist/client/canton-client.d.ts.map +1 -1
  20. package/dist/client/canton-client.js +3 -3
  21. package/dist/client/grpc.js +2 -2
  22. package/dist/client/index.js +4 -4
  23. package/dist/errors.d.ts +21 -0
  24. package/dist/errors.d.ts.map +1 -1
  25. package/dist/errors.js +1 -1
  26. package/dist/index.js +10 -10
  27. package/dist/provider.js +5 -5
  28. package/dist/refresh/index.js +5 -5
  29. package/dist/refresh/resolve.js +4 -4
  30. package/dist/sdk/canton-sdk.js +2 -2
  31. package/dist/sdk/index.js +2 -2
  32. package/package.json +10 -10
  33. package/src/client/canton-client.ts +110 -131
  34. package/src/errors.ts +51 -0
  35. package/dist/3ZCDWNJG.js.map +0 -1
  36. package/dist/A7Z5O57E.js +0 -34
  37. package/dist/A7Z5O57E.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client/amulet.ts"],"names":["AMULET_INSTRUMENT_ID","CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS","fetchAmuletContext","walletUrl","token","instrumentId","now","Date","later","getTime","response","fetch","URL","method","headers","Authorization","body","JSON","stringify","choiceArguments","expectedAdmin","admin","transfer","sender","receiver","amount","requestedAt","toISOString","executeBefore","inputHoldingCids","meta","values","extraArgs","context","ok","text","CantonProtocolError","status","data","json","disclosedContracts","choiceContextData","amuletContext","choiceContext","injectExternalPartyAmuletRules","externalRulesContract","find","contract","templateId","includes","NonRetryableError","tag","value","contractId","externalPartyAmuletRulesCid","fetchDsoParty","dso_party_id"],"mappings":"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","file":"4G6A7TFX.js","sourcesContent":["import { NonRetryableError } from '@layerzerolabs/common-error-utils';\n\nimport type { TokenProvider } from '../auth/token-provider';\nimport { CantonProtocolError } from '../errors';\nimport type { DisclosedContract } from '../open-api/models';\n\n/** Validator-wallet access a {@link CantonClient} needs to serve amulet endpoints. */\nexport type CantonClientWalletConfig = {\n /** Validator wallet URL for scan-proxy CIP-56 endpoints. */\n walletUrl: string;\n /** Bearer-token source for wallet requests. */\n tokenProvider: TokenProvider;\n};\n\n/** The single Amulet instrument id used across Canton Network fee flows. */\nexport const AMULET_INSTRUMENT_ID = 'Amulet';\n\n/** Instrument identifier for an amulet context probe. */\nexport type InstrumentId = { admin: string; id: string };\n\n/** DAML ChoiceContext — a bag of named AnyValues passed to fee-bearing choices. */\nexport type ChoiceContext = { values: Record<string, unknown> };\n\nexport type AmuletContextResult = {\n amuletContext: ChoiceContext;\n disclosedContracts: DisclosedContract[];\n externalPartyAmuletRulesCid: string;\n};\n\n// The probe (amount 0, sender = receiver = admin) never executes — it only fetches context; 1-hour window is ample.\nconst CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS = 60 * 60 * 1000;\n\ntype AmuletContextResponse = {\n choiceContext: {\n disclosedContracts: DisclosedContract[];\n choiceContextData: ChoiceContext;\n };\n};\n\n/** Amulet ChoiceContext from the validator scan-proxy — same call for all fee-bearing choices. */\nexport const fetchAmuletContext = async (\n walletUrl: string,\n token: string,\n instrumentId: InstrumentId,\n): Promise<{ amuletContext: ChoiceContext; disclosedContracts: DisclosedContract[] }> => {\n const now = new Date();\n const later = new Date(now.getTime() + CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS);\n\n const response = await fetch(\n new URL(\n '/api/validator/v0/scan-proxy/registry/transfer-instruction/v1/transfer-factory',\n walletUrl,\n ),\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n choiceArguments: {\n expectedAdmin: instrumentId.admin,\n transfer: {\n sender: instrumentId.admin,\n receiver: instrumentId.admin,\n amount: '0',\n instrumentId,\n requestedAt: now.toISOString(),\n executeBefore: later.toISOString(),\n inputHoldingCids: [],\n meta: { values: {} },\n },\n extraArgs: { context: { values: {} }, meta: { values: {} } },\n },\n }),\n },\n );\n\n if (!response.ok) {\n const text = await response.text();\n throw new CantonProtocolError(`Failed to get amulet context: ${response.status} ${text}`);\n }\n\n const data = (await response.json()) as AmuletContextResponse;\n const { disclosedContracts, choiceContextData: amuletContext } = data.choiceContext;\n\n return { amuletContext, disclosedContracts };\n};\n\n/** Injects ExternalPartyAmuletRules cid into the ChoiceContext — required by every flow hitting FeeUtils.validateContext. */\nexport const injectExternalPartyAmuletRules = (\n amuletContext: ChoiceContext,\n disclosedContracts: DisclosedContract[],\n): { amuletContext: ChoiceContext; externalPartyAmuletRulesCid: string } => {\n const externalRulesContract = disclosedContracts.find((contract) =>\n contract.templateId?.includes('ExternalPartyAmuletRules'),\n );\n\n if (!externalRulesContract) {\n throw new NonRetryableError(\n 'ExternalPartyAmuletRules not found in disclosed contracts from amulet context',\n );\n }\n\n return {\n amuletContext: {\n values: {\n ...amuletContext.values,\n 'external-party-amulet-rules': {\n tag: 'AV_ContractId',\n value: externalRulesContract.contractId,\n },\n },\n },\n externalPartyAmuletRulesCid: externalRulesContract.contractId,\n };\n};\n\n/** Fetch the DSO party id from the validator scan-proxy API. */\nexport const fetchDsoParty = async (walletUrl: string, token: string): Promise<string> => {\n const response = await fetch(new URL('/api/validator/v0/scan-proxy/dso-party-id', walletUrl), {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!response.ok) {\n throw new CantonProtocolError(`Failed to get DSO party: ${response.status}`);\n }\n const data = (await response.json()) as { dso_party_id: string };\n return data.dso_party_id;\n};\n"]}
1
+ {"version":3,"sources":["../src/client/amulet.ts"],"names":["AMULET_INSTRUMENT_ID","CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS","fetchAmuletContext","walletUrl","token","instrumentId","now","Date","later","getTime","response","fetch","URL","method","headers","Authorization","body","JSON","stringify","choiceArguments","expectedAdmin","admin","transfer","sender","receiver","amount","requestedAt","toISOString","executeBefore","inputHoldingCids","meta","values","extraArgs","context","ok","text","CantonProtocolError","status","data","json","disclosedContracts","choiceContextData","amuletContext","choiceContext","injectExternalPartyAmuletRules","externalRulesContract","find","contract","templateId","includes","NonRetryableError","tag","value","contractId","externalPartyAmuletRulesCid","fetchDsoParty","dso_party_id"],"mappings":"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","file":"DSYVONFP.js","sourcesContent":["import { NonRetryableError } from '@layerzerolabs/common-error-utils';\n\nimport type { TokenProvider } from '../auth/token-provider';\nimport { CantonProtocolError } from '../errors';\nimport type { DisclosedContract } from '../open-api/models';\n\n/** Validator-wallet access a {@link CantonClient} needs to serve amulet endpoints. */\nexport type CantonClientWalletConfig = {\n /** Validator wallet URL for scan-proxy CIP-56 endpoints. */\n walletUrl: string;\n /** Bearer-token source for wallet requests. */\n tokenProvider: TokenProvider;\n};\n\n/** The single Amulet instrument id used across Canton Network fee flows. */\nexport const AMULET_INSTRUMENT_ID = 'Amulet';\n\n/** Instrument identifier for an amulet context probe. */\nexport type InstrumentId = { admin: string; id: string };\n\n/** DAML ChoiceContext — a bag of named AnyValues passed to fee-bearing choices. */\nexport type ChoiceContext = { values: Record<string, unknown> };\n\nexport type AmuletContextResult = {\n amuletContext: ChoiceContext;\n disclosedContracts: DisclosedContract[];\n externalPartyAmuletRulesCid: string;\n};\n\n// The probe (amount 0, sender = receiver = admin) never executes — it only fetches context; 1-hour window is ample.\nconst CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS = 60 * 60 * 1000;\n\ntype AmuletContextResponse = {\n choiceContext: {\n disclosedContracts: DisclosedContract[];\n choiceContextData: ChoiceContext;\n };\n};\n\n/** Amulet ChoiceContext from the validator scan-proxy — same call for all fee-bearing choices. */\nexport const fetchAmuletContext = async (\n walletUrl: string,\n token: string,\n instrumentId: InstrumentId,\n): Promise<{ amuletContext: ChoiceContext; disclosedContracts: DisclosedContract[] }> => {\n const now = new Date();\n const later = new Date(now.getTime() + CONTEXT_PROBE_EXECUTE_BEFORE_WINDOW_MS);\n\n const response = await fetch(\n new URL(\n '/api/validator/v0/scan-proxy/registry/transfer-instruction/v1/transfer-factory',\n walletUrl,\n ),\n {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n choiceArguments: {\n expectedAdmin: instrumentId.admin,\n transfer: {\n sender: instrumentId.admin,\n receiver: instrumentId.admin,\n amount: '0',\n instrumentId,\n requestedAt: now.toISOString(),\n executeBefore: later.toISOString(),\n inputHoldingCids: [],\n meta: { values: {} },\n },\n extraArgs: { context: { values: {} }, meta: { values: {} } },\n },\n }),\n },\n );\n\n if (!response.ok) {\n const text = await response.text();\n throw new CantonProtocolError(`Failed to get amulet context: ${response.status} ${text}`);\n }\n\n const data = (await response.json()) as AmuletContextResponse;\n const { disclosedContracts, choiceContextData: amuletContext } = data.choiceContext;\n\n return { amuletContext, disclosedContracts };\n};\n\n/** Injects ExternalPartyAmuletRules cid into the ChoiceContext — required by every flow hitting FeeUtils.validateContext. */\nexport const injectExternalPartyAmuletRules = (\n amuletContext: ChoiceContext,\n disclosedContracts: DisclosedContract[],\n): { amuletContext: ChoiceContext; externalPartyAmuletRulesCid: string } => {\n const externalRulesContract = disclosedContracts.find((contract) =>\n contract.templateId?.includes('ExternalPartyAmuletRules'),\n );\n\n if (!externalRulesContract) {\n throw new NonRetryableError(\n 'ExternalPartyAmuletRules not found in disclosed contracts from amulet context',\n );\n }\n\n return {\n amuletContext: {\n values: {\n ...amuletContext.values,\n 'external-party-amulet-rules': {\n tag: 'AV_ContractId',\n value: externalRulesContract.contractId,\n },\n },\n },\n externalPartyAmuletRulesCid: externalRulesContract.contractId,\n };\n};\n\n/** Fetch the DSO party id from the validator scan-proxy API. */\nexport const fetchDsoParty = async (walletUrl: string, token: string): Promise<string> => {\n const response = await fetch(new URL('/api/validator/v0/scan-proxy/dso-party-id', walletUrl), {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!response.ok) {\n throw new CantonProtocolError(`Failed to get DSO party: ${response.status}`);\n }\n const data = (await response.json()) as { dso_party_id: string };\n return data.dso_party_id;\n};\n"]}
@@ -1,6 +1,6 @@
1
- import { createContractAddressResolver } from './VAFLUPQJ.js';
2
1
  import { substituteRefsToCids } from './57KDDFEU.js';
3
- import { AMULET_INSTRUMENT_ID } from './4G6A7TFX.js';
2
+ import { createContractAddressResolver } from './VAFLUPQJ.js';
3
+ import { AMULET_INSTRUMENT_ID } from './DSYVONFP.js';
4
4
  import { __name } from './VUOMXK5T.js';
5
5
 
6
6
  // src/refresh/resolve.ts
@@ -67,5 +67,5 @@ var resolveCantonTransaction = /* @__PURE__ */ __name(async ({ unresolvedCommand
67
67
  }, "resolveCantonTransaction");
68
68
 
69
69
  export { resolveCantonTransaction };
70
- //# sourceMappingURL=ST5U5WZ4.js.map
71
- //# sourceMappingURL=ST5U5WZ4.js.map
70
+ //# sourceMappingURL=FFZGONTK.js.map
71
+ //# sourceMappingURL=FFZGONTK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","senderParty","signingParties","client","nextDisclosed","disclosedContractIds","Set","map","contractId","appendDisclosures","disclosures","disclosure","has","add","push","resolveActiveContractId","resolveActiveContractIds","requireSenderParty","createContractAddressResolver","amuletBundlePromise","getAmuletBundle","dsoParty","getDsoParty","amuletContext","disclosedContracts","bundle","externalPartyAmuletRulesCid","getAmuletContextWithExternalRules","admin","id","AMULET_INSTRUMENT_ID","resolveRef","ref","type","resolvedCommands","substituteRefsToCids","resolvedDisclosedContracts","index","length","commands"],"mappings":"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","file":"ST5U5WZ4.js","sourcesContent":["import { AMULET_INSTRUMENT_ID, type ChoiceContext } from '../client/amulet';\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type { CantonCommands, CantonDisclosedContracts } from '../transaction';\nimport { createContractAddressResolver } from './address-resolver';\nimport { substituteRefsToCids } from './reverse-substitute';\n\nexport interface ResolveCantonAddressParams {\n unresolvedCommands: CantonCommands;\n unresolvedDisclosedContracts: CantonDisclosedContracts;\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 senderParty,\n signingParties,\n client,\n}: ResolveCantonAddressParams): Promise<{\n commands: CantonCommands;\n disclosedContracts: CantonDisclosedContracts;\n}> => {\n const nextDisclosed = [...unresolvedDisclosedContracts];\n const disclosedContractIds = new Set(\n unresolvedDisclosedContracts.map(({ contractId }) => contractId),\n );\n const appendDisclosures = (disclosures: CantonDisclosedContracts): void => {\n for (const disclosure of disclosures) {\n if (!disclosedContractIds.has(disclosure.contractId)) {\n disclosedContractIds.add(disclosure.contractId);\n nextDisclosed.push(disclosure);\n }\n }\n };\n\n const { resolveActiveContractId, resolveActiveContractIds, requireSenderParty } =\n createContractAddressResolver({\n client,\n senderParty,\n signingParties,\n appendDisclosures,\n });\n\n let amuletBundlePromise:\n | Promise<{\n amuletContext: ChoiceContext;\n externalPartyAmuletRulesCid: string;\n }>\n | undefined;\n\n const getAmuletBundle = async () => {\n if (!amuletBundlePromise) {\n amuletBundlePromise = (async () => {\n const dsoParty = await client.getDsoParty();\n const {\n amuletContext,\n disclosedContracts: bundle,\n externalPartyAmuletRulesCid,\n } = await client.getAmuletContextWithExternalRules({\n admin: dsoParty,\n id: AMULET_INSTRUMENT_ID,\n });\n appendDisclosures(bundle);\n return { amuletContext, externalPartyAmuletRulesCid };\n })();\n }\n return amuletBundlePromise;\n };\n\n const resolveRef = async (ref: CantonDeferredValue): Promise<unknown> => {\n switch (ref.type) {\n case 'senderParty':\n return requireSenderParty(ref.type);\n case 'activeContractId':\n return resolveActiveContractId(ref);\n case 'activeContractIds':\n return resolveActiveContractIds(ref);\n case 'amuletRulesCid':\n return (await getAmuletBundle()).externalPartyAmuletRulesCid;\n case 'amuletContext':\n return (await getAmuletBundle()).amuletContext;\n }\n };\n\n const resolvedCommands = await substituteRefsToCids(unresolvedCommands, resolveRef);\n const resolvedDisclosedContracts: CantonDisclosedContracts = [];\n for (let index = 0; index < nextDisclosed.length; index++) {\n resolvedDisclosedContracts.push(\n await substituteRefsToCids(nextDisclosed[index]!, resolveRef),\n );\n }\n\n return {\n commands: resolvedCommands,\n disclosedContracts: resolvedDisclosedContracts,\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","senderParty","signingParties","client","nextDisclosed","disclosedContractIds","Set","map","contractId","appendDisclosures","disclosures","disclosure","has","add","push","resolveActiveContractId","resolveActiveContractIds","requireSenderParty","createContractAddressResolver","amuletBundlePromise","getAmuletBundle","dsoParty","getDsoParty","amuletContext","disclosedContracts","bundle","externalPartyAmuletRulesCid","getAmuletContextWithExternalRules","admin","id","AMULET_INSTRUMENT_ID","resolveRef","ref","type","resolvedCommands","substituteRefsToCids","resolvedDisclosedContracts","index","length","commands"],"mappings":"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","file":"FFZGONTK.js","sourcesContent":["import { AMULET_INSTRUMENT_ID, type ChoiceContext } from '../client/amulet';\nimport type { ICantonClient } from '../client/interface';\nimport type { CantonDeferredValue } from '../deferredValue';\nimport type { CantonCommands, CantonDisclosedContracts } from '../transaction';\nimport { createContractAddressResolver } from './address-resolver';\nimport { substituteRefsToCids } from './reverse-substitute';\n\nexport interface ResolveCantonAddressParams {\n unresolvedCommands: CantonCommands;\n unresolvedDisclosedContracts: CantonDisclosedContracts;\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 senderParty,\n signingParties,\n client,\n}: ResolveCantonAddressParams): Promise<{\n commands: CantonCommands;\n disclosedContracts: CantonDisclosedContracts;\n}> => {\n const nextDisclosed = [...unresolvedDisclosedContracts];\n const disclosedContractIds = new Set(\n unresolvedDisclosedContracts.map(({ contractId }) => contractId),\n );\n const appendDisclosures = (disclosures: CantonDisclosedContracts): void => {\n for (const disclosure of disclosures) {\n if (!disclosedContractIds.has(disclosure.contractId)) {\n disclosedContractIds.add(disclosure.contractId);\n nextDisclosed.push(disclosure);\n }\n }\n };\n\n const { resolveActiveContractId, resolveActiveContractIds, requireSenderParty } =\n createContractAddressResolver({\n client,\n senderParty,\n signingParties,\n appendDisclosures,\n });\n\n let amuletBundlePromise:\n | Promise<{\n amuletContext: ChoiceContext;\n externalPartyAmuletRulesCid: string;\n }>\n | undefined;\n\n const getAmuletBundle = async () => {\n if (!amuletBundlePromise) {\n amuletBundlePromise = (async () => {\n const dsoParty = await client.getDsoParty();\n const {\n amuletContext,\n disclosedContracts: bundle,\n externalPartyAmuletRulesCid,\n } = await client.getAmuletContextWithExternalRules({\n admin: dsoParty,\n id: AMULET_INSTRUMENT_ID,\n });\n appendDisclosures(bundle);\n return { amuletContext, externalPartyAmuletRulesCid };\n })();\n }\n return amuletBundlePromise;\n };\n\n const resolveRef = async (ref: CantonDeferredValue): Promise<unknown> => {\n switch (ref.type) {\n case 'senderParty':\n return requireSenderParty(ref.type);\n case 'activeContractId':\n return resolveActiveContractId(ref);\n case 'activeContractIds':\n return resolveActiveContractIds(ref);\n case 'amuletRulesCid':\n return (await getAmuletBundle()).externalPartyAmuletRulesCid;\n case 'amuletContext':\n return (await getAmuletBundle()).amuletContext;\n }\n };\n\n const resolvedCommands = await substituteRefsToCids(unresolvedCommands, resolveRef);\n const resolvedDisclosedContracts: CantonDisclosedContracts = [];\n for (let index = 0; index < nextDisclosed.length; index++) {\n resolvedDisclosedContracts.push(\n await substituteRefsToCids(nextDisclosed[index]!, resolveRef),\n );\n }\n\n return {\n commands: resolvedCommands,\n disclosedContracts: resolvedDisclosedContracts,\n };\n};\n"]}
@@ -1,7 +1,8 @@
1
1
  import { DefaultApi } from './TZTIULG5.js';
2
2
  import { JsActiveContractFromJSON } from './NIN7X4D3.js';
3
- import { fetchDsoParty, fetchAmuletContext, injectExternalPartyAmuletRules } from './4G6A7TFX.js';
4
- import { CantonProtocolError, CantonTransportError } from './A7Z5O57E.js';
3
+ import { ResponseError } from './KBNUN3MF.js';
4
+ import { fetchDsoParty, fetchAmuletContext, injectExternalPartyAmuletRules } from './DSYVONFP.js';
5
+ import { CantonProtocolError, cantonApiErrorFromResponse, CantonTransportError, CantonApiError } from './3K5JL2TP.js';
5
6
  import { __name } from './VUOMXK5T.js';
6
7
  import { once } from 'es-toolkit';
7
8
  import { randomUUID } from 'crypto';
@@ -53,32 +54,18 @@ var CantonClient = class {
53
54
  return obj[pascal] ?? obj[camel];
54
55
  }
55
56
  /**
56
- * Try to extract error body from API response.
57
- * Returns the parsed body or null if extraction fails.
57
+ * Run an API call, normalizing a thrown `ResponseError` into a `CantonApiError`
58
+ * that carries `errorCategory` (for retry classification). Other errors pass through.
58
59
  */
59
- async #extractErrorBody(err) {
60
- if (err && typeof err === "object" && "response" in err) {
61
- const resp = err.response;
62
- if (resp && typeof resp.json === "function") {
63
- return await resp.json().catch(() => null);
60
+ async #invoke(call) {
61
+ try {
62
+ return await call();
63
+ } catch (err) {
64
+ if (err instanceof ResponseError) {
65
+ throw await cantonApiErrorFromResponse(err.response);
64
66
  }
67
+ throw err;
65
68
  }
66
- return null;
67
- }
68
- /**
69
- * Throw a CantonProtocolError with extracted error details from API response.
70
- * Handles the common pattern of extracting JSON error details from failed requests.
71
- *
72
- * @param err - The caught error
73
- * @param context - Description of the operation (e.g., "DAR upload", "Party allocation")
74
- * @throws CantonProtocolError with extracted error details, or re-throws original error
75
- */
76
- async #throwApiError(err, context) {
77
- const body = await this.#extractErrorBody(err);
78
- if (body) {
79
- throw new CantonProtocolError(`${context} failed: ${JSON.stringify(body)}`);
80
- }
81
- throw err;
82
69
  }
83
70
  /**
84
71
  * Build party-based filter object for event queries.
@@ -152,7 +139,7 @@ var CantonClient = class {
152
139
  * Returns all connected synchronizer IDs.
153
140
  */
154
141
  async connectedSynchronizers() {
155
- const response = await this.#api.getV2StateConnectedSynchronizers();
142
+ const response = await this.#invoke(() => this.#api.getV2StateConnectedSynchronizers());
156
143
  const synchronizers = response.connectedSynchronizers ?? [];
157
144
  return synchronizers.map((s) => s.synchronizerId).filter((id) => !!id);
158
145
  }
@@ -191,22 +178,16 @@ var CantonClient = class {
191
178
  synchronizerId
192
179
  };
193
180
  try {
194
- return await this.#api.postV2Dars(request);
181
+ return await this.#invoke(() => this.#api.postV2Dars(request));
195
182
  } catch (err) {
196
- if (opts.skipIfVetted) {
197
- const body2 = await this.#extractErrorBody(err);
198
- if (body2) {
199
- if (body2.code === "KNOWN_PACKAGE_VERSION") {
200
- return {
201
- skipped: true,
202
- reason: "already_vetted",
203
- details: body2
204
- };
205
- }
206
- throw new CantonProtocolError(`DAR upload failed: ${JSON.stringify(body2)}`);
207
- }
183
+ if (opts.skipIfVetted && err instanceof CantonApiError && err.code === "KNOWN_PACKAGE_VERSION") {
184
+ return {
185
+ skipped: true,
186
+ reason: "already_vetted",
187
+ details: err.body
188
+ };
208
189
  }
209
- throw await this.#throwApiError(err, "DAR upload");
190
+ throw err;
210
191
  }
211
192
  }
212
193
  /**
@@ -227,12 +208,12 @@ var CantonClient = class {
227
208
  synchronizerId: opts.synchronizerId
228
209
  };
229
210
  if (!request.synchronizerId) {
230
- return this.#ensureSynchronizerId().then((synchronizerId) => this.#api.postV2DarsValidate({
211
+ return this.#ensureSynchronizerId().then((synchronizerId) => this.#invoke(() => this.#api.postV2DarsValidate({
231
212
  ...request,
232
213
  synchronizerId
233
- }));
214
+ })));
234
215
  }
235
- return this.#api.postV2DarsValidate(request);
216
+ return this.#invoke(() => this.#api.postV2DarsValidate(request));
236
217
  }
237
218
  // ─────────────────────────────────────────────────────────────────────────
238
219
  // Party Management
@@ -245,10 +226,10 @@ var CantonClient = class {
245
226
  * @returns Array of party IDs and pagination token
246
227
  */
247
228
  async listParties(opts = {}) {
248
- const response = await this.#api.getV2Parties({
229
+ const response = await this.#invoke(() => this.#api.getV2Parties({
249
230
  pageSize: opts.pageSize,
250
231
  pageToken: opts.pageToken
251
- });
232
+ }));
252
233
  return {
253
234
  parties: response.partyDetails?.map((p) => p.party) ?? [],
254
235
  nextPageToken: response.nextPageToken
@@ -264,9 +245,9 @@ var CantonClient = class {
264
245
  * ourselves to preserve the actual variant payload.
265
246
  */
266
247
  async listUserRights() {
267
- const apiResponse = await this.#api.getV2UsersUserIdRightsRaw({
248
+ const apiResponse = await this.#invoke(() => this.#api.getV2UsersUserIdRightsRaw({
268
249
  userId: this.#userId
269
- });
250
+ }));
270
251
  const raw = await apiResponse.raw.json();
271
252
  return raw.rights ?? [];
272
253
  }
@@ -305,19 +286,14 @@ var CantonClient = class {
305
286
  */
306
287
  async allocateParty(partyIdHint, opts = {}) {
307
288
  const synchronizerId = opts.synchronizerId ?? await this.#ensureSynchronizerId();
308
- let response;
309
- try {
310
- response = await this.#api.postV2Parties({
311
- allocatePartyRequest: {
312
- partyIdHint,
313
- synchronizerId,
314
- userId: opts.userId ?? "",
315
- identityProviderId: opts.identityProviderId ?? ""
316
- }
317
- });
318
- } catch (err) {
319
- throw await this.#throwApiError(err, "Party allocation");
320
- }
289
+ const response = await this.#invoke(() => this.#api.postV2Parties({
290
+ allocatePartyRequest: {
291
+ partyIdHint,
292
+ synchronizerId,
293
+ userId: opts.userId ?? "",
294
+ identityProviderId: opts.identityProviderId ?? ""
295
+ }
296
+ }));
321
297
  const party = response.partyDetails?.party;
322
298
  if (!party) {
323
299
  throw new CantonProtocolError("Party allocation response missing party ID");
@@ -340,12 +316,7 @@ var CantonClient = class {
340
316
  confirmationThreshold: args.confirmationThreshold
341
317
  }
342
318
  };
343
- let response;
344
- try {
345
- response = await this.#api.postV2PartiesExternalGenerateTopology(request);
346
- } catch (err) {
347
- throw await this.#throwApiError(err, "External party topology generation");
348
- }
319
+ const response = await this.#invoke(() => this.#api.postV2PartiesExternalGenerateTopology(request));
349
320
  if (!response.partyId || !response.multiHash) {
350
321
  throw new CantonProtocolError("generateExternalPartyTopology response missing partyId or multiHash");
351
322
  }
@@ -375,12 +346,7 @@ var CantonClient = class {
375
346
  identityProviderId: ""
376
347
  }
377
348
  };
378
- let response;
379
- try {
380
- response = await this.#api.postV2PartiesExternalAllocate(request);
381
- } catch (err) {
382
- throw await this.#throwApiError(err, "External party allocation");
383
- }
349
+ const response = await this.#invoke(() => this.#api.postV2PartiesExternalAllocate(request));
384
350
  if (!response.partyId) {
385
351
  throw new CantonProtocolError("allocateExternalParty response missing partyId");
386
352
  }
@@ -393,28 +359,24 @@ var CantonClient = class {
393
359
  * POST /v2/users/{userId}/rights
394
360
  */
395
361
  async grantCanActAs(partyId) {
396
- try {
397
- await this.#api.postV2UsersUserIdRights({
362
+ await this.#invoke(() => this.#api.postV2UsersUserIdRights({
363
+ userId: this.#userId,
364
+ grantUserRightsRequest: {
398
365
  userId: this.#userId,
399
- grantUserRightsRequest: {
400
- userId: this.#userId,
401
- rights: [
402
- {
403
- kind: {
404
- canActAs: {
405
- value: {
406
- party: partyId
407
- }
366
+ rights: [
367
+ {
368
+ kind: {
369
+ canActAs: {
370
+ value: {
371
+ party: partyId
408
372
  }
409
373
  }
410
374
  }
411
- ],
412
- identityProviderId: ""
413
- }
414
- });
415
- } catch (err) {
416
- throw await this.#throwApiError(err, `Grant canActAs for party ${partyId}`);
417
- }
375
+ }
376
+ ],
377
+ identityProviderId: ""
378
+ }
379
+ }));
418
380
  }
419
381
  /**
420
382
  * Get the package ID for a package by name.
@@ -437,12 +399,7 @@ var CantonClient = class {
437
399
  synchronizerId
438
400
  }
439
401
  };
440
- let response;
441
- try {
442
- response = await this.#api.postV2InteractiveSubmissionPreferredPackages(request);
443
- } catch (err) {
444
- throw await this.#throwApiError(err, "Package lookup");
445
- }
402
+ const response = await this.#invoke(() => this.#api.postV2InteractiveSubmissionPreferredPackages(request));
446
403
  const packageRef = response.packageReferences?.find((ref) => ref.packageName === packageName);
447
404
  if (!packageRef?.packageId) {
448
405
  throw new CantonProtocolError(`Package "${packageName}" not found or not vetted for parties`);
@@ -460,7 +417,7 @@ var CantonClient = class {
460
417
  async submit(actors, commands, opts = {}) {
461
418
  const synchronizerId = await this.#ensureSynchronizerId();
462
419
  const commandId = opts.commandId ?? randomUUID();
463
- const ledgerEndResponse = await this.#api.getV2StateLedgerEnd();
420
+ const ledgerEndResponse = await this.#invoke(() => this.#api.getV2StateLedgerEnd());
464
421
  const completionOffset = ledgerEndResponse.offset;
465
422
  const request = {
466
423
  jsCommands: {
@@ -473,11 +430,7 @@ var CantonClient = class {
473
430
  disclosedContracts: opts.disclosedContracts
474
431
  }
475
432
  };
476
- try {
477
- await this.#api.postV2CommandsAsyncSubmit(request);
478
- } catch (err) {
479
- throw await this.#throwApiError(err, "Command submission");
480
- }
433
+ await this.#invoke(() => this.#api.postV2CommandsAsyncSubmit(request));
481
434
  return {
482
435
  commandId,
483
436
  completionOffset
@@ -510,7 +463,7 @@ var CantonClient = class {
510
463
  limit,
511
464
  streamIdleTimeoutMs
512
465
  };
513
- const rawResponse = await this.#api.postV2CommandsCompletionsRaw(request);
466
+ const rawResponse = await this.#invoke(() => this.#api.postV2CommandsCompletionsRaw(request));
514
467
  const responseText = await rawResponse.raw.text();
515
468
  const completions = JSON.parse(responseText);
516
469
  for (const item of completions) {
@@ -587,7 +540,7 @@ var CantonClient = class {
587
540
  }
588
541
  }
589
542
  };
590
- const response = await this.#api.postV2EventsEventsByContractId(request);
543
+ const response = await this.#invoke(() => this.#api.postV2EventsEventsByContractId(request));
591
544
  if (response.archived) return void 0;
592
545
  return response.created?.createdEvent;
593
546
  }
@@ -635,7 +588,7 @@ var CantonClient = class {
635
588
  }
636
589
  }
637
590
  };
638
- const response = await this.#api.postV2EventsEventsByContractId(request);
591
+ const response = await this.#invoke(() => this.#api.postV2EventsEventsByContractId(request));
639
592
  return {
640
593
  created: response.created?.createdEvent,
641
594
  archived: response.archived?.archivedEvent
@@ -648,12 +601,12 @@ var CantonClient = class {
648
601
  * @returns The full update response
649
602
  */
650
603
  async fetchTransactionByUpdateId(updateId, parties) {
651
- const response = await this.#api.postV2UpdatesUpdateByIdRaw({
604
+ const response = await this.#invoke(() => this.#api.postV2UpdatesUpdateByIdRaw({
652
605
  getUpdateByIdRequest: {
653
606
  updateId,
654
607
  updateFormat: this.#buildUpdateFormat(parties)
655
608
  }
656
- });
609
+ }));
657
610
  const updateResponse = await response.raw.json();
658
611
  return this.#parseTransactionFromUpdate(updateResponse, `Update ${updateId} is not a transaction`);
659
612
  }
@@ -664,12 +617,12 @@ var CantonClient = class {
664
617
  * @returns The full transaction including recordTime
665
618
  */
666
619
  async fetchTransactionByOffset(offset, parties) {
667
- const response = await this.#api.postV2UpdatesUpdateByOffsetRaw({
620
+ const response = await this.#invoke(() => this.#api.postV2UpdatesUpdateByOffsetRaw({
668
621
  getUpdateByOffsetRequest: {
669
622
  offset,
670
623
  updateFormat: this.#buildUpdateFormat(parties)
671
624
  }
672
- });
625
+ }));
673
626
  const updateResponse = await response.raw.json();
674
627
  return this.#parseTransactionFromUpdate(updateResponse, `Update at offset ${offset} is not a transaction`);
675
628
  }
@@ -707,12 +660,7 @@ var CantonClient = class {
707
660
  packageIdSelectionPreference: []
708
661
  }
709
662
  };
710
- let response;
711
- try {
712
- response = await this.#api.postV2InteractiveSubmissionPrepare(request);
713
- } catch (error) {
714
- throw await this.#throwApiError(error, "Interactive submission prepare");
715
- }
663
+ const response = await this.#invoke(() => this.#api.postV2InteractiveSubmissionPrepare(request));
716
664
  const validated = this.#validatePrepareResponse(response);
717
665
  return {
718
666
  ...validated,
@@ -726,7 +674,7 @@ var CantonClient = class {
726
674
  * The generic type T flows from prepareForSigning() for type documentation.
727
675
  */
728
676
  async submitSigned(prepared, signatures) {
729
- const ledgerEndResponse = await this.#api.getV2StateLedgerEnd();
677
+ const ledgerEndResponse = await this.#invoke(() => this.#api.getV2StateLedgerEnd());
730
678
  const completionOffset = ledgerEndResponse.offset;
731
679
  const request = {
732
680
  jsExecuteSubmissionRequest: {
@@ -758,11 +706,7 @@ var CantonClient = class {
758
706
  hashingSchemeVersion: prepared.hashingSchemeVersion
759
707
  }
760
708
  };
761
- try {
762
- await this.#api.postV2InteractiveSubmissionExecute(request);
763
- } catch (error) {
764
- throw await this.#throwApiError(error, "Interactive submission execute");
765
- }
709
+ await this.#invoke(() => this.#api.postV2InteractiveSubmissionExecute(request));
766
710
  return {
767
711
  commandId: prepared.commandId,
768
712
  completionOffset
@@ -775,7 +719,7 @@ var CantonClient = class {
775
719
  * Get the current ledger end offset.
776
720
  */
777
721
  async getLedgerEndOffset() {
778
- const response = await this.#api.getV2StateLedgerEnd();
722
+ const response = await this.#invoke(() => this.#api.getV2StateLedgerEnd());
779
723
  return response.offset;
780
724
  }
781
725
  /**
@@ -825,7 +769,7 @@ var CantonClient = class {
825
769
  cumulative: cumulativeFilter
826
770
  }
827
771
  ]));
828
- const rawResponse = await this.#api.postV2StateActiveContractsRaw({
772
+ const rawResponse = await this.#invoke(() => this.#api.postV2StateActiveContractsRaw({
829
773
  getActiveContractsRequest: {
830
774
  filter: {
831
775
  filtersByParty
@@ -834,7 +778,7 @@ var CantonClient = class {
834
778
  activeAtOffset: offset
835
779
  },
836
780
  limit: opts?.limit
837
- });
781
+ }));
838
782
  const rawJson = await rawResponse.raw.json();
839
783
  return rawJson.map((item) => item.contractEntry?.JsActiveContract).filter((contract) => contract != null).map((contract) => JsActiveContractFromJSON(contract));
840
784
  }
@@ -862,7 +806,7 @@ var CantonClient = class {
862
806
  },
863
807
  verbose: false
864
808
  };
865
- const rawResponse = await this.#api.postV2UpdatesRaw({
809
+ const rawResponse = await this.#invoke(() => this.#api.postV2UpdatesRaw({
866
810
  getUpdatesRequest: {
867
811
  beginExclusive,
868
812
  endInclusive,
@@ -875,7 +819,7 @@ var CantonClient = class {
875
819
  }
876
820
  },
877
821
  limit: opts?.limit
878
- });
822
+ }));
879
823
  const updateResponses = await rawResponse.raw.json();
880
824
  return updateResponses.map((response) => response.update);
881
825
  }
@@ -965,5 +909,5 @@ var CantonClient = class {
965
909
  };
966
910
 
967
911
  export { CantonClient };
968
- //# sourceMappingURL=3ZCDWNJG.js.map
969
- //# sourceMappingURL=3ZCDWNJG.js.map
912
+ //# sourceMappingURL=HTVAEYFB.js.map
913
+ //# sourceMappingURL=HTVAEYFB.js.map