@hiero-ledger/sdk 2.73.2 → 2.74.0

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 (120) hide show
  1. package/dist/umd.js +250 -115
  2. package/dist/umd.min.js +3 -3
  3. package/lib/MirrorNode.cjs +46 -0
  4. package/lib/MirrorNode.d.ts +16 -0
  5. package/lib/MirrorNode.js +1 -1
  6. package/lib/MirrorNode.js.map +1 -1
  7. package/lib/account/AccountAllowanceApproveTransaction.cjs +11 -5
  8. package/lib/account/AccountAllowanceApproveTransaction.d.ts +4 -5
  9. package/lib/account/AccountAllowanceApproveTransaction.js +1 -1
  10. package/lib/account/AccountAllowanceApproveTransaction.js.map +1 -1
  11. package/lib/account/TokenAllowance.cjs +4 -2
  12. package/lib/account/TokenAllowance.d.ts +4 -2
  13. package/lib/account/TokenAllowance.js +1 -1
  14. package/lib/account/TokenAllowance.js.map +1 -1
  15. package/lib/account/TokenTransferMap.cjs +7 -2
  16. package/lib/account/TokenTransferMap.d.ts +6 -2
  17. package/lib/account/TokenTransferMap.js +1 -1
  18. package/lib/account/TokenTransferMap.js.map +1 -1
  19. package/lib/client/Client.cjs +13 -44
  20. package/lib/client/Client.d.ts +12 -12
  21. package/lib/client/Client.js +1 -1
  22. package/lib/client/Client.js.map +1 -1
  23. package/lib/client/MirrorNetwork.cjs +16 -0
  24. package/lib/client/MirrorNetwork.d.ts +7 -0
  25. package/lib/client/MirrorNetwork.js +1 -1
  26. package/lib/client/MirrorNetwork.js.map +1 -1
  27. package/lib/client/addressbooks/mainnet.cjs +1 -1
  28. package/lib/client/addressbooks/mainnet.d.ts +1 -1
  29. package/lib/client/addressbooks/mainnet.js +1 -1
  30. package/lib/client/addressbooks/mainnet.js.map +1 -1
  31. package/lib/client/addressbooks/previewnet.cjs +1 -1
  32. package/lib/client/addressbooks/previewnet.d.ts +1 -1
  33. package/lib/client/addressbooks/previewnet.js +1 -1
  34. package/lib/client/addressbooks/previewnet.js.map +1 -1
  35. package/lib/client/addressbooks/testnet.cjs +1 -1
  36. package/lib/client/addressbooks/testnet.d.ts +1 -1
  37. package/lib/client/addressbooks/testnet.js +1 -1
  38. package/lib/client/addressbooks/testnet.js.map +1 -1
  39. package/lib/constants/ClientConstants.cjs +4 -1
  40. package/lib/constants/ClientConstants.d.ts +2 -0
  41. package/lib/constants/ClientConstants.js +1 -1
  42. package/lib/constants/ClientConstants.js.map +1 -1
  43. package/lib/contract/ContractId.cjs +2 -5
  44. package/lib/contract/ContractId.js +1 -1
  45. package/lib/contract/ContractId.js.map +1 -1
  46. package/lib/query/MirrorNodeContractQuery.cjs +2 -1
  47. package/lib/query/MirrorNodeContractQuery.js.map +1 -1
  48. package/lib/token/AbstractTokenTransferTransaction.cjs +12 -8
  49. package/lib/token/AbstractTokenTransferTransaction.d.ts +14 -11
  50. package/lib/token/AbstractTokenTransferTransaction.js +1 -1
  51. package/lib/token/AbstractTokenTransferTransaction.js.map +1 -1
  52. package/lib/token/AssessedCustomFee.cjs +8 -4
  53. package/lib/token/AssessedCustomFee.d.ts +8 -5
  54. package/lib/token/AssessedCustomFee.js +1 -1
  55. package/lib/token/AssessedCustomFee.js.map +1 -1
  56. package/lib/token/CustomFixedFee.cjs +8 -4
  57. package/lib/token/CustomFixedFee.d.ts +8 -5
  58. package/lib/token/CustomFixedFee.js +1 -1
  59. package/lib/token/CustomFixedFee.js.map +1 -1
  60. package/lib/token/PendingAirdropRecord.cjs +7 -2
  61. package/lib/token/PendingAirdropRecord.d.ts +6 -2
  62. package/lib/token/PendingAirdropRecord.js +1 -1
  63. package/lib/token/PendingAirdropRecord.js.map +1 -1
  64. package/lib/token/TokenAirdropTransaction.cjs +2 -1
  65. package/lib/token/TokenAirdropTransaction.d.ts +4 -2
  66. package/lib/token/TokenAirdropTransaction.js.map +1 -1
  67. package/lib/token/TokenBurnTransaction.cjs +5 -3
  68. package/lib/token/TokenBurnTransaction.d.ts +6 -4
  69. package/lib/token/TokenBurnTransaction.js +1 -1
  70. package/lib/token/TokenBurnTransaction.js.map +1 -1
  71. package/lib/token/TokenCreateTransaction.cjs +7 -6
  72. package/lib/token/TokenCreateTransaction.d.ts +8 -8
  73. package/lib/token/TokenCreateTransaction.js +1 -1
  74. package/lib/token/TokenCreateTransaction.js.map +1 -1
  75. package/lib/token/TokenMintTransaction.cjs +5 -4
  76. package/lib/token/TokenMintTransaction.d.ts +6 -5
  77. package/lib/token/TokenMintTransaction.js +1 -1
  78. package/lib/token/TokenMintTransaction.js.map +1 -1
  79. package/lib/token/TokenTransfer.cjs +3 -2
  80. package/lib/token/TokenTransfer.d.ts +2 -2
  81. package/lib/token/TokenTransfer.js +1 -1
  82. package/lib/token/TokenTransfer.js.map +1 -1
  83. package/lib/token/TokenWipeTransaction.cjs +5 -3
  84. package/lib/token/TokenWipeTransaction.d.ts +6 -4
  85. package/lib/token/TokenWipeTransaction.js +1 -1
  86. package/lib/token/TokenWipeTransaction.js.map +1 -1
  87. package/lib/transaction/Transaction.cjs +54 -0
  88. package/lib/transaction/Transaction.d.ts +10 -0
  89. package/lib/transaction/Transaction.js +1 -1
  90. package/lib/transaction/Transaction.js.map +1 -1
  91. package/lib/util.cjs +25 -0
  92. package/lib/util.d.ts +8 -0
  93. package/lib/util.js +1 -1
  94. package/lib/util.js.map +1 -1
  95. package/lib/version.js +1 -1
  96. package/package.json +12 -8
  97. package/src/MirrorNode.js +49 -0
  98. package/src/account/AccountAllowanceApproveTransaction.js +11 -11
  99. package/src/account/TokenAllowance.js +5 -2
  100. package/src/account/TokenTransferMap.js +7 -2
  101. package/src/client/Client.js +13 -51
  102. package/src/client/MirrorNetwork.js +18 -0
  103. package/src/client/addressbooks/mainnet.js +1 -1
  104. package/src/client/addressbooks/previewnet.js +1 -1
  105. package/src/client/addressbooks/testnet.js +1 -1
  106. package/src/constants/ClientConstants.js +3 -0
  107. package/src/contract/ContractId.js +2 -10
  108. package/src/query/MirrorNodeContractQuery.js +2 -1
  109. package/src/token/AbstractTokenTransferTransaction.js +12 -8
  110. package/src/token/AssessedCustomFee.js +8 -5
  111. package/src/token/CustomFixedFee.js +8 -5
  112. package/src/token/PendingAirdropRecord.js +7 -2
  113. package/src/token/TokenAirdropTransaction.js +2 -1
  114. package/src/token/TokenBurnTransaction.js +5 -3
  115. package/src/token/TokenCreateTransaction.js +7 -9
  116. package/src/token/TokenMintTransaction.js +5 -4
  117. package/src/token/TokenTransfer.js +3 -2
  118. package/src/token/TokenWipeTransaction.js +5 -3
  119. package/src/transaction/Transaction.js +63 -0
  120. package/src/util.js +26 -0
package/lib/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sources":["../src/util.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport BigNumber from \"bignumber.js\";\nimport Long from \"long\";\n\n/**\n * @typedef {import(\"./Hbar.js\").default} Hbar\n */\n\n/**\n * Utility Error Messages\n */\nexport const REQUIRE_NON_NULL_ERROR = \"This value cannot be null | undefined.\";\nexport const REQUIRE_STRING_ERROR = \"This value must be a string.\";\nexport const REQUIRE_UINT8ARRAY_ERROR = \"This value must be a Uint8Array.\";\nexport const REQUIRE_STRING_OR_UINT8ARRAY_ERROR =\n \"This value must be a string or Uint8Array.\";\nexport const REQUIRE_NUMBER_ERROR = \"This value must be a Number.\";\nexport const REQUIRE_BIGNUMBER_ERROR = \"This value must be a BigNumber.\";\nexport const REQUIRE_ARRAY_ERROR = \"The provided variable must be an Array.\";\nexport const REQUIRE_LONG_ERROR = \"This value must be a Long.\";\n\nexport const REQUIRE_TYPE_ERROR =\n \"The provided variables are not matching types.\";\n\nexport const FUNCTION_CONVERT_TO_BIGNUMBER_ERROR =\n \"This value must be a String, Number, or BigNumber to be converted.\";\nexport const FUNCTION_CONVERT_TO_NUMBER_ERROR =\n \"This value must be a String, Number, or BigNumber to be converted.\";\nexport const FUNCTION_CONVERT_TO_NUMBER_PARSE_ERROR =\n \"Unable to parse given variable. Returns NaN.\";\n\n//Soft Checks\n\n/**\n * Takes any param and returns false if null or undefined.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isNonNull(variable) {\n return variable != null;\n}\n\n/**\n * Takes any param and returns true if param variable and type are the same.\n *\n * @param {any | null | undefined} variable\n * @param {any | null | undefined} type\n * @returns {boolean}\n */\nexport function isType(variable, type) {\n return typeof variable == typeof type;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isUint8Array(variable) {\n return isNonNull(variable) && variable instanceof Uint8Array;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type Number.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isNumber(variable) {\n return (\n isNonNull(variable) &&\n (typeof variable == \"number\" || variable instanceof Number)\n );\n}\n\n/**\n * Takes any param and returns true if param is not null and of type BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isBigNumber(variable) {\n return isNonNull(variable) && variable instanceof BigNumber;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isLong(variable) {\n return isNonNull(variable) && variable instanceof Long;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type string.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isString(variable) {\n return isNonNull(variable) && typeof variable == \"string\";\n}\n\n/**\n * Takes any param and returns true if param is not null and type string or Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isStringOrUint8Array(variable) {\n return (\n isNonNull(variable) && (isString(variable) || isUint8Array(variable))\n );\n}\n\n/**\n * Takes an address as `Uint8Array` and returns whether or not this is a long-zero address\n *\n * @param {Uint8Array} address\n * @returns {boolean}\n */\nexport function isLongZeroAddress(address) {\n for (let i = 0; i < 12; i++) {\n if (address[i] != 0) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Takes any param and returns false if null or undefined.\n *\n * @template {Long | Hbar} T\n * @param {T} variable\n * @returns {T}\n */\nexport function requireNotNegative(variable) {\n if (variable.isNegative()) {\n throw new Error(\"negative value not allowed\");\n }\n\n return variable;\n}\n\n/**\n * Takes any param and throws custom error if null or undefined.\n *\n * @param {any} variable\n * @returns {object}\n */\nexport function requireNonNull(variable) {\n if (!isNonNull(variable)) {\n throw new Error(REQUIRE_NON_NULL_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return variable;\n }\n}\n\n/**\n * Takes any param and throws custom error if params are not same type.\n *\n * @param {any | null | undefined} variable\n * @param {any | null | undefined} type\n * @returns {object}\n */\nexport function requireType(variable, type) {\n if (!isType(variable, type)) {\n throw new Error(REQUIRE_TYPE_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return variable;\n }\n}\n\n/**\n * Takes any param and throws custom error if non BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {BigNumber}\n */\nexport function requireBigNumber(variable) {\n if (!isBigNumber(requireNonNull(variable))) {\n throw new Error(REQUIRE_BIGNUMBER_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {BigNumber} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {Long}\n */\nexport function requireLong(variable) {\n if (!isLong(requireNonNull(variable))) {\n throw new Error(REQUIRE_LONG_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {Long} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non string.\n *\n * @param {any | null | undefined} variable\n * @returns {string}\n */\nexport function requireString(variable) {\n if (!isString(requireNonNull(variable))) {\n throw new Error(REQUIRE_STRING_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {string} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {Uint8Array}\n */\nexport function requireUint8Array(variable) {\n if (!isUint8Array(requireNonNull(variable))) {\n throw new Error(REQUIRE_UINT8ARRAY_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {Uint8Array} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {number}\n */\nexport function requireNumber(variable) {\n if (!isNumber(requireNonNull(variable))) {\n throw new Error(REQUIRE_NUMBER_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {number} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if null or undefined and not a string or Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {string | Uint8Array}\n */\nexport function requireStringOrUint8Array(variable) {\n if (isStringOrUint8Array(requireNonNull(variable))) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {string | Uint8Array} */ (variable);\n } else {\n throw new Error(REQUIRE_STRING_OR_UINT8ARRAY_ERROR);\n }\n}\n\n//Conversions\n\n/**\n * Converts number or string to BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {BigNumber}\n */\nexport function convertToBigNumber(variable) {\n requireNonNull(variable);\n if (\n isBigNumber(variable) ||\n isString(variable) ||\n isNumber(variable) ||\n isLong(variable)\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new BigNumber(variable);\n }\n throw new Error(FUNCTION_CONVERT_TO_BIGNUMBER_ERROR);\n}\n\n/**\n * Converts Array of Numbers or Strings to Array of BigNumbers.\n *\n * @param {any | null | undefined} variable\n * @returns {Array<BigNumber>}\n */\nexport function convertToBigNumberArray(variable) {\n if (variable instanceof Array) {\n return /** @type {Array<BigNumber>} */ (\n variable.map(convertToBigNumber)\n );\n } else {\n throw new Error(REQUIRE_ARRAY_ERROR);\n }\n}\n\n/**\n * @param {*} variable\n * @returns {number}\n */\nexport function convertToNumber(variable) {\n requireNonNull(variable);\n if (\n isBigNumber(variable) ||\n isString(variable) ||\n isNumber(variable) ||\n isLong(variable)\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const num = parseInt(variable);\n if (isNaN(num)) {\n throw new Error(FUNCTION_CONVERT_TO_NUMBER_PARSE_ERROR);\n } else {\n return num;\n }\n } else {\n throw new Error(FUNCTION_CONVERT_TO_NUMBER_ERROR);\n }\n}\n\n/**\n * Creates a DataView on top of an Uint8Array that could be or not be pooled, ensuring that we don't get out of bounds.\n *\n * @param {Uint8Array | Int8Array} arr\n * @param {number | undefined} offset\n * @param {number | undefined} length\n * @returns {DataView}\n */\nexport function safeView(arr, offset = 0, length = arr.byteLength) {\n if (!(Number.isInteger(offset) && offset >= 0))\n throw new Error(\"Invalid offset!\");\n if (!(Number.isInteger(length) && length >= 0))\n throw new Error(\"Invalid length!\");\n return new DataView(\n arr.buffer,\n arr.byteOffset + offset,\n Math.min(length, arr.byteLength - offset),\n );\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {Set<string>=} ignore\n * @returns {boolean}\n */\nexport function compare(a, b, ignore = new Set()) {\n if (typeof a === \"object\" && typeof b === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const aKeys = Object.keys(a);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n for (let i = 0; i < aKeys.length; i++) {\n if (aKeys[i] !== bKeys[i]) {\n return false;\n }\n\n if (ignore.has(aKeys[i])) {\n continue;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!compare(a[aKeys[i]], b[bKeys[i]], ignore)) {\n return false;\n }\n }\n\n return true;\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a === b;\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n return a === b;\n } else if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n return a === b;\n } else {\n return false;\n }\n}\n\n/**\n * https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array\n *\n * @template T\n * @param {Array<T>} array\n */\nexport function shuffle(array) {\n var currentIndex = array.length,\n temporaryValue,\n randomIndex;\n\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n}\n\n/**\n * @param {Uint8Array} array1\n * @param {Uint8Array} array2\n * @returns {boolean}\n */\nexport function arrayEqual(array1, array2) {\n if (array1 === array2) {\n return true;\n }\n\n if (array1.byteLength !== array2.byteLength) {\n return false;\n }\n\n const view1 = new DataView(\n array1.buffer,\n array1.byteOffset,\n array1.byteLength,\n );\n const view2 = new DataView(\n array2.buffer,\n array2.byteOffset,\n array2.byteLength,\n );\n\n let i = array1.byteLength;\n\n while (i--) {\n if (view1.getUint8(i) !== view2.getUint8(i)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * @description Function that delays an execution for a given time (in milliseconds)\n * @param {number} ms\n * @returns {Promise<void>}\n */\nexport function wait(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Converts a SCREAMING_SNAKE_CASE string to PascalCase\n * @param {string} name - The string to convert\n * @returns {string} The converted PascalCase string\n */\nexport function screamingSnakeToPascalCase(name) {\n const words = name.toLowerCase().split(\"_\");\n let result = \"\";\n for (let i = 0; i < words.length; i++) {\n result += words[i].charAt(0).toUpperCase() + words[i].slice(1);\n }\n return result;\n}\n"],"names":["REQUIRE_NON_NULL_ERROR","REQUIRE_STRING_OR_UINT8ARRAY_ERROR","REQUIRE_ARRAY_ERROR","FUNCTION_CONVERT_TO_BIGNUMBER_ERROR","FUNCTION_CONVERT_TO_NUMBER_ERROR","FUNCTION_CONVERT_TO_NUMBER_PARSE_ERROR","isNonNull","variable","isUint8Array","Uint8Array","isNumber","Number","isBigNumber","BigNumber","isLong","Long","isString","isStringOrUint8Array","isLongZeroAddress","address","i","requireNotNegative","isNegative","Error","requireNonNull","requireStringOrUint8Array","convertToBigNumber","convertToBigNumberArray","Array","map","convertToNumber","num","parseInt","isNaN","safeView","arr","offset","length","byteLength","isInteger","DataView","buffer","byteOffset","Math","min","compare","a","b","ignore","Set","aKeys","Object","keys","bKeys","has","shuffle","array","temporaryValue","randomIndex","currentIndex","floor","random","arrayEqual","array1","array2","view1","view2","getUint8","wait","ms","Promise","resolve","setTimeout"],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sources":["../src/util.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport BigNumber from \"bignumber.js\";\nimport Long from \"long\";\n\n/**\n * @typedef {import(\"./Hbar.js\").default} Hbar\n */\n\n/**\n * Utility Error Messages\n */\nexport const REQUIRE_NON_NULL_ERROR = \"This value cannot be null | undefined.\";\nexport const REQUIRE_STRING_ERROR = \"This value must be a string.\";\nexport const REQUIRE_UINT8ARRAY_ERROR = \"This value must be a Uint8Array.\";\nexport const REQUIRE_STRING_OR_UINT8ARRAY_ERROR =\n \"This value must be a string or Uint8Array.\";\nexport const REQUIRE_NUMBER_ERROR = \"This value must be a Number.\";\nexport const REQUIRE_BIGNUMBER_ERROR = \"This value must be a BigNumber.\";\nexport const REQUIRE_ARRAY_ERROR = \"The provided variable must be an Array.\";\nexport const REQUIRE_LONG_ERROR = \"This value must be a Long.\";\n\nexport const REQUIRE_TYPE_ERROR =\n \"The provided variables are not matching types.\";\n\nexport const FUNCTION_CONVERT_TO_BIGNUMBER_ERROR =\n \"This value must be a String, Number, or BigNumber to be converted.\";\nexport const FUNCTION_CONVERT_TO_NUMBER_ERROR =\n \"This value must be a String, Number, or BigNumber to be converted.\";\nexport const FUNCTION_CONVERT_TO_NUMBER_PARSE_ERROR =\n \"Unable to parse given variable. Returns NaN.\";\n\n//Soft Checks\n\n/**\n * Takes any param and returns false if null or undefined.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isNonNull(variable) {\n return variable != null;\n}\n\n/**\n * Takes any param and returns true if param variable and type are the same.\n *\n * @param {any | null | undefined} variable\n * @param {any | null | undefined} type\n * @returns {boolean}\n */\nexport function isType(variable, type) {\n return typeof variable == typeof type;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isUint8Array(variable) {\n return isNonNull(variable) && variable instanceof Uint8Array;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type Number.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isNumber(variable) {\n return (\n isNonNull(variable) &&\n (typeof variable == \"number\" || variable instanceof Number)\n );\n}\n\n/**\n * Takes any param and returns true if param is not null and of type BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isBigNumber(variable) {\n return isNonNull(variable) && variable instanceof BigNumber;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isLong(variable) {\n return isNonNull(variable) && variable instanceof Long;\n}\n\n/**\n * Takes any param and returns true if param is not null and of type string.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isString(variable) {\n return isNonNull(variable) && typeof variable == \"string\";\n}\n\n/**\n * Takes any param and returns true if param is not null and type string or Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {boolean}\n */\nexport function isStringOrUint8Array(variable) {\n return (\n isNonNull(variable) && (isString(variable) || isUint8Array(variable))\n );\n}\n\n/**\n * Takes an address as `Uint8Array` and returns whether or not this is a long-zero address\n *\n * @param {Uint8Array} address\n * @returns {boolean}\n */\nexport function isLongZeroAddress(address) {\n for (let i = 0; i < 12; i++) {\n if (address[i] != 0) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Takes any param and returns false if null or undefined.\n *\n * @template {Long | Hbar} T\n * @param {T} variable\n * @returns {T}\n */\nexport function requireNotNegative(variable) {\n if (variable.isNegative()) {\n throw new Error(\"negative value not allowed\");\n }\n\n return variable;\n}\n\n/**\n * Takes any param and throws custom error if null or undefined.\n *\n * @param {any} variable\n * @returns {object}\n */\nexport function requireNonNull(variable) {\n if (!isNonNull(variable)) {\n throw new Error(REQUIRE_NON_NULL_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return variable;\n }\n}\n\n/**\n * Takes any param and throws custom error if params are not same type.\n *\n * @param {any | null | undefined} variable\n * @param {any | null | undefined} type\n * @returns {object}\n */\nexport function requireType(variable, type) {\n if (!isType(variable, type)) {\n throw new Error(REQUIRE_TYPE_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return variable;\n }\n}\n\n/**\n * Takes any param and throws custom error if non BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {BigNumber}\n */\nexport function requireBigNumber(variable) {\n if (!isBigNumber(requireNonNull(variable))) {\n throw new Error(REQUIRE_BIGNUMBER_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {BigNumber} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {Long}\n */\nexport function requireLong(variable) {\n if (!isLong(requireNonNull(variable))) {\n throw new Error(REQUIRE_LONG_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {Long} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non string.\n *\n * @param {any | null | undefined} variable\n * @returns {string}\n */\nexport function requireString(variable) {\n if (!isString(requireNonNull(variable))) {\n throw new Error(REQUIRE_STRING_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {string} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {Uint8Array}\n */\nexport function requireUint8Array(variable) {\n if (!isUint8Array(requireNonNull(variable))) {\n throw new Error(REQUIRE_UINT8ARRAY_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {Uint8Array} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if non Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {number}\n */\nexport function requireNumber(variable) {\n if (!isNumber(requireNonNull(variable))) {\n throw new Error(REQUIRE_NUMBER_ERROR);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {number} */ (variable);\n }\n}\n\n/**\n * Takes any param and throws custom error if null or undefined and not a string or Uint8Array.\n *\n * @param {any | null | undefined} variable\n * @returns {string | Uint8Array}\n */\nexport function requireStringOrUint8Array(variable) {\n if (isStringOrUint8Array(requireNonNull(variable))) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return /** @type {string | Uint8Array} */ (variable);\n } else {\n throw new Error(REQUIRE_STRING_OR_UINT8ARRAY_ERROR);\n }\n}\n\n//Conversions\n\n/**\n * Converts number or string to BigNumber.\n *\n * @param {any | null | undefined} variable\n * @returns {BigNumber}\n */\nexport function convertToBigNumber(variable) {\n requireNonNull(variable);\n if (\n isBigNumber(variable) ||\n isString(variable) ||\n isNumber(variable) ||\n isLong(variable)\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new BigNumber(variable);\n }\n throw new Error(FUNCTION_CONVERT_TO_BIGNUMBER_ERROR);\n}\n\n/**\n * Converts amount (number, Long, BigNumber, or bigint) to Long.\n * This utility ensures consistent amount handling across the SDK.\n *\n * @param {number | Long | BigNumber | bigint} amount\n * @returns {Long}\n */\nexport function convertAmountToLong(amount) {\n requireNonNull(amount);\n\n // Preserve exact original behavior for existing types\n if (Long.isLong(amount)) {\n return amount;\n } else if (typeof amount === \"number\") {\n return Long.fromNumber(amount);\n } else if (BigNumber.isBigNumber(amount)) {\n return Long.fromValue(\n amount.integerValue(BigNumber.ROUND_DOWN).toString(),\n );\n } else if (typeof amount === \"bigint\") {\n return Long.fromValue(amount.toString());\n } else {\n // Handle other types that can be converted to string\n return Long.fromValue(String(amount));\n }\n}\n/**\n * Converts Array of Numbers or Strings to Array of BigNumbers.\n *\n * @param {any | null | undefined} variable\n * @returns {Array<BigNumber>}\n */\nexport function convertToBigNumberArray(variable) {\n if (variable instanceof Array) {\n return /** @type {Array<BigNumber>} */ (\n variable.map(convertToBigNumber)\n );\n } else {\n throw new Error(REQUIRE_ARRAY_ERROR);\n }\n}\n\n/**\n * @param {*} variable\n * @returns {number}\n */\nexport function convertToNumber(variable) {\n requireNonNull(variable);\n if (\n isBigNumber(variable) ||\n isString(variable) ||\n isNumber(variable) ||\n isLong(variable)\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const num = parseInt(variable);\n if (isNaN(num)) {\n throw new Error(FUNCTION_CONVERT_TO_NUMBER_PARSE_ERROR);\n } else {\n return num;\n }\n } else {\n throw new Error(FUNCTION_CONVERT_TO_NUMBER_ERROR);\n }\n}\n\n/**\n * Creates a DataView on top of an Uint8Array that could be or not be pooled, ensuring that we don't get out of bounds.\n *\n * @param {Uint8Array | Int8Array} arr\n * @param {number | undefined} offset\n * @param {number | undefined} length\n * @returns {DataView}\n */\nexport function safeView(arr, offset = 0, length = arr.byteLength) {\n if (!(Number.isInteger(offset) && offset >= 0))\n throw new Error(\"Invalid offset!\");\n if (!(Number.isInteger(length) && length >= 0))\n throw new Error(\"Invalid length!\");\n return new DataView(\n arr.buffer,\n arr.byteOffset + offset,\n Math.min(length, arr.byteLength - offset),\n );\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {Set<string>=} ignore\n * @returns {boolean}\n */\nexport function compare(a, b, ignore = new Set()) {\n if (typeof a === \"object\" && typeof b === \"object\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const aKeys = Object.keys(a);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n for (let i = 0; i < aKeys.length; i++) {\n if (aKeys[i] !== bKeys[i]) {\n return false;\n }\n\n if (ignore.has(aKeys[i])) {\n continue;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!compare(a[aKeys[i]], b[bKeys[i]], ignore)) {\n return false;\n }\n }\n\n return true;\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a === b;\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n return a === b;\n } else if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n return a === b;\n } else {\n return false;\n }\n}\n\n/**\n * https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array\n *\n * @template T\n * @param {Array<T>} array\n */\nexport function shuffle(array) {\n var currentIndex = array.length,\n temporaryValue,\n randomIndex;\n\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n}\n\n/**\n * @param {Uint8Array} array1\n * @param {Uint8Array} array2\n * @returns {boolean}\n */\nexport function arrayEqual(array1, array2) {\n if (array1 === array2) {\n return true;\n }\n\n if (array1.byteLength !== array2.byteLength) {\n return false;\n }\n\n const view1 = new DataView(\n array1.buffer,\n array1.byteOffset,\n array1.byteLength,\n );\n const view2 = new DataView(\n array2.buffer,\n array2.byteOffset,\n array2.byteLength,\n );\n\n let i = array1.byteLength;\n\n while (i--) {\n if (view1.getUint8(i) !== view2.getUint8(i)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * @description Function that delays an execution for a given time (in milliseconds)\n * @param {number} ms\n * @returns {Promise<void>}\n */\nexport function wait(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Converts a SCREAMING_SNAKE_CASE string to PascalCase\n * @param {string} name - The string to convert\n * @returns {string} The converted PascalCase string\n */\nexport function screamingSnakeToPascalCase(name) {\n const words = name.toLowerCase().split(\"_\");\n let result = \"\";\n for (let i = 0; i < words.length; i++) {\n result += words[i].charAt(0).toUpperCase() + words[i].slice(1);\n }\n return result;\n}\n"],"names":["REQUIRE_NON_NULL_ERROR","REQUIRE_STRING_OR_UINT8ARRAY_ERROR","REQUIRE_ARRAY_ERROR","FUNCTION_CONVERT_TO_BIGNUMBER_ERROR","FUNCTION_CONVERT_TO_NUMBER_ERROR","FUNCTION_CONVERT_TO_NUMBER_PARSE_ERROR","isNonNull","variable","isUint8Array","Uint8Array","isNumber","Number","isBigNumber","BigNumber","isLong","Long","isString","isStringOrUint8Array","isLongZeroAddress","address","i","requireNotNegative","isNegative","Error","requireNonNull","requireStringOrUint8Array","convertToBigNumber","convertAmountToLong","amount","fromNumber","fromValue","integerValue","ROUND_DOWN","toString","String","convertToBigNumberArray","Array","map","convertToNumber","num","parseInt","isNaN","safeView","arr","offset","length","byteLength","isInteger","DataView","buffer","byteOffset","Math","min","compare","a","b","ignore","Set","aKeys","Object","keys","bKeys","has","shuffle","array","temporaryValue","randomIndex","currentIndex","floor","random","arrayEqual","array1","array2","view1","view2","getUint8","wait","ms","Promise","resolve","setTimeout"],"mappings":"gDAYY,MAACA,EAAyB,yCAGzBC,EACT,6CAGSC,EAAsB,0CAMtBC,EACT,qEACSC,EACT,qEACSC,EACT,+CAUG,SAASC,EAAUC,GACtB,OAAmB,MAAZA,CACX,CAmBO,SAASC,EAAaD,GACzB,OAAOD,EAAUC,IAAaA,aAAoBE,UACtD,CAQO,SAASC,EAASH,GACrB,OACID,EAAUC,KACU,iBAAZA,GAAwBA,aAAoBI,OAE5D,CAQO,SAASC,EAAYL,GACxB,OAAOD,EAAUC,IAAaA,aAAoBM,CACtD,CAQO,SAASC,EAAOP,GACnB,OAAOD,EAAUC,IAAaA,aAAoBQ,CACtD,CAQO,SAASC,EAAST,GACrB,OAAOD,EAAUC,IAAgC,iBAAZA,CACzC,CAQO,SAASU,EAAqBV,GACjC,OACID,EAAUC,KAAcS,EAAST,IAAaC,EAAaD,GAEnE,CAQO,SAASW,EAAkBC,GAC9B,IAAK,IAAIC,EAAI,EAAGA,EAAI,GAAIA,IACpB,GAAkB,GAAdD,EAAQC,GACR,OAAO,EAGf,OAAO,CACX,CASO,SAASC,EAAmBd,GAC/B,GAAIA,EAASe,aACT,MAAM,IAAIC,MAAM,8BAGpB,OAAOhB,CACX,CAQO,SAASiB,EAAejB,GAC3B,GAAKD,EAAUC,GAIX,OAAOA,EAHP,MAAM,IAAIgB,MAAMvB,EAKxB,CAmGO,SAASyB,EAA0BlB,GACtC,GAAIU,EAAqBO,EAAejB,IAEpC,SAEA,MAAM,IAAIgB,MAAMtB,EAExB,CAUO,SAASyB,EAAmBnB,GAE/B,GADAiB,EAAejB,GAEXK,EAAYL,IACZS,EAAST,IACTG,EAASH,IACTO,EAAOP,GAGP,OAAO,IAAIM,EAAUN,GAEzB,MAAM,IAAIgB,MAAMpB,EACpB,CASO,SAASwB,EAAoBC,GAIhC,OAHAJ,EAAeI,GAGXb,EAAKD,OAAOc,GACLA,EACkB,iBAAXA,EACPb,EAAKc,WAAWD,GAChBf,EAAUD,YAAYgB,GACtBb,EAAKe,UACRF,EAAOG,aAAalB,EAAUmB,YAAYC,YAErB,iBAAXL,EACPb,EAAKe,UAAUF,EAAOK,YAGtBlB,EAAKe,UAAUI,OAAON,GAErC,CAOO,SAASO,EAAwB5B,GACpC,GAAIA,aAAoB6B,MACpB,OACI7B,EAAS8B,IAAIX,GAGjB,MAAM,IAAIH,MAAMrB,EAExB,CAMO,SAASoC,EAAgB/B,GAE5B,GADAiB,EAAejB,GAEXK,EAAYL,IACZS,EAAST,IACTG,EAASH,IACTO,EAAOP,GACT,CAEE,MAAMgC,EAAMC,SAASjC,GACrB,GAAIkC,MAAMF,GACN,MAAM,IAAIhB,MAAMlB,GAEhB,OAAOkC,CAEnB,CACQ,MAAM,IAAIhB,MAAMnB,EAExB,CAUO,SAASsC,EAASC,EAAKC,EAAS,EAAGC,EAASF,EAAIG,YACnD,KAAMnC,OAAOoC,UAAUH,IAAWA,GAAU,GACxC,MAAM,IAAIrB,MAAM,mBACpB,KAAMZ,OAAOoC,UAAUF,IAAWA,GAAU,GACxC,MAAM,IAAItB,MAAM,mBACpB,OAAO,IAAIyB,SACPL,EAAIM,OACJN,EAAIO,WAAaN,EACjBO,KAAKC,IAAIP,EAAQF,EAAIG,WAAaF,GAE1C,CAQO,SAASS,EAAQC,EAAGC,EAAGC,EAAS,IAAIC,KACvC,GAAiB,iBAANH,GAA+B,iBAANC,EAAgB,CAEhD,MAAMG,EAAQC,OAAOC,KAAKN,GAEpBO,EAAQF,OAAOC,KAAKL,GAE1B,GAAIG,EAAMb,SAAWgB,EAAMhB,OACvB,OAAO,EAGX,IAAK,IAAIzB,EAAI,EAAGA,EAAIsC,EAAMb,OAAQzB,IAAK,CACnC,GAAIsC,EAAMtC,KAAOyC,EAAMzC,GACnB,OAAO,EAGX,IAAIoC,EAAOM,IAAIJ,EAAMtC,MAKhBiC,EAAQC,EAAEI,EAAMtC,IAAKmC,EAAEM,EAAMzC,IAAKoC,GACnC,OAAO,CAEvB,CAEQ,OAAO,CACV,CAAM,OAAiB,iBAANF,GAA+B,iBAANC,GAEnB,iBAAND,GAA+B,iBAANC,GAEnB,kBAAND,GAAgC,kBAANC,IAHjCD,IAAMC,CAQrB,CAQO,SAASQ,EAAQC,GAMpB,IALA,IACIC,EACAC,EAFAC,EAAeH,EAAMnB,OAKlB,IAAMsB,GAETD,EAAcf,KAAKiB,MAAMjB,KAAKkB,SAAWF,GAIzCF,EAAiBD,EAHjBG,GAAgB,GAIhBH,EAAMG,GAAgBH,EAAME,GAC5BF,EAAME,GAAeD,CAE7B,CAOO,SAASK,EAAWC,EAAQC,GAC/B,GAAID,IAAWC,EACX,OAAO,EAGX,GAAID,EAAOzB,aAAe0B,EAAO1B,WAC7B,OAAO,EAGX,MAAM2B,EAAQ,IAAIzB,SACduB,EAAOtB,OACPsB,EAAOrB,WACPqB,EAAOzB,YAEL4B,EAAQ,IAAI1B,SACdwB,EAAOvB,OACPuB,EAAOtB,WACPsB,EAAO1B,YAGX,IAAI1B,EAAImD,EAAOzB,WAEf,KAAO1B,KACH,GAAIqD,EAAME,SAASvD,KAAOsD,EAAMC,SAASvD,GACrC,OAAO,EAIf,OAAO,CACX,CAOO,SAASwD,EAAKC,GACjB,OAAO,IAAIC,QAASC,GAAYC,WAAWD,EAASF,GACxD"}
package/lib/version.js CHANGED
@@ -1,2 +1,2 @@
1
- const o="hiero-sdk-js",s="2.73.2";export{o as SDK_NAME,s as SDK_VERSION};
1
+ const o="hiero-sdk-js",s="2.74.0";export{o as SDK_NAME,s as SDK_VERSION};
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,15 +1,18 @@
1
1
  {
2
2
  "name": "@hiero-ledger/sdk",
3
- "version": "2.73.2",
3
+ "version": "2.74.0",
4
4
  "description": "Hiero SDK",
5
5
  "types": "./lib/index.d.ts",
6
6
  "main": "./lib/index.cjs",
7
7
  "module": "./src/index.js",
8
8
  "react-native": {
9
- "./lib/index.cjs": "./src/native.js",
10
- "./src/encoding/hex.js": "./src/encoding/hex.native.js",
11
- "./src/encoding/utf8.js": "./src/encoding/utf8.native.js",
12
- "./src/cryptography/sha384.js": "./src/cryptography/sha384.native.js"
9
+ "./lib/index.cjs": "./lib/native.js",
10
+ "./lib/encoding/hex.js": "./lib/encoding/hex.native.cjs",
11
+ "./lib/encoding/hex.cjs": "./lib/encoding/hex.native.cjs",
12
+ "./lib/encoding/utf8.js": "./lib/encoding/utf8.native.cjs",
13
+ "./lib/encoding/utf8.cjs": "./lib/encoding/utf8.native.cjs",
14
+ "./lib/cryptography/sha384.js": "./lib/cryptography/sha384.native.cjs",
15
+ "./lib/cryptography/sha384.cjs": "./lib/cryptography/sha384.native.cjs"
13
16
  },
14
17
  "browser": {
15
18
  "./lib/index.js": "./lib/browser.js",
@@ -22,6 +25,7 @@
22
25
  "exports": {
23
26
  "./package.json": "./package.json",
24
27
  ".": {
28
+ "react-native": "./lib/native.js",
25
29
  "types": "./lib/index.d.ts",
26
30
  "import": "./lib/index.js",
27
31
  "require": "./lib/index.cjs"
@@ -61,7 +65,7 @@
61
65
  "@ethersproject/bytes": "5.8.0",
62
66
  "@ethersproject/rlp": "5.8.0",
63
67
  "@grpc/grpc-js": "1.12.6",
64
- "@hashgraph/cryptography": "1.11.0",
68
+ "@hashgraph/cryptography": "1.12.0",
65
69
  "@hashgraph/proto": "2.23.0",
66
70
  "ansi-regex": "6.2.2",
67
71
  "ansi-styles": "6.2.3",
@@ -106,7 +110,7 @@
106
110
  "babel-plugin-dynamic-import-node": "2.3.3",
107
111
  "babel-plugin-module-rewrite": "0.2.0",
108
112
  "c8": "10.1.3",
109
- "chromedriver": "138.0.0",
113
+ "chromedriver": "140.0.4",
110
114
  "codecov": "3.8.3",
111
115
  "dotenv": "17.0.1",
112
116
  "dpdm": "3.11.0",
@@ -118,7 +122,7 @@
118
122
  "eslint-plugin-jsdoc": "54.1.1",
119
123
  "eslint-plugin-n": "17.16.1",
120
124
  "eslint-plugin-vitest": "0.3.25",
121
- "geckodriver": "5.0.0",
125
+ "geckodriver": "6.0.1",
122
126
  "jsdom": "26.0.0",
123
127
  "msw": "2.10.2",
124
128
  "npm-run-all": "4.1.5",
package/src/MirrorNode.js CHANGED
@@ -38,4 +38,53 @@ export default class MirrorNode extends ManagedNode {
38
38
  getKey() {
39
39
  return this._address.toString();
40
40
  }
41
+
42
+ /**
43
+ * Gets the base URL for this mirror node's REST API.
44
+ *
45
+ * @returns {string} The base URL for the mirror node REST API
46
+ * @throws {Error} When the mirror node has invalid address configuration
47
+ */
48
+ get mirrorRestApiBaseUrl() {
49
+ const host = this.address.address;
50
+ const port = this.address.port;
51
+
52
+ if (!host || !port) {
53
+ throw new Error("Mirror node has invalid address configuration");
54
+ }
55
+
56
+ // For localhost/127.0.0.1, mirror node gRPC and REST API use different ports
57
+ // gRPC typically uses port 5600, but REST API uses port 5551
58
+ // Note: Contract calls may use port 8545 (handled separately in MirrorNodeContractQuery)
59
+ if (host === "localhost" || host === "127.0.0.1") {
60
+ return `http://${host}:5551/api/v1`;
61
+ }
62
+
63
+ const scheme = this._getSchemeFromHostAndPort(host, port);
64
+
65
+ return `${scheme}://${host}:${port}/api/v1`;
66
+ }
67
+
68
+ /**
69
+ * Determines the appropriate scheme (http/https) based on the host and port.
70
+ *
71
+ * @private
72
+ * @param {string} host - The host address
73
+ * @param {number} port - The port number
74
+ * @returns {string} - The scheme ('http' or 'https')
75
+ */
76
+ _getSchemeFromHostAndPort(host, port) {
77
+ // For localhost and 127.0.0.1, use HTTP scheme
78
+ if (host === "localhost" || host === "127.0.0.1") {
79
+ return "http";
80
+ }
81
+
82
+ // Standard HTTP ports
83
+ if (port === 80) {
84
+ return "http";
85
+ }
86
+
87
+ // For other ports, assume HTTPS for security
88
+ return "https";
89
+ }
41
90
  }
@@ -7,11 +7,11 @@ import AccountId from "./AccountId.js";
7
7
  import ContractId from "../contract/ContractId.js";
8
8
  import TokenId from "../token/TokenId.js";
9
9
  import NftId from "../token/NftId.js";
10
- import Long from "long";
11
10
  import Hbar from "../Hbar.js";
12
11
  import HbarAllowance from "./HbarAllowance.js";
13
12
  import TokenAllowance from "./TokenAllowance.js";
14
13
  import TokenNftAllowance from "./TokenNftAllowance.js";
14
+ import { convertAmountToLong } from "../util.js";
15
15
 
16
16
  /**
17
17
  * @namespace proto
@@ -192,12 +192,15 @@ export default class AccountAllowanceApproveTransaction extends Transaction {
192
192
  * @param {TokenId | string} tokenId
193
193
  * @param {AccountId | string} ownerAccountId
194
194
  * @param {AccountId | ContractId | string} spenderAccountId
195
- * @param {Long | number} amount
195
+ * @param {Long | number | BigNumber | bigint} amount
196
196
  * @returns {AccountAllowanceApproveTransaction}
197
197
  */
198
198
  approveTokenAllowance(tokenId, ownerAccountId, spenderAccountId, amount) {
199
199
  this._requireNotFrozen();
200
200
 
201
+ // Convert amount to Long
202
+ const amountLong = convertAmountToLong(amount);
203
+
201
204
  this._tokenApprovals.push(
202
205
  new TokenAllowance({
203
206
  tokenId:
@@ -224,10 +227,7 @@ export default class AccountAllowanceApproveTransaction extends Transaction {
224
227
  ownerAccountId.toEvmAddress(),
225
228
  )
226
229
  : ownerAccountId,
227
- amount:
228
- typeof amount === "number"
229
- ? Long.fromNumber(amount)
230
- : amount,
230
+ amount: amountLong,
231
231
  }),
232
232
  );
233
233
 
@@ -238,12 +238,15 @@ export default class AccountAllowanceApproveTransaction extends Transaction {
238
238
  * @deprecated - Use `approveTokenAllowance()` instead
239
239
  * @param {TokenId | string} tokenId
240
240
  * @param {AccountId | string} spenderAccountId
241
- * @param {Long | number} amount
241
+ * @param {Long | number | BigNumber | bigint} amount
242
242
  * @returns {AccountAllowanceApproveTransaction}
243
243
  */
244
244
  addTokenAllowance(tokenId, spenderAccountId, amount) {
245
245
  this._requireNotFrozen();
246
246
 
247
+ // Convert amount to Long
248
+ const amountLong = convertAmountToLong(amount);
249
+
247
250
  this._tokenApprovals.push(
248
251
  new TokenAllowance({
249
252
  tokenId:
@@ -254,10 +257,7 @@ export default class AccountAllowanceApproveTransaction extends Transaction {
254
257
  typeof spenderAccountId === "string"
255
258
  ? AccountId.fromString(spenderAccountId)
256
259
  : spenderAccountId,
257
- amount:
258
- typeof amount === "number"
259
- ? Long.fromNumber(amount)
260
- : amount,
260
+ amount: amountLong,
261
261
  ownerAccountId: null,
262
262
  }),
263
263
  );
@@ -3,6 +3,7 @@
3
3
  import TokenId from "../token/TokenId.js";
4
4
  import AccountId from "./AccountId.js";
5
5
  import Long from "long";
6
+ import { convertAmountToLong } from "../util.js";
6
7
 
7
8
  /**
8
9
  * @namespace proto
@@ -14,6 +15,7 @@ import Long from "long";
14
15
 
15
16
  /**
16
17
  * @typedef {import("../client/Client.js").default<*, *>} Client
18
+ * @typedef {import("bignumber.js").default} BigNumber
17
19
  */
18
20
 
19
21
  /**
@@ -30,7 +32,7 @@ export default class TokenAllowance {
30
32
  * @param {TokenId} props.tokenId
31
33
  * @param {AccountId | null} props.spenderAccountId
32
34
  * @param {AccountId | null} props.ownerAccountId
33
- * @param {Long | null} props.amount
35
+ * @param {Long | number | BigNumber | bigint | null} props.amount
34
36
  */
35
37
  constructor(props) {
36
38
  /**
@@ -61,7 +63,8 @@ export default class TokenAllowance {
61
63
  *
62
64
  * @readonly
63
65
  */
64
- this.amount = props.amount;
66
+ this.amount =
67
+ props.amount != null ? convertAmountToLong(props.amount) : null;
65
68
 
66
69
  Object.freeze(this);
67
70
  }
@@ -4,6 +4,7 @@ import TokenId from "../token/TokenId.js";
4
4
  import AccountId from "../account/AccountId.js";
5
5
  import TokenTransferAccountMap from "./TokenTransferAccountMap.js";
6
6
  import ObjectMap from "../ObjectMap.js";
7
+ import { convertAmountToLong } from "../util.js";
7
8
 
8
9
  /**
9
10
  * @namespace proto
@@ -13,6 +14,10 @@ import ObjectMap from "../ObjectMap.js";
13
14
  * @typedef {import("@hashgraph/proto").proto.IAccountID} HieroProto.proto.IAccountID
14
15
  */
15
16
 
17
+ /**
18
+ * @typedef {import("bignumber.js").default} BigNumber
19
+ */
20
+
16
21
  /**
17
22
  * @augments {ObjectMap<TokenId, TokenTransferAccountMap>}
18
23
  */
@@ -25,7 +30,7 @@ export default class TokenTransferMap extends ObjectMap {
25
30
  * @internal
26
31
  * @param {TokenId} tokenId
27
32
  * @param {AccountId} accountId
28
- * @param {Long} amount
33
+ * @param {Long | number | BigNumber | bigint} amount
29
34
  */
30
35
  __set(tokenId, accountId, amount) {
31
36
  const token = tokenId.toString();
@@ -37,7 +42,7 @@ export default class TokenTransferMap extends ObjectMap {
37
42
  this.__map.set(tokenId, _map);
38
43
  }
39
44
 
40
- _map._set(accountId, amount);
45
+ _map._set(accountId, convertAmountToLong(amount));
41
46
  }
42
47
 
43
48
  /**
@@ -272,26 +272,7 @@ export default class Client {
272
272
  * @throws {Error} When no mirror network is configured or available
273
273
  */
274
274
  get mirrorRestApiBaseUrl() {
275
- try {
276
- const mirrorNode = this._mirrorNetwork.getNextMirrorNode();
277
- const host = mirrorNode.address.address;
278
- const port = mirrorNode.address.port;
279
-
280
- if (!host || !port) {
281
- throw new Error(
282
- "Mirror node has invalid address configuration",
283
- );
284
- }
285
-
286
- const scheme = this._getSchemeFromHostAndPort(host, port);
287
-
288
- return `${scheme}://${host}:${port}/api/v1`;
289
- } catch (error) {
290
- // Re-throw with a more descriptive error message
291
- throw new Error(
292
- "Client has no mirror network configured or no healthy mirror nodes are available",
293
- );
294
- }
275
+ return this._mirrorNetwork.mirrorRestApiBaseUrl;
295
276
  }
296
277
 
297
278
  /**
@@ -562,15 +543,24 @@ export default class Client {
562
543
  }
563
544
 
564
545
  /**
565
- * @returns {number}
546
+ * Gets the maximum number of nodes that a transaction or query will attempt to execute against.
547
+ *
548
+ * @returns {number} The current maximum nodes per transaction setting.
549
+ * Returns -1 if no limit is set (uses network defaults).
566
550
  */
567
551
  get maxNodesPerTransaction() {
568
552
  return this._network.maxNodesPerTransaction;
569
553
  }
570
554
 
571
555
  /**
572
- * @param {number} maxNodesPerTransaction
573
- * @returns {this}
556
+ * Sets the maximum number of nodes that a transaction or query will execute against.
557
+ *
558
+ * - **Before freezing**: Limits automatic node selection when no explicit nodes are set
559
+ * - **After freezing**: Trims frozen transactions to the first N nodes while preserving signatures
560
+ * - **Special values**: 0 disables limiting, values > available nodes cause no trimming
561
+ *
562
+ * @param {number} maxNodesPerTransaction - Maximum nodes per transaction. Set to 0 to disable.
563
+ * @returns {this} The client instance for method chaining
574
564
  */
575
565
  setMaxNodesPerTransaction(maxNodesPerTransaction) {
576
566
  this._network.setMaxNodesPerTransaction(maxNodesPerTransaction);
@@ -832,34 +822,6 @@ export default class Client {
832
822
  }, this._networkUpdatePeriod);
833
823
  }
834
824
 
835
- /**
836
- * Determines the appropriate scheme (http/https) based on the host and port.
837
- *
838
- * @private
839
- * @param {string} host - The host address
840
- * @param {number} port - The port number
841
- * @returns {string} - The scheme ('http' or 'https')
842
- */
843
- _getSchemeFromHostAndPort(host, port) {
844
- // For localhost and 127.0.0.1, use HTTP scheme
845
- if (host === "localhost" || host === "127.0.0.1") {
846
- return "http";
847
- }
848
-
849
- // Standard HTTPS ports
850
- if (port === 443) {
851
- return "https";
852
- }
853
-
854
- // Standard HTTP ports
855
- if (port === 80) {
856
- return "http";
857
- }
858
-
859
- // For other ports, assume HTTPS for security
860
- return "https";
861
- }
862
-
863
825
  /**
864
826
  * @returns {boolean}
865
827
  */
@@ -84,4 +84,22 @@ export default class MirrorNetwork extends ManagedNetwork {
84
84
  getNextMirrorNode() {
85
85
  return this._getNumberOfMostHealthyNodes(1)[0];
86
86
  }
87
+
88
+ /**
89
+ * Gets the base URL for the mirror node REST API.
90
+ *
91
+ * @returns {string} The base URL for the mirror node REST API
92
+ * @throws {Error} When no mirror network is configured or available
93
+ */
94
+ get mirrorRestApiBaseUrl() {
95
+ try {
96
+ const mirrorNode = this.getNextMirrorNode();
97
+ return mirrorNode.mirrorRestApiBaseUrl;
98
+ } catch (error) {
99
+ // Re-throw with a more descriptive error message
100
+ throw new Error(
101
+ "Client has no mirror network configured or no healthy mirror nodes are available",
102
+ );
103
+ }
104
+ }
87
105
  }