@lidofinance/lido-csm-sdk 2.0.0-alpha.66 → 2.0.0-alpha.68

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 (55) hide show
  1. package/dist/common/constants/base.cjs +2 -0
  2. package/dist/common/constants/base.cjs.map +1 -1
  3. package/dist/common/constants/base.d.cts +2 -1
  4. package/dist/common/constants/base.d.cts.map +1 -1
  5. package/dist/common/constants/base.d.mts +2 -1
  6. package/dist/common/constants/base.d.mts.map +1 -1
  7. package/dist/common/constants/base.mjs +2 -1
  8. package/dist/common/constants/base.mjs.map +1 -1
  9. package/dist/common/constants/index.d.cts +1 -1
  10. package/dist/common/constants/index.d.mts +1 -1
  11. package/dist/common/utils/decode-revert-data.cjs +3 -2
  12. package/dist/common/utils/decode-revert-data.cjs.map +1 -1
  13. package/dist/common/utils/decode-revert-data.d.cts.map +1 -1
  14. package/dist/common/utils/decode-revert-data.d.mts.map +1 -1
  15. package/dist/common/utils/decode-revert-data.mjs +3 -2
  16. package/dist/common/utils/decode-revert-data.mjs.map +1 -1
  17. package/dist/common.cjs +1 -0
  18. package/dist/common.d.cts +2 -2
  19. package/dist/common.d.mts +2 -2
  20. package/dist/common.mjs +2 -2
  21. package/dist/core-sdk/core-sdk.d.cts +152 -152
  22. package/dist/core-sdk/core-sdk.d.mts +152 -152
  23. package/dist/frame-sdk/frame-sdk.d.cts +2 -2
  24. package/dist/frame-sdk/frame-sdk.d.cts.map +1 -1
  25. package/dist/frame-sdk/frame-sdk.d.mts +2 -2
  26. package/dist/frame-sdk/frame-sdk.d.mts.map +1 -1
  27. package/dist/index.cjs +3 -1
  28. package/dist/index.d.cts +3 -3
  29. package/dist/index.d.mts +3 -3
  30. package/dist/index.mjs +3 -3
  31. package/dist/module-sdk/active-stake-equivalent.cjs +13 -0
  32. package/dist/module-sdk/active-stake-equivalent.cjs.map +1 -0
  33. package/dist/module-sdk/active-stake-equivalent.mjs +13 -0
  34. package/dist/module-sdk/active-stake-equivalent.mjs.map +1 -0
  35. package/dist/module-sdk/calculate-share-limit.cjs +3 -2
  36. package/dist/module-sdk/calculate-share-limit.cjs.map +1 -1
  37. package/dist/module-sdk/calculate-share-limit.mjs +3 -2
  38. package/dist/module-sdk/calculate-share-limit.mjs.map +1 -1
  39. package/dist/module-sdk/module-sdk.cjs +2 -1
  40. package/dist/module-sdk/module-sdk.cjs.map +1 -1
  41. package/dist/module-sdk/module-sdk.mjs +2 -1
  42. package/dist/module-sdk/module-sdk.mjs.map +1 -1
  43. package/dist/module-sdk/types.cjs +5 -0
  44. package/dist/module-sdk/types.cjs.map +1 -1
  45. package/dist/module-sdk/types.d.cts +6 -1
  46. package/dist/module-sdk/types.d.cts.map +1 -1
  47. package/dist/module-sdk/types.d.mts +6 -1
  48. package/dist/module-sdk/types.d.mts.map +1 -1
  49. package/dist/module-sdk/types.mjs +5 -1
  50. package/dist/module-sdk/types.mjs.map +1 -1
  51. package/dist/module-sdk.cjs +2 -1
  52. package/dist/module-sdk.d.cts +2 -2
  53. package/dist/module-sdk.d.mts +2 -2
  54. package/dist/module-sdk.mjs +2 -2
  55. package/package.json +7 -2
@@ -1,10 +1,12 @@
1
1
  //#region src/common/constants/base.ts
2
2
  const PERCENT_BASIS = 10000n;
3
+ const MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = 32000000000n;
3
4
  const DEFAULT_CLEAN_MAX_ITEMS = 1e3;
4
5
  const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100000n;
5
6
  //#endregion
6
7
  exports.DEFAULT_CLEAN_MAX_ITEMS = DEFAULT_CLEAN_MAX_ITEMS;
7
8
  exports.MAX_BLOCKS_DEPTH_TWO_WEEKS = MAX_BLOCKS_DEPTH_TWO_WEEKS;
9
+ exports.MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI;
8
10
  exports.PERCENT_BASIS = PERCENT_BASIS;
9
11
 
10
12
  //# sourceMappingURL=base.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.cjs","names":[],"sources":["../../../src/common/constants/base.ts"],"sourcesContent":["export const PERCENT_BASIS = 10_000n;\n\nexport const DEFAULT_CLEAN_MAX_ITEMS = 1000;\n\nexport const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100_000n;\n\n// TODO: rename file\n"],"mappings":";AAAO,MAAM,gBAAgB;AAEtB,MAAM,0BAA0B;AAEhC,MAAM,6BAA6B"}
1
+ {"version":3,"file":"base.cjs","names":[],"sources":["../../../src/common/constants/base.ts"],"sourcesContent":["export const PERCENT_BASIS = 10_000n;\n\n// Max effective balance for 0x01 withdrawal credentials: a fixed 32 ETH, in gwei\n// (the unit module digests report validator balances in). Matches\n// StakingRouter.MAX_EFFECTIVE_BALANCE_WC_TYPE_01() (which returns wei); a protocol\n// invariant, so it is inlined rather than read on-chain.\nexport const MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = 32_000_000_000n;\n\nexport const DEFAULT_CLEAN_MAX_ITEMS = 1000;\n\nexport const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100_000n;\n\n// TODO: rename file\n"],"mappings":";AAAO,MAAM,gBAAgB;AAMtB,MAAM,wCAAwC;AAE9C,MAAM,0BAA0B;AAEhC,MAAM,6BAA6B"}
@@ -1,7 +1,8 @@
1
1
  //#region src/common/constants/base.d.ts
2
2
  declare const PERCENT_BASIS = 10000n;
3
+ declare const MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = 32000000000n;
3
4
  declare const DEFAULT_CLEAN_MAX_ITEMS = 1000;
4
5
  declare const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100000n;
5
6
  //#endregion
6
- export { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS };
7
+ export { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS };
7
8
  //# sourceMappingURL=base.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.cts","names":[],"sources":["../../../src/common/constants/base.ts"],"mappings":";cAAa,aAAA;AAAA,cAEA,uBAAA;AAAA,cAEA,0BAAA"}
1
+ {"version":3,"file":"base.d.cts","names":[],"sources":["../../../src/common/constants/base.ts"],"mappings":";cAAa,aAAA;AAAA,cAMA,qCAAA;AAAA,cAEA,uBAAA;AAAA,cAEA,0BAAA"}
@@ -1,7 +1,8 @@
1
1
  //#region src/common/constants/base.d.ts
2
2
  declare const PERCENT_BASIS = 10000n;
3
+ declare const MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = 32000000000n;
3
4
  declare const DEFAULT_CLEAN_MAX_ITEMS = 1000;
4
5
  declare const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100000n;
5
6
  //#endregion
6
- export { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS };
7
+ export { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS };
7
8
  //# sourceMappingURL=base.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.mts","names":[],"sources":["../../../src/common/constants/base.ts"],"mappings":";cAAa,aAAA;AAAA,cAEA,uBAAA;AAAA,cAEA,0BAAA"}
1
+ {"version":3,"file":"base.d.mts","names":[],"sources":["../../../src/common/constants/base.ts"],"mappings":";cAAa,aAAA;AAAA,cAMA,qCAAA;AAAA,cAEA,uBAAA;AAAA,cAEA,0BAAA"}
@@ -1,8 +1,9 @@
1
1
  //#region src/common/constants/base.ts
2
2
  const PERCENT_BASIS = 10000n;
3
+ const MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = 32000000000n;
3
4
  const DEFAULT_CLEAN_MAX_ITEMS = 1e3;
4
5
  const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100000n;
5
6
  //#endregion
6
- export { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS };
7
+ export { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS };
7
8
 
8
9
  //# sourceMappingURL=base.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.mjs","names":[],"sources":["../../../src/common/constants/base.ts"],"sourcesContent":["export const PERCENT_BASIS = 10_000n;\n\nexport const DEFAULT_CLEAN_MAX_ITEMS = 1000;\n\nexport const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100_000n;\n\n// TODO: rename file\n"],"mappings":";AAAO,MAAM,gBAAgB;AAEtB,MAAM,0BAA0B;AAEhC,MAAM,6BAA6B"}
1
+ {"version":3,"file":"base.mjs","names":[],"sources":["../../../src/common/constants/base.ts"],"sourcesContent":["export const PERCENT_BASIS = 10_000n;\n\n// Max effective balance for 0x01 withdrawal credentials: a fixed 32 ETH, in gwei\n// (the unit module digests report validator balances in). Matches\n// StakingRouter.MAX_EFFECTIVE_BALANCE_WC_TYPE_01() (which returns wei); a protocol\n// invariant, so it is inlined rather than read on-chain.\nexport const MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = 32_000_000_000n;\n\nexport const DEFAULT_CLEAN_MAX_ITEMS = 1000;\n\nexport const MAX_BLOCKS_DEPTH_TWO_WEEKS = 100_000n;\n\n// TODO: rename file\n"],"mappings":";AAAO,MAAM,gBAAgB;AAMtB,MAAM,wCAAwC;AAE9C,MAAM,0BAA0B;AAEhC,MAAM,6BAA6B"}
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS } from "./base.cjs";
1
+ import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS } from "./base.cjs";
2
2
  import { CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT } from "./cache-durations.cjs";
3
3
  import { CONTRACT_NAMES, CURATED_GATES, SUPPORTED_CONTRACT_VERSIONS } from "./contract-names.cjs";
4
4
  import { MODULE_CONTRACT, MODULE_NAME, PerModule } from "./module-name.cjs";
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS } from "./base.mjs";
1
+ import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS } from "./base.mjs";
2
2
  import { CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT } from "./cache-durations.mjs";
3
3
  import { CONTRACT_NAMES, CURATED_GATES, SUPPORTED_CONTRACT_VERSIONS } from "./contract-names.mjs";
4
4
  import { MODULE_CONTRACT, MODULE_NAME, PerModule } from "./module-name.mjs";
@@ -3,7 +3,7 @@ const require_contract_abi = require("../constants/contract-abi.cjs");
3
3
  let viem = require("viem");
4
4
  let viem_utils = require("viem/utils");
5
5
  //#region src/common/utils/decode-revert-data.ts
6
- const HEX_DATA_RE = /(?:custom error |reason: )(0x[0-9a-fA-F]{8,})/;
6
+ const HEX_DATA_RE = /(?:custom error |reason: )(0x[0-9a-fA-F]+)(?::\s*([0-9a-fA-F]+))?/;
7
7
  const buildCombinedErrorAbi = (abis) => {
8
8
  const bySelector = /* @__PURE__ */ new Map();
9
9
  const byName = /* @__PURE__ */ new Map();
@@ -27,7 +27,8 @@ const tryHex = (value) => typeof value === "string" && value.startsWith("0x") ?
27
27
  const tryHexFromString = (value) => {
28
28
  if (typeof value !== "string") return void 0;
29
29
  const match = HEX_DATA_RE.exec(value);
30
- return match ? match[1] : void 0;
30
+ if (!match) return void 0;
31
+ return `${match[1]}${match[2] ?? ""}`;
31
32
  };
32
33
  const extractFromNode = (node) => {
33
34
  const fromRaw = tryHex(node.raw);
@@ -1 +1 @@
1
- {"version":3,"file":"decode-revert-data.cjs","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"sourcesContent":["import type {\n AbiParametersToPrimitiveTypes,\n ExtractAbiError,\n ExtractAbiErrorNames,\n} from 'abitype';\nimport { type Abi, type Hex, decodeErrorResult } from 'viem';\nimport { formatAbiItem, toFunctionSelector } from 'viem/utils';\nimport { CONTRACT_BASE_ABI } from '../constants/contract-abi';\n\ntype ContractAbis = (typeof CONTRACT_BASE_ABI)[keyof typeof CONTRACT_BASE_ABI];\n\nexport type ContractErrorName = ExtractAbiErrorNames<ContractAbis>;\n\ntype ArgsOf<Name extends ContractErrorName> = AbiParametersToPrimitiveTypes<\n ExtractAbiError<ContractAbis, Name>['inputs']\n>;\n\n// Discriminated union: narrowing on `name` types the `args` tuple too.\n// `if (e.decodedRevert?.name === 'AccessControlUnauthorizedAccount') {\n// const [account, role] = e.decodedRevert.args; // typed }`\nexport type DecodedRevert = {\n [K in ContractErrorName]: { name: K; args: ArgsOf<K> };\n}[ContractErrorName];\n\nconst HEX_DATA_RE = /(?:custom error |reason: )(0x[0-9a-fA-F]{8,})/;\n\n// Dedup by 4-byte selector, not by name: two ABIs may declare distinct errors\n// that happen to share a name but encode different argument tuples. Dropping\n// by name would silently misdecode one of them. Same-selector duplicates\n// (identical signature in multiple contracts) are still collapsed silently.\n// Name collisions across different selectors emit a single console.warn each\n// so future ABI drift surfaces without breaking decoding.\nexport const buildCombinedErrorAbi = (abis: readonly Abi[]): Abi => {\n const bySelector = new Map<Hex, Abi[number]>();\n const byName = new Map<string, string>();\n const warned = new Set<string>();\n for (const abi of abis) {\n for (const item of abi) {\n if (item.type !== 'error') continue;\n const signature = formatAbiItem(item);\n const selector = toFunctionSelector(signature);\n if (bySelector.has(selector)) continue;\n bySelector.set(selector, item);\n const prevSignature = byName.get(item.name);\n if (\n prevSignature &&\n prevSignature !== signature &&\n !warned.has(item.name)\n ) {\n warned.add(item.name);\n\n console.warn(\n `[csm-sdk] ABI error name collision for \"${item.name}\": ${prevSignature} vs ${signature}`,\n );\n } else if (!prevSignature) {\n byName.set(item.name, signature);\n }\n }\n }\n return [...bySelector.values()] as Abi;\n};\n\nconst combinedErrorAbi: Abi = buildCombinedErrorAbi(\n Object.values(CONTRACT_BASE_ABI),\n);\n\nconst tryHex = (value: unknown): Hex | undefined =>\n typeof value === 'string' && value.startsWith('0x')\n ? (value as Hex)\n : undefined;\n\nconst tryHexFromString = (value: unknown): Hex | undefined => {\n if (typeof value !== 'string') return undefined;\n const match = HEX_DATA_RE.exec(value);\n return match ? (match[1] as Hex) : undefined;\n};\n\nconst extractFromNode = (node: Record<string, unknown>): Hex | undefined => {\n const fromRaw = tryHex(node.raw);\n if (fromRaw) return fromRaw;\n\n const direct = tryHex(node.data);\n if (direct) return direct;\n\n if (typeof node.data === 'object' && node.data !== null) {\n const nested = tryHex((node.data as { data?: unknown }).data);\n if (nested) return nested;\n }\n\n return tryHexFromString(node.details) ?? tryHexFromString(node.shortMessage);\n};\n\nconst extractErrorData = (error: unknown): Hex | undefined => {\n let current: unknown = error;\n while (typeof current === 'object' && current !== null) {\n const hex = extractFromNode(current as Record<string, unknown>);\n if (hex) return hex;\n current = (current as Record<string, unknown>).cause;\n }\n return undefined;\n};\n\nexport const decodeRevertData = (error: unknown): DecodedRevert | undefined => {\n const data = extractErrorData(error);\n if (!data || data === '0x') return undefined;\n\n try {\n const decoded = decodeErrorResult({ abi: combinedErrorAbi, data });\n return {\n name: decoded.errorName,\n args: decoded.args ?? [],\n } as DecodedRevert;\n } catch {\n return undefined;\n }\n};\n"],"mappings":";;;;;AAwBA,MAAM,cAAc;AAQb,MAAM,yBAAyB,SAA8B;CAClE,MAAM,6BAAa,IAAI,KAAsB;CAC7C,MAAM,yBAAS,IAAI,KAAoB;CACvC,MAAM,yBAAS,IAAI,KAAY;AAC/B,MAAA,MAAW,OAAO,KAChB,MAAA,MAAW,QAAQ,KAAK;AACtB,MAAI,KAAK,SAAS,QAAS;EAC3B,MAAM,aAAA,GAAA,WAAA,eAA0B,KAAI;EACpC,MAAM,YAAA,GAAA,WAAA,oBAA8B,UAAS;AAC7C,MAAI,WAAW,IAAI,SAAQ,CAAG;AAC9B,aAAW,IAAI,UAAU,KAAI;EAC7B,MAAM,gBAAgB,OAAO,IAAI,KAAK,KAAI;AAC1C,MACE,iBACA,kBAAkB,aAClB,CAAC,OAAO,IAAI,KAAK,KAAI,EACrB;AACA,UAAO,IAAI,KAAK,KAAI;AAEpB,WAAQ,KACN,2CAA2C,KAAK,KAAI,KAAM,cAAa,MAAO,YAChF;aACS,CAAC,cACV,QAAO,IAAI,KAAK,MAAM,UAAS;;AAIrC,QAAO,CAAC,GAAG,WAAW,QAAQ,CAAA;;AAGhC,MAAM,mBAAwB,sBAC5B,OAAO,OAAO,qBAAA,kBAAiB,CACjC;AAEA,MAAM,UAAU,UACd,OAAO,UAAU,YAAY,MAAM,WAAW,KAAI,GAC7C,QACD,KAAA;AAEN,MAAM,oBAAoB,UAAoC;AAC5D,KAAI,OAAO,UAAU,SAAU,QAAO,KAAA;CACtC,MAAM,QAAQ,YAAY,KAAK,MAAK;AACpC,QAAO,QAAS,MAAM,KAAa,KAAA;;AAGrC,MAAM,mBAAmB,SAAmD;CAC1E,MAAM,UAAU,OAAO,KAAK,IAAG;AAC/B,KAAI,QAAS,QAAO;CAEpB,MAAM,SAAS,OAAO,KAAK,KAAI;AAC/B,KAAI,OAAQ,QAAO;AAEnB,KAAI,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,MAAM;EACvD,MAAM,SAAS,OAAQ,KAAK,KAA4B,KAAI;AAC5D,MAAI,OAAQ,QAAO;;AAGrB,QAAO,iBAAiB,KAAK,QAAO,IAAK,iBAAiB,KAAK,aAAY;;AAG7E,MAAM,oBAAoB,UAAoC;CAC5D,IAAI,UAAmB;AACvB,QAAO,OAAO,YAAY,YAAY,YAAY,MAAM;EACtD,MAAM,MAAM,gBAAgB,QAAkC;AAC9D,MAAI,IAAK,QAAO;AAChB,YAAW,QAAoC;;;AAK5C,MAAM,oBAAoB,UAA8C;CAC7E,MAAM,OAAO,iBAAiB,MAAK;AACnC,KAAI,CAAC,QAAQ,SAAS,KAAM,QAAO,KAAA;AAEnC,KAAI;EACF,MAAM,WAAA,GAAA,KAAA,mBAA4B;GAAE,KAAK;GAAkB;GAAM,CAAA;AACjE,SAAO;GACL,MAAM,QAAQ;GACd,MAAM,QAAQ,QAAQ,EAAC;GACzB;SACM;AACN"}
1
+ {"version":3,"file":"decode-revert-data.cjs","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"sourcesContent":["import type {\n AbiParametersToPrimitiveTypes,\n ExtractAbiError,\n ExtractAbiErrorNames,\n} from 'abitype';\nimport { type Abi, type Hex, decodeErrorResult } from 'viem';\nimport { formatAbiItem, toFunctionSelector } from 'viem/utils';\nimport { CONTRACT_BASE_ABI } from '../constants/contract-abi';\n\ntype ContractAbis = (typeof CONTRACT_BASE_ABI)[keyof typeof CONTRACT_BASE_ABI];\n\nexport type ContractErrorName = ExtractAbiErrorNames<ContractAbis>;\n\ntype ArgsOf<Name extends ContractErrorName> = AbiParametersToPrimitiveTypes<\n ExtractAbiError<ContractAbis, Name>['inputs']\n>;\n\n// Discriminated union: narrowing on `name` types the `args` tuple too.\n// `if (e.decodedRevert?.name === 'AccessControlUnauthorizedAccount') {\n// const [account, role] = e.decodedRevert.args; // typed }`\nexport type DecodedRevert = {\n [K in ContractErrorName]: { name: K; args: ArgsOf<K> };\n}[ContractErrorName];\n\n// viem surfaces estimateGas custom-error reverts as a formatted message:\n// \"custom error 0x<selector>: <abi-encoded-args-hex>\"\n// The args trail the selector after \": \" WITHOUT a 0x prefix. Capture both and\n// rejoin so errors WITH args decode — a selector alone fails decodeErrorResult\n// for any error that has inputs (e.g. AccessControlUnauthorizedAccount(address,bytes32)).\n// Arg-less errors and full-data \"reason: 0x...\" strings keep their old value\n// (group 2 simply doesn't match).\nconst HEX_DATA_RE =\n /(?:custom error |reason: )(0x[0-9a-fA-F]+)(?::\\s*([0-9a-fA-F]+))?/;\n\n// Dedup by 4-byte selector, not by name: two ABIs may declare distinct errors\n// that happen to share a name but encode different argument tuples. Dropping\n// by name would silently misdecode one of them. Same-selector duplicates\n// (identical signature in multiple contracts) are still collapsed silently.\n// Name collisions across different selectors emit a single console.warn each\n// so future ABI drift surfaces without breaking decoding.\nexport const buildCombinedErrorAbi = (abis: readonly Abi[]): Abi => {\n const bySelector = new Map<Hex, Abi[number]>();\n const byName = new Map<string, string>();\n const warned = new Set<string>();\n for (const abi of abis) {\n for (const item of abi) {\n if (item.type !== 'error') continue;\n const signature = formatAbiItem(item);\n const selector = toFunctionSelector(signature);\n if (bySelector.has(selector)) continue;\n bySelector.set(selector, item);\n const prevSignature = byName.get(item.name);\n if (\n prevSignature &&\n prevSignature !== signature &&\n !warned.has(item.name)\n ) {\n warned.add(item.name);\n\n console.warn(\n `[csm-sdk] ABI error name collision for \"${item.name}\": ${prevSignature} vs ${signature}`,\n );\n } else if (!prevSignature) {\n byName.set(item.name, signature);\n }\n }\n }\n return [...bySelector.values()] as Abi;\n};\n\nconst combinedErrorAbi: Abi = buildCombinedErrorAbi(\n Object.values(CONTRACT_BASE_ABI),\n);\n\nconst tryHex = (value: unknown): Hex | undefined =>\n typeof value === 'string' && value.startsWith('0x')\n ? (value as Hex)\n : undefined;\n\nconst tryHexFromString = (value: unknown): Hex | undefined => {\n if (typeof value !== 'string') return undefined;\n const match = HEX_DATA_RE.exec(value);\n if (!match) return undefined;\n return `${match[1]}${match[2] ?? ''}` as Hex;\n};\n\nconst extractFromNode = (node: Record<string, unknown>): Hex | undefined => {\n const fromRaw = tryHex(node.raw);\n if (fromRaw) return fromRaw;\n\n const direct = tryHex(node.data);\n if (direct) return direct;\n\n if (typeof node.data === 'object' && node.data !== null) {\n const nested = tryHex((node.data as { data?: unknown }).data);\n if (nested) return nested;\n }\n\n return tryHexFromString(node.details) ?? tryHexFromString(node.shortMessage);\n};\n\nconst extractErrorData = (error: unknown): Hex | undefined => {\n let current: unknown = error;\n while (typeof current === 'object' && current !== null) {\n const hex = extractFromNode(current as Record<string, unknown>);\n if (hex) return hex;\n current = (current as Record<string, unknown>).cause;\n }\n return undefined;\n};\n\nexport const decodeRevertData = (error: unknown): DecodedRevert | undefined => {\n const data = extractErrorData(error);\n if (!data || data === '0x') return undefined;\n\n try {\n const decoded = decodeErrorResult({ abi: combinedErrorAbi, data });\n return {\n name: decoded.errorName,\n args: decoded.args ?? [],\n } as DecodedRevert;\n } catch {\n return undefined;\n }\n};\n"],"mappings":";;;;;AA+BA,MAAM,cACJ;AAQK,MAAM,yBAAyB,SAA8B;CAClE,MAAM,6BAAa,IAAI,KAAsB;CAC7C,MAAM,yBAAS,IAAI,KAAoB;CACvC,MAAM,yBAAS,IAAI,KAAY;AAC/B,MAAA,MAAW,OAAO,KAChB,MAAA,MAAW,QAAQ,KAAK;AACtB,MAAI,KAAK,SAAS,QAAS;EAC3B,MAAM,aAAA,GAAA,WAAA,eAA0B,KAAI;EACpC,MAAM,YAAA,GAAA,WAAA,oBAA8B,UAAS;AAC7C,MAAI,WAAW,IAAI,SAAQ,CAAG;AAC9B,aAAW,IAAI,UAAU,KAAI;EAC7B,MAAM,gBAAgB,OAAO,IAAI,KAAK,KAAI;AAC1C,MACE,iBACA,kBAAkB,aAClB,CAAC,OAAO,IAAI,KAAK,KAAI,EACrB;AACA,UAAO,IAAI,KAAK,KAAI;AAEpB,WAAQ,KACN,2CAA2C,KAAK,KAAI,KAAM,cAAa,MAAO,YAChF;aACS,CAAC,cACV,QAAO,IAAI,KAAK,MAAM,UAAS;;AAIrC,QAAO,CAAC,GAAG,WAAW,QAAQ,CAAA;;AAGhC,MAAM,mBAAwB,sBAC5B,OAAO,OAAO,qBAAA,kBAAiB,CACjC;AAEA,MAAM,UAAU,UACd,OAAO,UAAU,YAAY,MAAM,WAAW,KAAI,GAC7C,QACD,KAAA;AAEN,MAAM,oBAAoB,UAAoC;AAC5D,KAAI,OAAO,UAAU,SAAU,QAAO,KAAA;CACtC,MAAM,QAAQ,YAAY,KAAK,MAAK;AACpC,KAAI,CAAC,MAAO,QAAO,KAAA;AACnB,QAAO,GAAG,MAAM,KAAK,MAAM,MAAM;;AAGnC,MAAM,mBAAmB,SAAmD;CAC1E,MAAM,UAAU,OAAO,KAAK,IAAG;AAC/B,KAAI,QAAS,QAAO;CAEpB,MAAM,SAAS,OAAO,KAAK,KAAI;AAC/B,KAAI,OAAQ,QAAO;AAEnB,KAAI,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,MAAM;EACvD,MAAM,SAAS,OAAQ,KAAK,KAA4B,KAAI;AAC5D,MAAI,OAAQ,QAAO;;AAGrB,QAAO,iBAAiB,KAAK,QAAO,IAAK,iBAAiB,KAAK,aAAY;;AAG7E,MAAM,oBAAoB,UAAoC;CAC5D,IAAI,UAAmB;AACvB,QAAO,OAAO,YAAY,YAAY,YAAY,MAAM;EACtD,MAAM,MAAM,gBAAgB,QAAkC;AAC9D,MAAI,IAAK,QAAO;AAChB,YAAW,QAAoC;;;AAK5C,MAAM,oBAAoB,UAA8C;CAC7E,MAAM,OAAO,iBAAiB,MAAK;AACnC,KAAI,CAAC,QAAQ,SAAS,KAAM,QAAO,KAAA;AAEnC,KAAI;EACF,MAAM,WAAA,GAAA,KAAA,mBAA4B;GAAE,KAAK;GAAkB;GAAM,CAAA;AACjE,SAAO;GACL,MAAM,QAAQ;GACd,MAAM,QAAQ,QAAQ,EAAC;GACzB;SACM;AACN"}
@@ -1 +1 @@
1
- {"version":3,"file":"decode-revert-data.d.cts","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"mappings":";;;;;KASK,YAAA,WAAuB,iBAAA,eAAgC,iBAAA;AAAA,KAEhD,iBAAA,GAAoB,oBAAA,CAAqB,YAAA;AAAA,KAEhD,MAAA,cAAoB,iBAAA,IAAqB,6BAAA,CAC5C,eAAA,CAAgB,YAAA,EAAc,IAAA;AAAA,KAMpB,aAAA,WACJ,iBAAA;EAAsB,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,MAAA,CAAO,CAAA;AAAA,IAClD,iBAAA;AAAA,cAUW,qBAAA,GAAyB,IAAA,WAAe,GAAA,OAAQ,GAAA;AAAA,cAsEhD,gBAAA,GAAoB,KAAA,cAAiB,aAAA"}
1
+ {"version":3,"file":"decode-revert-data.d.cts","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"mappings":";;;;;KASK,YAAA,WAAuB,iBAAA,eAAgC,iBAAA;AAAA,KAEhD,iBAAA,GAAoB,oBAAA,CAAqB,YAAA;AAAA,KAEhD,MAAA,cAAoB,iBAAA,IAAqB,6BAAA,CAC5C,eAAA,CAAgB,YAAA,EAAc,IAAA;AAAA,KAMpB,aAAA,WACJ,iBAAA;EAAsB,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,MAAA,CAAO,CAAA;AAAA,IAClD,iBAAA;AAAA,cAkBW,qBAAA,GAAyB,IAAA,WAAe,GAAA,OAAQ,GAAA;AAAA,cAuEhD,gBAAA,GAAoB,KAAA,cAAiB,aAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"decode-revert-data.d.mts","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"mappings":";;;;;KASK,YAAA,WAAuB,iBAAA,eAAgC,iBAAA;AAAA,KAEhD,iBAAA,GAAoB,oBAAA,CAAqB,YAAA;AAAA,KAEhD,MAAA,cAAoB,iBAAA,IAAqB,6BAAA,CAC5C,eAAA,CAAgB,YAAA,EAAc,IAAA;AAAA,KAMpB,aAAA,WACJ,iBAAA;EAAsB,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,MAAA,CAAO,CAAA;AAAA,IAClD,iBAAA;AAAA,cAUW,qBAAA,GAAyB,IAAA,WAAe,GAAA,OAAQ,GAAA;AAAA,cAsEhD,gBAAA,GAAoB,KAAA,cAAiB,aAAA"}
1
+ {"version":3,"file":"decode-revert-data.d.mts","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"mappings":";;;;;KASK,YAAA,WAAuB,iBAAA,eAAgC,iBAAA;AAAA,KAEhD,iBAAA,GAAoB,oBAAA,CAAqB,YAAA;AAAA,KAEhD,MAAA,cAAoB,iBAAA,IAAqB,6BAAA,CAC5C,eAAA,CAAgB,YAAA,EAAc,IAAA;AAAA,KAMpB,aAAA,WACJ,iBAAA;EAAsB,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,MAAA,CAAO,CAAA;AAAA,IAClD,iBAAA;AAAA,cAkBW,qBAAA,GAAyB,IAAA,WAAe,GAAA,OAAQ,GAAA;AAAA,cAuEhD,gBAAA,GAAoB,KAAA,cAAiB,aAAA"}
@@ -2,7 +2,7 @@ import { CONTRACT_BASE_ABI } from "../constants/contract-abi.mjs";
2
2
  import { decodeErrorResult } from "viem";
3
3
  import { formatAbiItem, toFunctionSelector } from "viem/utils";
4
4
  //#region src/common/utils/decode-revert-data.ts
5
- const HEX_DATA_RE = /(?:custom error |reason: )(0x[0-9a-fA-F]{8,})/;
5
+ const HEX_DATA_RE = /(?:custom error |reason: )(0x[0-9a-fA-F]+)(?::\s*([0-9a-fA-F]+))?/;
6
6
  const buildCombinedErrorAbi = (abis) => {
7
7
  const bySelector = /* @__PURE__ */ new Map();
8
8
  const byName = /* @__PURE__ */ new Map();
@@ -26,7 +26,8 @@ const tryHex = (value) => typeof value === "string" && value.startsWith("0x") ?
26
26
  const tryHexFromString = (value) => {
27
27
  if (typeof value !== "string") return void 0;
28
28
  const match = HEX_DATA_RE.exec(value);
29
- return match ? match[1] : void 0;
29
+ if (!match) return void 0;
30
+ return `${match[1]}${match[2] ?? ""}`;
30
31
  };
31
32
  const extractFromNode = (node) => {
32
33
  const fromRaw = tryHex(node.raw);
@@ -1 +1 @@
1
- {"version":3,"file":"decode-revert-data.mjs","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"sourcesContent":["import type {\n AbiParametersToPrimitiveTypes,\n ExtractAbiError,\n ExtractAbiErrorNames,\n} from 'abitype';\nimport { type Abi, type Hex, decodeErrorResult } from 'viem';\nimport { formatAbiItem, toFunctionSelector } from 'viem/utils';\nimport { CONTRACT_BASE_ABI } from '../constants/contract-abi';\n\ntype ContractAbis = (typeof CONTRACT_BASE_ABI)[keyof typeof CONTRACT_BASE_ABI];\n\nexport type ContractErrorName = ExtractAbiErrorNames<ContractAbis>;\n\ntype ArgsOf<Name extends ContractErrorName> = AbiParametersToPrimitiveTypes<\n ExtractAbiError<ContractAbis, Name>['inputs']\n>;\n\n// Discriminated union: narrowing on `name` types the `args` tuple too.\n// `if (e.decodedRevert?.name === 'AccessControlUnauthorizedAccount') {\n// const [account, role] = e.decodedRevert.args; // typed }`\nexport type DecodedRevert = {\n [K in ContractErrorName]: { name: K; args: ArgsOf<K> };\n}[ContractErrorName];\n\nconst HEX_DATA_RE = /(?:custom error |reason: )(0x[0-9a-fA-F]{8,})/;\n\n// Dedup by 4-byte selector, not by name: two ABIs may declare distinct errors\n// that happen to share a name but encode different argument tuples. Dropping\n// by name would silently misdecode one of them. Same-selector duplicates\n// (identical signature in multiple contracts) are still collapsed silently.\n// Name collisions across different selectors emit a single console.warn each\n// so future ABI drift surfaces without breaking decoding.\nexport const buildCombinedErrorAbi = (abis: readonly Abi[]): Abi => {\n const bySelector = new Map<Hex, Abi[number]>();\n const byName = new Map<string, string>();\n const warned = new Set<string>();\n for (const abi of abis) {\n for (const item of abi) {\n if (item.type !== 'error') continue;\n const signature = formatAbiItem(item);\n const selector = toFunctionSelector(signature);\n if (bySelector.has(selector)) continue;\n bySelector.set(selector, item);\n const prevSignature = byName.get(item.name);\n if (\n prevSignature &&\n prevSignature !== signature &&\n !warned.has(item.name)\n ) {\n warned.add(item.name);\n\n console.warn(\n `[csm-sdk] ABI error name collision for \"${item.name}\": ${prevSignature} vs ${signature}`,\n );\n } else if (!prevSignature) {\n byName.set(item.name, signature);\n }\n }\n }\n return [...bySelector.values()] as Abi;\n};\n\nconst combinedErrorAbi: Abi = buildCombinedErrorAbi(\n Object.values(CONTRACT_BASE_ABI),\n);\n\nconst tryHex = (value: unknown): Hex | undefined =>\n typeof value === 'string' && value.startsWith('0x')\n ? (value as Hex)\n : undefined;\n\nconst tryHexFromString = (value: unknown): Hex | undefined => {\n if (typeof value !== 'string') return undefined;\n const match = HEX_DATA_RE.exec(value);\n return match ? (match[1] as Hex) : undefined;\n};\n\nconst extractFromNode = (node: Record<string, unknown>): Hex | undefined => {\n const fromRaw = tryHex(node.raw);\n if (fromRaw) return fromRaw;\n\n const direct = tryHex(node.data);\n if (direct) return direct;\n\n if (typeof node.data === 'object' && node.data !== null) {\n const nested = tryHex((node.data as { data?: unknown }).data);\n if (nested) return nested;\n }\n\n return tryHexFromString(node.details) ?? tryHexFromString(node.shortMessage);\n};\n\nconst extractErrorData = (error: unknown): Hex | undefined => {\n let current: unknown = error;\n while (typeof current === 'object' && current !== null) {\n const hex = extractFromNode(current as Record<string, unknown>);\n if (hex) return hex;\n current = (current as Record<string, unknown>).cause;\n }\n return undefined;\n};\n\nexport const decodeRevertData = (error: unknown): DecodedRevert | undefined => {\n const data = extractErrorData(error);\n if (!data || data === '0x') return undefined;\n\n try {\n const decoded = decodeErrorResult({ abi: combinedErrorAbi, data });\n return {\n name: decoded.errorName,\n args: decoded.args ?? [],\n } as DecodedRevert;\n } catch {\n return undefined;\n }\n};\n"],"mappings":";;;;AAwBA,MAAM,cAAc;AAQb,MAAM,yBAAyB,SAA8B;CAClE,MAAM,6BAAa,IAAI,KAAsB;CAC7C,MAAM,yBAAS,IAAI,KAAoB;CACvC,MAAM,yBAAS,IAAI,KAAY;AAC/B,MAAA,MAAW,OAAO,KAChB,MAAA,MAAW,QAAQ,KAAK;AACtB,MAAI,KAAK,SAAS,QAAS;EAC3B,MAAM,YAAY,cAAc,KAAI;EACpC,MAAM,WAAW,mBAAmB,UAAS;AAC7C,MAAI,WAAW,IAAI,SAAQ,CAAG;AAC9B,aAAW,IAAI,UAAU,KAAI;EAC7B,MAAM,gBAAgB,OAAO,IAAI,KAAK,KAAI;AAC1C,MACE,iBACA,kBAAkB,aAClB,CAAC,OAAO,IAAI,KAAK,KAAI,EACrB;AACA,UAAO,IAAI,KAAK,KAAI;AAEpB,WAAQ,KACN,2CAA2C,KAAK,KAAI,KAAM,cAAa,MAAO,YAChF;aACS,CAAC,cACV,QAAO,IAAI,KAAK,MAAM,UAAS;;AAIrC,QAAO,CAAC,GAAG,WAAW,QAAQ,CAAA;;AAGhC,MAAM,mBAAwB,sBAC5B,OAAO,OAAO,kBAAiB,CACjC;AAEA,MAAM,UAAU,UACd,OAAO,UAAU,YAAY,MAAM,WAAW,KAAI,GAC7C,QACD,KAAA;AAEN,MAAM,oBAAoB,UAAoC;AAC5D,KAAI,OAAO,UAAU,SAAU,QAAO,KAAA;CACtC,MAAM,QAAQ,YAAY,KAAK,MAAK;AACpC,QAAO,QAAS,MAAM,KAAa,KAAA;;AAGrC,MAAM,mBAAmB,SAAmD;CAC1E,MAAM,UAAU,OAAO,KAAK,IAAG;AAC/B,KAAI,QAAS,QAAO;CAEpB,MAAM,SAAS,OAAO,KAAK,KAAI;AAC/B,KAAI,OAAQ,QAAO;AAEnB,KAAI,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,MAAM;EACvD,MAAM,SAAS,OAAQ,KAAK,KAA4B,KAAI;AAC5D,MAAI,OAAQ,QAAO;;AAGrB,QAAO,iBAAiB,KAAK,QAAO,IAAK,iBAAiB,KAAK,aAAY;;AAG7E,MAAM,oBAAoB,UAAoC;CAC5D,IAAI,UAAmB;AACvB,QAAO,OAAO,YAAY,YAAY,YAAY,MAAM;EACtD,MAAM,MAAM,gBAAgB,QAAkC;AAC9D,MAAI,IAAK,QAAO;AAChB,YAAW,QAAoC;;;AAK5C,MAAM,oBAAoB,UAA8C;CAC7E,MAAM,OAAO,iBAAiB,MAAK;AACnC,KAAI,CAAC,QAAQ,SAAS,KAAM,QAAO,KAAA;AAEnC,KAAI;EACF,MAAM,UAAU,kBAAkB;GAAE,KAAK;GAAkB;GAAM,CAAA;AACjE,SAAO;GACL,MAAM,QAAQ;GACd,MAAM,QAAQ,QAAQ,EAAC;GACzB;SACM;AACN"}
1
+ {"version":3,"file":"decode-revert-data.mjs","names":[],"sources":["../../../src/common/utils/decode-revert-data.ts"],"sourcesContent":["import type {\n AbiParametersToPrimitiveTypes,\n ExtractAbiError,\n ExtractAbiErrorNames,\n} from 'abitype';\nimport { type Abi, type Hex, decodeErrorResult } from 'viem';\nimport { formatAbiItem, toFunctionSelector } from 'viem/utils';\nimport { CONTRACT_BASE_ABI } from '../constants/contract-abi';\n\ntype ContractAbis = (typeof CONTRACT_BASE_ABI)[keyof typeof CONTRACT_BASE_ABI];\n\nexport type ContractErrorName = ExtractAbiErrorNames<ContractAbis>;\n\ntype ArgsOf<Name extends ContractErrorName> = AbiParametersToPrimitiveTypes<\n ExtractAbiError<ContractAbis, Name>['inputs']\n>;\n\n// Discriminated union: narrowing on `name` types the `args` tuple too.\n// `if (e.decodedRevert?.name === 'AccessControlUnauthorizedAccount') {\n// const [account, role] = e.decodedRevert.args; // typed }`\nexport type DecodedRevert = {\n [K in ContractErrorName]: { name: K; args: ArgsOf<K> };\n}[ContractErrorName];\n\n// viem surfaces estimateGas custom-error reverts as a formatted message:\n// \"custom error 0x<selector>: <abi-encoded-args-hex>\"\n// The args trail the selector after \": \" WITHOUT a 0x prefix. Capture both and\n// rejoin so errors WITH args decode — a selector alone fails decodeErrorResult\n// for any error that has inputs (e.g. AccessControlUnauthorizedAccount(address,bytes32)).\n// Arg-less errors and full-data \"reason: 0x...\" strings keep their old value\n// (group 2 simply doesn't match).\nconst HEX_DATA_RE =\n /(?:custom error |reason: )(0x[0-9a-fA-F]+)(?::\\s*([0-9a-fA-F]+))?/;\n\n// Dedup by 4-byte selector, not by name: two ABIs may declare distinct errors\n// that happen to share a name but encode different argument tuples. Dropping\n// by name would silently misdecode one of them. Same-selector duplicates\n// (identical signature in multiple contracts) are still collapsed silently.\n// Name collisions across different selectors emit a single console.warn each\n// so future ABI drift surfaces without breaking decoding.\nexport const buildCombinedErrorAbi = (abis: readonly Abi[]): Abi => {\n const bySelector = new Map<Hex, Abi[number]>();\n const byName = new Map<string, string>();\n const warned = new Set<string>();\n for (const abi of abis) {\n for (const item of abi) {\n if (item.type !== 'error') continue;\n const signature = formatAbiItem(item);\n const selector = toFunctionSelector(signature);\n if (bySelector.has(selector)) continue;\n bySelector.set(selector, item);\n const prevSignature = byName.get(item.name);\n if (\n prevSignature &&\n prevSignature !== signature &&\n !warned.has(item.name)\n ) {\n warned.add(item.name);\n\n console.warn(\n `[csm-sdk] ABI error name collision for \"${item.name}\": ${prevSignature} vs ${signature}`,\n );\n } else if (!prevSignature) {\n byName.set(item.name, signature);\n }\n }\n }\n return [...bySelector.values()] as Abi;\n};\n\nconst combinedErrorAbi: Abi = buildCombinedErrorAbi(\n Object.values(CONTRACT_BASE_ABI),\n);\n\nconst tryHex = (value: unknown): Hex | undefined =>\n typeof value === 'string' && value.startsWith('0x')\n ? (value as Hex)\n : undefined;\n\nconst tryHexFromString = (value: unknown): Hex | undefined => {\n if (typeof value !== 'string') return undefined;\n const match = HEX_DATA_RE.exec(value);\n if (!match) return undefined;\n return `${match[1]}${match[2] ?? ''}` as Hex;\n};\n\nconst extractFromNode = (node: Record<string, unknown>): Hex | undefined => {\n const fromRaw = tryHex(node.raw);\n if (fromRaw) return fromRaw;\n\n const direct = tryHex(node.data);\n if (direct) return direct;\n\n if (typeof node.data === 'object' && node.data !== null) {\n const nested = tryHex((node.data as { data?: unknown }).data);\n if (nested) return nested;\n }\n\n return tryHexFromString(node.details) ?? tryHexFromString(node.shortMessage);\n};\n\nconst extractErrorData = (error: unknown): Hex | undefined => {\n let current: unknown = error;\n while (typeof current === 'object' && current !== null) {\n const hex = extractFromNode(current as Record<string, unknown>);\n if (hex) return hex;\n current = (current as Record<string, unknown>).cause;\n }\n return undefined;\n};\n\nexport const decodeRevertData = (error: unknown): DecodedRevert | undefined => {\n const data = extractErrorData(error);\n if (!data || data === '0x') return undefined;\n\n try {\n const decoded = decodeErrorResult({ abi: combinedErrorAbi, data });\n return {\n name: decoded.errorName,\n args: decoded.args ?? [],\n } as DecodedRevert;\n } catch {\n return undefined;\n }\n};\n"],"mappings":";;;;AA+BA,MAAM,cACJ;AAQK,MAAM,yBAAyB,SAA8B;CAClE,MAAM,6BAAa,IAAI,KAAsB;CAC7C,MAAM,yBAAS,IAAI,KAAoB;CACvC,MAAM,yBAAS,IAAI,KAAY;AAC/B,MAAA,MAAW,OAAO,KAChB,MAAA,MAAW,QAAQ,KAAK;AACtB,MAAI,KAAK,SAAS,QAAS;EAC3B,MAAM,YAAY,cAAc,KAAI;EACpC,MAAM,WAAW,mBAAmB,UAAS;AAC7C,MAAI,WAAW,IAAI,SAAQ,CAAG;AAC9B,aAAW,IAAI,UAAU,KAAI;EAC7B,MAAM,gBAAgB,OAAO,IAAI,KAAK,KAAI;AAC1C,MACE,iBACA,kBAAkB,aAClB,CAAC,OAAO,IAAI,KAAK,KAAI,EACrB;AACA,UAAO,IAAI,KAAK,KAAI;AAEpB,WAAQ,KACN,2CAA2C,KAAK,KAAI,KAAM,cAAa,MAAO,YAChF;aACS,CAAC,cACV,QAAO,IAAI,KAAK,MAAM,UAAS;;AAIrC,QAAO,CAAC,GAAG,WAAW,QAAQ,CAAA;;AAGhC,MAAM,mBAAwB,sBAC5B,OAAO,OAAO,kBAAiB,CACjC;AAEA,MAAM,UAAU,UACd,OAAO,UAAU,YAAY,MAAM,WAAW,KAAI,GAC7C,QACD,KAAA;AAEN,MAAM,oBAAoB,UAAoC;AAC5D,KAAI,OAAO,UAAU,SAAU,QAAO,KAAA;CACtC,MAAM,QAAQ,YAAY,KAAK,MAAK;AACpC,KAAI,CAAC,MAAO,QAAO,KAAA;AACnB,QAAO,GAAG,MAAM,KAAK,MAAM,MAAM;;AAGnC,MAAM,mBAAmB,SAAmD;CAC1E,MAAM,UAAU,OAAO,KAAK,IAAG;AAC/B,KAAI,QAAS,QAAO;CAEpB,MAAM,SAAS,OAAO,KAAK,KAAI;AAC/B,KAAI,OAAQ,QAAO;AAEnB,KAAI,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,MAAM;EACvD,MAAM,SAAS,OAAQ,KAAK,KAA4B,KAAI;AAC5D,MAAI,OAAQ,QAAO;;AAGrB,QAAO,iBAAiB,KAAK,QAAO,IAAK,iBAAiB,KAAK,aAAY;;AAG7E,MAAM,oBAAoB,UAAoC;CAC5D,IAAI,UAAmB;AACvB,QAAO,OAAO,YAAY,YAAY,YAAY,MAAM;EACtD,MAAM,MAAM,gBAAgB,QAAkC;AAC9D,MAAI,IAAK,QAAO;AAChB,YAAW,QAAoC;;;AAK5C,MAAM,oBAAoB,UAA8C;CAC7E,MAAM,OAAO,iBAAiB,MAAK;AACnC,KAAI,CAAC,QAAQ,SAAS,KAAM,QAAO,KAAA;AAEnC,KAAI;EACF,MAAM,UAAU,kBAAkB;GAAE,KAAK;GAAkB;GAAM,CAAA;AACjE,SAAO;GACL,MAAM,QAAQ;GACd,MAAM,QAAQ,QAAQ,EAAC;GACzB;SACM;AACN"}
package/dist/common.cjs CHANGED
@@ -63,6 +63,7 @@ exports.EMPTY_PERMIT = require_permit.EMPTY_PERMIT;
63
63
  exports.ERROR_CODE = require_sdk_error_code.ERROR_CODE;
64
64
  exports.KEY_STATUS = require_keys.KEY_STATUS;
65
65
  exports.MAX_BLOCKS_DEPTH_TWO_WEEKS = require_base.MAX_BLOCKS_DEPTH_TWO_WEEKS;
66
+ exports.MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI = require_base.MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI;
66
67
  exports.MERKLE_TREE_FALLBACKS = require_links.MERKLE_TREE_FALLBACKS;
67
68
  exports.MODULE_CONFIG = require_module_config.MODULE_CONFIG;
68
69
  exports.MODULE_CONTRACT = require_module_name.MODULE_CONTRACT;
package/dist/common.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS } from "./common/constants/base.cjs";
1
+ import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS } from "./common/constants/base.cjs";
2
2
  import { CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT } from "./common/constants/cache-durations.cjs";
3
3
  import { CONTRACT_NAMES, CURATED_GATES, SUPPORTED_CONTRACT_VERSIONS } from "./common/constants/contract-names.cjs";
4
4
  import { MODULE_CONTRACT, MODULE_NAME, PerModule } from "./common/constants/module-name.cjs";
@@ -42,4 +42,4 @@ import { ERROR_CODE } from "./common/utils/sdk-error-code.cjs";
42
42
  import { SDKError, SDKErrorProps, formatDecodedRevert, invariant, invariantArgument, withSDKError } from "./common/utils/sdk-error.cjs";
43
43
  import { classifyError } from "./common/utils/classify-error.cjs";
44
44
  import { CsmSDKModule, CsmSDKProps } from "./common/class-primitives/csm-sdk-module.cjs";
45
- export { API_NAME, API_URLS, AccessCondition, AccessLevel, AddOperatorBaseProps, AddOperatorNormalized, AddressProof, AddressTreeLeaf, BondBalance, CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT, COMMON_ADDRESSES, CONTRACT_BASE_ABI, CONTRACT_NAMES, CURATED_GATES, CanPerformContext, CanPerformResult, ContractErrorName, CsmSDKModule, CsmSDKProps, DEFAULT_CLEAN_MAX_ITEMS, DEFAULT_IPFS_GATEWAYS, DecodedRevert, DepositDataKey, EJECTABLE_EPOCH_COUNT, EJECT_FEE_MIN_LIMIT, EJECT_FEE_MULTIPLIEER, EMPTY_PERMIT, ERROR_CODE, Erc20Tokens, FetchFn, GateEligibility, KEY_STATUS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MERKLE_TREE_FALLBACKS, MODULE_CONFIG, MODULE_CONTRACT, MODULE_NAME, MethodAccess, ModuleConfig, NodeOperator, NodeOperatorId, NodeOperatorInvite, NodeOperatorInviteInfo, NodeOperatorShortInfo, OPERATOR_TYPE, OPERATOR_TYPE_CURVE_ID, PERCENT_BASIS, PUBKEY_LENGTH_BYTES, ParseFn, PerModule, PerSupportedChain, PerToken, PermitSignatureShort, Proof, PublicMethods, ROLES, RewardProof, Rewards, SDKError, SDKErrorProps, SIGNATURE_LENGTH_BYTES, STETH_ROUNDING_THRESHOLD, SUPPORTED_CHAINS, SUPPORTED_CONTRACT_VERSIONS, StandardMerkleTreeData, TOKENS, ValidateFn, WithToken, bigIntRange, buildCombinedErrorAbi, classifyError, clearEmptyAddress, compareLowercase, createMerkleTreeSchema, decodeRevertData, fetchJson, fetchOneOf, fetchTree, fetchWithFallback, findAddressProof, formatDecodedRevert, getCurveIdByOperatorType, getOperatorTypeByCurveId, invariant, invariantArgument, isBigint, isCapabilitySupported, isDefined, isHexadecimalString, isNotUnique, isPropsDefined, isUnique, isValidIpfsCid, normalizeTrimHex, onError, onRevertEmptyList, onVersionError, parseAddOperatorProps, parseClaimProps, parseCuratedModuleNodeOperatorAddedEvents, parseDepositData, parseNodeOperatorAddedEvents, parseTree, parseValue, requestWithBlockStep, resolveAccess, sortByBlockNumber, sortRewardsByRefSlot, splitKeys, toHexString, trimHexPrefix, verifyRoot, withSDKError };
45
+ export { API_NAME, API_URLS, AccessCondition, AccessLevel, AddOperatorBaseProps, AddOperatorNormalized, AddressProof, AddressTreeLeaf, BondBalance, CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT, COMMON_ADDRESSES, CONTRACT_BASE_ABI, CONTRACT_NAMES, CURATED_GATES, CanPerformContext, CanPerformResult, ContractErrorName, CsmSDKModule, CsmSDKProps, DEFAULT_CLEAN_MAX_ITEMS, DEFAULT_IPFS_GATEWAYS, DecodedRevert, DepositDataKey, EJECTABLE_EPOCH_COUNT, EJECT_FEE_MIN_LIMIT, EJECT_FEE_MULTIPLIEER, EMPTY_PERMIT, ERROR_CODE, Erc20Tokens, FetchFn, GateEligibility, KEY_STATUS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, MERKLE_TREE_FALLBACKS, MODULE_CONFIG, MODULE_CONTRACT, MODULE_NAME, MethodAccess, ModuleConfig, NodeOperator, NodeOperatorId, NodeOperatorInvite, NodeOperatorInviteInfo, NodeOperatorShortInfo, OPERATOR_TYPE, OPERATOR_TYPE_CURVE_ID, PERCENT_BASIS, PUBKEY_LENGTH_BYTES, ParseFn, PerModule, PerSupportedChain, PerToken, PermitSignatureShort, Proof, PublicMethods, ROLES, RewardProof, Rewards, SDKError, SDKErrorProps, SIGNATURE_LENGTH_BYTES, STETH_ROUNDING_THRESHOLD, SUPPORTED_CHAINS, SUPPORTED_CONTRACT_VERSIONS, StandardMerkleTreeData, TOKENS, ValidateFn, WithToken, bigIntRange, buildCombinedErrorAbi, classifyError, clearEmptyAddress, compareLowercase, createMerkleTreeSchema, decodeRevertData, fetchJson, fetchOneOf, fetchTree, fetchWithFallback, findAddressProof, formatDecodedRevert, getCurveIdByOperatorType, getOperatorTypeByCurveId, invariant, invariantArgument, isBigint, isCapabilitySupported, isDefined, isHexadecimalString, isNotUnique, isPropsDefined, isUnique, isValidIpfsCid, normalizeTrimHex, onError, onRevertEmptyList, onVersionError, parseAddOperatorProps, parseClaimProps, parseCuratedModuleNodeOperatorAddedEvents, parseDepositData, parseNodeOperatorAddedEvents, parseTree, parseValue, requestWithBlockStep, resolveAccess, sortByBlockNumber, sortRewardsByRefSlot, splitKeys, toHexString, trimHexPrefix, verifyRoot, withSDKError };
package/dist/common.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS } from "./common/constants/base.mjs";
1
+ import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS } from "./common/constants/base.mjs";
2
2
  import { CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT } from "./common/constants/cache-durations.mjs";
3
3
  import { CONTRACT_NAMES, CURATED_GATES, SUPPORTED_CONTRACT_VERSIONS } from "./common/constants/contract-names.mjs";
4
4
  import { MODULE_CONTRACT, MODULE_NAME, PerModule } from "./common/constants/module-name.mjs";
@@ -42,4 +42,4 @@ import { ERROR_CODE } from "./common/utils/sdk-error-code.mjs";
42
42
  import { SDKError, SDKErrorProps, formatDecodedRevert, invariant, invariantArgument, withSDKError } from "./common/utils/sdk-error.mjs";
43
43
  import { classifyError } from "./common/utils/classify-error.mjs";
44
44
  import { CsmSDKModule, CsmSDKProps } from "./common/class-primitives/csm-sdk-module.mjs";
45
- export { API_NAME, API_URLS, AccessCondition, AccessLevel, AddOperatorBaseProps, AddOperatorNormalized, AddressProof, AddressTreeLeaf, BondBalance, CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT, COMMON_ADDRESSES, CONTRACT_BASE_ABI, CONTRACT_NAMES, CURATED_GATES, CanPerformContext, CanPerformResult, ContractErrorName, CsmSDKModule, CsmSDKProps, DEFAULT_CLEAN_MAX_ITEMS, DEFAULT_IPFS_GATEWAYS, DecodedRevert, DepositDataKey, EJECTABLE_EPOCH_COUNT, EJECT_FEE_MIN_LIMIT, EJECT_FEE_MULTIPLIEER, EMPTY_PERMIT, ERROR_CODE, Erc20Tokens, FetchFn, GateEligibility, KEY_STATUS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MERKLE_TREE_FALLBACKS, MODULE_CONFIG, MODULE_CONTRACT, MODULE_NAME, MethodAccess, ModuleConfig, NodeOperator, NodeOperatorId, NodeOperatorInvite, NodeOperatorInviteInfo, NodeOperatorShortInfo, OPERATOR_TYPE, OPERATOR_TYPE_CURVE_ID, PERCENT_BASIS, PUBKEY_LENGTH_BYTES, ParseFn, PerModule, PerSupportedChain, PerToken, PermitSignatureShort, Proof, PublicMethods, ROLES, RewardProof, Rewards, SDKError, SDKErrorProps, SIGNATURE_LENGTH_BYTES, STETH_ROUNDING_THRESHOLD, SUPPORTED_CHAINS, SUPPORTED_CONTRACT_VERSIONS, StandardMerkleTreeData, TOKENS, ValidateFn, WithToken, bigIntRange, buildCombinedErrorAbi, classifyError, clearEmptyAddress, compareLowercase, createMerkleTreeSchema, decodeRevertData, fetchJson, fetchOneOf, fetchTree, fetchWithFallback, findAddressProof, formatDecodedRevert, getCurveIdByOperatorType, getOperatorTypeByCurveId, invariant, invariantArgument, isBigint, isCapabilitySupported, isDefined, isHexadecimalString, isNotUnique, isPropsDefined, isUnique, isValidIpfsCid, normalizeTrimHex, onError, onRevertEmptyList, onVersionError, parseAddOperatorProps, parseClaimProps, parseCuratedModuleNodeOperatorAddedEvents, parseDepositData, parseNodeOperatorAddedEvents, parseTree, parseValue, requestWithBlockStep, resolveAccess, sortByBlockNumber, sortRewardsByRefSlot, splitKeys, toHexString, trimHexPrefix, verifyRoot, withSDKError };
45
+ export { API_NAME, API_URLS, AccessCondition, AccessLevel, AddOperatorBaseProps, AddOperatorNormalized, AddressProof, AddressTreeLeaf, BondBalance, CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT, COMMON_ADDRESSES, CONTRACT_BASE_ABI, CONTRACT_NAMES, CURATED_GATES, CanPerformContext, CanPerformResult, ContractErrorName, CsmSDKModule, CsmSDKProps, DEFAULT_CLEAN_MAX_ITEMS, DEFAULT_IPFS_GATEWAYS, DecodedRevert, DepositDataKey, EJECTABLE_EPOCH_COUNT, EJECT_FEE_MIN_LIMIT, EJECT_FEE_MULTIPLIEER, EMPTY_PERMIT, ERROR_CODE, Erc20Tokens, FetchFn, GateEligibility, KEY_STATUS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, MERKLE_TREE_FALLBACKS, MODULE_CONFIG, MODULE_CONTRACT, MODULE_NAME, MethodAccess, ModuleConfig, NodeOperator, NodeOperatorId, NodeOperatorInvite, NodeOperatorInviteInfo, NodeOperatorShortInfo, OPERATOR_TYPE, OPERATOR_TYPE_CURVE_ID, PERCENT_BASIS, PUBKEY_LENGTH_BYTES, ParseFn, PerModule, PerSupportedChain, PerToken, PermitSignatureShort, Proof, PublicMethods, ROLES, RewardProof, Rewards, SDKError, SDKErrorProps, SIGNATURE_LENGTH_BYTES, STETH_ROUNDING_THRESHOLD, SUPPORTED_CHAINS, SUPPORTED_CONTRACT_VERSIONS, StandardMerkleTreeData, TOKENS, ValidateFn, WithToken, bigIntRange, buildCombinedErrorAbi, classifyError, clearEmptyAddress, compareLowercase, createMerkleTreeSchema, decodeRevertData, fetchJson, fetchOneOf, fetchTree, fetchWithFallback, findAddressProof, formatDecodedRevert, getCurveIdByOperatorType, getOperatorTypeByCurveId, invariant, invariantArgument, isBigint, isCapabilitySupported, isDefined, isHexadecimalString, isNotUnique, isPropsDefined, isUnique, isValidIpfsCid, normalizeTrimHex, onError, onRevertEmptyList, onVersionError, parseAddOperatorProps, parseClaimProps, parseCuratedModuleNodeOperatorAddedEvents, parseDepositData, parseNodeOperatorAddedEvents, parseTree, parseValue, requestWithBlockStep, resolveAccess, sortByBlockNumber, sortRewardsByRefSlot, splitKeys, toHexString, trimHexPrefix, verifyRoot, withSDKError };
package/dist/common.mjs CHANGED
@@ -31,7 +31,7 @@ import { createMerkleTreeSchema } from "./common/utils/create-merkle-tree-schema
31
31
  import { isValidIpfsCid } from "./common/utils/is-valid-ipfs-cid.mjs";
32
32
  import { parseAddOperatorProps } from "./common/utils/parse-add-operator-props.mjs";
33
33
  import { parseClaimProps } from "./common/utils/parse-claim-props.mjs";
34
- import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, PERCENT_BASIS } from "./common/constants/base.mjs";
34
+ import { DEFAULT_CLEAN_MAX_ITEMS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, PERCENT_BASIS } from "./common/constants/base.mjs";
35
35
  import { CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT } from "./common/constants/cache-durations.mjs";
36
36
  import { MODULE_CONTRACT, MODULE_NAME } from "./common/constants/module-name.mjs";
37
37
  import { COMMON_ADDRESSES, MODULE_CONFIG } from "./common/constants/module-config.mjs";
@@ -41,4 +41,4 @@ import { EMPTY_PERMIT } from "./common/constants/permit.mjs";
41
41
  import { ROLES } from "./common/constants/roles.mjs";
42
42
  import { SUPPORTED_CHAINS } from "./common/constants/supported-chains.mjs";
43
43
  import { getCurveIdByOperatorType, getOperatorTypeByCurveId } from "./common/utils/operator-type-utils.mjs";
44
- export { API_NAME, API_URLS, AccessLevel, CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT, COMMON_ADDRESSES, CONTRACT_BASE_ABI, CONTRACT_NAMES, CURATED_GATES, CsmSDKModule, DEFAULT_CLEAN_MAX_ITEMS, DEFAULT_IPFS_GATEWAYS, EJECTABLE_EPOCH_COUNT, EJECT_FEE_MIN_LIMIT, EJECT_FEE_MULTIPLIEER, EMPTY_PERMIT, ERROR_CODE, KEY_STATUS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MERKLE_TREE_FALLBACKS, MODULE_CONFIG, MODULE_CONTRACT, MODULE_NAME, OPERATOR_TYPE, OPERATOR_TYPE_CURVE_ID, PERCENT_BASIS, PUBKEY_LENGTH_BYTES, ROLES, SDKError, SIGNATURE_LENGTH_BYTES, STETH_ROUNDING_THRESHOLD, SUPPORTED_CHAINS, SUPPORTED_CONTRACT_VERSIONS, TOKENS, bigIntRange, buildCombinedErrorAbi, classifyError, clearEmptyAddress, compareLowercase, createMerkleTreeSchema, decodeRevertData, fetchJson, fetchOneOf, fetchTree, fetchWithFallback, findAddressProof, formatDecodedRevert, getCurveIdByOperatorType, getOperatorTypeByCurveId, invariant, invariantArgument, isBigint, isCapabilitySupported, isDefined, isHexadecimalString, isNotUnique, isPropsDefined, isUnique, isValidIpfsCid, normalizeTrimHex, onError, onRevertEmptyList, onVersionError, parseAddOperatorProps, parseClaimProps, parseCuratedModuleNodeOperatorAddedEvents, parseDepositData, parseNodeOperatorAddedEvents, parseTree, parseValue, requestWithBlockStep, resolveAccess, sortByBlockNumber, sortRewardsByRefSlot, splitKeys, toHexString, trimHexPrefix, verifyRoot, withSDKError };
44
+ export { API_NAME, API_URLS, AccessLevel, CACHE_IMMUTABLE, CACHE_LONG, CACHE_MID, CACHE_SHORT, COMMON_ADDRESSES, CONTRACT_BASE_ABI, CONTRACT_NAMES, CURATED_GATES, CsmSDKModule, DEFAULT_CLEAN_MAX_ITEMS, DEFAULT_IPFS_GATEWAYS, EJECTABLE_EPOCH_COUNT, EJECT_FEE_MIN_LIMIT, EJECT_FEE_MULTIPLIEER, EMPTY_PERMIT, ERROR_CODE, KEY_STATUS, MAX_BLOCKS_DEPTH_TWO_WEEKS, MAX_EFFECTIVE_BALANCE_WC_TYPE_01_GWEI, MERKLE_TREE_FALLBACKS, MODULE_CONFIG, MODULE_CONTRACT, MODULE_NAME, OPERATOR_TYPE, OPERATOR_TYPE_CURVE_ID, PERCENT_BASIS, PUBKEY_LENGTH_BYTES, ROLES, SDKError, SIGNATURE_LENGTH_BYTES, STETH_ROUNDING_THRESHOLD, SUPPORTED_CHAINS, SUPPORTED_CONTRACT_VERSIONS, TOKENS, bigIntRange, buildCombinedErrorAbi, classifyError, clearEmptyAddress, compareLowercase, createMerkleTreeSchema, decodeRevertData, fetchJson, fetchOneOf, fetchTree, fetchWithFallback, findAddressProof, formatDecodedRevert, getCurveIdByOperatorType, getOperatorTypeByCurveId, invariant, invariantArgument, isBigint, isCapabilitySupported, isDefined, isHexadecimalString, isNotUnique, isPropsDefined, isUnique, isValidIpfsCid, normalizeTrimHex, onError, onRevertEmptyList, onVersionError, parseAddOperatorProps, parseClaimProps, parseCuratedModuleNodeOperatorAddedEvents, parseDepositData, parseNodeOperatorAddedEvents, parseTree, parseValue, requestWithBlockStep, resolveAccess, sortByBlockNumber, sortRewardsByRefSlot, splitKeys, toHexString, trimHexPrefix, verifyRoot, withSDKError };