@hiero-ledger/sdk 2.73.1 → 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 (125) hide show
  1. package/dist/umd.js +279 -96
  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/AccountId.cjs +4 -4
  12. package/lib/account/AccountId.js +1 -1
  13. package/lib/account/AccountId.js.map +1 -1
  14. package/lib/account/TokenAllowance.cjs +4 -2
  15. package/lib/account/TokenAllowance.d.ts +4 -2
  16. package/lib/account/TokenAllowance.js +1 -1
  17. package/lib/account/TokenAllowance.js.map +1 -1
  18. package/lib/account/TokenTransferMap.cjs +7 -2
  19. package/lib/account/TokenTransferMap.d.ts +6 -2
  20. package/lib/account/TokenTransferMap.js +1 -1
  21. package/lib/account/TokenTransferMap.js.map +1 -1
  22. package/lib/client/Client.cjs +20 -3
  23. package/lib/client/Client.d.ts +17 -3
  24. package/lib/client/Client.js +1 -1
  25. package/lib/client/Client.js.map +1 -1
  26. package/lib/client/MirrorNetwork.cjs +16 -0
  27. package/lib/client/MirrorNetwork.d.ts +7 -0
  28. package/lib/client/MirrorNetwork.js +1 -1
  29. package/lib/client/MirrorNetwork.js.map +1 -1
  30. package/lib/client/addressbooks/mainnet.cjs +1 -1
  31. package/lib/client/addressbooks/mainnet.d.ts +1 -1
  32. package/lib/client/addressbooks/mainnet.js +1 -1
  33. package/lib/client/addressbooks/mainnet.js.map +1 -1
  34. package/lib/client/addressbooks/previewnet.cjs +1 -1
  35. package/lib/client/addressbooks/previewnet.d.ts +1 -1
  36. package/lib/client/addressbooks/previewnet.js +1 -1
  37. package/lib/client/addressbooks/previewnet.js.map +1 -1
  38. package/lib/client/addressbooks/testnet.cjs +1 -1
  39. package/lib/client/addressbooks/testnet.d.ts +1 -1
  40. package/lib/client/addressbooks/testnet.js +1 -1
  41. package/lib/client/addressbooks/testnet.js.map +1 -1
  42. package/lib/constants/ClientConstants.cjs +4 -1
  43. package/lib/constants/ClientConstants.d.ts +2 -0
  44. package/lib/constants/ClientConstants.js +1 -1
  45. package/lib/constants/ClientConstants.js.map +1 -1
  46. package/lib/contract/ContractId.cjs +2 -5
  47. package/lib/contract/ContractId.js +1 -1
  48. package/lib/contract/ContractId.js.map +1 -1
  49. package/lib/query/MirrorNodeContractQuery.cjs +16 -9
  50. package/lib/query/MirrorNodeContractQuery.js +1 -1
  51. package/lib/query/MirrorNodeContractQuery.js.map +1 -1
  52. package/lib/token/AbstractTokenTransferTransaction.cjs +12 -8
  53. package/lib/token/AbstractTokenTransferTransaction.d.ts +14 -11
  54. package/lib/token/AbstractTokenTransferTransaction.js +1 -1
  55. package/lib/token/AbstractTokenTransferTransaction.js.map +1 -1
  56. package/lib/token/AssessedCustomFee.cjs +8 -4
  57. package/lib/token/AssessedCustomFee.d.ts +8 -5
  58. package/lib/token/AssessedCustomFee.js +1 -1
  59. package/lib/token/AssessedCustomFee.js.map +1 -1
  60. package/lib/token/CustomFixedFee.cjs +8 -4
  61. package/lib/token/CustomFixedFee.d.ts +8 -5
  62. package/lib/token/CustomFixedFee.js +1 -1
  63. package/lib/token/CustomFixedFee.js.map +1 -1
  64. package/lib/token/PendingAirdropRecord.cjs +7 -2
  65. package/lib/token/PendingAirdropRecord.d.ts +6 -2
  66. package/lib/token/PendingAirdropRecord.js +1 -1
  67. package/lib/token/PendingAirdropRecord.js.map +1 -1
  68. package/lib/token/TokenAirdropTransaction.cjs +2 -1
  69. package/lib/token/TokenAirdropTransaction.d.ts +4 -2
  70. package/lib/token/TokenAirdropTransaction.js.map +1 -1
  71. package/lib/token/TokenBurnTransaction.cjs +5 -3
  72. package/lib/token/TokenBurnTransaction.d.ts +6 -4
  73. package/lib/token/TokenBurnTransaction.js +1 -1
  74. package/lib/token/TokenBurnTransaction.js.map +1 -1
  75. package/lib/token/TokenCreateTransaction.cjs +7 -6
  76. package/lib/token/TokenCreateTransaction.d.ts +8 -8
  77. package/lib/token/TokenCreateTransaction.js +1 -1
  78. package/lib/token/TokenCreateTransaction.js.map +1 -1
  79. package/lib/token/TokenMintTransaction.cjs +5 -4
  80. package/lib/token/TokenMintTransaction.d.ts +6 -5
  81. package/lib/token/TokenMintTransaction.js +1 -1
  82. package/lib/token/TokenMintTransaction.js.map +1 -1
  83. package/lib/token/TokenTransfer.cjs +3 -2
  84. package/lib/token/TokenTransfer.d.ts +2 -2
  85. package/lib/token/TokenTransfer.js +1 -1
  86. package/lib/token/TokenTransfer.js.map +1 -1
  87. package/lib/token/TokenWipeTransaction.cjs +5 -3
  88. package/lib/token/TokenWipeTransaction.d.ts +6 -4
  89. package/lib/token/TokenWipeTransaction.js +1 -1
  90. package/lib/token/TokenWipeTransaction.js.map +1 -1
  91. package/lib/transaction/Transaction.cjs +54 -0
  92. package/lib/transaction/Transaction.d.ts +10 -0
  93. package/lib/transaction/Transaction.js +1 -1
  94. package/lib/transaction/Transaction.js.map +1 -1
  95. package/lib/util.cjs +25 -0
  96. package/lib/util.d.ts +8 -0
  97. package/lib/util.js +1 -1
  98. package/lib/util.js.map +1 -1
  99. package/lib/version.js +1 -1
  100. package/package.json +12 -8
  101. package/src/MirrorNode.js +49 -0
  102. package/src/account/AccountAllowanceApproveTransaction.js +11 -11
  103. package/src/account/AccountId.js +6 -10
  104. package/src/account/TokenAllowance.js +5 -2
  105. package/src/account/TokenTransferMap.js +7 -2
  106. package/src/client/Client.js +20 -3
  107. package/src/client/MirrorNetwork.js +18 -0
  108. package/src/client/addressbooks/mainnet.js +1 -1
  109. package/src/client/addressbooks/previewnet.js +1 -1
  110. package/src/client/addressbooks/testnet.js +1 -1
  111. package/src/constants/ClientConstants.js +3 -0
  112. package/src/contract/ContractId.js +2 -10
  113. package/src/query/MirrorNodeContractQuery.js +17 -19
  114. package/src/token/AbstractTokenTransferTransaction.js +12 -8
  115. package/src/token/AssessedCustomFee.js +8 -5
  116. package/src/token/CustomFixedFee.js +8 -5
  117. package/src/token/PendingAirdropRecord.js +7 -2
  118. package/src/token/TokenAirdropTransaction.js +2 -1
  119. package/src/token/TokenBurnTransaction.js +5 -3
  120. package/src/token/TokenCreateTransaction.js +7 -9
  121. package/src/token/TokenMintTransaction.js +5 -4
  122. package/src/token/TokenTransfer.js +3 -2
  123. package/src/token/TokenWipeTransaction.js +5 -3
  124. package/src/transaction/Transaction.js +63 -0
  125. package/src/util.js +26 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TokenAllowance.js","sources":["../../src/account/TokenAllowance.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport TokenId from \"../token/TokenId.js\";\nimport AccountId from \"./AccountId.js\";\nimport Long from \"long\";\n\n/**\n * @namespace proto\n * @typedef {import(\"@hashgraph/proto\").proto.IGrantedTokenAllowance} HieroProto.proto.IGrantedTokenAllowance\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenAllowance} HieroProto.proto.ITokenAllowance\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenID} HieroProto.proto.ITokenID\n * @typedef {import(\"@hashgraph/proto\").proto.IAccountID} HieroProto.proto.IAccountID\n */\n\n/**\n * @typedef {import(\"../client/Client.js\").default<*, *>} Client\n */\n\n/**\n * Represents a token allowance granted to a spender account by an owner account.\n *\n * The `TokenAllowance` class manages the permissions for one account to spend a specified\n * amount of tokens on behalf of another account. It includes details about the token, the\n * spender, the owner, and the amount allowed.\n */\nexport default class TokenAllowance {\n /**\n * @internal\n * @param {object} props\n * @param {TokenId} props.tokenId\n * @param {AccountId | null} props.spenderAccountId\n * @param {AccountId | null} props.ownerAccountId\n * @param {Long | null} props.amount\n */\n constructor(props) {\n /**\n * The token that the allowance pertains to.\n *\n * @readonly\n */\n this.tokenId = props.tokenId;\n\n /**\n * The account ID of the spender of the hbar allowance.\n *\n * @readonly\n */\n this.spenderAccountId = props.spenderAccountId;\n\n /**\n * The account ID of the owner of the hbar allowance.\n *\n * @readonly\n */\n this.ownerAccountId = props.ownerAccountId;\n\n /**\n * The current balance of the spender's token allowance.\n * **NOTE**: If `null`, the spender has access to all of the account owner's NFT instances\n * (currently owned and any in the future).\n *\n * @readonly\n */\n this.amount = props.amount;\n\n Object.freeze(this);\n }\n\n /**\n * @internal\n * @param {HieroProto.proto.ITokenAllowance} allowance\n * @returns {TokenAllowance}\n */\n static _fromProtobuf(allowance) {\n return new TokenAllowance({\n tokenId: TokenId._fromProtobuf(\n /** @type {HieroProto.proto.ITokenID} */ (allowance.tokenId),\n ),\n spenderAccountId: AccountId._fromProtobuf(\n /** @type {HieroProto.proto.IAccountID} */ (allowance.spender),\n ),\n ownerAccountId:\n allowance.owner != null\n ? AccountId._fromProtobuf(\n /**@type {HieroProto.proto.IAccountID}*/ (\n allowance.owner\n ),\n )\n : null,\n amount:\n allowance.amount != null\n ? Long.fromValue(/** @type {Long} */ (allowance.amount))\n : null,\n });\n }\n\n /**\n * @internal\n * @param {HieroProto.proto.IGrantedTokenAllowance} allowance\n * @param {AccountId} ownerAccountId\n * @returns {TokenAllowance}\n */\n static _fromGrantedProtobuf(allowance, ownerAccountId) {\n return new TokenAllowance({\n tokenId: TokenId._fromProtobuf(\n /** @type {HieroProto.proto.ITokenID} */ (allowance.tokenId),\n ),\n spenderAccountId: AccountId._fromProtobuf(\n /** @type {HieroProto.proto.IAccountID} */ (allowance.spender),\n ),\n ownerAccountId,\n amount:\n allowance.amount != null\n ? Long.fromValue(/** @type {Long} */ (allowance.amount))\n : null,\n });\n }\n\n /**\n * @internal\n * @returns {HieroProto.proto.ITokenAllowance}\n */\n _toProtobuf() {\n return {\n tokenId: this.tokenId._toProtobuf(),\n spender:\n this.spenderAccountId != null\n ? this.spenderAccountId._toProtobuf()\n : null,\n owner:\n this.ownerAccountId != null\n ? this.ownerAccountId._toProtobuf()\n : null,\n amount: this.amount,\n };\n }\n\n /**\n * @param {Client} client\n */\n _validateChecksums(client) {\n this.tokenId.validateChecksum(client);\n\n if (this.ownerAccountId != null) {\n this.ownerAccountId.validateChecksum(client);\n }\n\n if (this.spenderAccountId != null) {\n this.spenderAccountId.validateChecksum(client);\n }\n }\n}\n"],"names":["TokenAllowance","constructor","props","this","tokenId","spenderAccountId","ownerAccountId","amount","Object","freeze","_fromProtobuf","allowance","TokenId","AccountId","owner","Long","fromValue","_fromGrantedProtobuf","_toProtobuf","spender","_validateChecksums","client","validateChecksum"],"mappings":"qFAyBe,MAAMA,EASjB,WAAAC,CAAYC,GAMRC,KAAKC,QAAUF,EAAME,QAOrBD,KAAKE,iBAAmBH,EAAMG,iBAO9BF,KAAKG,eAAiBJ,EAAMI,eAS5BH,KAAKI,OAASL,EAAMK,OAEpBC,OAAOC,OAAON,KACtB,CAOI,oBAAOO,CAAcC,GACjB,OAAO,IAAIX,EAAe,CACtBI,QAASQ,EAAQF,cAC6BC,EAAiB,SAE/DN,iBAAkBQ,EAAUH,cACoBC,EAAiB,SAEjEL,eACuB,MAAnBK,EAAUG,MACJD,EAAUH,cAEFC,EAC9B,OAEsB,KACVJ,OACwB,MAApBI,EAAUJ,OACJQ,EAAKC,UAA+BL,EAAgB,QACpD,MAEtB,CAQI,2BAAOM,CAAqBN,EAAWL,GACnC,OAAO,IAAIN,EAAe,CACtBI,QAASQ,EAAQF,cAC6BC,EAAiB,SAE/DN,iBAAkBQ,EAAUH,cACoBC,EAAiB,SAEjEL,iBACAC,OACwB,MAApBI,EAAUJ,OACJQ,EAAKC,UAA+BL,EAAgB,QACpD,MAEtB,CAMI,WAAAO,GACI,MAAO,CACHd,QAASD,KAAKC,QAAQc,cACtBC,QAC6B,MAAzBhB,KAAKE,iBACCF,KAAKE,iBAAiBa,cACtB,KACVJ,MAC2B,MAAvBX,KAAKG,eACCH,KAAKG,eAAeY,cACpB,KACVX,OAAQJ,KAAKI,OAEzB,CAKI,kBAAAa,CAAmBC,GACflB,KAAKC,QAAQkB,iBAAiBD,GAEH,MAAvBlB,KAAKG,gBACLH,KAAKG,eAAegB,iBAAiBD,GAGZ,MAAzBlB,KAAKE,kBACLF,KAAKE,iBAAiBiB,iBAAiBD,EAEnD"}
1
+ {"version":3,"file":"TokenAllowance.js","sources":["../../src/account/TokenAllowance.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport TokenId from \"../token/TokenId.js\";\nimport AccountId from \"./AccountId.js\";\nimport Long from \"long\";\nimport { convertAmountToLong } from \"../util.js\";\n\n/**\n * @namespace proto\n * @typedef {import(\"@hashgraph/proto\").proto.IGrantedTokenAllowance} HieroProto.proto.IGrantedTokenAllowance\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenAllowance} HieroProto.proto.ITokenAllowance\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenID} HieroProto.proto.ITokenID\n * @typedef {import(\"@hashgraph/proto\").proto.IAccountID} HieroProto.proto.IAccountID\n */\n\n/**\n * @typedef {import(\"../client/Client.js\").default<*, *>} Client\n * @typedef {import(\"bignumber.js\").default} BigNumber\n */\n\n/**\n * Represents a token allowance granted to a spender account by an owner account.\n *\n * The `TokenAllowance` class manages the permissions for one account to spend a specified\n * amount of tokens on behalf of another account. It includes details about the token, the\n * spender, the owner, and the amount allowed.\n */\nexport default class TokenAllowance {\n /**\n * @internal\n * @param {object} props\n * @param {TokenId} props.tokenId\n * @param {AccountId | null} props.spenderAccountId\n * @param {AccountId | null} props.ownerAccountId\n * @param {Long | number | BigNumber | bigint | null} props.amount\n */\n constructor(props) {\n /**\n * The token that the allowance pertains to.\n *\n * @readonly\n */\n this.tokenId = props.tokenId;\n\n /**\n * The account ID of the spender of the hbar allowance.\n *\n * @readonly\n */\n this.spenderAccountId = props.spenderAccountId;\n\n /**\n * The account ID of the owner of the hbar allowance.\n *\n * @readonly\n */\n this.ownerAccountId = props.ownerAccountId;\n\n /**\n * The current balance of the spender's token allowance.\n * **NOTE**: If `null`, the spender has access to all of the account owner's NFT instances\n * (currently owned and any in the future).\n *\n * @readonly\n */\n this.amount =\n props.amount != null ? convertAmountToLong(props.amount) : null;\n\n Object.freeze(this);\n }\n\n /**\n * @internal\n * @param {HieroProto.proto.ITokenAllowance} allowance\n * @returns {TokenAllowance}\n */\n static _fromProtobuf(allowance) {\n return new TokenAllowance({\n tokenId: TokenId._fromProtobuf(\n /** @type {HieroProto.proto.ITokenID} */ (allowance.tokenId),\n ),\n spenderAccountId: AccountId._fromProtobuf(\n /** @type {HieroProto.proto.IAccountID} */ (allowance.spender),\n ),\n ownerAccountId:\n allowance.owner != null\n ? AccountId._fromProtobuf(\n /**@type {HieroProto.proto.IAccountID}*/ (\n allowance.owner\n ),\n )\n : null,\n amount:\n allowance.amount != null\n ? Long.fromValue(/** @type {Long} */ (allowance.amount))\n : null,\n });\n }\n\n /**\n * @internal\n * @param {HieroProto.proto.IGrantedTokenAllowance} allowance\n * @param {AccountId} ownerAccountId\n * @returns {TokenAllowance}\n */\n static _fromGrantedProtobuf(allowance, ownerAccountId) {\n return new TokenAllowance({\n tokenId: TokenId._fromProtobuf(\n /** @type {HieroProto.proto.ITokenID} */ (allowance.tokenId),\n ),\n spenderAccountId: AccountId._fromProtobuf(\n /** @type {HieroProto.proto.IAccountID} */ (allowance.spender),\n ),\n ownerAccountId,\n amount:\n allowance.amount != null\n ? Long.fromValue(/** @type {Long} */ (allowance.amount))\n : null,\n });\n }\n\n /**\n * @internal\n * @returns {HieroProto.proto.ITokenAllowance}\n */\n _toProtobuf() {\n return {\n tokenId: this.tokenId._toProtobuf(),\n spender:\n this.spenderAccountId != null\n ? this.spenderAccountId._toProtobuf()\n : null,\n owner:\n this.ownerAccountId != null\n ? this.ownerAccountId._toProtobuf()\n : null,\n amount: this.amount,\n };\n }\n\n /**\n * @param {Client} client\n */\n _validateChecksums(client) {\n this.tokenId.validateChecksum(client);\n\n if (this.ownerAccountId != null) {\n this.ownerAccountId.validateChecksum(client);\n }\n\n if (this.spenderAccountId != null) {\n this.spenderAccountId.validateChecksum(client);\n }\n }\n}\n"],"names":["TokenAllowance","constructor","props","this","tokenId","spenderAccountId","ownerAccountId","amount","convertAmountToLong","Object","freeze","_fromProtobuf","allowance","TokenId","AccountId","owner","Long","fromValue","_fromGrantedProtobuf","_toProtobuf","spender","_validateChecksums","client","validateChecksum"],"mappings":"sIA2Be,MAAMA,EASjB,WAAAC,CAAYC,GAMRC,KAAKC,QAAUF,EAAME,QAOrBD,KAAKE,iBAAmBH,EAAMG,iBAO9BF,KAAKG,eAAiBJ,EAAMI,eAS5BH,KAAKI,OACe,MAAhBL,EAAMK,OAAiBC,EAAoBN,EAAMK,QAAU,KAE/DE,OAAOC,OAAOP,KACtB,CAOI,oBAAOQ,CAAcC,GACjB,OAAO,IAAIZ,EAAe,CACtBI,QAASS,EAAQF,cAC6BC,EAAiB,SAE/DP,iBAAkBS,EAAUH,cACoBC,EAAiB,SAEjEN,eACuB,MAAnBM,EAAUG,MACJD,EAAUH,cAEFC,EAC9B,OAEsB,KACVL,OACwB,MAApBK,EAAUL,OACJS,EAAKC,UAA+BL,EAAgB,QACpD,MAEtB,CAQI,2BAAOM,CAAqBN,EAAWN,GACnC,OAAO,IAAIN,EAAe,CACtBI,QAASS,EAAQF,cAC6BC,EAAiB,SAE/DP,iBAAkBS,EAAUH,cACoBC,EAAiB,SAEjEN,iBACAC,OACwB,MAApBK,EAAUL,OACJS,EAAKC,UAA+BL,EAAgB,QACpD,MAEtB,CAMI,WAAAO,GACI,MAAO,CACHf,QAASD,KAAKC,QAAQe,cACtBC,QAC6B,MAAzBjB,KAAKE,iBACCF,KAAKE,iBAAiBc,cACtB,KACVJ,MAC2B,MAAvBZ,KAAKG,eACCH,KAAKG,eAAea,cACpB,KACVZ,OAAQJ,KAAKI,OAEzB,CAKI,kBAAAc,CAAmBC,GACfnB,KAAKC,QAAQmB,iBAAiBD,GAEH,MAAvBnB,KAAKG,gBACLH,KAAKG,eAAeiB,iBAAiBD,GAGZ,MAAzBnB,KAAKE,kBACLF,KAAKE,iBAAiBkB,iBAAiBD,EAEnD"}
@@ -8,6 +8,7 @@ var _TokenId = _interopRequireDefault(require("../token/TokenId.cjs"));
8
8
  var _AccountId = _interopRequireDefault(require("../account/AccountId.cjs"));
9
9
  var _TokenTransferAccountMap = _interopRequireDefault(require("./TokenTransferAccountMap.cjs"));
10
10
  var _ObjectMap = _interopRequireDefault(require("../ObjectMap.cjs"));
11
+ var _util = require("../util.cjs");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  // SPDX-License-Identifier: Apache-2.0
13
14
 
@@ -19,6 +20,10 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
19
20
  * @typedef {import("@hashgraph/proto").proto.IAccountID} HieroProto.proto.IAccountID
20
21
  */
21
22
 
23
+ /**
24
+ * @typedef {import("bignumber.js").default} BigNumber
25
+ */
26
+
22
27
  /**
23
28
  * @augments {ObjectMap<TokenId, TokenTransferAccountMap>}
24
29
  */
@@ -31,7 +36,7 @@ class TokenTransferMap extends _ObjectMap.default {
31
36
  * @internal
32
37
  * @param {TokenId} tokenId
33
38
  * @param {AccountId} accountId
34
- * @param {Long} amount
39
+ * @param {Long | number | BigNumber | bigint} amount
35
40
  */
36
41
  __set(tokenId, accountId, amount) {
37
42
  const token = tokenId.toString();
@@ -41,7 +46,7 @@ class TokenTransferMap extends _ObjectMap.default {
41
46
  this._map.set(token, _map);
42
47
  this.__map.set(tokenId, _map);
43
48
  }
44
- _map._set(accountId, amount);
49
+ _map._set(accountId, (0, _util.convertAmountToLong)(amount));
45
50
  }
46
51
 
47
52
  /**
@@ -5,6 +5,9 @@
5
5
  * @typedef {import("@hashgraph/proto").proto.ITokenID} HieroProto.proto.ITokenID
6
6
  * @typedef {import("@hashgraph/proto").proto.IAccountID} HieroProto.proto.IAccountID
7
7
  */
8
+ /**
9
+ * @typedef {import("bignumber.js").default} BigNumber
10
+ */
8
11
  /**
9
12
  * @augments {ObjectMap<TokenId, TokenTransferAccountMap>}
10
13
  */
@@ -19,9 +22,9 @@ export default class TokenTransferMap extends ObjectMap<TokenId, TokenTransferAc
19
22
  * @internal
20
23
  * @param {TokenId} tokenId
21
24
  * @param {AccountId} accountId
22
- * @param {Long} amount
25
+ * @param {Long | number | BigNumber | bigint} amount
23
26
  */
24
- __set(tokenId: TokenId, accountId: AccountId, amount: Long): void;
27
+ __set(tokenId: TokenId, accountId: AccountId, amount: Long | number | BigNumber | bigint): void;
25
28
  /**
26
29
  * @returns {HieroProto.proto.ITokenTransferList[]}
27
30
  */
@@ -35,6 +38,7 @@ export namespace HieroProto {
35
38
  type IAccountID = import("@hashgraph/proto").proto.IAccountID;
36
39
  }
37
40
  }
41
+ export type BigNumber = import("bignumber.js").default;
38
42
  import TokenId from "../token/TokenId.js";
39
43
  import TokenTransferAccountMap from "./TokenTransferAccountMap.js";
40
44
  import ObjectMap from "../ObjectMap.js";
@@ -1,2 +1,2 @@
1
- import o from"../token/TokenId.js";import t from"./AccountId.js";import r from"./TokenTransferAccountMap.js";import s from"../ObjectMap.js";class n extends s{constructor(){super(t=>o.fromString(t))}__set(o,t,s){const n=o.toString();let f=this._map.get(n);null==f&&(f=new r,this._map.set(n,f),this.__map.set(o,f)),f._set(t,s)}static _fromProtobuf(r){const s=new n;for(const n of r){const r=o._fromProtobuf(n.token);for(const o of null!=n.transfers?n.transfers:[]){const n=t._fromProtobuf(o.accountID);s.__set(r,n,o.amount)}}return s}_toProtobuf(){const o=[];for(const[t,r]of this){const s=[];for(const[o,t]of r)s.push({accountID:o._toProtobuf(),amount:t});o.push({token:t._toProtobuf(),transfers:s})}return o}}export{n as default};
1
+ import o from"../token/TokenId.js";import t from"./AccountId.js";import r from"./TokenTransferAccountMap.js";import s from"../ObjectMap.js";import{convertAmountToLong as n}from"../util.js";class f extends s{constructor(){super(t=>o.fromString(t))}__set(o,t,s){const f=o.toString();let e=this._map.get(f);null==e&&(e=new r,this._map.set(f,e),this.__map.set(o,e)),e._set(t,n(s))}static _fromProtobuf(r){const s=new f;for(const n of r){const r=o._fromProtobuf(n.token);for(const o of null!=n.transfers?n.transfers:[]){const n=t._fromProtobuf(o.accountID);s.__set(r,n,o.amount)}}return s}_toProtobuf(){const o=[];for(const[t,r]of this){const s=[];for(const[o,t]of r)s.push({accountID:o._toProtobuf(),amount:t});o.push({token:t._toProtobuf(),transfers:s})}return o}}export{f as default};
2
2
  //# sourceMappingURL=TokenTransferMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TokenTransferMap.js","sources":["../../src/account/TokenTransferMap.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport TokenId from \"../token/TokenId.js\";\nimport AccountId from \"../account/AccountId.js\";\nimport TokenTransferAccountMap from \"./TokenTransferAccountMap.js\";\nimport ObjectMap from \"../ObjectMap.js\";\n\n/**\n * @namespace proto\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenTransferList} HieroProto.proto.ITokenTransferList\n * @typedef {import(\"@hashgraph/proto\").proto.IAccountAmount} HieroProto.proto.IAccountAmount\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenID} HieroProto.proto.ITokenID\n * @typedef {import(\"@hashgraph/proto\").proto.IAccountID} HieroProto.proto.IAccountID\n */\n\n/**\n * @augments {ObjectMap<TokenId, TokenTransferAccountMap>}\n */\nexport default class TokenTransferMap extends ObjectMap {\n constructor() {\n super((s) => TokenId.fromString(s));\n }\n\n /**\n * @internal\n * @param {TokenId} tokenId\n * @param {AccountId} accountId\n * @param {Long} amount\n */\n __set(tokenId, accountId, amount) {\n const token = tokenId.toString();\n\n let _map = this._map.get(token);\n if (_map == null) {\n _map = new TokenTransferAccountMap();\n this._map.set(token, _map);\n this.__map.set(tokenId, _map);\n }\n\n _map._set(accountId, amount);\n }\n\n /**\n * @param {HieroProto.proto.ITokenTransferList[]} transfers\n * @returns {TokenTransferMap}\n */\n static _fromProtobuf(transfers) {\n const tokenTransfersMap = new TokenTransferMap();\n\n for (const transfer of transfers) {\n const token = TokenId._fromProtobuf(\n /** @type {HieroProto.proto.ITokenID} */ (transfer.token),\n );\n\n for (const aa of transfer.transfers != null\n ? transfer.transfers\n : []) {\n const account = AccountId._fromProtobuf(\n /** @type {HieroProto.proto.IAccountID} */ (aa.accountID),\n );\n\n tokenTransfersMap.__set(\n token,\n account,\n /** @type {Long} */ (aa.amount),\n );\n }\n }\n\n return tokenTransfersMap;\n }\n\n /**\n * @returns {HieroProto.proto.ITokenTransferList[]}\n */\n _toProtobuf() {\n /** @type {HieroProto.proto.ITokenTransferList[]} */\n const tokenTransferList = [];\n\n for (const [tokenId, value] of this) {\n /** @type {HieroProto.proto.IAccountAmount[]} */\n const transfers = [];\n\n for (const [accountId, amount] of value) {\n transfers.push({\n accountID: accountId._toProtobuf(),\n amount: amount,\n });\n }\n\n tokenTransferList.push({\n token: tokenId._toProtobuf(),\n transfers: transfers,\n });\n }\n\n return tokenTransferList;\n }\n}\n"],"names":["TokenTransferMap","ObjectMap","constructor","super","s","TokenId","fromString","__set","tokenId","accountId","amount","token","toString","_map","this","get","TokenTransferAccountMap","set","__map","_set","_fromProtobuf","transfers","tokenTransfersMap","transfer","aa","account","AccountId","_toProtobuf","tokenTransferList","value","push","accountID"],"mappings":"4IAkBe,MAAMA,UAAyBC,EAC1C,WAAAC,GACIC,MAAOC,GAAMC,EAAQC,WAAWF,GACxC,CAQI,KAAAG,CAAMC,EAASC,EAAWC,GACtB,MAAMC,EAAQH,EAAQI,WAEtB,IAAIC,EAAOC,KAAKD,KAAKE,IAAIJ,GACb,MAARE,IACAA,EAAO,IAAIG,EACXF,KAAKD,KAAKI,IAAIN,EAAOE,GACrBC,KAAKI,MAAMD,IAAIT,EAASK,IAG5BA,EAAKM,KAAKV,EAAWC,EAC7B,CAMI,oBAAOU,CAAcC,GACjB,MAAMC,EAAoB,IAAItB,EAE9B,IAAK,MAAMuB,KAAYF,EAAW,CAC9B,MAAMV,EAAQN,EAAQe,cACwBG,EAAc,OAG5D,IAAK,MAAMC,KAA4B,MAAtBD,EAASF,UACpBE,EAASF,UACT,GAAI,CACN,MAAMI,EAAUC,EAAUN,cACsBI,EAAY,WAG5DF,EAAkBf,MACdI,EACAc,EACqBD,EAAS,OAElD,CACA,CAEQ,OAAOF,CACf,CAKI,WAAAK,GAEI,MAAMC,EAAoB,GAE1B,IAAK,MAAOpB,EAASqB,KAAUf,KAAM,CAEjC,MAAMO,EAAY,GAElB,IAAK,MAAOZ,EAAWC,KAAWmB,EAC9BR,EAAUS,KAAK,CACXC,UAAWtB,EAAUkB,cACrBjB,OAAQA,IAIhBkB,EAAkBE,KAAK,CACnBnB,MAAOH,EAAQmB,cACfN,UAAWA,GAE3B,CAEQ,OAAOO,CACf"}
1
+ {"version":3,"file":"TokenTransferMap.js","sources":["../../src/account/TokenTransferMap.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport TokenId from \"../token/TokenId.js\";\nimport AccountId from \"../account/AccountId.js\";\nimport TokenTransferAccountMap from \"./TokenTransferAccountMap.js\";\nimport ObjectMap from \"../ObjectMap.js\";\nimport { convertAmountToLong } from \"../util.js\";\n\n/**\n * @namespace proto\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenTransferList} HieroProto.proto.ITokenTransferList\n * @typedef {import(\"@hashgraph/proto\").proto.IAccountAmount} HieroProto.proto.IAccountAmount\n * @typedef {import(\"@hashgraph/proto\").proto.ITokenID} HieroProto.proto.ITokenID\n * @typedef {import(\"@hashgraph/proto\").proto.IAccountID} HieroProto.proto.IAccountID\n */\n\n/**\n * @typedef {import(\"bignumber.js\").default} BigNumber\n */\n\n/**\n * @augments {ObjectMap<TokenId, TokenTransferAccountMap>}\n */\nexport default class TokenTransferMap extends ObjectMap {\n constructor() {\n super((s) => TokenId.fromString(s));\n }\n\n /**\n * @internal\n * @param {TokenId} tokenId\n * @param {AccountId} accountId\n * @param {Long | number | BigNumber | bigint} amount\n */\n __set(tokenId, accountId, amount) {\n const token = tokenId.toString();\n\n let _map = this._map.get(token);\n if (_map == null) {\n _map = new TokenTransferAccountMap();\n this._map.set(token, _map);\n this.__map.set(tokenId, _map);\n }\n\n _map._set(accountId, convertAmountToLong(amount));\n }\n\n /**\n * @param {HieroProto.proto.ITokenTransferList[]} transfers\n * @returns {TokenTransferMap}\n */\n static _fromProtobuf(transfers) {\n const tokenTransfersMap = new TokenTransferMap();\n\n for (const transfer of transfers) {\n const token = TokenId._fromProtobuf(\n /** @type {HieroProto.proto.ITokenID} */ (transfer.token),\n );\n\n for (const aa of transfer.transfers != null\n ? transfer.transfers\n : []) {\n const account = AccountId._fromProtobuf(\n /** @type {HieroProto.proto.IAccountID} */ (aa.accountID),\n );\n\n tokenTransfersMap.__set(\n token,\n account,\n /** @type {Long} */ (aa.amount),\n );\n }\n }\n\n return tokenTransfersMap;\n }\n\n /**\n * @returns {HieroProto.proto.ITokenTransferList[]}\n */\n _toProtobuf() {\n /** @type {HieroProto.proto.ITokenTransferList[]} */\n const tokenTransferList = [];\n\n for (const [tokenId, value] of this) {\n /** @type {HieroProto.proto.IAccountAmount[]} */\n const transfers = [];\n\n for (const [accountId, amount] of value) {\n transfers.push({\n accountID: accountId._toProtobuf(),\n amount: amount,\n });\n }\n\n tokenTransferList.push({\n token: tokenId._toProtobuf(),\n transfers: transfers,\n });\n }\n\n return tokenTransferList;\n }\n}\n"],"names":["TokenTransferMap","ObjectMap","constructor","super","s","TokenId","fromString","__set","tokenId","accountId","amount","token","toString","_map","this","get","TokenTransferAccountMap","set","__map","_set","convertAmountToLong","_fromProtobuf","transfers","tokenTransfersMap","transfer","aa","account","AccountId","_toProtobuf","tokenTransferList","value","push","accountID"],"mappings":"6LAuBe,MAAMA,UAAyBC,EAC1C,WAAAC,GACIC,MAAOC,GAAMC,EAAQC,WAAWF,GACxC,CAQI,KAAAG,CAAMC,EAASC,EAAWC,GACtB,MAAMC,EAAQH,EAAQI,WAEtB,IAAIC,EAAOC,KAAKD,KAAKE,IAAIJ,GACb,MAARE,IACAA,EAAO,IAAIG,EACXF,KAAKD,KAAKI,IAAIN,EAAOE,GACrBC,KAAKI,MAAMD,IAAIT,EAASK,IAG5BA,EAAKM,KAAKV,EAAWW,EAAoBV,GACjD,CAMI,oBAAOW,CAAcC,GACjB,MAAMC,EAAoB,IAAIvB,EAE9B,IAAK,MAAMwB,KAAYF,EAAW,CAC9B,MAAMX,EAAQN,EAAQgB,cACwBG,EAAc,OAG5D,IAAK,MAAMC,KAA4B,MAAtBD,EAASF,UACpBE,EAASF,UACT,GAAI,CACN,MAAMI,EAAUC,EAAUN,cACsBI,EAAY,WAG5DF,EAAkBhB,MACdI,EACAe,EACqBD,EAAS,OAElD,CACA,CAEQ,OAAOF,CACf,CAKI,WAAAK,GAEI,MAAMC,EAAoB,GAE1B,IAAK,MAAOrB,EAASsB,KAAUhB,KAAM,CAEjC,MAAMQ,EAAY,GAElB,IAAK,MAAOb,EAAWC,KAAWoB,EAC9BR,EAAUS,KAAK,CACXC,UAAWvB,EAAUmB,cACrBlB,OAAQA,IAIhBmB,EAAkBE,KAAK,CACnBpB,MAAOH,EAAQoB,cACfN,UAAWA,GAE3B,CAEQ,OAAOO,CACf"}
@@ -259,6 +259,14 @@ class Client {
259
259
  return this._mirrorNetwork.network;
260
260
  }
261
261
 
262
+ /**
263
+ * @returns {string}
264
+ * @throws {Error} When no mirror network is configured or available
265
+ */
266
+ get mirrorRestApiBaseUrl() {
267
+ return this._mirrorNetwork.mirrorRestApiBaseUrl;
268
+ }
269
+
262
270
  /**
263
271
  * @returns {boolean}
264
272
  */
@@ -509,15 +517,24 @@ class Client {
509
517
  }
510
518
 
511
519
  /**
512
- * @returns {number}
520
+ * Gets the maximum number of nodes that a transaction or query will attempt to execute against.
521
+ *
522
+ * @returns {number} The current maximum nodes per transaction setting.
523
+ * Returns -1 if no limit is set (uses network defaults).
513
524
  */
514
525
  get maxNodesPerTransaction() {
515
526
  return this._network.maxNodesPerTransaction;
516
527
  }
517
528
 
518
529
  /**
519
- * @param {number} maxNodesPerTransaction
520
- * @returns {this}
530
+ * Sets the maximum number of nodes that a transaction or query will execute against.
531
+ *
532
+ * - **Before freezing**: Limits automatic node selection when no explicit nodes are set
533
+ * - **After freezing**: Trims frozen transactions to the first N nodes while preserving signatures
534
+ * - **Special values**: 0 disables limiting, values > available nodes cause no trimming
535
+ *
536
+ * @param {number} maxNodesPerTransaction - Maximum nodes per transaction. Set to 0 to disable.
537
+ * @returns {this} The client instance for method chaining
521
538
  */
522
539
  setMaxNodesPerTransaction(maxNodesPerTransaction) {
523
540
  this._network.setMaxNodesPerTransaction(maxNodesPerTransaction);
@@ -183,6 +183,11 @@ export default class Client<ChannelT extends Channel, MirrorChannelT extends Mir
183
183
  * @returns {string[]}
184
184
  */
185
185
  get mirrorNetwork(): string[];
186
+ /**
187
+ * @returns {string}
188
+ * @throws {Error} When no mirror network is configured or available
189
+ */
190
+ get mirrorRestApiBaseUrl(): string;
186
191
  /**
187
192
  * @returns {boolean}
188
193
  */
@@ -328,12 +333,21 @@ export default class Client<ChannelT extends Channel, MirrorChannelT extends Mir
328
333
  */
329
334
  setNodeWaitTime(nodeWaitTime: number): this;
330
335
  /**
331
- * @returns {number}
336
+ * Gets the maximum number of nodes that a transaction or query will attempt to execute against.
337
+ *
338
+ * @returns {number} The current maximum nodes per transaction setting.
339
+ * Returns -1 if no limit is set (uses network defaults).
332
340
  */
333
341
  get maxNodesPerTransaction(): number;
334
342
  /**
335
- * @param {number} maxNodesPerTransaction
336
- * @returns {this}
343
+ * Sets the maximum number of nodes that a transaction or query will execute against.
344
+ *
345
+ * - **Before freezing**: Limits automatic node selection when no explicit nodes are set
346
+ * - **After freezing**: Trims frozen transactions to the first N nodes while preserving signatures
347
+ * - **Special values**: 0 disables limiting, values > available nodes cause no trimming
348
+ *
349
+ * @param {number} maxNodesPerTransaction - Maximum nodes per transaction. Set to 0 to disable.
350
+ * @returns {this} The client instance for method chaining
337
351
  */
338
352
  setMaxNodesPerTransaction(maxNodesPerTransaction: number): this;
339
353
  /**
@@ -1,2 +1,2 @@
1
- import t from"../account/AccountId.js";import e from"../account/AccountBalanceQuery.js";import r from"../Hbar.js";import n from"./Network.js";import s from"./MirrorNetwork.js";import o from"../PublicKey.js";import i from"../PrivateKey.js";import a from"../LedgerId.js";import u from"../file/FileId.js";import"pino";import"../logger/LogLevel.js";import{convertToNumber as h}from"../util.js";import d from"../network/AddressBookQuery.js";class l{constructor(t){this._mirrorNetwork=new s(this._createMirrorNetworkChannel()),this._network=new n(this._createNetworkChannel()),this._operator=null,this._defaultMaxTransactionFee=null,this._defaultMaxQueryPayment=new r(1),null!=t&&null!=t.operator&&this.setOperator(t.operator.accountId,t.operator.privateKey),this._maxAttempts=null,this._signOnDemand=!1,this._autoValidateChecksums=!1,this._minBackoff=250,this._maxBackoff=8e3,this._defaultRegenerateTransactionId=!0,this._requestTimeout=null,this._isUpdatingNetwork=!1,this._networkUpdatePeriod=864e5,this._isShutdown=!1,this._shard=0,this._realm=0,null!=t&&!1!==t.scheduleNetworkUpdate&&this._scheduleNetworkUpdate(),null!=t&&null!=t.shard&&(this._shard=t.shard),null!=t&&null!=t.realm&&(this._realm=t.realm),this._timer,this._logger=null}setNetworkName(t){return console.warn("Deprecated: Use `setLedgerId` instead"),this.setLedgerId(t)}get networkName(){return console.warn("Deprecated: Use `ledgerId` instead"),null!=this.ledgerId?this.ledgerId.toString():null}setLedgerId(t){return this._network.setLedgerId("string"==typeof t?a.fromString(t):t),this}get ledgerId(){return null!=this._network._ledgerId?this._network.ledgerId:null}setNetwork(t){throw new Error("not implemented")}setNetworkFromAddressBook(t){return this._network.setNetworkFromAddressBook(t),this}get network(){return this._network.network}get shard(){return this._shard}get realm(){return this._realm}setMirrorNetwork(t){throw new Error("not implemented")}get mirrorNetwork(){return this._mirrorNetwork.network}get signOnDemand(){return this._signOnDemand}setSignOnDemand(t){this._signOnDemand=t}isTransportSecurity(){return this._network.isTransportSecurity()}setTransportSecurity(t){return this._network.setTransportSecurity(t),this}setOperator(t,e){const r="string"==typeof e?i.fromStringDer(e):e;return this.setOperatorWith(t,r.publicKey,t=>Promise.resolve(r.sign(t)))}getOperator(){return this._operator}setOperatorWith(e,r,n){const s=e instanceof t?e:t.fromString(e);return null!=this._network._ledgerId&&s.validateChecksum(this),this._operator={transactionSigner:n,accountId:s,publicKey:r instanceof o?r:o.fromString(r)},this}setAutoValidateChecksums(t){return this._autoValidateChecksums=t,this}isAutoValidateChecksumsEnabled(){return this._autoValidateChecksums}get operatorAccountId(){return null!=this._operator?this._operator.accountId:null}get operatorPublicKey(){return null!=this._operator?this._operator.publicKey:null}get defaultMaxTransactionFee(){return this._defaultMaxTransactionFee}get maxTransactionFee(){return this.defaultMaxTransactionFee}setDefaultMaxTransactionFee(t){if(t.toTinybars().toInt()<0)throw new Error("defaultMaxTransactionFee must be non-negative");return this._defaultMaxTransactionFee=t,this}setMaxTransactionFee(t){return this.setDefaultMaxTransactionFee(t)}get defaultRegenerateTransactionId(){return this._defaultRegenerateTransactionId}setDefaultRegenerateTransactionId(t){return this._defaultRegenerateTransactionId=t,this}get defaultMaxQueryPayment(){return this._defaultMaxQueryPayment}get maxQueryPayment(){return this.defaultMaxQueryPayment}setDefaultMaxQueryPayment(t){if(h(t.toTinybars())<0)throw new Error("defaultMaxQueryPayment must be non-negative");return this._defaultMaxQueryPayment=t,this}setMaxQueryPayment(t){return this.setDefaultMaxQueryPayment(t)}get maxAttempts(){return null!=this._maxAttempts?this._maxAttempts:10}setMaxAttempts(t){return this._maxAttempts=t,this}get maxNodeAttempts(){return this._network.maxNodeAttempts}setMaxNodeAttempts(t){return this._network.setMaxNodeAttempts(t),this}get nodeWaitTime(){return this._network.minBackoff}setNodeWaitTime(t){return this._network.setMinBackoff(t),this}get maxNodesPerTransaction(){return this._network.maxNodesPerTransaction}setMaxNodesPerTransaction(t){return this._network.setMaxNodesPerTransaction(t),this}setMinBackoff(t){if(null==t)throw new Error("minBackoff cannot be null.");if(t>this._maxBackoff)throw new Error("minBackoff cannot be larger than maxBackoff.");return this._minBackoff=t,this}get minBackoff(){return this._minBackoff}setMaxBackoff(t){if(null==t)throw new Error("maxBackoff cannot be null.");if(t<this._minBackoff)throw new Error("maxBackoff cannot be smaller than minBackoff.");return this._maxBackoff=t,this}get maxBackoff(){return this._maxBackoff}setNodeMinBackoff(t){return this._network.setMinBackoff(t),this}get nodeMinBackoff(){return this._network.minBackoff}setNodeMaxBackoff(t){return this._network.setMaxBackoff(t),this}get nodeMaxBackoff(){return this._network.maxBackoff}setNodeMinReadmitPeriod(t){return this._network.setNodeMinReadmitPeriod(t),this}get nodeMinReadmitPeriod(){return this._network.nodeMinReadmitPeriod}setNodeMaxReadmitPeriod(t){return this._network.setNodeMaxReadmitPeriod(t),this}get nodeMaxReadmitPeriod(){return this._network.nodeMaxReadmitPeriod}setRequestTimeout(t){return this._requestTimeout=t,this}get requestTimeout(){return this._requestTimeout}get networkUpdatePeriod(){return this._networkUpdatePeriod}setNetworkUpdatePeriod(t){return clearTimeout(this._timer),this._networkUpdatePeriod=t,this._scheduleNetworkUpdate(),this}setLogger(t){return this._logger=t,this}get logger(){return this._logger}async ping(r){await new e({accountId:r}).setNodeAccountIds([r instanceof t?r:t.fromString(r)]).execute(this)}async pingAll(){for(const t of Object.values(this._network.network))await this.ping(t)}async updateNetwork(){if(this._isUpdatingNetwork)return this;this._isUpdatingNetwork=!0;try{const t=await(new d).setFileId(u.getAddressBookFileIdFor(this._shard,this._realm)).execute(this);this.setNetworkFromAddressBook(t)}catch(t){this._logger&&this._logger.trace(`failed to update client address book: ${t.toString()}`)}finally{this._isUpdatingNetwork=!1}return this}close(){this._network.close(),this._mirrorNetwork.close(),this._isShutdown=!0,clearTimeout(this._timer)}_createNetworkChannel(){throw new Error("not implemented")}_createMirrorNetworkChannel(){throw new Error("not implemented")}_scheduleNetworkUpdate(){this._timer=setTimeout(async()=>{await this.updateNetwork(),this._isShutdown||this._scheduleNetworkUpdate()},this._networkUpdatePeriod)}get isClientShutDown(){return this._isShutdown}static _validateNetworkConsistency(t){if(0===Object.keys(t).length)return;const[,e]=Object.entries(t)[0],r=e.toString(),[n,s]=r.split(".").map(Number),o=Object.values(t).every(t=>{const e=t.toString(),[r,o]=e.split(".").map(Number);return r===n&&o===s});if(!o)throw new Error("Network is not valid, all nodes must be in the same shard and realm")}static _extractShardRealm(t){const e=Object.entries(t);if(0===e.length)return{shard:0,realm:0};const[,r]=e[0],n=r.toString(),[s,o]=n.split(".").map(Number);return{shard:s,realm:o}}}export{l as default};
1
+ import t from"../account/AccountId.js";import e from"../account/AccountBalanceQuery.js";import r from"../Hbar.js";import s from"./Network.js";import n from"./MirrorNetwork.js";import o from"../PublicKey.js";import i from"../PrivateKey.js";import a from"../LedgerId.js";import u from"../file/FileId.js";import"pino";import"../logger/LogLevel.js";import{convertToNumber as h}from"../util.js";import d from"../network/AddressBookQuery.js";class l{constructor(t){this._mirrorNetwork=new n(this._createMirrorNetworkChannel()),this._network=new s(this._createNetworkChannel()),this._operator=null,this._defaultMaxTransactionFee=null,this._defaultMaxQueryPayment=new r(1),null!=t&&null!=t.operator&&this.setOperator(t.operator.accountId,t.operator.privateKey),this._maxAttempts=null,this._signOnDemand=!1,this._autoValidateChecksums=!1,this._minBackoff=250,this._maxBackoff=8e3,this._defaultRegenerateTransactionId=!0,this._requestTimeout=null,this._isUpdatingNetwork=!1,this._networkUpdatePeriod=864e5,this._isShutdown=!1,this._shard=0,this._realm=0,null!=t&&!1!==t.scheduleNetworkUpdate&&this._scheduleNetworkUpdate(),null!=t&&null!=t.shard&&(this._shard=t.shard),null!=t&&null!=t.realm&&(this._realm=t.realm),this._timer,this._logger=null}setNetworkName(t){return console.warn("Deprecated: Use `setLedgerId` instead"),this.setLedgerId(t)}get networkName(){return console.warn("Deprecated: Use `ledgerId` instead"),null!=this.ledgerId?this.ledgerId.toString():null}setLedgerId(t){return this._network.setLedgerId("string"==typeof t?a.fromString(t):t),this}get ledgerId(){return null!=this._network._ledgerId?this._network.ledgerId:null}setNetwork(t){throw new Error("not implemented")}setNetworkFromAddressBook(t){return this._network.setNetworkFromAddressBook(t),this}get network(){return this._network.network}get shard(){return this._shard}get realm(){return this._realm}setMirrorNetwork(t){throw new Error("not implemented")}get mirrorNetwork(){return this._mirrorNetwork.network}get mirrorRestApiBaseUrl(){return this._mirrorNetwork.mirrorRestApiBaseUrl}get signOnDemand(){return this._signOnDemand}setSignOnDemand(t){this._signOnDemand=t}isTransportSecurity(){return this._network.isTransportSecurity()}setTransportSecurity(t){return this._network.setTransportSecurity(t),this}setOperator(t,e){const r="string"==typeof e?i.fromStringDer(e):e;return this.setOperatorWith(t,r.publicKey,t=>Promise.resolve(r.sign(t)))}getOperator(){return this._operator}setOperatorWith(e,r,s){const n=e instanceof t?e:t.fromString(e);return null!=this._network._ledgerId&&n.validateChecksum(this),this._operator={transactionSigner:s,accountId:n,publicKey:r instanceof o?r:o.fromString(r)},this}setAutoValidateChecksums(t){return this._autoValidateChecksums=t,this}isAutoValidateChecksumsEnabled(){return this._autoValidateChecksums}get operatorAccountId(){return null!=this._operator?this._operator.accountId:null}get operatorPublicKey(){return null!=this._operator?this._operator.publicKey:null}get defaultMaxTransactionFee(){return this._defaultMaxTransactionFee}get maxTransactionFee(){return this.defaultMaxTransactionFee}setDefaultMaxTransactionFee(t){if(t.toTinybars().toInt()<0)throw new Error("defaultMaxTransactionFee must be non-negative");return this._defaultMaxTransactionFee=t,this}setMaxTransactionFee(t){return this.setDefaultMaxTransactionFee(t)}get defaultRegenerateTransactionId(){return this._defaultRegenerateTransactionId}setDefaultRegenerateTransactionId(t){return this._defaultRegenerateTransactionId=t,this}get defaultMaxQueryPayment(){return this._defaultMaxQueryPayment}get maxQueryPayment(){return this.defaultMaxQueryPayment}setDefaultMaxQueryPayment(t){if(h(t.toTinybars())<0)throw new Error("defaultMaxQueryPayment must be non-negative");return this._defaultMaxQueryPayment=t,this}setMaxQueryPayment(t){return this.setDefaultMaxQueryPayment(t)}get maxAttempts(){return null!=this._maxAttempts?this._maxAttempts:10}setMaxAttempts(t){return this._maxAttempts=t,this}get maxNodeAttempts(){return this._network.maxNodeAttempts}setMaxNodeAttempts(t){return this._network.setMaxNodeAttempts(t),this}get nodeWaitTime(){return this._network.minBackoff}setNodeWaitTime(t){return this._network.setMinBackoff(t),this}get maxNodesPerTransaction(){return this._network.maxNodesPerTransaction}setMaxNodesPerTransaction(t){return this._network.setMaxNodesPerTransaction(t),this}setMinBackoff(t){if(null==t)throw new Error("minBackoff cannot be null.");if(t>this._maxBackoff)throw new Error("minBackoff cannot be larger than maxBackoff.");return this._minBackoff=t,this}get minBackoff(){return this._minBackoff}setMaxBackoff(t){if(null==t)throw new Error("maxBackoff cannot be null.");if(t<this._minBackoff)throw new Error("maxBackoff cannot be smaller than minBackoff.");return this._maxBackoff=t,this}get maxBackoff(){return this._maxBackoff}setNodeMinBackoff(t){return this._network.setMinBackoff(t),this}get nodeMinBackoff(){return this._network.minBackoff}setNodeMaxBackoff(t){return this._network.setMaxBackoff(t),this}get nodeMaxBackoff(){return this._network.maxBackoff}setNodeMinReadmitPeriod(t){return this._network.setNodeMinReadmitPeriod(t),this}get nodeMinReadmitPeriod(){return this._network.nodeMinReadmitPeriod}setNodeMaxReadmitPeriod(t){return this._network.setNodeMaxReadmitPeriod(t),this}get nodeMaxReadmitPeriod(){return this._network.nodeMaxReadmitPeriod}setRequestTimeout(t){return this._requestTimeout=t,this}get requestTimeout(){return this._requestTimeout}get networkUpdatePeriod(){return this._networkUpdatePeriod}setNetworkUpdatePeriod(t){return clearTimeout(this._timer),this._networkUpdatePeriod=t,this._scheduleNetworkUpdate(),this}setLogger(t){return this._logger=t,this}get logger(){return this._logger}async ping(r){await new e({accountId:r}).setNodeAccountIds([r instanceof t?r:t.fromString(r)]).execute(this)}async pingAll(){for(const t of Object.values(this._network.network))await this.ping(t)}async updateNetwork(){if(this._isUpdatingNetwork)return this;this._isUpdatingNetwork=!0;try{const t=await(new d).setFileId(u.getAddressBookFileIdFor(this._shard,this._realm)).execute(this);this.setNetworkFromAddressBook(t)}catch(t){this._logger&&this._logger.trace(`failed to update client address book: ${t.toString()}`)}finally{this._isUpdatingNetwork=!1}return this}close(){this._network.close(),this._mirrorNetwork.close(),this._isShutdown=!0,clearTimeout(this._timer)}_createNetworkChannel(){throw new Error("not implemented")}_createMirrorNetworkChannel(){throw new Error("not implemented")}_scheduleNetworkUpdate(){this._timer=setTimeout(async()=>{await this.updateNetwork(),this._isShutdown||this._scheduleNetworkUpdate()},this._networkUpdatePeriod)}get isClientShutDown(){return this._isShutdown}static _validateNetworkConsistency(t){if(0===Object.keys(t).length)return;const[,e]=Object.entries(t)[0],r=e.toString(),[s,n]=r.split(".").map(Number),o=Object.values(t).every(t=>{const e=t.toString(),[r,o]=e.split(".").map(Number);return r===s&&o===n});if(!o)throw new Error("Network is not valid, all nodes must be in the same shard and realm")}static _extractShardRealm(t){const e=Object.entries(t);if(0===e.length)return{shard:0,realm:0};const[,r]=e[0],s=r.toString(),[n,o]=s.split(".").map(Number);return{shard:n,realm:o}}}export{l as default};
2
2
  //# sourceMappingURL=Client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Client.js","sources":["../../src/client/Client.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport AccountId from \"../account/AccountId.js\";\nimport AccountBalanceQuery from \"../account/AccountBalanceQuery.js\";\nimport Hbar from \"../Hbar.js\";\nimport Network from \"./Network.js\";\nimport MirrorNetwork from \"./MirrorNetwork.js\";\nimport PublicKey from \"../PublicKey.js\";\nimport PrivateKey from \"../PrivateKey.js\";\nimport LedgerId from \"../LedgerId.js\";\nimport FileId from \"../file/FileId.js\";\nimport Logger from \"../logger/Logger.js\"; // eslint-disable-line\nimport { convertToNumber } from \"../util.js\";\nimport AddressBookQuery from \"../network/AddressBookQuery.js\";\n\n/**\n * @typedef {import(\"../channel/Channel.js\").default} Channel\n * @typedef {import(\"../channel/MirrorChannel.js\").default} MirrorChannel\n * @typedef {import(\"../address_book/NodeAddressBook.js\").default} NodeAddressBook\n */\n\n/**\n * @typedef {object} Operator\n * @property {string | PrivateKey} privateKey\n * @property {string | AccountId} accountId\n */\n\n/**\n * @typedef {object} ClientOperator\n * @property {PublicKey} publicKey\n * @property {AccountId} accountId\n * @property {(message: Uint8Array) => Promise<Uint8Array>} transactionSigner\n */\n\n/**\n * @typedef {object} ClientConfiguration\n * @property {{[key: string]: (string | AccountId)} | string} [network]\n * @property {string[] | string} [mirrorNetwork]\n * @property {Operator} [operator]\n * @property {boolean} [scheduleNetworkUpdate]\n * @property {number} [shard]\n * @property {number} [realm]\n */\n\n/**\n * @typedef {\"mainnet\" | \"testnet\" | \"previewnet\"} NetworkName\n */\n\n/**\n * The `Client` class is the main entry point for interacting with the Hedera Hashgraph network.\n * It provides methods for managing network connections, setting operators, handling transactions\n * and queries, and configuring various client settings.\n *\n * @abstract\n * @template {Channel} ChannelT\n * @template {MirrorChannel} MirrorChannelT\n */\nexport default class Client {\n /**\n * @protected\n * @hideconstructor\n * @param {ClientConfiguration} [props]\n */\n constructor(props) {\n /**\n * List of mirror network URLs.\n *\n * @internal\n * @type {MirrorNetwork}\n */\n this._mirrorNetwork = new MirrorNetwork(\n this._createMirrorNetworkChannel(),\n );\n\n /**\n * Map of node account ID (as a string)\n * to the node URL.\n *\n * @internal\n * @type {Network}\n */\n this._network = new Network(this._createNetworkChannel());\n\n /**\n * @internal\n * @type {?ClientOperator}\n */\n this._operator = null;\n\n /**\n * @private\n * @type {?Hbar}\n */\n this._defaultMaxTransactionFee = null;\n\n /**\n * @private\n * @type {Hbar}\n */\n this._defaultMaxQueryPayment = new Hbar(1);\n\n if (props != null) {\n if (props.operator != null) {\n this.setOperator(\n props.operator.accountId,\n props.operator.privateKey,\n );\n }\n }\n\n /** @type {number | null} */\n this._maxAttempts = null;\n\n /** @private */\n this._signOnDemand = false;\n\n /** @private */\n this._autoValidateChecksums = false;\n\n /** @private */\n this._minBackoff = 250;\n\n /** @private */\n this._maxBackoff = 8000;\n\n /** @private */\n this._defaultRegenerateTransactionId = true;\n\n /** @private */\n this._requestTimeout = null;\n\n /**\n * @type {boolean}\n */\n this._isUpdatingNetwork = false;\n\n /** @private */\n this._networkUpdatePeriod = 24 * 60 * 60 * 1000;\n\n /** @private */\n this._isShutdown = false;\n\n this._shard = 0;\n\n this._realm = 0;\n\n if (props != null && props.scheduleNetworkUpdate !== false) {\n this._scheduleNetworkUpdate();\n }\n\n if (props != null && props.shard != null) {\n this._shard = props.shard;\n }\n\n if (props != null && props.realm != null) {\n this._realm = props.realm;\n }\n\n /** @internal */\n /** @type {NodeJS.Timeout} */\n this._timer;\n\n /**\n * Logger\n *\n * @external\n * @type {Logger | null}\n */\n this._logger = null;\n }\n\n /**\n * @deprecated\n * @param {NetworkName} networkName\n * @returns {this}\n */\n setNetworkName(networkName) {\n // uses custom NetworkName type\n // remove if phasing out set|get NetworkName\n console.warn(\"Deprecated: Use `setLedgerId` instead\");\n return this.setLedgerId(networkName);\n }\n\n /**\n * @deprecated\n * @returns {string | null}\n */\n get networkName() {\n console.warn(\"Deprecated: Use `ledgerId` instead\");\n return this.ledgerId != null ? this.ledgerId.toString() : null;\n }\n\n /**\n * @param {string|LedgerId} ledgerId\n * @returns {this}\n */\n setLedgerId(ledgerId) {\n this._network.setLedgerId(\n typeof ledgerId === \"string\"\n ? LedgerId.fromString(ledgerId)\n : ledgerId,\n );\n\n return this;\n }\n\n /**\n * @returns {LedgerId | null}\n */\n get ledgerId() {\n return this._network._ledgerId != null ? this._network.ledgerId : null;\n }\n\n /**\n * @param {{[key: string]: (string | AccountId)} | string} network\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setNetwork(network) {\n // TODO: This logic _can_ be de-duplicated and likely should\n throw new Error(\"not implemented\");\n }\n\n /**\n * @param {NodeAddressBook} addressBook\n * @returns {this}\n */\n setNetworkFromAddressBook(addressBook) {\n this._network.setNetworkFromAddressBook(addressBook);\n return this;\n }\n\n /**\n * @returns {{[key: string]: (string | AccountId)}}\n */\n get network() {\n return this._network.network;\n }\n\n /**\n * @returns {number}\n */\n get shard() {\n return this._shard;\n }\n\n /**\n * @returns {number}\n */\n get realm() {\n return this._realm;\n }\n\n /**\n * @param {string[] | string} mirrorNetwork\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setMirrorNetwork(mirrorNetwork) {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @returns {string[]}\n */\n get mirrorNetwork() {\n return this._mirrorNetwork.network;\n }\n\n /**\n * @returns {boolean}\n */\n get signOnDemand() {\n return this._signOnDemand;\n }\n\n /**\n * @param {boolean} signOnDemand\n */\n setSignOnDemand(signOnDemand) {\n this._signOnDemand = signOnDemand;\n }\n\n /**\n * @returns {boolean}\n */\n isTransportSecurity() {\n return this._network.isTransportSecurity();\n }\n\n /**\n * @param {boolean} transportSecurity\n * @returns {this}\n */\n setTransportSecurity(transportSecurity) {\n this._network.setTransportSecurity(transportSecurity);\n return this;\n }\n\n /**\n * Set the account that will, by default, pay for transactions and queries built with this client.\n * NOTE: When using string for private key, the string needs to contain DER headers\n *\n * @param {AccountId | string} accountId\n * @param {PrivateKey | string} privateKey\n * @returns {this}\n */\n setOperator(accountId, privateKey) {\n const key =\n typeof privateKey === \"string\"\n ? PrivateKey.fromStringDer(privateKey)\n : privateKey;\n\n return this.setOperatorWith(accountId, key.publicKey, (message) =>\n Promise.resolve(key.sign(message)),\n );\n }\n\n /**\n * @returns {?ClientOperator}\n */\n getOperator() {\n return this._operator;\n }\n\n /**\n * Sets the account that will, by default, pay for transactions and queries built with\n * this client.\n *\n * @param {AccountId | string} accountId\n * @param {PublicKey | string} publicKey\n * @param {(message: Uint8Array) => Promise<Uint8Array>} transactionSigner\n * @returns {this}\n */\n setOperatorWith(accountId, publicKey, transactionSigner) {\n const accountId_ =\n accountId instanceof AccountId\n ? accountId\n : AccountId.fromString(accountId);\n\n if (this._network._ledgerId != null) {\n accountId_.validateChecksum(this);\n }\n\n this._operator = {\n transactionSigner,\n\n accountId: accountId_,\n\n publicKey:\n publicKey instanceof PublicKey\n ? publicKey\n : PublicKey.fromString(publicKey),\n };\n\n return this;\n }\n\n /**\n * @param {boolean} value\n * @returns {this}\n */\n setAutoValidateChecksums(value) {\n this._autoValidateChecksums = value;\n return this;\n }\n\n /**\n * @returns {boolean}\n */\n isAutoValidateChecksumsEnabled() {\n return this._autoValidateChecksums;\n }\n\n /**\n * @returns {?AccountId}\n */\n get operatorAccountId() {\n return this._operator != null ? this._operator.accountId : null;\n }\n\n /**\n * @returns {?PublicKey}\n */\n get operatorPublicKey() {\n return this._operator != null ? this._operator.publicKey : null;\n }\n\n /**\n * @returns {?Hbar}\n */\n get defaultMaxTransactionFee() {\n return this._defaultMaxTransactionFee;\n }\n\n /**\n * @deprecated - Use `defaultMaxTransactionFee` instead\n * @returns {?Hbar}\n */\n get maxTransactionFee() {\n return this.defaultMaxTransactionFee;\n }\n\n /**\n * Set the defaultimum fee to be paid for transactions\n * executed by this client.\n *\n * @param {Hbar} defaultMaxTransactionFee\n * @returns {this}\n */\n setDefaultMaxTransactionFee(defaultMaxTransactionFee) {\n if (defaultMaxTransactionFee.toTinybars().toInt() < 0) {\n throw new Error(\"defaultMaxTransactionFee must be non-negative\");\n }\n this._defaultMaxTransactionFee = defaultMaxTransactionFee;\n return this;\n }\n\n /**\n * @deprecated - Use `setDefaultMaxTransactionFee()` instead\n * Set the maximum fee to be paid for transactions\n * executed by this client.\n * @param {Hbar} maxTransactionFee\n * @returns {this}\n */\n setMaxTransactionFee(maxTransactionFee) {\n return this.setDefaultMaxTransactionFee(maxTransactionFee);\n }\n\n /**\n * @returns {boolean}\n */\n get defaultRegenerateTransactionId() {\n return this._defaultRegenerateTransactionId;\n }\n\n /**\n * Set if a new transaction ID should be generated when a `TRANSACTION_EXPIRED` status\n * is returned.\n *\n * @param {boolean} defaultRegenerateTransactionId\n * @returns {this}\n */\n setDefaultRegenerateTransactionId(defaultRegenerateTransactionId) {\n this._defaultRegenerateTransactionId = defaultRegenerateTransactionId;\n return this;\n }\n\n /**\n * @returns {Hbar}\n */\n get defaultMaxQueryPayment() {\n return this._defaultMaxQueryPayment;\n }\n\n /**\n * @deprecated in a favor of defaultMaxQueryPayment\n * @returns {Hbar}\n */\n get maxQueryPayment() {\n return this.defaultMaxQueryPayment;\n }\n\n /**\n * Set the maximum payment allowable for queries.\n *\n * @param {Hbar} defaultMaxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setDefaultMaxQueryPayment(defaultMaxQueryPayment) {\n const isMaxQueryPaymentNegative =\n convertToNumber(defaultMaxQueryPayment.toTinybars()) < 0;\n if (isMaxQueryPaymentNegative) {\n throw new Error(\"defaultMaxQueryPayment must be non-negative\");\n }\n this._defaultMaxQueryPayment = defaultMaxQueryPayment;\n return this;\n }\n /**\n * @deprecated in a favor of setDefaultMaxQueryPayment()\n * Set the maximum payment allowable for queries.\n * @param {Hbar} maxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setMaxQueryPayment(maxQueryPayment) {\n return this.setDefaultMaxQueryPayment(maxQueryPayment);\n }\n\n /**\n * @returns {number}\n */\n get maxAttempts() {\n return this._maxAttempts != null ? this._maxAttempts : 10;\n }\n\n /**\n * @param {number} maxAttempts\n * @returns {this}\n */\n setMaxAttempts(maxAttempts) {\n this._maxAttempts = maxAttempts;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxNodeAttempts() {\n return this._network.maxNodeAttempts;\n }\n\n /**\n * @param {number} maxNodeAttempts\n * @returns {this}\n */\n setMaxNodeAttempts(maxNodeAttempts) {\n this._network.setMaxNodeAttempts(maxNodeAttempts);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeWaitTime() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeWaitTime\n * @returns {this}\n */\n setNodeWaitTime(nodeWaitTime) {\n this._network.setMinBackoff(nodeWaitTime);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxNodesPerTransaction() {\n return this._network.maxNodesPerTransaction;\n }\n\n /**\n * @param {number} maxNodesPerTransaction\n * @returns {this}\n */\n setMaxNodesPerTransaction(maxNodesPerTransaction) {\n this._network.setMaxNodesPerTransaction(maxNodesPerTransaction);\n return this;\n }\n\n /**\n * @param {?number} minBackoff\n * @returns {this}\n */\n setMinBackoff(minBackoff) {\n if (minBackoff == null) {\n throw new Error(\"minBackoff cannot be null.\");\n }\n if (minBackoff > this._maxBackoff) {\n throw new Error(\"minBackoff cannot be larger than maxBackoff.\");\n }\n this._minBackoff = minBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get minBackoff() {\n return this._minBackoff;\n }\n\n /**\n * @param {?number} maxBackoff\n * @returns {this}\n */\n setMaxBackoff(maxBackoff) {\n if (maxBackoff == null) {\n throw new Error(\"maxBackoff cannot be null.\");\n } else if (maxBackoff < this._minBackoff) {\n throw new Error(\"maxBackoff cannot be smaller than minBackoff.\");\n }\n this._maxBackoff = maxBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxBackoff() {\n return this._maxBackoff;\n }\n\n /**\n * @param {number} nodeMinBackoff\n * @returns {this}\n */\n setNodeMinBackoff(nodeMinBackoff) {\n this._network.setMinBackoff(nodeMinBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinBackoff() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeMaxBackoff\n * @returns {this}\n */\n setNodeMaxBackoff(nodeMaxBackoff) {\n this._network.setMaxBackoff(nodeMaxBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxBackoff() {\n return this._network.maxBackoff;\n }\n\n /**\n * @param {number} nodeMinReadmitPeriod\n * @returns {this}\n */\n setNodeMinReadmitPeriod(nodeMinReadmitPeriod) {\n this._network.setNodeMinReadmitPeriod(nodeMinReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinReadmitPeriod() {\n return this._network.nodeMinReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMaxReadmitPeriod\n * @returns {this}\n */\n setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod) {\n this._network.setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxReadmitPeriod() {\n return this._network.nodeMaxReadmitPeriod;\n }\n\n /**\n * @param {number} requestTimeout - Number of milliseconds\n * @returns {this}\n */\n setRequestTimeout(requestTimeout) {\n this._requestTimeout = requestTimeout;\n return this;\n }\n\n /**\n * @returns {?number}\n */\n get requestTimeout() {\n return this._requestTimeout;\n }\n\n /**\n * @returns {number}\n */\n get networkUpdatePeriod() {\n return this._networkUpdatePeriod;\n }\n\n /**\n * @param {number} networkUpdatePeriod\n * @returns {this}\n */\n setNetworkUpdatePeriod(networkUpdatePeriod) {\n clearTimeout(this._timer);\n this._networkUpdatePeriod = networkUpdatePeriod;\n this._scheduleNetworkUpdate();\n return this;\n }\n /**\n * Set logger\n *\n * @param {Logger} logger\n * @returns {this}\n */\n setLogger(logger) {\n this._logger = logger;\n return this;\n }\n\n /**\n * Get logger if set\n *\n * @returns {?Logger}\n */\n get logger() {\n return this._logger;\n }\n\n /**\n * @param {AccountId | string} accountId\n */\n async ping(accountId) {\n await new AccountBalanceQuery({ accountId })\n .setNodeAccountIds([\n accountId instanceof AccountId\n ? accountId\n : AccountId.fromString(accountId),\n ])\n .execute(this);\n }\n\n async pingAll() {\n for (const nodeAccountId of Object.values(this._network.network)) {\n await this.ping(nodeAccountId);\n }\n }\n\n /**\n * Update the network address book.\n * @returns {Promise<this>}\n */\n async updateNetwork() {\n if (this._isUpdatingNetwork) {\n return this;\n }\n\n this._isUpdatingNetwork = true;\n\n try {\n const addressBook = await new AddressBookQuery()\n .setFileId(\n FileId.getAddressBookFileIdFor(this._shard, this._realm),\n )\n .execute(this);\n this.setNetworkFromAddressBook(addressBook);\n } catch (error) {\n if (this._logger) {\n this._logger.trace(\n `failed to update client address book: ${\n /** @type {Error} */ (error).toString()\n }`,\n );\n }\n } finally {\n this._isUpdatingNetwork = false;\n }\n\n return this;\n }\n\n /**\n * @returns {void}\n */\n close() {\n this._network.close();\n this._mirrorNetwork.close();\n this._isShutdown = true;\n clearTimeout(this._timer);\n }\n\n /**\n * @abstract\n * @returns {(address: string) => ChannelT}\n */\n _createNetworkChannel() {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @abstract\n * @returns {(address: string) => MirrorChannelT}\n */\n _createMirrorNetworkChannel() {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @private\n */\n _scheduleNetworkUpdate() {\n // This is the automatic network update promise that _eventually_ completes\n // eslint-disable-next-line @typescript-eslint/no-floating-promises,@typescript-eslint/no-misused-promises\n this._timer = setTimeout(async () => {\n await this.updateNetwork();\n\n if (!this._isShutdown) {\n // Recall this method to continuously update the network\n // every `networkUpdatePeriod` amount of itme\n this._scheduleNetworkUpdate();\n }\n }, this._networkUpdatePeriod);\n }\n\n /**\n * @returns {boolean}\n */\n get isClientShutDown() {\n return this._isShutdown;\n }\n\n /**\n * Validates that all nodes in a network are in the same shard and realm.\n *\n * @param {{[key: string]: (string | AccountId)}} network\n */\n static _validateNetworkConsistency(network) {\n if (Object.keys(network).length === 0) {\n return;\n }\n\n const [, nodeAccountId] = Object.entries(network)[0];\n\n const accountIdStr = nodeAccountId.toString();\n\n const [firstNodeShard, firstNodeRealm] = accountIdStr\n .split(\".\")\n .map(Number);\n\n const isNetworkValid = Object.values(network).every((accountId) => {\n const accountIdStr = accountId.toString();\n\n const [currentShard, currentRealm] = accountIdStr\n .split(\".\")\n .map(Number);\n return (\n currentShard === firstNodeShard &&\n currentRealm === firstNodeRealm\n );\n });\n\n if (!isNetworkValid) {\n throw new Error(\n \"Network is not valid, all nodes must be in the same shard and realm\",\n );\n }\n }\n\n /**\n * Extracts shard and realm values from a network configuration.\n * Note: This method assumes the network is consistent (all nodes in same shard/realm).\n * Use validateNetworkConsistency() first to ensure this.\n *\n * @param {{[key: string]: (string | AccountId)}} network\n * @returns {{shard: number, realm: number}}\n */\n static _extractShardRealm(network) {\n const entries = Object.entries(network);\n if (entries.length === 0) {\n return { shard: 0, realm: 0 };\n }\n\n const [, firstNodeAccountId] = entries[0];\n\n const accountIdStr = firstNodeAccountId.toString();\n const [shard, realm] = accountIdStr.split(\".\").map(Number);\n\n return { shard, realm };\n }\n}\n"],"names":["Client","constructor","props","this","_mirrorNetwork","MirrorNetwork","_createMirrorNetworkChannel","_network","Network","_createNetworkChannel","_operator","_defaultMaxTransactionFee","_defaultMaxQueryPayment","Hbar","operator","setOperator","accountId","privateKey","_maxAttempts","_signOnDemand","_autoValidateChecksums","_minBackoff","_maxBackoff","_defaultRegenerateTransactionId","_requestTimeout","_isUpdatingNetwork","_networkUpdatePeriod","_isShutdown","_shard","_realm","scheduleNetworkUpdate","_scheduleNetworkUpdate","shard","realm","_timer","_logger","setNetworkName","networkName","console","warn","setLedgerId","ledgerId","toString","LedgerId","fromString","_ledgerId","setNetwork","network","Error","setNetworkFromAddressBook","addressBook","setMirrorNetwork","mirrorNetwork","signOnDemand","setSignOnDemand","isTransportSecurity","setTransportSecurity","transportSecurity","key","PrivateKey","fromStringDer","setOperatorWith","publicKey","message","Promise","resolve","sign","getOperator","transactionSigner","accountId_","AccountId","validateChecksum","PublicKey","setAutoValidateChecksums","value","isAutoValidateChecksumsEnabled","operatorAccountId","operatorPublicKey","defaultMaxTransactionFee","maxTransactionFee","setDefaultMaxTransactionFee","toTinybars","toInt","setMaxTransactionFee","defaultRegenerateTransactionId","setDefaultRegenerateTransactionId","defaultMaxQueryPayment","maxQueryPayment","setDefaultMaxQueryPayment","convertToNumber","setMaxQueryPayment","maxAttempts","setMaxAttempts","maxNodeAttempts","setMaxNodeAttempts","nodeWaitTime","minBackoff","setNodeWaitTime","setMinBackoff","maxNodesPerTransaction","setMaxNodesPerTransaction","setMaxBackoff","maxBackoff","setNodeMinBackoff","nodeMinBackoff","setNodeMaxBackoff","nodeMaxBackoff","setNodeMinReadmitPeriod","nodeMinReadmitPeriod","setNodeMaxReadmitPeriod","nodeMaxReadmitPeriod","setRequestTimeout","requestTimeout","networkUpdatePeriod","setNetworkUpdatePeriod","clearTimeout","setLogger","logger","ping","AccountBalanceQuery","setNodeAccountIds","execute","pingAll","nodeAccountId","Object","values","updateNetwork","AddressBookQuery","setFileId","FileId","getAddressBookFileIdFor","error","trace","close","setTimeout","async","isClientShutDown","_validateNetworkConsistency","keys","length","entries","accountIdStr","firstNodeShard","firstNodeRealm","split","map","Number","isNetworkValid","every","currentShard","currentRealm","_extractShardRealm","firstNodeAccountId"],"mappings":"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"}
1
+ {"version":3,"file":"Client.js","sources":["../../src/client/Client.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport AccountId from \"../account/AccountId.js\";\nimport AccountBalanceQuery from \"../account/AccountBalanceQuery.js\";\nimport Hbar from \"../Hbar.js\";\nimport Network from \"./Network.js\";\nimport MirrorNetwork from \"./MirrorNetwork.js\";\nimport PublicKey from \"../PublicKey.js\";\nimport PrivateKey from \"../PrivateKey.js\";\nimport LedgerId from \"../LedgerId.js\";\nimport FileId from \"../file/FileId.js\";\nimport Logger from \"../logger/Logger.js\"; // eslint-disable-line\nimport { convertToNumber } from \"../util.js\";\nimport AddressBookQuery from \"../network/AddressBookQuery.js\";\n\n/**\n * @typedef {import(\"../channel/Channel.js\").default} Channel\n * @typedef {import(\"../channel/MirrorChannel.js\").default} MirrorChannel\n * @typedef {import(\"../address_book/NodeAddressBook.js\").default} NodeAddressBook\n */\n\n/**\n * @typedef {object} Operator\n * @property {string | PrivateKey} privateKey\n * @property {string | AccountId} accountId\n */\n\n/**\n * @typedef {object} ClientOperator\n * @property {PublicKey} publicKey\n * @property {AccountId} accountId\n * @property {(message: Uint8Array) => Promise<Uint8Array>} transactionSigner\n */\n\n/**\n * @typedef {object} ClientConfiguration\n * @property {{[key: string]: (string | AccountId)} | string} [network]\n * @property {string[] | string} [mirrorNetwork]\n * @property {Operator} [operator]\n * @property {boolean} [scheduleNetworkUpdate]\n * @property {number} [shard]\n * @property {number} [realm]\n */\n\n/**\n * @typedef {\"mainnet\" | \"testnet\" | \"previewnet\"} NetworkName\n */\n\n/**\n * The `Client` class is the main entry point for interacting with the Hedera Hashgraph network.\n * It provides methods for managing network connections, setting operators, handling transactions\n * and queries, and configuring various client settings.\n *\n * @abstract\n * @template {Channel} ChannelT\n * @template {MirrorChannel} MirrorChannelT\n */\nexport default class Client {\n /**\n * @protected\n * @hideconstructor\n * @param {ClientConfiguration} [props]\n */\n constructor(props) {\n /**\n * List of mirror network URLs.\n *\n * @internal\n * @type {MirrorNetwork}\n */\n this._mirrorNetwork = new MirrorNetwork(\n this._createMirrorNetworkChannel(),\n );\n\n /**\n * Map of node account ID (as a string)\n * to the node URL.\n *\n * @internal\n * @type {Network}\n */\n this._network = new Network(this._createNetworkChannel());\n\n /**\n * @internal\n * @type {?ClientOperator}\n */\n this._operator = null;\n\n /**\n * @private\n * @type {?Hbar}\n */\n this._defaultMaxTransactionFee = null;\n\n /**\n * @private\n * @type {Hbar}\n */\n this._defaultMaxQueryPayment = new Hbar(1);\n\n if (props != null) {\n if (props.operator != null) {\n this.setOperator(\n props.operator.accountId,\n props.operator.privateKey,\n );\n }\n }\n\n /** @type {number | null} */\n this._maxAttempts = null;\n\n /** @private */\n this._signOnDemand = false;\n\n /** @private */\n this._autoValidateChecksums = false;\n\n /** @private */\n this._minBackoff = 250;\n\n /** @private */\n this._maxBackoff = 8000;\n\n /** @private */\n this._defaultRegenerateTransactionId = true;\n\n /** @private */\n this._requestTimeout = null;\n\n /**\n * @type {boolean}\n */\n this._isUpdatingNetwork = false;\n\n /** @private */\n this._networkUpdatePeriod = 24 * 60 * 60 * 1000;\n\n /** @private */\n this._isShutdown = false;\n\n this._shard = 0;\n\n this._realm = 0;\n\n if (props != null && props.scheduleNetworkUpdate !== false) {\n this._scheduleNetworkUpdate();\n }\n\n if (props != null && props.shard != null) {\n this._shard = props.shard;\n }\n\n if (props != null && props.realm != null) {\n this._realm = props.realm;\n }\n\n /** @internal */\n /** @type {NodeJS.Timeout} */\n this._timer;\n\n /**\n * Logger\n *\n * @external\n * @type {Logger | null}\n */\n this._logger = null;\n }\n\n /**\n * @deprecated\n * @param {NetworkName} networkName\n * @returns {this}\n */\n setNetworkName(networkName) {\n // uses custom NetworkName type\n // remove if phasing out set|get NetworkName\n console.warn(\"Deprecated: Use `setLedgerId` instead\");\n return this.setLedgerId(networkName);\n }\n\n /**\n * @deprecated\n * @returns {string | null}\n */\n get networkName() {\n console.warn(\"Deprecated: Use `ledgerId` instead\");\n return this.ledgerId != null ? this.ledgerId.toString() : null;\n }\n\n /**\n * @param {string|LedgerId} ledgerId\n * @returns {this}\n */\n setLedgerId(ledgerId) {\n this._network.setLedgerId(\n typeof ledgerId === \"string\"\n ? LedgerId.fromString(ledgerId)\n : ledgerId,\n );\n\n return this;\n }\n\n /**\n * @returns {LedgerId | null}\n */\n get ledgerId() {\n return this._network._ledgerId != null ? this._network.ledgerId : null;\n }\n\n /**\n * @param {{[key: string]: (string | AccountId)} | string} network\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setNetwork(network) {\n // TODO: This logic _can_ be de-duplicated and likely should\n throw new Error(\"not implemented\");\n }\n\n /**\n * @param {NodeAddressBook} addressBook\n * @returns {this}\n */\n setNetworkFromAddressBook(addressBook) {\n this._network.setNetworkFromAddressBook(addressBook);\n return this;\n }\n\n /**\n * @returns {{[key: string]: (string | AccountId)}}\n */\n get network() {\n return this._network.network;\n }\n\n /**\n * @returns {number}\n */\n get shard() {\n return this._shard;\n }\n\n /**\n * @returns {number}\n */\n get realm() {\n return this._realm;\n }\n\n /**\n * @param {string[] | string} mirrorNetwork\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setMirrorNetwork(mirrorNetwork) {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @returns {string[]}\n */\n get mirrorNetwork() {\n return this._mirrorNetwork.network;\n }\n\n /**\n * @returns {string}\n * @throws {Error} When no mirror network is configured or available\n */\n get mirrorRestApiBaseUrl() {\n return this._mirrorNetwork.mirrorRestApiBaseUrl;\n }\n\n /**\n * @returns {boolean}\n */\n get signOnDemand() {\n return this._signOnDemand;\n }\n\n /**\n * @param {boolean} signOnDemand\n */\n setSignOnDemand(signOnDemand) {\n this._signOnDemand = signOnDemand;\n }\n\n /**\n * @returns {boolean}\n */\n isTransportSecurity() {\n return this._network.isTransportSecurity();\n }\n\n /**\n * @param {boolean} transportSecurity\n * @returns {this}\n */\n setTransportSecurity(transportSecurity) {\n this._network.setTransportSecurity(transportSecurity);\n return this;\n }\n\n /**\n * Set the account that will, by default, pay for transactions and queries built with this client.\n * NOTE: When using string for private key, the string needs to contain DER headers\n *\n * @param {AccountId | string} accountId\n * @param {PrivateKey | string} privateKey\n * @returns {this}\n */\n setOperator(accountId, privateKey) {\n const key =\n typeof privateKey === \"string\"\n ? PrivateKey.fromStringDer(privateKey)\n : privateKey;\n\n return this.setOperatorWith(accountId, key.publicKey, (message) =>\n Promise.resolve(key.sign(message)),\n );\n }\n\n /**\n * @returns {?ClientOperator}\n */\n getOperator() {\n return this._operator;\n }\n\n /**\n * Sets the account that will, by default, pay for transactions and queries built with\n * this client.\n *\n * @param {AccountId | string} accountId\n * @param {PublicKey | string} publicKey\n * @param {(message: Uint8Array) => Promise<Uint8Array>} transactionSigner\n * @returns {this}\n */\n setOperatorWith(accountId, publicKey, transactionSigner) {\n const accountId_ =\n accountId instanceof AccountId\n ? accountId\n : AccountId.fromString(accountId);\n\n if (this._network._ledgerId != null) {\n accountId_.validateChecksum(this);\n }\n\n this._operator = {\n transactionSigner,\n\n accountId: accountId_,\n\n publicKey:\n publicKey instanceof PublicKey\n ? publicKey\n : PublicKey.fromString(publicKey),\n };\n\n return this;\n }\n\n /**\n * @param {boolean} value\n * @returns {this}\n */\n setAutoValidateChecksums(value) {\n this._autoValidateChecksums = value;\n return this;\n }\n\n /**\n * @returns {boolean}\n */\n isAutoValidateChecksumsEnabled() {\n return this._autoValidateChecksums;\n }\n\n /**\n * @returns {?AccountId}\n */\n get operatorAccountId() {\n return this._operator != null ? this._operator.accountId : null;\n }\n\n /**\n * @returns {?PublicKey}\n */\n get operatorPublicKey() {\n return this._operator != null ? this._operator.publicKey : null;\n }\n\n /**\n * @returns {?Hbar}\n */\n get defaultMaxTransactionFee() {\n return this._defaultMaxTransactionFee;\n }\n\n /**\n * @deprecated - Use `defaultMaxTransactionFee` instead\n * @returns {?Hbar}\n */\n get maxTransactionFee() {\n return this.defaultMaxTransactionFee;\n }\n\n /**\n * Set the defaultimum fee to be paid for transactions\n * executed by this client.\n *\n * @param {Hbar} defaultMaxTransactionFee\n * @returns {this}\n */\n setDefaultMaxTransactionFee(defaultMaxTransactionFee) {\n if (defaultMaxTransactionFee.toTinybars().toInt() < 0) {\n throw new Error(\"defaultMaxTransactionFee must be non-negative\");\n }\n this._defaultMaxTransactionFee = defaultMaxTransactionFee;\n return this;\n }\n\n /**\n * @deprecated - Use `setDefaultMaxTransactionFee()` instead\n * Set the maximum fee to be paid for transactions\n * executed by this client.\n * @param {Hbar} maxTransactionFee\n * @returns {this}\n */\n setMaxTransactionFee(maxTransactionFee) {\n return this.setDefaultMaxTransactionFee(maxTransactionFee);\n }\n\n /**\n * @returns {boolean}\n */\n get defaultRegenerateTransactionId() {\n return this._defaultRegenerateTransactionId;\n }\n\n /**\n * Set if a new transaction ID should be generated when a `TRANSACTION_EXPIRED` status\n * is returned.\n *\n * @param {boolean} defaultRegenerateTransactionId\n * @returns {this}\n */\n setDefaultRegenerateTransactionId(defaultRegenerateTransactionId) {\n this._defaultRegenerateTransactionId = defaultRegenerateTransactionId;\n return this;\n }\n\n /**\n * @returns {Hbar}\n */\n get defaultMaxQueryPayment() {\n return this._defaultMaxQueryPayment;\n }\n\n /**\n * @deprecated in a favor of defaultMaxQueryPayment\n * @returns {Hbar}\n */\n get maxQueryPayment() {\n return this.defaultMaxQueryPayment;\n }\n\n /**\n * Set the maximum payment allowable for queries.\n *\n * @param {Hbar} defaultMaxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setDefaultMaxQueryPayment(defaultMaxQueryPayment) {\n const isMaxQueryPaymentNegative =\n convertToNumber(defaultMaxQueryPayment.toTinybars()) < 0;\n if (isMaxQueryPaymentNegative) {\n throw new Error(\"defaultMaxQueryPayment must be non-negative\");\n }\n this._defaultMaxQueryPayment = defaultMaxQueryPayment;\n return this;\n }\n /**\n * @deprecated in a favor of setDefaultMaxQueryPayment()\n * Set the maximum payment allowable for queries.\n * @param {Hbar} maxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setMaxQueryPayment(maxQueryPayment) {\n return this.setDefaultMaxQueryPayment(maxQueryPayment);\n }\n\n /**\n * @returns {number}\n */\n get maxAttempts() {\n return this._maxAttempts != null ? this._maxAttempts : 10;\n }\n\n /**\n * @param {number} maxAttempts\n * @returns {this}\n */\n setMaxAttempts(maxAttempts) {\n this._maxAttempts = maxAttempts;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxNodeAttempts() {\n return this._network.maxNodeAttempts;\n }\n\n /**\n * @param {number} maxNodeAttempts\n * @returns {this}\n */\n setMaxNodeAttempts(maxNodeAttempts) {\n this._network.setMaxNodeAttempts(maxNodeAttempts);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeWaitTime() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeWaitTime\n * @returns {this}\n */\n setNodeWaitTime(nodeWaitTime) {\n this._network.setMinBackoff(nodeWaitTime);\n return this;\n }\n\n /**\n * Gets the maximum number of nodes that a transaction or query will attempt to execute against.\n *\n * @returns {number} The current maximum nodes per transaction setting.\n * Returns -1 if no limit is set (uses network defaults).\n */\n get maxNodesPerTransaction() {\n return this._network.maxNodesPerTransaction;\n }\n\n /**\n * Sets the maximum number of nodes that a transaction or query will execute against.\n *\n * - **Before freezing**: Limits automatic node selection when no explicit nodes are set\n * - **After freezing**: Trims frozen transactions to the first N nodes while preserving signatures\n * - **Special values**: 0 disables limiting, values > available nodes cause no trimming\n *\n * @param {number} maxNodesPerTransaction - Maximum nodes per transaction. Set to 0 to disable.\n * @returns {this} The client instance for method chaining\n */\n setMaxNodesPerTransaction(maxNodesPerTransaction) {\n this._network.setMaxNodesPerTransaction(maxNodesPerTransaction);\n return this;\n }\n\n /**\n * @param {?number} minBackoff\n * @returns {this}\n */\n setMinBackoff(minBackoff) {\n if (minBackoff == null) {\n throw new Error(\"minBackoff cannot be null.\");\n }\n if (minBackoff > this._maxBackoff) {\n throw new Error(\"minBackoff cannot be larger than maxBackoff.\");\n }\n this._minBackoff = minBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get minBackoff() {\n return this._minBackoff;\n }\n\n /**\n * @param {?number} maxBackoff\n * @returns {this}\n */\n setMaxBackoff(maxBackoff) {\n if (maxBackoff == null) {\n throw new Error(\"maxBackoff cannot be null.\");\n } else if (maxBackoff < this._minBackoff) {\n throw new Error(\"maxBackoff cannot be smaller than minBackoff.\");\n }\n this._maxBackoff = maxBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxBackoff() {\n return this._maxBackoff;\n }\n\n /**\n * @param {number} nodeMinBackoff\n * @returns {this}\n */\n setNodeMinBackoff(nodeMinBackoff) {\n this._network.setMinBackoff(nodeMinBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinBackoff() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeMaxBackoff\n * @returns {this}\n */\n setNodeMaxBackoff(nodeMaxBackoff) {\n this._network.setMaxBackoff(nodeMaxBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxBackoff() {\n return this._network.maxBackoff;\n }\n\n /**\n * @param {number} nodeMinReadmitPeriod\n * @returns {this}\n */\n setNodeMinReadmitPeriod(nodeMinReadmitPeriod) {\n this._network.setNodeMinReadmitPeriod(nodeMinReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinReadmitPeriod() {\n return this._network.nodeMinReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMaxReadmitPeriod\n * @returns {this}\n */\n setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod) {\n this._network.setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxReadmitPeriod() {\n return this._network.nodeMaxReadmitPeriod;\n }\n\n /**\n * @param {number} requestTimeout - Number of milliseconds\n * @returns {this}\n */\n setRequestTimeout(requestTimeout) {\n this._requestTimeout = requestTimeout;\n return this;\n }\n\n /**\n * @returns {?number}\n */\n get requestTimeout() {\n return this._requestTimeout;\n }\n\n /**\n * @returns {number}\n */\n get networkUpdatePeriod() {\n return this._networkUpdatePeriod;\n }\n\n /**\n * @param {number} networkUpdatePeriod\n * @returns {this}\n */\n setNetworkUpdatePeriod(networkUpdatePeriod) {\n clearTimeout(this._timer);\n this._networkUpdatePeriod = networkUpdatePeriod;\n this._scheduleNetworkUpdate();\n return this;\n }\n /**\n * Set logger\n *\n * @param {Logger} logger\n * @returns {this}\n */\n setLogger(logger) {\n this._logger = logger;\n return this;\n }\n\n /**\n * Get logger if set\n *\n * @returns {?Logger}\n */\n get logger() {\n return this._logger;\n }\n\n /**\n * @param {AccountId | string} accountId\n */\n async ping(accountId) {\n await new AccountBalanceQuery({ accountId })\n .setNodeAccountIds([\n accountId instanceof AccountId\n ? accountId\n : AccountId.fromString(accountId),\n ])\n .execute(this);\n }\n\n async pingAll() {\n for (const nodeAccountId of Object.values(this._network.network)) {\n await this.ping(nodeAccountId);\n }\n }\n\n /**\n * Update the network address book.\n * @returns {Promise<this>}\n */\n async updateNetwork() {\n if (this._isUpdatingNetwork) {\n return this;\n }\n\n this._isUpdatingNetwork = true;\n\n try {\n const addressBook = await new AddressBookQuery()\n .setFileId(\n FileId.getAddressBookFileIdFor(this._shard, this._realm),\n )\n .execute(this);\n this.setNetworkFromAddressBook(addressBook);\n } catch (error) {\n if (this._logger) {\n this._logger.trace(\n `failed to update client address book: ${\n /** @type {Error} */ (error).toString()\n }`,\n );\n }\n } finally {\n this._isUpdatingNetwork = false;\n }\n\n return this;\n }\n\n /**\n * @returns {void}\n */\n close() {\n this._network.close();\n this._mirrorNetwork.close();\n this._isShutdown = true;\n clearTimeout(this._timer);\n }\n\n /**\n * @abstract\n * @returns {(address: string) => ChannelT}\n */\n _createNetworkChannel() {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @abstract\n * @returns {(address: string) => MirrorChannelT}\n */\n _createMirrorNetworkChannel() {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @private\n */\n _scheduleNetworkUpdate() {\n // This is the automatic network update promise that _eventually_ completes\n // eslint-disable-next-line @typescript-eslint/no-floating-promises,@typescript-eslint/no-misused-promises\n this._timer = setTimeout(async () => {\n await this.updateNetwork();\n\n if (!this._isShutdown) {\n // Recall this method to continuously update the network\n // every `networkUpdatePeriod` amount of itme\n this._scheduleNetworkUpdate();\n }\n }, this._networkUpdatePeriod);\n }\n\n /**\n * @returns {boolean}\n */\n get isClientShutDown() {\n return this._isShutdown;\n }\n\n /**\n * Validates that all nodes in a network are in the same shard and realm.\n *\n * @param {{[key: string]: (string | AccountId)}} network\n */\n static _validateNetworkConsistency(network) {\n if (Object.keys(network).length === 0) {\n return;\n }\n\n const [, nodeAccountId] = Object.entries(network)[0];\n\n const accountIdStr = nodeAccountId.toString();\n\n const [firstNodeShard, firstNodeRealm] = accountIdStr\n .split(\".\")\n .map(Number);\n\n const isNetworkValid = Object.values(network).every((accountId) => {\n const accountIdStr = accountId.toString();\n\n const [currentShard, currentRealm] = accountIdStr\n .split(\".\")\n .map(Number);\n return (\n currentShard === firstNodeShard &&\n currentRealm === firstNodeRealm\n );\n });\n\n if (!isNetworkValid) {\n throw new Error(\n \"Network is not valid, all nodes must be in the same shard and realm\",\n );\n }\n }\n\n /**\n * Extracts shard and realm values from a network configuration.\n * Note: This method assumes the network is consistent (all nodes in same shard/realm).\n * Use validateNetworkConsistency() first to ensure this.\n *\n * @param {{[key: string]: (string | AccountId)}} network\n * @returns {{shard: number, realm: number}}\n */\n static _extractShardRealm(network) {\n const entries = Object.entries(network);\n if (entries.length === 0) {\n return { shard: 0, realm: 0 };\n }\n\n const [, firstNodeAccountId] = entries[0];\n\n const accountIdStr = firstNodeAccountId.toString();\n const [shard, realm] = accountIdStr.split(\".\").map(Number);\n\n return { shard, realm };\n }\n}\n"],"names":["Client","constructor","props","this","_mirrorNetwork","MirrorNetwork","_createMirrorNetworkChannel","_network","Network","_createNetworkChannel","_operator","_defaultMaxTransactionFee","_defaultMaxQueryPayment","Hbar","operator","setOperator","accountId","privateKey","_maxAttempts","_signOnDemand","_autoValidateChecksums","_minBackoff","_maxBackoff","_defaultRegenerateTransactionId","_requestTimeout","_isUpdatingNetwork","_networkUpdatePeriod","_isShutdown","_shard","_realm","scheduleNetworkUpdate","_scheduleNetworkUpdate","shard","realm","_timer","_logger","setNetworkName","networkName","console","warn","setLedgerId","ledgerId","toString","LedgerId","fromString","_ledgerId","setNetwork","network","Error","setNetworkFromAddressBook","addressBook","setMirrorNetwork","mirrorNetwork","mirrorRestApiBaseUrl","signOnDemand","setSignOnDemand","isTransportSecurity","setTransportSecurity","transportSecurity","key","PrivateKey","fromStringDer","setOperatorWith","publicKey","message","Promise","resolve","sign","getOperator","transactionSigner","accountId_","AccountId","validateChecksum","PublicKey","setAutoValidateChecksums","value","isAutoValidateChecksumsEnabled","operatorAccountId","operatorPublicKey","defaultMaxTransactionFee","maxTransactionFee","setDefaultMaxTransactionFee","toTinybars","toInt","setMaxTransactionFee","defaultRegenerateTransactionId","setDefaultRegenerateTransactionId","defaultMaxQueryPayment","maxQueryPayment","setDefaultMaxQueryPayment","convertToNumber","setMaxQueryPayment","maxAttempts","setMaxAttempts","maxNodeAttempts","setMaxNodeAttempts","nodeWaitTime","minBackoff","setNodeWaitTime","setMinBackoff","maxNodesPerTransaction","setMaxNodesPerTransaction","setMaxBackoff","maxBackoff","setNodeMinBackoff","nodeMinBackoff","setNodeMaxBackoff","nodeMaxBackoff","setNodeMinReadmitPeriod","nodeMinReadmitPeriod","setNodeMaxReadmitPeriod","nodeMaxReadmitPeriod","setRequestTimeout","requestTimeout","networkUpdatePeriod","setNetworkUpdatePeriod","clearTimeout","setLogger","logger","ping","AccountBalanceQuery","setNodeAccountIds","execute","pingAll","nodeAccountId","Object","values","updateNetwork","AddressBookQuery","setFileId","FileId","getAddressBookFileIdFor","error","trace","close","setTimeout","async","isClientShutDown","_validateNetworkConsistency","keys","length","entries","accountIdStr","firstNodeShard","firstNodeRealm","split","map","Number","isNetworkValid","every","currentShard","currentRealm","_extractShardRealm","firstNodeAccountId"],"mappings":"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"}
@@ -85,5 +85,21 @@ class MirrorNetwork extends _ManagedNetwork.default {
85
85
  getNextMirrorNode() {
86
86
  return this._getNumberOfMostHealthyNodes(1)[0];
87
87
  }
88
+
89
+ /**
90
+ * Gets the base URL for the mirror node REST API.
91
+ *
92
+ * @returns {string} The base URL for the mirror node REST API
93
+ * @throws {Error} When no mirror network is configured or available
94
+ */
95
+ get mirrorRestApiBaseUrl() {
96
+ try {
97
+ const mirrorNode = this.getNextMirrorNode();
98
+ return mirrorNode.mirrorRestApiBaseUrl;
99
+ } catch (error) {
100
+ // Re-throw with a more descriptive error message
101
+ throw new Error("Client has no mirror network configured or no healthy mirror nodes are available");
102
+ }
103
+ }
88
104
  }
89
105
  exports.default = MirrorNetwork;
@@ -21,6 +21,13 @@ export default class MirrorNetwork extends ManagedNetwork<import("../channel/Mir
21
21
  * @returns {MirrorNode}
22
22
  */
23
23
  getNextMirrorNode(): MirrorNode;
24
+ /**
25
+ * Gets the base URL for the mirror node REST API.
26
+ *
27
+ * @returns {string} The base URL for the mirror node REST API
28
+ * @throws {Error} When no mirror network is configured or available
29
+ */
30
+ get mirrorRestApiBaseUrl(): string;
24
31
  }
25
32
  export type MirrorChannel = import("../channel/MirrorChannel.js").default;
26
33
  import MirrorNode from "../MirrorNode.js";
@@ -1,2 +1,2 @@
1
- import e from"../MirrorNode.js";import t from"./ManagedNetwork.js";class r extends t{constructor(e){super(e)}setNetwork(e){this._setNetwork(new Map(e.map(e=>[e,e])))}get network(){var e=[];for(const t of this._nodes)e.push(t.address.toString());return e}_createNodeFromNetworkEntry(t){return new e({newNode:{address:t[1],channelInitFunction:this._createNetworkChannel}}).setMinBackoff(this._minBackoff)}_getNodesToRemove(e){const t=[],r=Object.values(e);for(let e=this._nodes.length-1;e>=0;e--){const o=this._nodes[e];r.includes(o.address.toString())||t.push(e)}return t}getNextMirrorNode(){return this._getNumberOfMostHealthyNodes(1)[0]}}export{r as default};
1
+ import e from"../MirrorNode.js";import r from"./ManagedNetwork.js";class t extends r{constructor(e){super(e)}setNetwork(e){this._setNetwork(new Map(e.map(e=>[e,e])))}get network(){var e=[];for(const r of this._nodes)e.push(r.address.toString());return e}_createNodeFromNetworkEntry(r){return new e({newNode:{address:r[1],channelInitFunction:this._createNetworkChannel}}).setMinBackoff(this._minBackoff)}_getNodesToRemove(e){const r=[],t=Object.values(e);for(let e=this._nodes.length-1;e>=0;e--){const o=this._nodes[e];t.includes(o.address.toString())||r.push(e)}return r}getNextMirrorNode(){return this._getNumberOfMostHealthyNodes(1)[0]}get mirrorRestApiBaseUrl(){try{return this.getNextMirrorNode().mirrorRestApiBaseUrl}catch(e){throw new Error("Client has no mirror network configured or no healthy mirror nodes are available")}}}export{t as default};
2
2
  //# sourceMappingURL=MirrorNetwork.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MirrorNetwork.js","sources":["../../src/client/MirrorNetwork.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport MirrorNode from \"../MirrorNode.js\";\nimport ManagedNetwork from \"./ManagedNetwork.js\";\n\n/**\n * @typedef {import(\"../channel/MirrorChannel.js\").default} MirrorChannel\n */\n\n/**\n * @augments {ManagedNetwork<MirrorChannel, MirrorNode, string>}\n */\nexport default class MirrorNetwork extends ManagedNetwork {\n /**\n * @param {(address: string) => MirrorChannel} channelInitFunction\n */\n constructor(channelInitFunction) {\n super(channelInitFunction);\n }\n\n /**\n * @param {string[]} network\n */\n setNetwork(network) {\n // eslint-disable-next-line ie11/no-collection-args\n this._setNetwork(new Map(network.map((address) => [address, address])));\n }\n\n /**\n * @returns {string[]}\n */\n get network() {\n /**\n * @type {string[]}\n */\n var n = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const node of this._nodes) {\n n.push(node.address.toString());\n }\n\n return n;\n }\n\n /**\n * @abstract\n * @param {[string, string]} entry\n * @returns {MirrorNode}\n */\n _createNodeFromNetworkEntry(entry) {\n return new MirrorNode({\n newNode: {\n address: entry[1],\n channelInitFunction: this._createNetworkChannel,\n },\n }).setMinBackoff(this._minBackoff);\n }\n\n /**\n * @abstract\n * @param {Map<string, string>} network\n * @returns {number[]}\n */\n _getNodesToRemove(network) {\n const indexes = [];\n\n const values = Object.values(network);\n\n for (let i = this._nodes.length - 1; i >= 0; i--) {\n const node = this._nodes[i];\n\n if (!values.includes(node.address.toString())) {\n indexes.push(i);\n }\n }\n\n return indexes;\n }\n\n /**\n * @returns {MirrorNode}\n */\n getNextMirrorNode() {\n return this._getNumberOfMostHealthyNodes(1)[0];\n }\n}\n"],"names":["MirrorNetwork","ManagedNetwork","constructor","channelInitFunction","super","setNetwork","network","this","_setNetwork","Map","map","address","n","node","_nodes","push","toString","_createNodeFromNetworkEntry","entry","MirrorNode","newNode","_createNetworkChannel","setMinBackoff","_minBackoff","_getNodesToRemove","indexes","values","Object","i","length","includes","getNextMirrorNode","_getNumberOfMostHealthyNodes"],"mappings":"mEAYe,MAAMA,UAAsBC,EAIvC,WAAAC,CAAYC,GACRC,MAAMD,EACd,CAKI,UAAAE,CAAWC,GAEPC,KAAKC,YAAY,IAAIC,IAAIH,EAAQI,IAAKC,GAAY,CAACA,EAASA,KACpE,CAKI,WAAIL,GAIA,IAAIM,EAAI,GAGR,IAAK,MAAMC,KAAQN,KAAKO,OACpBF,EAAEG,KAAKF,EAAKF,QAAQK,YAGxB,OAAOJ,CACf,CAOI,2BAAAK,CAA4BC,GACxB,OAAO,IAAIC,EAAW,CAClBC,QAAS,CACLT,QAASO,EAAM,GACff,oBAAqBI,KAAKc,yBAE/BC,cAAcf,KAAKgB,YAC9B,CAOI,iBAAAC,CAAkBlB,GACd,MAAMmB,EAAU,GAEVC,EAASC,OAAOD,OAAOpB,GAE7B,IAAK,IAAIsB,EAAIrB,KAAKO,OAAOe,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC9C,MAAMf,EAAON,KAAKO,OAAOc,GAEpBF,EAAOI,SAASjB,EAAKF,QAAQK,aAC9BS,EAAQV,KAAKa,EAE7B,CAEQ,OAAOH,CACf,CAKI,iBAAAM,GACI,OAAOxB,KAAKyB,6BAA6B,GAAG,EACpD"}
1
+ {"version":3,"file":"MirrorNetwork.js","sources":["../../src/client/MirrorNetwork.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport MirrorNode from \"../MirrorNode.js\";\nimport ManagedNetwork from \"./ManagedNetwork.js\";\n\n/**\n * @typedef {import(\"../channel/MirrorChannel.js\").default} MirrorChannel\n */\n\n/**\n * @augments {ManagedNetwork<MirrorChannel, MirrorNode, string>}\n */\nexport default class MirrorNetwork extends ManagedNetwork {\n /**\n * @param {(address: string) => MirrorChannel} channelInitFunction\n */\n constructor(channelInitFunction) {\n super(channelInitFunction);\n }\n\n /**\n * @param {string[]} network\n */\n setNetwork(network) {\n // eslint-disable-next-line ie11/no-collection-args\n this._setNetwork(new Map(network.map((address) => [address, address])));\n }\n\n /**\n * @returns {string[]}\n */\n get network() {\n /**\n * @type {string[]}\n */\n var n = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const node of this._nodes) {\n n.push(node.address.toString());\n }\n\n return n;\n }\n\n /**\n * @abstract\n * @param {[string, string]} entry\n * @returns {MirrorNode}\n */\n _createNodeFromNetworkEntry(entry) {\n return new MirrorNode({\n newNode: {\n address: entry[1],\n channelInitFunction: this._createNetworkChannel,\n },\n }).setMinBackoff(this._minBackoff);\n }\n\n /**\n * @abstract\n * @param {Map<string, string>} network\n * @returns {number[]}\n */\n _getNodesToRemove(network) {\n const indexes = [];\n\n const values = Object.values(network);\n\n for (let i = this._nodes.length - 1; i >= 0; i--) {\n const node = this._nodes[i];\n\n if (!values.includes(node.address.toString())) {\n indexes.push(i);\n }\n }\n\n return indexes;\n }\n\n /**\n * @returns {MirrorNode}\n */\n getNextMirrorNode() {\n return this._getNumberOfMostHealthyNodes(1)[0];\n }\n\n /**\n * Gets the base URL for the mirror node REST API.\n *\n * @returns {string} The base URL for the mirror node REST API\n * @throws {Error} When no mirror network is configured or available\n */\n get mirrorRestApiBaseUrl() {\n try {\n const mirrorNode = this.getNextMirrorNode();\n return mirrorNode.mirrorRestApiBaseUrl;\n } catch (error) {\n // Re-throw with a more descriptive error message\n throw new Error(\n \"Client has no mirror network configured or no healthy mirror nodes are available\",\n );\n }\n }\n}\n"],"names":["MirrorNetwork","ManagedNetwork","constructor","channelInitFunction","super","setNetwork","network","this","_setNetwork","Map","map","address","n","node","_nodes","push","toString","_createNodeFromNetworkEntry","entry","MirrorNode","newNode","_createNetworkChannel","setMinBackoff","_minBackoff","_getNodesToRemove","indexes","values","Object","i","length","includes","getNextMirrorNode","_getNumberOfMostHealthyNodes","mirrorRestApiBaseUrl","error","Error"],"mappings":"mEAYe,MAAMA,UAAsBC,EAIvC,WAAAC,CAAYC,GACRC,MAAMD,EACd,CAKI,UAAAE,CAAWC,GAEPC,KAAKC,YAAY,IAAIC,IAAIH,EAAQI,IAAKC,GAAY,CAACA,EAASA,KACpE,CAKI,WAAIL,GAIA,IAAIM,EAAI,GAGR,IAAK,MAAMC,KAAQN,KAAKO,OACpBF,EAAEG,KAAKF,EAAKF,QAAQK,YAGxB,OAAOJ,CACf,CAOI,2BAAAK,CAA4BC,GACxB,OAAO,IAAIC,EAAW,CAClBC,QAAS,CACLT,QAASO,EAAM,GACff,oBAAqBI,KAAKc,yBAE/BC,cAAcf,KAAKgB,YAC9B,CAOI,iBAAAC,CAAkBlB,GACd,MAAMmB,EAAU,GAEVC,EAASC,OAAOD,OAAOpB,GAE7B,IAAK,IAAIsB,EAAIrB,KAAKO,OAAOe,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC9C,MAAMf,EAAON,KAAKO,OAAOc,GAEpBF,EAAOI,SAASjB,EAAKF,QAAQK,aAC9BS,EAAQV,KAAKa,EAE7B,CAEQ,OAAOH,CACf,CAKI,iBAAAM,GACI,OAAOxB,KAAKyB,6BAA6B,GAAG,EACpD,CAQI,wBAAIC,GACA,IAEI,OADmB1B,KAAKwB,oBACNE,oBACrB,CAAC,MAAOC,GAEL,MAAM,IAAIC,MACN,mFAEhB,CACA"}