@hiero-ledger/sdk 2.72.0 → 2.73.1

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 (377) hide show
  1. package/dist/umd.js +648 -338
  2. package/dist/umd.min.js +16 -15
  3. package/lib/EntityIdHelper.cjs +1 -2
  4. package/lib/EntityIdHelper.js +1 -1
  5. package/lib/EntityIdHelper.js.map +1 -1
  6. package/lib/EthereumFlow.cjs +1 -2
  7. package/lib/EthereumTransaction.cjs +1 -2
  8. package/lib/EthereumTransactionDataEip1559.cjs +1 -2
  9. package/lib/EthereumTransactionDataEip1559.js +1 -1
  10. package/lib/EthereumTransactionDataEip1559.js.map +1 -1
  11. package/lib/EthereumTransactionDataEip2930.cjs +1 -2
  12. package/lib/EthereumTransactionDataEip2930.js +1 -1
  13. package/lib/EthereumTransactionDataEip2930.js.map +1 -1
  14. package/lib/EthereumTransactionDataLegacy.cjs +1 -2
  15. package/lib/EthereumTransactionDataLegacy.js +1 -1
  16. package/lib/EthereumTransactionDataLegacy.js.map +1 -1
  17. package/lib/EvmAddress.cjs +1 -2
  18. package/lib/ExchangeRates.cjs +1 -2
  19. package/lib/Executable.cjs +1 -2
  20. package/lib/Executable.js +1 -1
  21. package/lib/Executable.js.map +1 -1
  22. package/lib/FeeComponents.cjs +1 -2
  23. package/lib/FeeData.cjs +1 -2
  24. package/lib/FeeSchedule.cjs +1 -2
  25. package/lib/FeeSchedule.js +1 -1
  26. package/lib/FeeSchedule.js.map +1 -1
  27. package/lib/FeeSchedules.cjs +1 -2
  28. package/lib/KeyList.js +1 -1
  29. package/lib/KeyList.js.map +1 -1
  30. package/lib/LedgerId.cjs +1 -2
  31. package/lib/LocalProviderWeb.cjs +165 -0
  32. package/lib/LocalProviderWeb.d.ts +127 -0
  33. package/lib/LocalProviderWeb.js +2 -0
  34. package/lib/LocalProviderWeb.js.map +1 -0
  35. package/lib/ManagedNode.js +1 -1
  36. package/lib/ManagedNode.js.map +1 -1
  37. package/lib/ObjectMap.js +1 -1
  38. package/lib/ObjectMap.js.map +1 -1
  39. package/lib/PrivateKey.js +1 -1
  40. package/lib/PrivateKey.js.map +1 -1
  41. package/lib/PrngTransaction.cjs +1 -2
  42. package/lib/PublicKey.js +1 -1
  43. package/lib/PublicKey.js.map +1 -1
  44. package/lib/StakingInfo.cjs +1 -2
  45. package/lib/Timestamp.js.map +1 -1
  46. package/lib/TransactionFeeSchedule.cjs +1 -2
  47. package/lib/TransactionFeeSchedule.js +1 -1
  48. package/lib/TransactionFeeSchedule.js.map +1 -1
  49. package/lib/Wallet.cjs +1 -2
  50. package/lib/Wallet.js +1 -1
  51. package/lib/Wallet.js.map +1 -1
  52. package/lib/account/AccountAllowanceAdjustTransaction.cjs +1 -2
  53. package/lib/account/AccountAllowanceAdjustTransaction.js +1 -1
  54. package/lib/account/AccountAllowanceAdjustTransaction.js.map +1 -1
  55. package/lib/account/AccountAllowanceApproveTransaction.cjs +1 -2
  56. package/lib/account/AccountAllowanceApproveTransaction.js +1 -1
  57. package/lib/account/AccountAllowanceApproveTransaction.js.map +1 -1
  58. package/lib/account/AccountAllowanceDeleteTransaction.cjs +1 -2
  59. package/lib/account/AccountAllowanceDeleteTransaction.js +1 -1
  60. package/lib/account/AccountAllowanceDeleteTransaction.js.map +1 -1
  61. package/lib/account/AccountBalance.cjs +1 -2
  62. package/lib/account/AccountBalanceQuery.cjs +1 -2
  63. package/lib/account/AccountCreateTransaction.cjs +1 -2
  64. package/lib/account/AccountDeleteTransaction.cjs +1 -2
  65. package/lib/account/AccountId.cjs +1 -2
  66. package/lib/account/AccountId.js +1 -1
  67. package/lib/account/AccountId.js.map +1 -1
  68. package/lib/account/AccountInfo.cjs +1 -2
  69. package/lib/account/AccountInfo.js +1 -1
  70. package/lib/account/AccountInfo.js.map +1 -1
  71. package/lib/account/AccountInfoQuery.cjs +1 -2
  72. package/lib/account/AccountRecordsQuery.cjs +1 -2
  73. package/lib/account/AccountRecordsQuery.js +1 -1
  74. package/lib/account/AccountRecordsQuery.js.map +1 -1
  75. package/lib/account/AccountUpdateTransaction.cjs +1 -2
  76. package/lib/account/HbarTransferMap.js +1 -1
  77. package/lib/account/HbarTransferMap.js.map +1 -1
  78. package/lib/account/LiveHashAddTransaction.cjs +1 -2
  79. package/lib/account/LiveHashAddTransaction.js +1 -1
  80. package/lib/account/LiveHashAddTransaction.js.map +1 -1
  81. package/lib/account/LiveHashDeleteTransaction.cjs +1 -2
  82. package/lib/account/LiveHashQuery.cjs +1 -2
  83. package/lib/account/NullableTokenDecimalMap.js +1 -1
  84. package/lib/account/NullableTokenDecimalMap.js.map +1 -1
  85. package/lib/account/TokenBalanceMap.js +1 -1
  86. package/lib/account/TokenBalanceMap.js.map +1 -1
  87. package/lib/account/TokenDecimalMap.js +1 -1
  88. package/lib/account/TokenDecimalMap.js.map +1 -1
  89. package/lib/account/TokenNftAllowance.js +1 -1
  90. package/lib/account/TokenNftAllowance.js.map +1 -1
  91. package/lib/account/TokenNftTransferMap.js +1 -1
  92. package/lib/account/TokenNftTransferMap.js.map +1 -1
  93. package/lib/account/TokenRelationshipMap.js +1 -1
  94. package/lib/account/TokenRelationshipMap.js.map +1 -1
  95. package/lib/account/TokenTransferAccountMap.js +1 -1
  96. package/lib/account/TokenTransferAccountMap.js.map +1 -1
  97. package/lib/account/TokenTransferMap.js +1 -1
  98. package/lib/account/TokenTransferMap.js.map +1 -1
  99. package/lib/account/TransferTransaction.cjs +1 -2
  100. package/lib/account/TransferTransaction.js +1 -1
  101. package/lib/account/TransferTransaction.js.map +1 -1
  102. package/lib/address_book/AddressBooks.cjs +1 -2
  103. package/lib/address_book/NodeAddress.cjs +1 -2
  104. package/lib/address_book/NodeAddress.js +1 -1
  105. package/lib/address_book/NodeAddress.js.map +1 -1
  106. package/lib/address_book/NodeAddressBook.cjs +1 -2
  107. package/lib/address_book/NodeAddressBook.js +1 -1
  108. package/lib/address_book/NodeAddressBook.js.map +1 -1
  109. package/lib/browser.cjs +8 -0
  110. package/lib/browser.d.ts +1 -0
  111. package/lib/browser.js +1 -1
  112. package/lib/channel/Channel.cjs +1 -2
  113. package/lib/channel/NativeChannel.cjs +1 -2
  114. package/lib/channel/NativeChannel.js +1 -1
  115. package/lib/channel/NativeChannel.js.map +1 -1
  116. package/lib/channel/NodeChannel.js +1 -1
  117. package/lib/channel/NodeChannel.js.map +1 -1
  118. package/lib/channel/NodeMirrorChannel.cjs +1 -2
  119. package/lib/channel/NodeMirrorChannel.js +1 -1
  120. package/lib/channel/NodeMirrorChannel.js.map +1 -1
  121. package/lib/channel/WebChannel.cjs +1 -2
  122. package/lib/client/Client.js +1 -1
  123. package/lib/client/Client.js.map +1 -1
  124. package/lib/client/ManagedNetwork.cjs +1 -2
  125. package/lib/client/ManagedNetwork.js +1 -1
  126. package/lib/client/ManagedNetwork.js.map +1 -1
  127. package/lib/client/MirrorNetwork.js +1 -1
  128. package/lib/client/MirrorNetwork.js.map +1 -1
  129. package/lib/client/NativeClient.js.map +1 -1
  130. package/lib/client/Network.js +1 -1
  131. package/lib/client/Network.js.map +1 -1
  132. package/lib/client/NodeClient.cjs +4 -11
  133. package/lib/client/NodeClient.d.ts +5 -6
  134. package/lib/client/NodeClient.js +1 -1
  135. package/lib/client/NodeClient.js.map +1 -1
  136. package/lib/client/WebClient.cjs +32 -7
  137. package/lib/client/WebClient.d.ts +10 -0
  138. package/lib/client/WebClient.js +1 -1
  139. package/lib/client/WebClient.js.map +1 -1
  140. package/lib/client/addressbooks/mainnet.cjs +1 -1
  141. package/lib/client/addressbooks/mainnet.d.ts +1 -1
  142. package/lib/client/addressbooks/mainnet.js +1 -1
  143. package/lib/client/addressbooks/mainnet.js.map +1 -1
  144. package/lib/client/addressbooks/previewnet.cjs +1 -1
  145. package/lib/client/addressbooks/previewnet.d.ts +1 -1
  146. package/lib/client/addressbooks/previewnet.js +1 -1
  147. package/lib/client/addressbooks/previewnet.js.map +1 -1
  148. package/lib/client/addressbooks/testnet.cjs +1 -1
  149. package/lib/client/addressbooks/testnet.d.ts +1 -1
  150. package/lib/client/addressbooks/testnet.js +1 -1
  151. package/lib/client/addressbooks/testnet.js.map +1 -1
  152. package/lib/constants/ClientConstants.cjs +21 -2
  153. package/lib/constants/ClientConstants.d.ts +17 -0
  154. package/lib/constants/ClientConstants.js +1 -1
  155. package/lib/constants/ClientConstants.js.map +1 -1
  156. package/lib/contract/ContractByteCodeQuery.cjs +1 -2
  157. package/lib/contract/ContractCallQuery.cjs +1 -2
  158. package/lib/contract/ContractCreateFlow.cjs +1 -2
  159. package/lib/contract/ContractCreateFlow.js +1 -1
  160. package/lib/contract/ContractCreateFlow.js.map +1 -1
  161. package/lib/contract/ContractCreateTransaction.cjs +1 -2
  162. package/lib/contract/ContractDeleteTransaction.cjs +1 -2
  163. package/lib/contract/ContractExecuteTransaction.cjs +1 -2
  164. package/lib/contract/ContractFunctionParameters.cjs +1 -2
  165. package/lib/contract/ContractFunctionParameters.js +1 -1
  166. package/lib/contract/ContractFunctionParameters.js.map +1 -1
  167. package/lib/contract/ContractFunctionResult.cjs +1 -2
  168. package/lib/contract/ContractFunctionResult.js +1 -1
  169. package/lib/contract/ContractFunctionResult.js.map +1 -1
  170. package/lib/contract/ContractFunctionSelector.cjs +1 -2
  171. package/lib/contract/ContractId.cjs +1 -2
  172. package/lib/contract/ContractId.js +1 -1
  173. package/lib/contract/ContractId.js.map +1 -1
  174. package/lib/contract/ContractInfo.cjs +1 -2
  175. package/lib/contract/ContractInfoQuery.cjs +1 -2
  176. package/lib/contract/ContractNonceInfo.cjs +1 -2
  177. package/lib/contract/ContractStateChange.cjs +1 -2
  178. package/lib/contract/ContractUpdateTransaction.cjs +1 -2
  179. package/lib/contract/DelegateContractId.js +1 -1
  180. package/lib/contract/DelegateContractId.js.map +1 -1
  181. package/lib/contract/StorageChange.cjs +1 -2
  182. package/lib/cryptography/keccak.js +1 -1
  183. package/lib/cryptography/keccak.js.map +1 -1
  184. package/lib/cryptography/sha384.native.cjs +1 -2
  185. package/lib/encoding/base64.native.js +1 -1
  186. package/lib/encoding/base64.native.js.map +1 -1
  187. package/lib/encoding/hex.browser.js +1 -1
  188. package/lib/encoding/hex.browser.js.map +1 -1
  189. package/lib/encoding/utf8.native.cjs +1 -2
  190. package/lib/exports.cjs +1 -2
  191. package/lib/file/FileAppendTransaction.cjs +1 -2
  192. package/lib/file/FileContentsQuery.cjs +1 -2
  193. package/lib/file/FileCreateTransaction.cjs +1 -2
  194. package/lib/file/FileCreateTransaction.js +1 -1
  195. package/lib/file/FileCreateTransaction.js.map +1 -1
  196. package/lib/file/FileDeleteTransaction.cjs +1 -2
  197. package/lib/file/FileId.cjs +1 -2
  198. package/lib/file/FileInfo.cjs +1 -2
  199. package/lib/file/FileInfoQuery.cjs +1 -2
  200. package/lib/file/FileUpdateTransaction.cjs +1 -2
  201. package/lib/file/FileUpdateTransaction.js +1 -1
  202. package/lib/file/FileUpdateTransaction.js.map +1 -1
  203. package/lib/network/AddressBookQuery.cjs +1 -2
  204. package/lib/network/AddressBookQuery.js +1 -1
  205. package/lib/network/AddressBookQuery.js.map +1 -1
  206. package/lib/network/AddressBookQueryWeb.js +1 -1
  207. package/lib/network/AddressBookQueryWeb.js.map +1 -1
  208. package/lib/network/NetworkVersionInfo.cjs +1 -2
  209. package/lib/network/NetworkVersionInfoQuery.cjs +1 -2
  210. package/lib/network/SemanticVersion.cjs +1 -2
  211. package/lib/node/NodeCreateTransaction.cjs +1 -2
  212. package/lib/node/NodeCreateTransaction.js +1 -1
  213. package/lib/node/NodeCreateTransaction.js.map +1 -1
  214. package/lib/node/NodeDeleteTransaction.cjs +15 -3
  215. package/lib/node/NodeDeleteTransaction.d.ts +2 -1
  216. package/lib/node/NodeDeleteTransaction.js +1 -1
  217. package/lib/node/NodeDeleteTransaction.js.map +1 -1
  218. package/lib/node/NodeUpdateTransaction.cjs +13 -3
  219. package/lib/node/NodeUpdateTransaction.d.ts +2 -1
  220. package/lib/node/NodeUpdateTransaction.js +1 -1
  221. package/lib/node/NodeUpdateTransaction.js.map +1 -1
  222. package/lib/query/CostQuery.cjs +1 -2
  223. package/lib/query/MirrorNodeContractCallQuery.cjs +1 -2
  224. package/lib/query/MirrorNodeContractEstimateQuery.cjs +1 -2
  225. package/lib/query/MirrorNodeContractQuery.cjs +2 -1
  226. package/lib/query/MirrorNodeContractQuery.js +1 -1
  227. package/lib/query/MirrorNodeContractQuery.js.map +1 -1
  228. package/lib/query/Query.cjs +1 -2
  229. package/lib/query/Query.js +1 -1
  230. package/lib/query/Query.js.map +1 -1
  231. package/lib/query/QueryBase.cjs +1 -2
  232. package/lib/schedule/ScheduleCreateTransaction.cjs +1 -2
  233. package/lib/schedule/ScheduleCreateTransaction.js +1 -1
  234. package/lib/schedule/ScheduleCreateTransaction.js.map +1 -1
  235. package/lib/schedule/ScheduleDeleteTransaction.cjs +1 -2
  236. package/lib/schedule/ScheduleId.cjs +1 -2
  237. package/lib/schedule/ScheduleInfo.cjs +1 -2
  238. package/lib/schedule/ScheduleInfoQuery.cjs +1 -2
  239. package/lib/schedule/ScheduleSignTransaction.cjs +1 -2
  240. package/lib/system/FreezeTransaction.cjs +1 -2
  241. package/lib/system/SystemDeleteTransaction.cjs +1 -2
  242. package/lib/system/SystemUndeleteTransaction.cjs +1 -2
  243. package/lib/token/AbstractTokenTransferTransaction.js +1 -1
  244. package/lib/token/AbstractTokenTransferTransaction.js.map +1 -1
  245. package/lib/token/AssessedCustomFee.js +1 -1
  246. package/lib/token/AssessedCustomFee.js.map +1 -1
  247. package/lib/token/NftId.cjs +1 -2
  248. package/lib/token/TokenAirdropTransaction.cjs +1 -2
  249. package/lib/token/TokenAssociateTransaction.cjs +1 -2
  250. package/lib/token/TokenAssociateTransaction.js +1 -1
  251. package/lib/token/TokenAssociateTransaction.js.map +1 -1
  252. package/lib/token/TokenBurnTransaction.cjs +1 -2
  253. package/lib/token/TokenBurnTransaction.js +1 -1
  254. package/lib/token/TokenBurnTransaction.js.map +1 -1
  255. package/lib/token/TokenCancelAirdropTransaction.cjs +1 -2
  256. package/lib/token/TokenCancelAirdropTransaction.js +1 -1
  257. package/lib/token/TokenCancelAirdropTransaction.js.map +1 -1
  258. package/lib/token/TokenClaimAirdropTransaction.cjs +1 -2
  259. package/lib/token/TokenClaimAirdropTransaction.js +1 -1
  260. package/lib/token/TokenClaimAirdropTransaction.js.map +1 -1
  261. package/lib/token/TokenCreateTransaction.cjs +1 -2
  262. package/lib/token/TokenCreateTransaction.js +1 -1
  263. package/lib/token/TokenCreateTransaction.js.map +1 -1
  264. package/lib/token/TokenDeleteTransaction.cjs +1 -2
  265. package/lib/token/TokenDissociateTransaction.cjs +1 -2
  266. package/lib/token/TokenDissociateTransaction.js +1 -1
  267. package/lib/token/TokenDissociateTransaction.js.map +1 -1
  268. package/lib/token/TokenFeeScheduleUpdateTransaction.cjs +1 -2
  269. package/lib/token/TokenFeeScheduleUpdateTransaction.js +1 -1
  270. package/lib/token/TokenFeeScheduleUpdateTransaction.js.map +1 -1
  271. package/lib/token/TokenFreezeTransaction.cjs +1 -2
  272. package/lib/token/TokenGrantKycTransaction.cjs +1 -2
  273. package/lib/token/TokenId.cjs +1 -2
  274. package/lib/token/TokenInfo.cjs +1 -2
  275. package/lib/token/TokenInfo.js +1 -1
  276. package/lib/token/TokenInfo.js.map +1 -1
  277. package/lib/token/TokenInfoQuery.cjs +1 -2
  278. package/lib/token/TokenMintTransaction.cjs +1 -2
  279. package/lib/token/TokenMintTransaction.js +1 -1
  280. package/lib/token/TokenMintTransaction.js.map +1 -1
  281. package/lib/token/TokenNftInfo.cjs +1 -2
  282. package/lib/token/TokenNftInfoQuery.cjs +1 -2
  283. package/lib/token/TokenNftInfoQuery.js +1 -1
  284. package/lib/token/TokenNftInfoQuery.js.map +1 -1
  285. package/lib/token/TokenNftsUpdateTransaction.cjs +1 -2
  286. package/lib/token/TokenPauseTransaction.cjs +1 -2
  287. package/lib/token/TokenRejectFlow.js +1 -1
  288. package/lib/token/TokenRejectFlow.js.map +1 -1
  289. package/lib/token/TokenRejectTransaction.cjs +1 -2
  290. package/lib/token/TokenRejectTransaction.js +1 -1
  291. package/lib/token/TokenRejectTransaction.js.map +1 -1
  292. package/lib/token/TokenRevokeKycTransaction.cjs +1 -2
  293. package/lib/token/TokenUnfreezeTransaction.cjs +1 -2
  294. package/lib/token/TokenUnpauseTransaction.cjs +1 -2
  295. package/lib/token/TokenUpdateNftsTransaction.cjs +1 -2
  296. package/lib/token/TokenUpdateTransaction.cjs +1 -2
  297. package/lib/token/TokenWipeTransaction.cjs +1 -2
  298. package/lib/token/TokenWipeTransaction.js +1 -1
  299. package/lib/token/TokenWipeTransaction.js.map +1 -1
  300. package/lib/topic/TopicCreateTransaction.cjs +1 -2
  301. package/lib/topic/TopicCreateTransaction.js +1 -1
  302. package/lib/topic/TopicCreateTransaction.js.map +1 -1
  303. package/lib/topic/TopicDeleteTransaction.cjs +1 -2
  304. package/lib/topic/TopicId.cjs +1 -2
  305. package/lib/topic/TopicInfo.cjs +1 -2
  306. package/lib/topic/TopicInfo.js +1 -1
  307. package/lib/topic/TopicInfo.js.map +1 -1
  308. package/lib/topic/TopicInfoQuery.cjs +1 -2
  309. package/lib/topic/TopicMessage.js +1 -1
  310. package/lib/topic/TopicMessage.js.map +1 -1
  311. package/lib/topic/TopicMessageQuery.cjs +1 -2
  312. package/lib/topic/TopicMessageQuery.js +1 -1
  313. package/lib/topic/TopicMessageQuery.js.map +1 -1
  314. package/lib/topic/TopicMessageSubmitTransaction.cjs +1 -2
  315. package/lib/topic/TopicUpdateTransaction.cjs +1 -2
  316. package/lib/topic/TopicUpdateTransaction.js +1 -1
  317. package/lib/topic/TopicUpdateTransaction.js.map +1 -1
  318. package/lib/transaction/BatchTransaction.cjs +1 -2
  319. package/lib/transaction/BatchTransaction.js +1 -1
  320. package/lib/transaction/BatchTransaction.js.map +1 -1
  321. package/lib/transaction/CustomFeeLimit.js +1 -1
  322. package/lib/transaction/CustomFeeLimit.js.map +1 -1
  323. package/lib/transaction/NodeAccountIdSignatureMap.cjs +1 -2
  324. package/lib/transaction/NodeAccountIdSignatureMap.js +1 -1
  325. package/lib/transaction/NodeAccountIdSignatureMap.js.map +1 -1
  326. package/lib/transaction/NodeAccountIdSignatureMapLegacy.js +1 -1
  327. package/lib/transaction/NodeAccountIdSignatureMapLegacy.js.map +1 -1
  328. package/lib/transaction/SignatureMap.js +1 -1
  329. package/lib/transaction/SignatureMap.js.map +1 -1
  330. package/lib/transaction/SignatureMapLegacy.js +1 -1
  331. package/lib/transaction/SignatureMapLegacy.js.map +1 -1
  332. package/lib/transaction/SignaturePairMap.js +1 -1
  333. package/lib/transaction/SignaturePairMap.js.map +1 -1
  334. package/lib/transaction/Transaction.cjs +1 -2
  335. package/lib/transaction/Transaction.js +1 -1
  336. package/lib/transaction/Transaction.js.map +1 -1
  337. package/lib/transaction/TransactionHashMap.cjs +1 -2
  338. package/lib/transaction/TransactionHashMap.js +1 -1
  339. package/lib/transaction/TransactionHashMap.js.map +1 -1
  340. package/lib/transaction/TransactionId.cjs +1 -2
  341. package/lib/transaction/TransactionReceipt.cjs +1 -2
  342. package/lib/transaction/TransactionReceipt.js +1 -1
  343. package/lib/transaction/TransactionReceipt.js.map +1 -1
  344. package/lib/transaction/TransactionReceiptQuery.cjs +1 -2
  345. package/lib/transaction/TransactionRecord.cjs +1 -2
  346. package/lib/transaction/TransactionRecord.js +1 -1
  347. package/lib/transaction/TransactionRecord.js.map +1 -1
  348. package/lib/transaction/TransactionRecordQuery.cjs +1 -2
  349. package/lib/transaction/TransactionResponse.cjs +1 -2
  350. package/lib/transaction/TransactionResponse.js.map +1 -1
  351. package/lib/util/ASN1-Decoder.js +1 -1
  352. package/lib/util/ASN1-Decoder.js.map +1 -1
  353. package/lib/util.js +1 -1
  354. package/lib/util.js.map +1 -1
  355. package/lib/version.js +1 -1
  356. package/package.json +75 -71
  357. package/src/Executable.js +10 -4
  358. package/src/LocalProviderWeb.js +165 -0
  359. package/src/Timestamp.js +2 -2
  360. package/src/account/AccountAllowanceAdjustTransaction.js +48 -48
  361. package/src/account/AccountAllowanceApproveTransaction.js +48 -48
  362. package/src/account/TokenNftAllowance.js +4 -4
  363. package/src/browser.js +1 -0
  364. package/src/client/NodeClient.js +6 -9
  365. package/src/client/WebClient.js +33 -8
  366. package/src/client/addressbooks/mainnet.js +1 -1
  367. package/src/client/addressbooks/previewnet.js +1 -1
  368. package/src/client/addressbooks/testnet.js +1 -1
  369. package/src/constants/ClientConstants.js +25 -0
  370. package/src/network/AddressBookQueryWeb.js +8 -2
  371. package/src/node/NodeDeleteTransaction.js +20 -1
  372. package/src/node/NodeUpdateTransaction.js +19 -1
  373. package/src/query/MirrorNodeContractQuery.js +8 -1
  374. package/src/token/TokenInfo.js +4 -4
  375. package/src/topic/TopicMessageQuery.js +7 -5
  376. package/src/transaction/TransactionRecord.js +5 -5
  377. package/src/transaction/TransactionResponse.js +3 -1
@@ -1,2 +1,2 @@
1
- import t,{encodeRequest as e,decodeUnaryResponse as a}from"./Channel.js";import{encode as s,decode as r}from"../encoding/base64.native.js";import o from"../http/HttpError.js";import n from"../http/HttpStatus.js";import{SDK_NAME as i,SDK_VERSION as p}from"../version.js";class c extends t{constructor(t){super(),this._address=t}close(){}_createUnaryClient(t){return async(c,d,l)=>{try{const b=s(new Uint8Array(e(d))),h=!(this._address.includes("localhost")||this._address.includes("127.0.0.1"))?`https://${this._address}`:`http://${this._address}`,f=await fetch(`${h}/proto.${t}/${c.name}`,{method:"POST",headers:{"content-type":"application/grpc-web-text","x-user-agent":`${i}/${p}`,"x-accept-content-transfer-encoding":"base64","x-grpc-web":"1"},body:b});if(!f.ok){l(new o(n._fromValue(f.status)),null)}const m=await f.blob(),u=await new Promise(((t,e)=>{const a=new FileReader;a.readAsDataURL(m),a.onloadend=()=>{t(a.result)},a.onerror=e}));let w;if(u.startsWith("data:application/octet-stream;base64,"))w=r(u.split("data:application/octet-stream;base64,")[1]);else{if(!u.startsWith("data:application/grpc-web+proto;base64,"))throw new Error(`Expected response data to be base64 encode with a 'data:application/octet-stream;base64,' or 'data:application/grpc-web+proto;base64,' prefix, but found: ${u}`);w=r(u.split("data:application/grpc-web+proto;base64,")[1])}l(null,a(w.buffer,w.byteOffset,w.byteLength))}catch(t){l(t,null)}}}}export{c as default};
1
+ import t,{encodeRequest as e,decodeUnaryResponse as a}from"./Channel.js";import{encode as s,decode as r}from"../encoding/base64.native.js";import o from"../http/HttpError.js";import n from"../http/HttpStatus.js";import{SDK_NAME as i,SDK_VERSION as p}from"../version.js";class c extends t{constructor(t){super(),this._address=t}close(){}_createUnaryClient(t){return async(c,d,l)=>{try{const b=s(new Uint8Array(e(d))),h=!(this._address.includes("localhost")||this._address.includes("127.0.0.1"))?`https://${this._address}`:`http://${this._address}`,f=await fetch(`${h}/proto.${t}/${c.name}`,{method:"POST",headers:{"content-type":"application/grpc-web-text","x-user-agent":`${i}/${p}`,"x-accept-content-transfer-encoding":"base64","x-grpc-web":"1"},body:b});if(!f.ok){l(new o(n._fromValue(f.status)),null)}const m=await f.blob(),u=await new Promise((t,e)=>{const a=new FileReader;a.readAsDataURL(m),a.onloadend=()=>{t(a.result)},a.onerror=e});let w;if(u.startsWith("data:application/octet-stream;base64,"))w=r(u.split("data:application/octet-stream;base64,")[1]);else{if(!u.startsWith("data:application/grpc-web+proto;base64,"))throw new Error(`Expected response data to be base64 encode with a 'data:application/octet-stream;base64,' or 'data:application/grpc-web+proto;base64,' prefix, but found: ${u}`);w=r(u.split("data:application/grpc-web+proto;base64,")[1])}l(null,a(w.buffer,w.byteOffset,w.byteLength))}catch(t){l(t,null)}}}}export{c as default};
2
2
  //# sourceMappingURL=NativeChannel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NativeChannel.js","sources":["../../src/channel/NativeChannel.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport Channel, { encodeRequest, decodeUnaryResponse } from \"./Channel.js\";\nimport * as base64 from \"../encoding/base64.native.js\";\nimport HttpError from \"../http/HttpError.js\";\nimport HttpStatus from \"../http/HttpStatus.js\";\nimport { SDK_NAME, SDK_VERSION } from \"../version.js\";\n\nexport default class NativeChannel extends Channel {\n /**\n * @param {string} address\n */\n constructor(address) {\n super();\n\n /**\n * @type {string}\n * @private\n */\n this._address = address;\n }\n\n /**\n * @override\n * @returns {void}\n */\n close() {\n // do nothing\n }\n\n /**\n * @override\n * @protected\n * @param {string} serviceName\n * @returns {import(\"protobufjs\").RPCImpl}\n */\n _createUnaryClient(serviceName) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n return async (method, requestData, callback) => {\n try {\n const data = base64.encode(\n new Uint8Array(encodeRequest(requestData)),\n );\n\n const shouldUseHttps = !(\n this._address.includes(\"localhost\") ||\n this._address.includes(\"127.0.0.1\")\n );\n\n const address = shouldUseHttps\n ? `https://${this._address}`\n : `http://${this._address}`;\n // this will be executed in react native environment sho\n // fetch should be available\n //eslint-disable-next-line n/no-unsupported-features/node-builtins\n const response = await fetch(\n `${address}/proto.${serviceName}/${method.name}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/grpc-web-text\",\n \"x-user-agent\": `${SDK_NAME}/${SDK_VERSION}`,\n \"x-accept-content-transfer-encoding\": \"base64\",\n \"x-grpc-web\": \"1\",\n },\n body: data,\n },\n );\n\n if (!response.ok) {\n const error = new HttpError(\n HttpStatus._fromValue(response.status),\n );\n callback(error, null);\n }\n\n const blob = await response.blob();\n\n /** @type {string} */\n const responseData = await new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onloadend = () => {\n resolve(/** @type {string} */ (reader.result));\n };\n reader.onerror = reject;\n });\n\n let responseBuffer;\n if (\n responseData.startsWith(\n \"data:application/octet-stream;base64,\",\n )\n ) {\n responseBuffer = base64.decode(\n responseData.split(\n \"data:application/octet-stream;base64,\",\n )[1],\n );\n } else if (\n responseData.startsWith(\n \"data:application/grpc-web+proto;base64,\",\n )\n ) {\n responseBuffer = base64.decode(\n responseData.split(\n \"data:application/grpc-web+proto;base64,\",\n )[1],\n );\n } else {\n throw new Error(\n `Expected response data to be base64 encode with a 'data:application/octet-stream;base64,' or 'data:application/grpc-web+proto;base64,' prefix, but found: ${responseData}`,\n );\n }\n\n const unaryResponse = decodeUnaryResponse(\n // @ts-ignore\n responseBuffer.buffer,\n responseBuffer.byteOffset,\n responseBuffer.byteLength,\n );\n\n callback(null, unaryResponse);\n } catch (error) {\n callback(/** @type {Error} */ (error), null);\n }\n };\n }\n}\n"],"names":["NativeChannel","Channel","constructor","address","super","this","_address","close","_createUnaryClient","serviceName","async","method","requestData","callback","data","base64.encode","Uint8Array","encodeRequest","includes","response","fetch","name","headers","SDK_NAME","SDK_VERSION","body","ok","HttpError","HttpStatus","_fromValue","status","blob","responseData","Promise","resolve","reject","reader","FileReader","readAsDataURL","onloadend","onerror","responseBuffer","startsWith","base64.decode","split","Error","decodeUnaryResponse","buffer","byteOffset","byteLength","error"],"mappings":"8QAOe,MAAMA,UAAsBC,EAIvC,WAAAC,CAAYC,GACRC,QAMAC,KAAKC,SAAWH,CACxB,CAMI,KAAAI,GAEJ,CAQI,kBAAAC,CAAmBC,GAEf,OAAOC,MAAOC,EAAQC,EAAaC,KAC/B,IACI,MAAMC,EAAOC,EACT,IAAIC,WAAWC,EAAcL,KAQ3BT,IAJFE,KAAKC,SAASY,SAAS,cACvBb,KAAKC,SAASY,SAAS,cAIrB,WAAWb,KAAKC,WAChB,UAAUD,KAAKC,WAIfa,QAAiBC,MACnB,GAAGjB,WAAiBM,KAAeE,EAAOU,OAC1C,CACIV,OAAQ,OACRW,QAAS,CACL,eAAgB,4BAChB,eAAgB,GAAGC,KAAYC,IAC/B,qCAAsC,SACtC,aAAc,KAElBC,KAAMX,IAId,IAAKK,EAASO,GAAI,CAIdb,EAHc,IAAIc,EACdC,EAAWC,WAAWV,EAASW,SAEnB,KACpC,CAEgB,MAAMC,QAAaZ,EAASY,OAGtBC,QAAqB,IAAIC,SAAQ,CAACC,EAASC,KAC7C,MAAMC,EAAS,IAAIC,WACnBD,EAAOE,cAAcP,GACrBK,EAAOG,UAAY,KACfL,EAA+BE,EAAa,OAAE,EAElDA,EAAOI,QAAUL,CAAM,IAG3B,IAAIM,EACJ,GACIT,EAAaU,WACT,yCAGJD,EAAiBE,EACbX,EAAaY,MACT,yCACF,QAEH,KACHZ,EAAaU,WACT,2CASJ,MAAM,IAAIG,MACN,6JAA6Jb,KAPjKS,EAAiBE,EACbX,EAAaY,MACT,2CACF,GAM1B,CASgB/B,EAAS,KAPaiC,EAElBL,EAAeM,OACfN,EAAeO,WACfP,EAAeQ,YAItB,CAAC,MAAOC,GACLrC,EAAQ,EAA+B,KACvD,EAEA"}
1
+ {"version":3,"file":"NativeChannel.js","sources":["../../src/channel/NativeChannel.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport Channel, { encodeRequest, decodeUnaryResponse } from \"./Channel.js\";\nimport * as base64 from \"../encoding/base64.native.js\";\nimport HttpError from \"../http/HttpError.js\";\nimport HttpStatus from \"../http/HttpStatus.js\";\nimport { SDK_NAME, SDK_VERSION } from \"../version.js\";\n\nexport default class NativeChannel extends Channel {\n /**\n * @param {string} address\n */\n constructor(address) {\n super();\n\n /**\n * @type {string}\n * @private\n */\n this._address = address;\n }\n\n /**\n * @override\n * @returns {void}\n */\n close() {\n // do nothing\n }\n\n /**\n * @override\n * @protected\n * @param {string} serviceName\n * @returns {import(\"protobufjs\").RPCImpl}\n */\n _createUnaryClient(serviceName) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n return async (method, requestData, callback) => {\n try {\n const data = base64.encode(\n new Uint8Array(encodeRequest(requestData)),\n );\n\n const shouldUseHttps = !(\n this._address.includes(\"localhost\") ||\n this._address.includes(\"127.0.0.1\")\n );\n\n const address = shouldUseHttps\n ? `https://${this._address}`\n : `http://${this._address}`;\n // this will be executed in react native environment sho\n // fetch should be available\n //eslint-disable-next-line n/no-unsupported-features/node-builtins\n const response = await fetch(\n `${address}/proto.${serviceName}/${method.name}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/grpc-web-text\",\n \"x-user-agent\": `${SDK_NAME}/${SDK_VERSION}`,\n \"x-accept-content-transfer-encoding\": \"base64\",\n \"x-grpc-web\": \"1\",\n },\n body: data,\n },\n );\n\n if (!response.ok) {\n const error = new HttpError(\n HttpStatus._fromValue(response.status),\n );\n callback(error, null);\n }\n\n const blob = await response.blob();\n\n /** @type {string} */\n const responseData = await new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onloadend = () => {\n resolve(/** @type {string} */ (reader.result));\n };\n reader.onerror = reject;\n });\n\n let responseBuffer;\n if (\n responseData.startsWith(\n \"data:application/octet-stream;base64,\",\n )\n ) {\n responseBuffer = base64.decode(\n responseData.split(\n \"data:application/octet-stream;base64,\",\n )[1],\n );\n } else if (\n responseData.startsWith(\n \"data:application/grpc-web+proto;base64,\",\n )\n ) {\n responseBuffer = base64.decode(\n responseData.split(\n \"data:application/grpc-web+proto;base64,\",\n )[1],\n );\n } else {\n throw new Error(\n `Expected response data to be base64 encode with a 'data:application/octet-stream;base64,' or 'data:application/grpc-web+proto;base64,' prefix, but found: ${responseData}`,\n );\n }\n\n const unaryResponse = decodeUnaryResponse(\n // @ts-ignore\n responseBuffer.buffer,\n responseBuffer.byteOffset,\n responseBuffer.byteLength,\n );\n\n callback(null, unaryResponse);\n } catch (error) {\n callback(/** @type {Error} */ (error), null);\n }\n };\n }\n}\n"],"names":["NativeChannel","Channel","constructor","address","super","this","_address","close","_createUnaryClient","serviceName","async","method","requestData","callback","data","base64.encode","Uint8Array","encodeRequest","includes","response","fetch","name","headers","SDK_NAME","SDK_VERSION","body","ok","HttpError","HttpStatus","_fromValue","status","blob","responseData","Promise","resolve","reject","reader","FileReader","readAsDataURL","onloadend","onerror","responseBuffer","startsWith","base64.decode","split","Error","decodeUnaryResponse","buffer","byteOffset","byteLength","error"],"mappings":"8QAOe,MAAMA,UAAsBC,EAIvC,WAAAC,CAAYC,GACRC,QAMAC,KAAKC,SAAWH,CACxB,CAMI,KAAAI,GAEJ,CAQI,kBAAAC,CAAmBC,GAEf,OAAOC,MAAOC,EAAQC,EAAaC,KAC/B,IACI,MAAMC,EAAOC,EACT,IAAIC,WAAWC,EAAcL,KAQ3BT,IAJFE,KAAKC,SAASY,SAAS,cACvBb,KAAKC,SAASY,SAAS,cAIrB,WAAWb,KAAKC,WAChB,UAAUD,KAAKC,WAIfa,QAAiBC,MACnB,GAAGjB,WAAiBM,KAAeE,EAAOU,OAC1C,CACIV,OAAQ,OACRW,QAAS,CACL,eAAgB,4BAChB,eAAgB,GAAGC,KAAYC,IAC/B,qCAAsC,SACtC,aAAc,KAElBC,KAAMX,IAId,IAAKK,EAASO,GAAI,CAIdb,EAHc,IAAIc,EACdC,EAAWC,WAAWV,EAASW,SAEnB,KACpC,CAEgB,MAAMC,QAAaZ,EAASY,OAGtBC,QAAqB,IAAIC,QAAQ,CAACC,EAASC,KAC7C,MAAMC,EAAS,IAAIC,WACnBD,EAAOE,cAAcP,GACrBK,EAAOG,UAAY,KACfL,EAA+BE,EAAa,SAEhDA,EAAOI,QAAUL,IAGrB,IAAIM,EACJ,GACIT,EAAaU,WACT,yCAGJD,EAAiBE,EACbX,EAAaY,MACT,yCACF,QAEH,KACHZ,EAAaU,WACT,2CASJ,MAAM,IAAIG,MACN,6JAA6Jb,KAPjKS,EAAiBE,EACbX,EAAaY,MACT,2CACF,GAM1B,CASgB/B,EAAS,KAPaiC,EAElBL,EAAeM,OACfN,EAAeO,WACfP,EAAeQ,YAItB,CAAC,MAAOC,GACLrC,EAAQ,EAA+B,KACvD,EAEA"}
@@ -1,2 +1,2 @@
1
- import e from"tls";import{credentials as t,Client as r,Metadata as i}from"@grpc/grpc-js";import s from"./Channel.js";import n from"../grpc/GrpcServiceError.js";import o from"../grpc/GrpcStatus.js";import{ALL_NETWORK_IPS as c}from"../constants/ClientConstants.js";import{SDK_NAME as a,SDK_VERSION as l}from"../version.js";const d={};class p extends s{constructor(e,t){super(),this._client=null,this.address=e,this.maxExecutionTime=t;const{ip:r,port:i}=this.parseAddress(e);this.nodeIp=r,this.nodePort=i}bytesToPem(e){const t=e.toString("base64");return`-----BEGIN CERTIFICATE-----\n${t.match(/.{1,64}/g)?.join("\n")||""}\n-----END CERTIFICATE-----`}parseAddress(e){const[t,r]=e.split(":");if(!t||!r)throw new Error("Invalid address format. Expected format: 'IP:Port'");return{ip:t,port:r}}async _retrieveCertificate(){return new Promise(((t,r)=>{const i=e.connect({host:this.nodeIp,port:Number(this.nodePort),rejectUnauthorized:!1},(()=>{try{const e=i.getPeerCertificate();e&&e.raw?t(this.bytesToPem(e.raw)):r(new Error("No certificate retrieved."))}catch(e){r(e)}finally{i.end()}}));i.on("error",r)}))}async _initializeClient(){if(d[this.address])return void(this._client=d[this.address]);let e;if("50212"===this.nodePort){const r=Buffer.from(await this._retrieveCertificate());e=t.createSsl(r)}else e=t.createInsecure();this._client=new r(this.address,e,{"grpc.ssl_target_name_override":"127.0.0.1","grpc.default_authority":"127.0.0.1","grpc.http_connect_creds":"0","grpc.keepalive_time_ms":1e5,"grpc.keepalive_timeout_ms":1e4,"grpc.keepalive_permit_without_calls":1,"grpc.enable_retries":1}),d[this.address]=this._client}close(){this._client&&(this._client.close(),delete d[this.address])}_createUnaryClient(e){return(t,r,s)=>{this._initializeClient().then((()=>{const d=new Date,p=this.maxExecutionTime?this.maxExecutionTime:1e4;d.setMilliseconds(d.getMilliseconds()+p),this._client?.waitForReady(d,(d=>{if(d)s(new n(o.Timeout,c[`${this.nodeIp}:`]));else{const n=new i;n.set("x-user-agent",`${a}/${l}`),this._client?.makeUnaryRequest(`/proto.${e}/${t.name}`,(e=>e),(e=>e),Buffer.from(r),n,((e,t)=>{s(e,t)}))}}))})).catch((e=>{e instanceof Error?s(e):s(new Error("An unexpected error occurred"))}))}}}export{p as default};
1
+ import e from"tls";import{credentials as t,Client as r,Metadata as i}from"@grpc/grpc-js";import s from"./Channel.js";import n from"../grpc/GrpcServiceError.js";import o from"../grpc/GrpcStatus.js";import{ALL_NETWORK_IPS as c}from"../constants/ClientConstants.js";import{SDK_NAME as a,SDK_VERSION as l}from"../version.js";const d={};class p extends s{constructor(e,t){super(),this._client=null,this.address=e,this.maxExecutionTime=t;const{ip:r,port:i}=this.parseAddress(e);this.nodeIp=r,this.nodePort=i}bytesToPem(e){const t=e.toString("base64");return`-----BEGIN CERTIFICATE-----\n${t.match(/.{1,64}/g)?.join("\n")||""}\n-----END CERTIFICATE-----`}parseAddress(e){const[t,r]=e.split(":");if(!t||!r)throw new Error("Invalid address format. Expected format: 'IP:Port'");return{ip:t,port:r}}async _retrieveCertificate(){return new Promise((t,r)=>{const i=e.connect({host:this.nodeIp,port:Number(this.nodePort),rejectUnauthorized:!1},()=>{try{const e=i.getPeerCertificate();e&&e.raw?t(this.bytesToPem(e.raw)):r(new Error("No certificate retrieved."))}catch(e){r(e)}finally{i.end()}});i.on("error",r)})}async _initializeClient(){if(d[this.address])return void(this._client=d[this.address]);let e;if("50212"===this.nodePort){const r=Buffer.from(await this._retrieveCertificate());e=t.createSsl(r)}else e=t.createInsecure();this._client=new r(this.address,e,{"grpc.ssl_target_name_override":"127.0.0.1","grpc.default_authority":"127.0.0.1","grpc.http_connect_creds":"0","grpc.keepalive_time_ms":1e5,"grpc.keepalive_timeout_ms":1e4,"grpc.keepalive_permit_without_calls":1,"grpc.enable_retries":1}),d[this.address]=this._client}close(){this._client&&(this._client.close(),delete d[this.address])}_createUnaryClient(e){return(t,r,s)=>{this._initializeClient().then(()=>{const d=new Date,p=this.maxExecutionTime?this.maxExecutionTime:1e4;d.setMilliseconds(d.getMilliseconds()+p),this._client?.waitForReady(d,d=>{if(d)s(new n(o.Timeout,c[`${this.nodeIp}:`]));else{const n=new i;n.set("x-user-agent",`${a}/${l}`),this._client?.makeUnaryRequest(`/proto.${e}/${t.name}`,e=>e,e=>e,Buffer.from(r),n,(e,t)=>{s(e,t)})}})}).catch(e=>{e instanceof Error?s(e):s(new Error("An unexpected error occurred"))})}}}export{p as default};
2
2
  //# sourceMappingURL=NodeChannel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeChannel.js","sources":["../../src/channel/NodeChannel.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport tls from \"tls\";\nimport { Client, credentials, Metadata } from \"@grpc/grpc-js\";\nimport Channel from \"./Channel.js\";\nimport GrpcServicesError from \"../grpc/GrpcServiceError.js\";\nimport GrpcStatus from \"../grpc/GrpcStatus.js\";\nimport { ALL_NETWORK_IPS } from \"../constants/ClientConstants.js\";\nimport { SDK_NAME, SDK_VERSION } from \"../version.js\";\n\n/** @type {{ [key: string]: Client }} */\nconst clientCache = {};\n\nexport default class NodeChannel extends Channel {\n /**\n * @internal\n * @param {string} address\n * @param {number=} maxExecutionTime\n */\n constructor(address, maxExecutionTime) {\n super();\n\n /** @type {Client | null} */\n this._client = null;\n\n this.address = address;\n this.maxExecutionTime = maxExecutionTime;\n\n const { ip, port } = this.parseAddress(address);\n this.nodeIp = ip;\n this.nodePort = port;\n }\n\n /**\n * Convert certificate bytes to PEM format\n * @param {Buffer} certBytes\n * @returns {string}\n */\n bytesToPem(certBytes) {\n const base64Cert = certBytes.toString(\"base64\");\n const lines = base64Cert.match(/.{1,64}/g)?.join(\"\\n\") || \"\";\n return `-----BEGIN CERTIFICATE-----\\n${lines}\\n-----END CERTIFICATE-----`;\n }\n\n /**\n * Validates and parses an address in the \"IP:Port\" format.\n * @param {string} address\n * @returns {{ ip: string, port: string }}\n */\n parseAddress(address) {\n const [ip, port] = address.split(\":\");\n if (!ip || !port) {\n throw new Error(\n \"Invalid address format. Expected format: 'IP:Port'\",\n );\n }\n return { ip, port };\n }\n\n /**\n * Retrieve the server's certificate dynamically.\n * @returns {Promise<string>}\n */\n async _retrieveCertificate() {\n return new Promise((resolve, reject) => {\n const socket = tls.connect(\n {\n host: this.nodeIp,\n port: Number(this.nodePort),\n rejectUnauthorized: false,\n },\n () => {\n try {\n const cert = socket.getPeerCertificate();\n\n if (cert && cert.raw) {\n resolve(this.bytesToPem(cert.raw));\n } else {\n reject(new Error(\"No certificate retrieved.\"));\n }\n } catch (err) {\n reject(err);\n } finally {\n socket.end();\n }\n },\n );\n\n socket.on(\"error\", reject);\n });\n }\n\n /**\n * Initialize the gRPC client\n * @returns {Promise<void>}\n */\n async _initializeClient() {\n if (clientCache[this.address]) {\n this._client = clientCache[this.address];\n return;\n }\n\n let security;\n const options = {\n \"grpc.ssl_target_name_override\": \"127.0.0.1\",\n \"grpc.default_authority\": \"127.0.0.1\",\n \"grpc.http_connect_creds\": \"0\",\n \"grpc.keepalive_time_ms\": 100000,\n \"grpc.keepalive_timeout_ms\": 10000,\n \"grpc.keepalive_permit_without_calls\": 1,\n \"grpc.enable_retries\": 1,\n };\n\n // If the port is 50212, use TLS\n if (this.nodePort === \"50212\") {\n const certificate = Buffer.from(await this._retrieveCertificate());\n\n security = credentials.createSsl(certificate);\n } else {\n security = credentials.createInsecure();\n }\n\n this._client = new Client(this.address, security, options);\n\n clientCache[this.address] = this._client;\n }\n\n /**\n * @override\n * @returns {void}\n */\n close() {\n if (this._client) {\n this._client.close();\n delete clientCache[this.address];\n }\n }\n\n /**\n * @override\n * @protected\n * @param {string} serviceName\n * @returns {import(\"protobufjs\").RPCImpl}\n */\n _createUnaryClient(serviceName) {\n return (method, requestData, callback) => {\n this._initializeClient()\n .then(() => {\n const deadline = new Date();\n const milliseconds = this.maxExecutionTime\n ? this.maxExecutionTime\n : 10000;\n deadline.setMilliseconds(\n deadline.getMilliseconds() + milliseconds,\n );\n\n this._client?.waitForReady(deadline, (err) => {\n if (err) {\n callback(\n new GrpcServicesError(\n GrpcStatus.Timeout,\n // Added colons to the IP address to resolve a SonarCloud IP issue.\n ALL_NETWORK_IPS[`${this.nodeIp}:`],\n ),\n );\n } else {\n // Create metadata with user agent\n const metadata = new Metadata();\n\n metadata.set(\n \"x-user-agent\",\n `${SDK_NAME}/${SDK_VERSION}`,\n );\n\n this._client?.makeUnaryRequest(\n `/proto.${serviceName}/${method.name}`,\n (value) => value,\n (value) => value,\n Buffer.from(requestData),\n metadata,\n (e, r) => {\n callback(e, r);\n },\n );\n }\n });\n })\n .catch((err) => {\n if (err instanceof Error) {\n callback(err);\n } else {\n callback(new Error(\"An unexpected error occurred\"));\n }\n });\n };\n }\n}\n"],"names":["clientCache","NodeChannel","Channel","constructor","address","maxExecutionTime","super","this","_client","ip","port","parseAddress","nodeIp","nodePort","bytesToPem","certBytes","base64Cert","toString","match","join","split","Error","_retrieveCertificate","Promise","resolve","reject","socket","tls","connect","host","Number","rejectUnauthorized","cert","getPeerCertificate","raw","err","end","on","_initializeClient","security","certificate","Buffer","from","credentials","createSsl","createInsecure","Client","close","_createUnaryClient","serviceName","method","requestData","callback","then","deadline","Date","milliseconds","setMilliseconds","getMilliseconds","waitForReady","GrpcServicesError","GrpcStatus","Timeout","ALL_NETWORK_IPS","metadata","Metadata","set","SDK_NAME","SDK_VERSION","makeUnaryRequest","name","value","e","r","catch"],"mappings":"iUAUA,MAAMA,EAAc,CAAE,EAEP,MAAMC,UAAoBC,EAMrC,WAAAC,CAAYC,EAASC,GACjBC,QAGAC,KAAKC,QAAU,KAEfD,KAAKH,QAAUA,EACfG,KAAKF,iBAAmBA,EAExB,MAAMI,GAAEA,EAAEC,KAAEA,GAASH,KAAKI,aAAaP,GACvCG,KAAKK,OAASH,EACdF,KAAKM,SAAWH,CACxB,CAOI,UAAAI,CAAWC,GACP,MAAMC,EAAaD,EAAUE,SAAS,UAEtC,MAAO,gCADOD,EAAWE,MAAM,aAAaC,KAAK,OAAS,+BAElE,CAOI,YAAAR,CAAaP,GACT,MAAOK,EAAIC,GAAQN,EAAQgB,MAAM,KACjC,IAAKX,IAAOC,EACR,MAAM,IAAIW,MACN,sDAGR,MAAO,CAAEZ,KAAIC,OACrB,CAMI,0BAAMY,GACF,OAAO,IAAIC,SAAQ,CAACC,EAASC,KACzB,MAAMC,EAASC,EAAIC,QACf,CACIC,KAAMtB,KAAKK,OACXF,KAAMoB,OAAOvB,KAAKM,UAClBkB,oBAAoB,IAExB,KACI,IACI,MAAMC,EAAON,EAAOO,qBAEhBD,GAAQA,EAAKE,IACbV,EAAQjB,KAAKO,WAAWkB,EAAKE,MAE7BT,EAAO,IAAIJ,MAAM,6BAExB,CAAC,MAAOc,GACLV,EAAOU,EAC/B,CAA8B,QACNT,EAAOU,KAC/B,KAIYV,EAAOW,GAAG,QAASZ,EAAO,GAEtC,CAMI,uBAAMa,GACF,GAAItC,EAAYO,KAAKH,SAEjB,YADAG,KAAKC,QAAUR,EAAYO,KAAKH,UAIpC,IAAImC,EAYJ,GAAsB,UAAlBhC,KAAKM,SAAsB,CAC3B,MAAM2B,EAAcC,OAAOC,WAAWnC,KAAKe,wBAE3CiB,EAAWI,EAAYC,UAAUJ,EAC7C,MACYD,EAAWI,EAAYE,iBAG3BtC,KAAKC,QAAU,IAAIsC,EAAOvC,KAAKH,QAASmC,EAnBxB,CACZ,gCAAiC,YACjC,yBAA0B,YAC1B,0BAA2B,IAC3B,yBAA0B,IAC1B,4BAA6B,IAC7B,sCAAuC,EACvC,sBAAuB,IAc3BvC,EAAYO,KAAKH,SAAWG,KAAKC,OACzC,CAMI,KAAAuC,GACQxC,KAAKC,UACLD,KAAKC,QAAQuC,eACN/C,EAAYO,KAAKH,SAEpC,CAQI,kBAAA4C,CAAmBC,GACf,MAAO,CAACC,EAAQC,EAAaC,KACzB7C,KAAK+B,oBACAe,MAAK,KACF,MAAMC,EAAW,IAAIC,KACfC,EAAejD,KAAKF,iBACpBE,KAAKF,iBACL,IACNiD,EAASG,gBACLH,EAASI,kBAAoBF,GAGjCjD,KAAKC,SAASmD,aAAaL,GAAWnB,IAClC,GAAIA,EACAiB,EACI,IAAIQ,EACAC,EAAWC,QAEXC,EAAgB,GAAGxD,KAAKK,iBAG7B,CAEH,MAAMoD,EAAW,IAAIC,EAErBD,EAASE,IACL,eACA,GAAGC,KAAYC,KAGnB7D,KAAKC,SAAS6D,iBACV,UAAUpB,KAAeC,EAAOoB,QAC/BC,GAAUA,IACVA,GAAUA,GACX9B,OAAOC,KAAKS,GACZa,GACA,CAACQ,EAAGC,KACArB,EAASoB,EAAGC,EAAE,GAGlD,IACsB,IAELC,OAAOvC,IACAA,aAAed,MACf+B,EAASjB,GAETiB,EAAS,IAAI/B,MAAM,gCAC3C,GACkB,CAElB"}
1
+ {"version":3,"file":"NodeChannel.js","sources":["../../src/channel/NodeChannel.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport tls from \"tls\";\nimport { Client, credentials, Metadata } from \"@grpc/grpc-js\";\nimport Channel from \"./Channel.js\";\nimport GrpcServicesError from \"../grpc/GrpcServiceError.js\";\nimport GrpcStatus from \"../grpc/GrpcStatus.js\";\nimport { ALL_NETWORK_IPS } from \"../constants/ClientConstants.js\";\nimport { SDK_NAME, SDK_VERSION } from \"../version.js\";\n\n/** @type {{ [key: string]: Client }} */\nconst clientCache = {};\n\nexport default class NodeChannel extends Channel {\n /**\n * @internal\n * @param {string} address\n * @param {number=} maxExecutionTime\n */\n constructor(address, maxExecutionTime) {\n super();\n\n /** @type {Client | null} */\n this._client = null;\n\n this.address = address;\n this.maxExecutionTime = maxExecutionTime;\n\n const { ip, port } = this.parseAddress(address);\n this.nodeIp = ip;\n this.nodePort = port;\n }\n\n /**\n * Convert certificate bytes to PEM format\n * @param {Buffer} certBytes\n * @returns {string}\n */\n bytesToPem(certBytes) {\n const base64Cert = certBytes.toString(\"base64\");\n const lines = base64Cert.match(/.{1,64}/g)?.join(\"\\n\") || \"\";\n return `-----BEGIN CERTIFICATE-----\\n${lines}\\n-----END CERTIFICATE-----`;\n }\n\n /**\n * Validates and parses an address in the \"IP:Port\" format.\n * @param {string} address\n * @returns {{ ip: string, port: string }}\n */\n parseAddress(address) {\n const [ip, port] = address.split(\":\");\n if (!ip || !port) {\n throw new Error(\n \"Invalid address format. Expected format: 'IP:Port'\",\n );\n }\n return { ip, port };\n }\n\n /**\n * Retrieve the server's certificate dynamically.\n * @returns {Promise<string>}\n */\n async _retrieveCertificate() {\n return new Promise((resolve, reject) => {\n const socket = tls.connect(\n {\n host: this.nodeIp,\n port: Number(this.nodePort),\n rejectUnauthorized: false,\n },\n () => {\n try {\n const cert = socket.getPeerCertificate();\n\n if (cert && cert.raw) {\n resolve(this.bytesToPem(cert.raw));\n } else {\n reject(new Error(\"No certificate retrieved.\"));\n }\n } catch (err) {\n reject(err);\n } finally {\n socket.end();\n }\n },\n );\n\n socket.on(\"error\", reject);\n });\n }\n\n /**\n * Initialize the gRPC client\n * @returns {Promise<void>}\n */\n async _initializeClient() {\n if (clientCache[this.address]) {\n this._client = clientCache[this.address];\n return;\n }\n\n let security;\n const options = {\n \"grpc.ssl_target_name_override\": \"127.0.0.1\",\n \"grpc.default_authority\": \"127.0.0.1\",\n \"grpc.http_connect_creds\": \"0\",\n \"grpc.keepalive_time_ms\": 100000,\n \"grpc.keepalive_timeout_ms\": 10000,\n \"grpc.keepalive_permit_without_calls\": 1,\n \"grpc.enable_retries\": 1,\n };\n\n // If the port is 50212, use TLS\n if (this.nodePort === \"50212\") {\n const certificate = Buffer.from(await this._retrieveCertificate());\n\n security = credentials.createSsl(certificate);\n } else {\n security = credentials.createInsecure();\n }\n\n this._client = new Client(this.address, security, options);\n\n clientCache[this.address] = this._client;\n }\n\n /**\n * @override\n * @returns {void}\n */\n close() {\n if (this._client) {\n this._client.close();\n delete clientCache[this.address];\n }\n }\n\n /**\n * @override\n * @protected\n * @param {string} serviceName\n * @returns {import(\"protobufjs\").RPCImpl}\n */\n _createUnaryClient(serviceName) {\n return (method, requestData, callback) => {\n this._initializeClient()\n .then(() => {\n const deadline = new Date();\n const milliseconds = this.maxExecutionTime\n ? this.maxExecutionTime\n : 10000;\n deadline.setMilliseconds(\n deadline.getMilliseconds() + milliseconds,\n );\n\n this._client?.waitForReady(deadline, (err) => {\n if (err) {\n callback(\n new GrpcServicesError(\n GrpcStatus.Timeout,\n // Added colons to the IP address to resolve a SonarCloud IP issue.\n ALL_NETWORK_IPS[`${this.nodeIp}:`],\n ),\n );\n } else {\n // Create metadata with user agent\n const metadata = new Metadata();\n\n metadata.set(\n \"x-user-agent\",\n `${SDK_NAME}/${SDK_VERSION}`,\n );\n\n this._client?.makeUnaryRequest(\n `/proto.${serviceName}/${method.name}`,\n (value) => value,\n (value) => value,\n Buffer.from(requestData),\n metadata,\n (e, r) => {\n callback(e, r);\n },\n );\n }\n });\n })\n .catch((err) => {\n if (err instanceof Error) {\n callback(err);\n } else {\n callback(new Error(\"An unexpected error occurred\"));\n }\n });\n };\n }\n}\n"],"names":["clientCache","NodeChannel","Channel","constructor","address","maxExecutionTime","super","this","_client","ip","port","parseAddress","nodeIp","nodePort","bytesToPem","certBytes","base64Cert","toString","match","join","split","Error","_retrieveCertificate","Promise","resolve","reject","socket","tls","connect","host","Number","rejectUnauthorized","cert","getPeerCertificate","raw","err","end","on","_initializeClient","security","certificate","Buffer","from","credentials","createSsl","createInsecure","Client","close","_createUnaryClient","serviceName","method","requestData","callback","then","deadline","Date","milliseconds","setMilliseconds","getMilliseconds","waitForReady","GrpcServicesError","GrpcStatus","Timeout","ALL_NETWORK_IPS","metadata","Metadata","set","SDK_NAME","SDK_VERSION","makeUnaryRequest","name","value","e","r","catch"],"mappings":"iUAUA,MAAMA,EAAc,CAAE,EAEP,MAAMC,UAAoBC,EAMrC,WAAAC,CAAYC,EAASC,GACjBC,QAGAC,KAAKC,QAAU,KAEfD,KAAKH,QAAUA,EACfG,KAAKF,iBAAmBA,EAExB,MAAMI,GAAEA,EAAEC,KAAEA,GAASH,KAAKI,aAAaP,GACvCG,KAAKK,OAASH,EACdF,KAAKM,SAAWH,CACxB,CAOI,UAAAI,CAAWC,GACP,MAAMC,EAAaD,EAAUE,SAAS,UAEtC,MAAO,gCADOD,EAAWE,MAAM,aAAaC,KAAK,OAAS,+BAElE,CAOI,YAAAR,CAAaP,GACT,MAAOK,EAAIC,GAAQN,EAAQgB,MAAM,KACjC,IAAKX,IAAOC,EACR,MAAM,IAAIW,MACN,sDAGR,MAAO,CAAEZ,KAAIC,OACrB,CAMI,0BAAMY,GACF,OAAO,IAAIC,QAAQ,CAACC,EAASC,KACzB,MAAMC,EAASC,EAAIC,QACf,CACIC,KAAMtB,KAAKK,OACXF,KAAMoB,OAAOvB,KAAKM,UAClBkB,oBAAoB,GAExB,KACI,IACI,MAAMC,EAAON,EAAOO,qBAEhBD,GAAQA,EAAKE,IACbV,EAAQjB,KAAKO,WAAWkB,EAAKE,MAE7BT,EAAO,IAAIJ,MAAM,6BAExB,CAAC,MAAOc,GACLV,EAAOU,EAC/B,CAA8B,QACNT,EAAOU,KAC/B,IAIYV,EAAOW,GAAG,QAASZ,IAE/B,CAMI,uBAAMa,GACF,GAAItC,EAAYO,KAAKH,SAEjB,YADAG,KAAKC,QAAUR,EAAYO,KAAKH,UAIpC,IAAImC,EAYJ,GAAsB,UAAlBhC,KAAKM,SAAsB,CAC3B,MAAM2B,EAAcC,OAAOC,WAAWnC,KAAKe,wBAE3CiB,EAAWI,EAAYC,UAAUJ,EAC7C,MACYD,EAAWI,EAAYE,iBAG3BtC,KAAKC,QAAU,IAAIsC,EAAOvC,KAAKH,QAASmC,EAnBxB,CACZ,gCAAiC,YACjC,yBAA0B,YAC1B,0BAA2B,IAC3B,yBAA0B,IAC1B,4BAA6B,IAC7B,sCAAuC,EACvC,sBAAuB,IAc3BvC,EAAYO,KAAKH,SAAWG,KAAKC,OACzC,CAMI,KAAAuC,GACQxC,KAAKC,UACLD,KAAKC,QAAQuC,eACN/C,EAAYO,KAAKH,SAEpC,CAQI,kBAAA4C,CAAmBC,GACf,MAAO,CAACC,EAAQC,EAAaC,KACzB7C,KAAK+B,oBACAe,KAAK,KACF,MAAMC,EAAW,IAAIC,KACfC,EAAejD,KAAKF,iBACpBE,KAAKF,iBACL,IACNiD,EAASG,gBACLH,EAASI,kBAAoBF,GAGjCjD,KAAKC,SAASmD,aAAaL,EAAWnB,IAClC,GAAIA,EACAiB,EACI,IAAIQ,EACAC,EAAWC,QAEXC,EAAgB,GAAGxD,KAAKK,iBAG7B,CAEH,MAAMoD,EAAW,IAAIC,EAErBD,EAASE,IACL,eACA,GAAGC,KAAYC,KAGnB7D,KAAKC,SAAS6D,iBACV,UAAUpB,KAAeC,EAAOoB,OAC/BC,GAAUA,EACVA,GAAUA,EACX9B,OAAOC,KAAKS,GACZa,EACA,CAACQ,EAAGC,KACArB,EAASoB,EAAGC,IAGhD,MAGiBC,MAAOvC,IACAA,aAAed,MACf+B,EAASjB,GAETiB,EAAS,IAAI/B,MAAM,mCAI3C"}
@@ -7,8 +7,7 @@ exports.default = void 0;
7
7
  var grpc = _interopRequireWildcard(require("@grpc/grpc-js"));
8
8
  var _MirrorChannel = _interopRequireDefault(require("./MirrorChannel.cjs"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
11
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
11
  // SPDX-License-Identifier: Apache-2.0
13
12
 
14
13
  /**
@@ -1,2 +1,2 @@
1
- import*as e from"@grpc/grpc-js";import r from"./MirrorChannel.js";class t extends r{constructor(r){super(),this._client=new e.Client(r,r.endsWith(":50212")||r.endsWith(":443")?e.credentials.createSsl():e.credentials.createInsecure(),{"grpc.keepalive_time_ms":9e4,"grpc.keepalive_timeout_ms":5e3})}close(){this._client.close()}makeServerStreamRequest(e,r,t,s,c,o){const a=this._client.makeServerStreamRequest(`/com.hedera.mirror.api.proto.${e}/${r}`,(e=>e),(e=>e),Buffer.from(t)).on("data",(e=>{s(e)})).on("status",(e=>{0==e.code&&o()})).on("error",(e=>{c(e)}));return()=>{a.cancel()}}}export{t as default};
1
+ import*as e from"@grpc/grpc-js";import r from"./MirrorChannel.js";class t extends r{constructor(r){super(),this._client=new e.Client(r,r.endsWith(":50212")||r.endsWith(":443")?e.credentials.createSsl():e.credentials.createInsecure(),{"grpc.keepalive_time_ms":9e4,"grpc.keepalive_timeout_ms":5e3})}close(){this._client.close()}makeServerStreamRequest(e,r,t,s,c,o){const a=this._client.makeServerStreamRequest(`/com.hedera.mirror.api.proto.${e}/${r}`,e=>e,e=>e,Buffer.from(t)).on("data",e=>{s(e)}).on("status",e=>{0==e.code&&o()}).on("error",e=>{c(e)});return()=>{a.cancel()}}}export{t as default};
2
2
  //# sourceMappingURL=NodeMirrorChannel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NodeMirrorChannel.js","sources":["../../src/channel/NodeMirrorChannel.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport * as grpc from \"@grpc/grpc-js\";\nimport MirrorChannel from \"./MirrorChannel.js\";\n\n/**\n * @typedef {import(\"../channel/Channel.js\").default} Channel\n * @typedef {import(\"./MirrorChannel.js\").MirrorError} MirrorError\n */\n\n/**\n * @internal\n */\nexport default class NodeMirrorChannel extends MirrorChannel {\n /**\n * @internal\n * @param {string} address\n */\n constructor(address) {\n super();\n\n /**\n * @type {grpc.Client}\n * @private\n */\n this._client = new grpc.Client(\n address,\n address.endsWith(\":50212\") || address.endsWith(\":443\")\n ? grpc.credentials.createSsl()\n : grpc.credentials.createInsecure(),\n {\n \"grpc.keepalive_time_ms\": 90000,\n \"grpc.keepalive_timeout_ms\": 5000,\n },\n );\n }\n\n /**\n * @override\n * @returns {void}\n */\n close() {\n this._client.close();\n }\n\n /**\n * @override\n * @internal\n * @param {string} serviceName\n * @param {string} methodName\n * @param {Uint8Array} requestData\n * @param {(data: Uint8Array) => void} callback\n * @param {(error: MirrorError | Error) => void} error\n * @param {() => void} end\n * @returns {() => void}\n */\n makeServerStreamRequest(\n serviceName,\n methodName,\n requestData,\n callback,\n error,\n end,\n ) {\n const stream = this._client\n .makeServerStreamRequest(\n `/com.hedera.mirror.api.proto.${serviceName}/${methodName}`,\n (value) => value,\n (value) => value,\n Buffer.from(requestData),\n )\n .on(\"data\", (/** @type {Uint8Array} */ data) => {\n callback(data);\n })\n .on(\"status\", (/** @type {grpc.StatusObject} */ status) => {\n if (status.code == 0) {\n end();\n }\n })\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .on(\"error\", (/** @type {grpc.StatusObject} */ err) => {\n error(err);\n });\n\n return () => {\n stream.cancel();\n };\n }\n}\n"],"names":["NodeMirrorChannel","MirrorChannel","constructor","address","super","this","_client","grpc","Client","endsWith","credentials","createSsl","createInsecure","close","makeServerStreamRequest","serviceName","methodName","requestData","callback","error","end","stream","value","Buffer","from","on","data","status","code","err","cancel"],"mappings":"kEAae,MAAMA,UAA0BC,EAK3C,WAAAC,CAAYC,GACRC,QAMAC,KAAKC,QAAU,IAAIC,EAAKC,OACpBL,EACAA,EAAQM,SAAS,WAAaN,EAAQM,SAAS,QACzCF,EAAKG,YAAYC,YACjBJ,EAAKG,YAAYE,iBACvB,CACI,yBAA0B,IAC1B,4BAA6B,KAG7C,CAMI,KAAAC,GACIR,KAAKC,QAAQO,OACrB,CAaI,uBAAAC,CACIC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAShB,KAAKC,QACfQ,wBACG,gCAAgCC,KAAeC,KAC9CM,GAAUA,IACVA,GAAUA,GACXC,OAAOC,KAAKP,IAEfQ,GAAG,QAAmCC,IACnCR,EAASQ,EAAK,IAEjBD,GAAG,UAA4CE,IACzB,GAAfA,EAAOC,MACPR,GACpB,IAGaK,GAAG,SAA2CI,IAC3CV,EAAMU,EAAI,IAGlB,MAAO,KACHR,EAAOS,QAAQ,CAE3B"}
1
+ {"version":3,"file":"NodeMirrorChannel.js","sources":["../../src/channel/NodeMirrorChannel.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport * as grpc from \"@grpc/grpc-js\";\nimport MirrorChannel from \"./MirrorChannel.js\";\n\n/**\n * @typedef {import(\"../channel/Channel.js\").default} Channel\n * @typedef {import(\"./MirrorChannel.js\").MirrorError} MirrorError\n */\n\n/**\n * @internal\n */\nexport default class NodeMirrorChannel extends MirrorChannel {\n /**\n * @internal\n * @param {string} address\n */\n constructor(address) {\n super();\n\n /**\n * @type {grpc.Client}\n * @private\n */\n this._client = new grpc.Client(\n address,\n address.endsWith(\":50212\") || address.endsWith(\":443\")\n ? grpc.credentials.createSsl()\n : grpc.credentials.createInsecure(),\n {\n \"grpc.keepalive_time_ms\": 90000,\n \"grpc.keepalive_timeout_ms\": 5000,\n },\n );\n }\n\n /**\n * @override\n * @returns {void}\n */\n close() {\n this._client.close();\n }\n\n /**\n * @override\n * @internal\n * @param {string} serviceName\n * @param {string} methodName\n * @param {Uint8Array} requestData\n * @param {(data: Uint8Array) => void} callback\n * @param {(error: MirrorError | Error) => void} error\n * @param {() => void} end\n * @returns {() => void}\n */\n makeServerStreamRequest(\n serviceName,\n methodName,\n requestData,\n callback,\n error,\n end,\n ) {\n const stream = this._client\n .makeServerStreamRequest(\n `/com.hedera.mirror.api.proto.${serviceName}/${methodName}`,\n (value) => value,\n (value) => value,\n Buffer.from(requestData),\n )\n .on(\"data\", (/** @type {Uint8Array} */ data) => {\n callback(data);\n })\n .on(\"status\", (/** @type {grpc.StatusObject} */ status) => {\n if (status.code == 0) {\n end();\n }\n })\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .on(\"error\", (/** @type {grpc.StatusObject} */ err) => {\n error(err);\n });\n\n return () => {\n stream.cancel();\n };\n }\n}\n"],"names":["NodeMirrorChannel","MirrorChannel","constructor","address","super","this","_client","grpc","Client","endsWith","credentials","createSsl","createInsecure","close","makeServerStreamRequest","serviceName","methodName","requestData","callback","error","end","stream","value","Buffer","from","on","data","status","code","err","cancel"],"mappings":"kEAae,MAAMA,UAA0BC,EAK3C,WAAAC,CAAYC,GACRC,QAMAC,KAAKC,QAAU,IAAIC,EAAKC,OACpBL,EACAA,EAAQM,SAAS,WAAaN,EAAQM,SAAS,QACzCF,EAAKG,YAAYC,YACjBJ,EAAKG,YAAYE,iBACvB,CACI,yBAA0B,IAC1B,4BAA6B,KAG7C,CAMI,KAAAC,GACIR,KAAKC,QAAQO,OACrB,CAaI,uBAAAC,CACIC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAShB,KAAKC,QACfQ,wBACG,gCAAgCC,KAAeC,IAC9CM,GAAUA,EACVA,GAAUA,EACXC,OAAOC,KAAKP,IAEfQ,GAAG,OAAmCC,IACnCR,EAASQ,KAEZD,GAAG,SAA4CE,IACzB,GAAfA,EAAOC,MACPR,MAIPK,GAAG,QAA2CI,IAC3CV,EAAMU,KAGd,MAAO,KACHR,EAAOS,SAEnB"}
@@ -11,8 +11,7 @@ var _HttpError = _interopRequireDefault(require("../http/HttpError.cjs"));
11
11
  var _HttpStatus = _interopRequireDefault(require("../http/HttpStatus.cjs"));
12
12
  var _version = require("../version.cjs");
13
13
  var _Channel = _interopRequireWildcard(require("./Channel.cjs"));
14
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
16
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
16
  // SPDX-License-Identifier: Apache-2.0
18
17
 
@@ -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 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};
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 {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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"}
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _LedgerId = _interopRequireDefault(require("../LedgerId.cjs"));
8
8
  var util = _interopRequireWildcard(require("../util.cjs"));
9
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
10
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
11
  // SPDX-License-Identifier: Apache-2.0
13
12
 
@@ -1,2 +1,2 @@
1
- import e from"../LedgerId.js";import{shuffle as t}from"../util.js";class o{constructor(e){this._network=new Map,this._nodes=[],this._healthyNodes=[],this._createNetworkChannel=e,this._ledgerId=null,this._minBackoff=8e3,this._maxBackoff=36e5,this._maxNodeAttempts=-1,this._nodeMinReadmitPeriod=this._minBackoff,this._nodeMaxReadmitPeriod=this._maxBackoff,this._earliestReadmitTime=Date.now()+this._nodeMinReadmitPeriod}setNetworkName(e){return console.warn("Deprecated: Use `setLedgerId` instead"),this.setLedgerId(e)}get networkName(){return console.warn("Deprecated: Use `ledgerId` instead"),null!=this.ledgerId?this.ledgerId.toString():null}setLedgerId(t){return this._ledgerId="string"==typeof t?e.fromString(t):t,this}get ledgerId(){return null!=this._ledgerId?this._ledgerId:null}_createNodeFromNetworkEntry(e){throw new Error("not implemented")}_getNodesToRemove(e){throw new Error("not implemented")}_removeDeadNodes(){if(this._maxNodeAttempts>0)for(let e=this._nodes.length-1;e>=0;e--){this._nodes[e]._badGrpcStatusCount<this._maxNodeAttempts||this._closeNode(e)}}_readmitNodes(){const e=Date.now();if(this._earliestReadmitTime<=e){let t=Number.MAX_SAFE_INTEGER,o=!0;e:for(let s=0;s<this._nodes.length;s++){for(let i=0;i<this._healthyNodes.length;i++)if(o&&this._nodes[s]._readmitTime>e&&(t=Math.min(this._nodes[s]._readmitTime,t)),this._nodes[s]==this._healthyNodes[i])continue e;o=!1,this._nodes[s]._readmitTime<=e&&this._healthyNodes.push(this._nodes[s])}this._earliestReadmitTime=Math.min(Math.max(t,this._nodeMinReadmitPeriod),this._nodeMaxReadmitPeriod)}}_getNumberOfMostHealthyNodes(e){this._removeDeadNodes(),this._readmitNodes();const t=[];let o=this._healthyNodes.slice();e=Math.min(e,o.length);for(let s=0;s<e;s++){const e=o[Math.floor(Math.random()*o.length)];if(!e)break;t.push(e),o=o.filter((t=>t.getKey()!==e.getKey()))}return t}_closeNode(e){const t=this._nodes[e];t.close(),this._removeNodeFromNetwork(t),this._nodes.splice(e,1)}_removeNodeFromNetwork(e){const t=this._network.get(e.getKey());for(let o=0;o<t.length;o++)if(t[o]===e){t.splice(o,1);break}0===t.length&&this._network.delete(e.getKey())}_setNetwork(e){const o=[],s=new Set,i=new Set,r=[],n=new Map;for(const t of this._getNodesToRemove(e))this._closeNode(t);for(const e of this._nodes)o.push(e),s.add(e.getKey()),i.add(e.address.toString());for(const[t,r]of e)s.has(r.toString())&&i.has(t)||o.push(this._createNodeFromNetworkEntry([t,r]));t(o);for(const e of o){if(!e.isHealthy())continue;r.push(e);const t=n.has(e.getKey())?n.get(e.getKey()):[];t.push(e),n.set(e.getKey(),t)}return this._nodes=o,this._healthyNodes=r,this._network=n,this}get maxNodeAttempts(){return this._maxNodeAttempts}setMaxNodeAttempts(e){return this._maxNodeAttempts=e,this}get minBackoff(){return this._minBackoff}setMinBackoff(e){this._minBackoff=e;for(const t of this._nodes)t.setMinBackoff(e);return this}get maxBackoff(){return this._maxBackoff}setMaxBackoff(e){this._maxBackoff=e;for(const t of this._nodes)t.setMaxBackoff(e);return this}get nodeMinReadmitPeriod(){return this._nodeMinReadmitPeriod}setNodeMinReadmitPeriod(e){return this._nodeMinReadmitPeriod=e,this._earliestReadmitTime=Date.now()+this._nodeMinReadmitPeriod,this}get nodeMaxReadmitPeriod(){return this._nodeMaxReadmitPeriod}setNodeMaxReadmitPeriod(e){return this._nodeMaxReadmitPeriod=e,this}getNode(e){if(this._readmitNodes(),null!=e&&null!=e){const t=this._network.get(e.toString());if(t){return t[Math.floor(Math.random()*t.length)]}{const e=Array.from(this._network.keys()),t=e[Math.floor(Math.random()*e.length)],o=this._network.get(t);return o[Math.floor(Math.random()*o.length)]}}if(0==this._healthyNodes.length)throw new Error("failed to find a healthy working node");return this._healthyNodes[Math.floor(Math.random()*this._healthyNodes.length)]}increaseBackoff(e){e.increaseBackoff();for(let t=0;t<this._healthyNodes.length;t++)this._healthyNodes[t]==e&&this._healthyNodes.splice(t,1)}decreaseBackoff(e){e.decreaseBackoff()}close(){for(const e of this._nodes)e.close();this._network.clear(),this._nodes=[]}}export{o as default};
1
+ import e from"../LedgerId.js";import{shuffle as t}from"../util.js";class o{constructor(e){this._network=new Map,this._nodes=[],this._healthyNodes=[],this._createNetworkChannel=e,this._ledgerId=null,this._minBackoff=8e3,this._maxBackoff=36e5,this._maxNodeAttempts=-1,this._nodeMinReadmitPeriod=this._minBackoff,this._nodeMaxReadmitPeriod=this._maxBackoff,this._earliestReadmitTime=Date.now()+this._nodeMinReadmitPeriod}setNetworkName(e){return console.warn("Deprecated: Use `setLedgerId` instead"),this.setLedgerId(e)}get networkName(){return console.warn("Deprecated: Use `ledgerId` instead"),null!=this.ledgerId?this.ledgerId.toString():null}setLedgerId(t){return this._ledgerId="string"==typeof t?e.fromString(t):t,this}get ledgerId(){return null!=this._ledgerId?this._ledgerId:null}_createNodeFromNetworkEntry(e){throw new Error("not implemented")}_getNodesToRemove(e){throw new Error("not implemented")}_removeDeadNodes(){if(this._maxNodeAttempts>0)for(let e=this._nodes.length-1;e>=0;e--){this._nodes[e]._badGrpcStatusCount<this._maxNodeAttempts||this._closeNode(e)}}_readmitNodes(){const e=Date.now();if(this._earliestReadmitTime<=e){let t=Number.MAX_SAFE_INTEGER,o=!0;e:for(let s=0;s<this._nodes.length;s++){for(let i=0;i<this._healthyNodes.length;i++)if(o&&this._nodes[s]._readmitTime>e&&(t=Math.min(this._nodes[s]._readmitTime,t)),this._nodes[s]==this._healthyNodes[i])continue e;o=!1,this._nodes[s]._readmitTime<=e&&this._healthyNodes.push(this._nodes[s])}this._earliestReadmitTime=Math.min(Math.max(t,this._nodeMinReadmitPeriod),this._nodeMaxReadmitPeriod)}}_getNumberOfMostHealthyNodes(e){this._removeDeadNodes(),this._readmitNodes();const t=[];let o=this._healthyNodes.slice();e=Math.min(e,o.length);for(let s=0;s<e;s++){const e=o[Math.floor(Math.random()*o.length)];if(!e)break;t.push(e),o=o.filter(t=>t.getKey()!==e.getKey())}return t}_closeNode(e){const t=this._nodes[e];t.close(),this._removeNodeFromNetwork(t),this._nodes.splice(e,1)}_removeNodeFromNetwork(e){const t=this._network.get(e.getKey());for(let o=0;o<t.length;o++)if(t[o]===e){t.splice(o,1);break}0===t.length&&this._network.delete(e.getKey())}_setNetwork(e){const o=[],s=new Set,i=new Set,r=[],n=new Map;for(const t of this._getNodesToRemove(e))this._closeNode(t);for(const e of this._nodes)o.push(e),s.add(e.getKey()),i.add(e.address.toString());for(const[t,r]of e)s.has(r.toString())&&i.has(t)||o.push(this._createNodeFromNetworkEntry([t,r]));t(o);for(const e of o){if(!e.isHealthy())continue;r.push(e);const t=n.has(e.getKey())?n.get(e.getKey()):[];t.push(e),n.set(e.getKey(),t)}return this._nodes=o,this._healthyNodes=r,this._network=n,this}get maxNodeAttempts(){return this._maxNodeAttempts}setMaxNodeAttempts(e){return this._maxNodeAttempts=e,this}get minBackoff(){return this._minBackoff}setMinBackoff(e){this._minBackoff=e;for(const t of this._nodes)t.setMinBackoff(e);return this}get maxBackoff(){return this._maxBackoff}setMaxBackoff(e){this._maxBackoff=e;for(const t of this._nodes)t.setMaxBackoff(e);return this}get nodeMinReadmitPeriod(){return this._nodeMinReadmitPeriod}setNodeMinReadmitPeriod(e){return this._nodeMinReadmitPeriod=e,this._earliestReadmitTime=Date.now()+this._nodeMinReadmitPeriod,this}get nodeMaxReadmitPeriod(){return this._nodeMaxReadmitPeriod}setNodeMaxReadmitPeriod(e){return this._nodeMaxReadmitPeriod=e,this}getNode(e){if(this._readmitNodes(),null!=e&&null!=e){const t=this._network.get(e.toString());if(t){return t[Math.floor(Math.random()*t.length)]}{const e=Array.from(this._network.keys()),t=e[Math.floor(Math.random()*e.length)],o=this._network.get(t);return o[Math.floor(Math.random()*o.length)]}}if(0==this._healthyNodes.length)throw new Error("failed to find a healthy working node");return this._healthyNodes[Math.floor(Math.random()*this._healthyNodes.length)]}increaseBackoff(e){e.increaseBackoff();for(let t=0;t<this._healthyNodes.length;t++)this._healthyNodes[t]==e&&this._healthyNodes.splice(t,1)}decreaseBackoff(e){e.decreaseBackoff()}close(){for(const e of this._nodes)e.close();this._network.clear(),this._nodes=[]}}export{o as default};
2
2
  //# sourceMappingURL=ManagedNetwork.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedNetwork.js","sources":["../../src/client/ManagedNetwork.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport LedgerId from \"../LedgerId.js\";\nimport * as util from \"../util.js\";\n\n/**\n * @typedef {import(\"../channel/Channel.js\").default} Channel\n * @typedef {import(\"../channel/MirrorChannel.js\").default} MirrorChannel\n * @typedef {import(\"../Node.js\").default} Node\n * @typedef {import(\"../MirrorNode.js\").default} MirrorNode\n * @typedef {import(\"../address_book/NodeAddressBook.js\").default} NodeAddressBook\n */\n\n/**\n * @template {Channel | MirrorChannel} ChannelT\n * @typedef {import(\"../ManagedNode.js\").default<ChannelT>} ManagedNode\n */\n\n/**\n * @template {Channel | MirrorChannel} ChannelT\n * @template {ManagedNode<ChannelT>} NetworkNodeT\n * @template {{ toString: () => string }} KeyT\n */\nexport default class ManagedNetwork {\n /**\n * @param {(address: string) => ChannelT} createNetworkChannel\n */\n constructor(createNetworkChannel) {\n /**\n * Map of node account ID (as a string)\n * to the node URL.\n *\n * @internal\n * @type {Map<string, NetworkNodeT[]>}\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this._network = new Map();\n\n /**\n * List of node account IDs.\n *\n * @protected\n * @type {NetworkNodeT[]}\n */\n this._nodes = [];\n\n /**\n * List of node account IDs.\n *\n * @protected\n * @type {NetworkNodeT[]}\n */\n this._healthyNodes = [];\n\n /** @type {(address: string, cert?: string) => ChannelT} */\n this._createNetworkChannel = createNetworkChannel;\n\n /** @type {LedgerId | null} */\n this._ledgerId = null;\n\n this._minBackoff = 8000;\n this._maxBackoff = 1000 * 60 * 60;\n\n /** @type {number} */\n this._maxNodeAttempts = -1;\n\n this._nodeMinReadmitPeriod = this._minBackoff;\n this._nodeMaxReadmitPeriod = this._maxBackoff;\n\n this._earliestReadmitTime = Date.now() + this._nodeMinReadmitPeriod;\n }\n\n /**\n * @deprecated\n * @param {string} networkName\n * @returns {this}\n */\n setNetworkName(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._ledgerId =\n typeof ledgerId === \"string\"\n ? LedgerId.fromString(ledgerId)\n : ledgerId;\n return this;\n }\n\n /**\n * @returns {LedgerId | null}\n */\n get ledgerId() {\n return this._ledgerId != null ? this._ledgerId : null;\n }\n\n /**\n * @abstract\n * @param {[string, KeyT]} entry\n * @returns {NetworkNodeT}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _createNodeFromNetworkEntry(entry) {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @abstract\n * @param {Map<string, KeyT>} network\n * @returns {number[]}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _getNodesToRemove(network) {\n throw new Error(\"not implemented\");\n }\n\n _removeDeadNodes() {\n if (this._maxNodeAttempts > 0) {\n for (let i = this._nodes.length - 1; i >= 0; i--) {\n const node = this._nodes[i];\n\n if (node._badGrpcStatusCount < this._maxNodeAttempts) {\n continue;\n }\n\n this._closeNode(i);\n }\n }\n }\n\n _readmitNodes() {\n const now = Date.now();\n\n if (this._earliestReadmitTime <= now) {\n let nextEarliestReadmitTime = Number.MAX_SAFE_INTEGER;\n let searchForNextEarliestReadmitTime = true;\n\n outer: for (let i = 0; i < this._nodes.length; i++) {\n for (let j = 0; j < this._healthyNodes.length; j++) {\n if (\n searchForNextEarliestReadmitTime &&\n this._nodes[i]._readmitTime > now\n ) {\n nextEarliestReadmitTime = Math.min(\n this._nodes[i]._readmitTime,\n nextEarliestReadmitTime,\n );\n }\n\n if (this._nodes[i] == this._healthyNodes[j]) {\n continue outer;\n }\n }\n\n searchForNextEarliestReadmitTime = false;\n\n if (this._nodes[i]._readmitTime <= now) {\n this._healthyNodes.push(this._nodes[i]);\n }\n }\n\n this._earliestReadmitTime = Math.min(\n Math.max(nextEarliestReadmitTime, this._nodeMinReadmitPeriod),\n this._nodeMaxReadmitPeriod,\n );\n }\n }\n\n /**\n * @param {number} count\n * @returns {NetworkNodeT[]}\n */\n _getNumberOfMostHealthyNodes(count) {\n this._removeDeadNodes();\n this._readmitNodes();\n\n const nodes = [];\n // Create a shallow for safe iteration\n let healthyNodes = this._healthyNodes.slice();\n count = Math.min(count, healthyNodes.length);\n\n for (let i = 0; i < count; i++) {\n // Select a random index\n const nodeIndex = Math.floor(Math.random() * healthyNodes.length);\n const selectedNode = healthyNodes[nodeIndex];\n\n // Check if the node exists\n if (!selectedNode) {\n break; // Break out of the loop if undefined node is selected\n }\n\n // Add the selected node in array for execution\n nodes.push(selectedNode);\n // Remove all nodes with the same account id as\n // the selected node account id from the array\n healthyNodes = healthyNodes.filter(\n // eslint-disable-next-line ie11/no-loop-func\n (node) => node.getKey() !== selectedNode.getKey(),\n );\n }\n\n return nodes;\n }\n\n /**\n * @param {number} i\n */\n _closeNode(i) {\n const node = this._nodes[i];\n\n node.close();\n this._removeNodeFromNetwork(node);\n this._nodes.splice(i, 1);\n }\n\n /**\n * @param {NetworkNodeT} node\n */\n _removeNodeFromNetwork(node) {\n const network = /** @type {NetworkNodeT[]} */ (\n this._network.get(node.getKey())\n );\n\n for (let j = 0; j < network.length; j++) {\n if (network[j] === node) {\n network.splice(j, 1);\n break;\n }\n }\n\n if (network.length === 0) {\n this._network.delete(node.getKey());\n }\n }\n\n /**\n * @param {Map<string, KeyT>} network\n * @returns {this}\n */\n _setNetwork(network) {\n /** @type {NetworkNodeT[]} */\n const newNodes = [];\n const newNodeKeys = new Set();\n const newNodeAddresses = new Set();\n\n /** @type {NetworkNodeT[]} */\n const newHealthyNodes = [];\n\n /** @type {Map<string, NetworkNodeT[]>} */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const newNetwork = new Map();\n\n // Remove nodes that are not in the new network\n for (const i of this._getNodesToRemove(network)) {\n this._closeNode(i);\n }\n\n // Copy all the unclosed nodes\n for (const node of this._nodes) {\n newNodes.push(node);\n newNodeKeys.add(node.getKey());\n newNodeAddresses.add(node.address.toString());\n }\n\n // Add new nodes\n for (const [key, value] of network) {\n if (\n newNodeKeys.has(value.toString()) &&\n newNodeAddresses.has(key)\n ) {\n continue;\n }\n newNodes.push(this._createNodeFromNetworkEntry([key, value]));\n }\n\n // Shuffle the nodes so we don't immediately pick the first nodes\n util.shuffle(newNodes);\n\n // Copy all the nodes into the healhty nodes list initially\n // and push the nodes into the network; this maintains the\n // shuffled state from `newNodes`\n for (const node of newNodes) {\n if (!node.isHealthy()) {\n continue;\n }\n\n newHealthyNodes.push(node);\n\n const newNetworkNodes = newNetwork.has(node.getKey())\n ? /** @type {NetworkNodeT[]} */ (newNetwork.get(node.getKey()))\n : [];\n newNetworkNodes.push(node);\n newNetwork.set(node.getKey(), newNetworkNodes);\n }\n\n this._nodes = newNodes;\n this._healthyNodes = newHealthyNodes;\n this._network = newNetwork;\n\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxNodeAttempts() {\n return this._maxNodeAttempts;\n }\n\n /**\n * @param {number} maxNodeAttempts\n * @returns {this}\n */\n setMaxNodeAttempts(maxNodeAttempts) {\n this._maxNodeAttempts = maxNodeAttempts;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get minBackoff() {\n return this._minBackoff;\n }\n\n /**\n * @param {number} minBackoff\n * @returns {this}\n */\n setMinBackoff(minBackoff) {\n this._minBackoff = minBackoff;\n for (const node of this._nodes) {\n node.setMinBackoff(minBackoff);\n }\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxBackoff() {\n return this._maxBackoff;\n }\n\n /**\n * @param {number} maxBackoff\n * @returns {this}\n */\n setMaxBackoff(maxBackoff) {\n this._maxBackoff = maxBackoff;\n for (const node of this._nodes) {\n node.setMaxBackoff(maxBackoff);\n }\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinReadmitPeriod() {\n return this._nodeMinReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMinReadmitPeriod\n * @returns {this}\n */\n setNodeMinReadmitPeriod(nodeMinReadmitPeriod) {\n this._nodeMinReadmitPeriod = nodeMinReadmitPeriod;\n this._earliestReadmitTime = Date.now() + this._nodeMinReadmitPeriod;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxReadmitPeriod() {\n return this._nodeMaxReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMaxReadmitPeriod\n * @returns {this}\n */\n setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod) {\n this._nodeMaxReadmitPeriod = nodeMaxReadmitPeriod;\n return this;\n }\n\n /**\n * @param {KeyT=} key\n * @returns {NetworkNodeT}\n */\n getNode(key) {\n this._readmitNodes();\n if (key != null && key != undefined) {\n const lockedNodes = this._network.get(key.toString());\n if (lockedNodes) {\n const randomNodeAddress = Math.floor(\n Math.random() * lockedNodes.length,\n );\n return /** @type {NetworkNodeT[]} */ (lockedNodes)[\n randomNodeAddress\n ];\n } else {\n const nodes = Array.from(this._network.keys());\n const randomNodeAccountId =\n nodes[Math.floor(Math.random() * nodes.length)];\n\n const randomNode = this._network.get(randomNodeAccountId);\n // We get the `randomNodeAccountId` from the network mapping,\n // so it cannot be `undefined`\n const randomNodeAddress = Math.floor(\n // @ts-ignore\n Math.random() * randomNode.length,\n );\n // @ts-ignore\n return randomNode[randomNodeAddress];\n }\n } else {\n if (this._healthyNodes.length == 0) {\n throw new Error(\"failed to find a healthy working node\");\n }\n\n return this._healthyNodes[\n Math.floor(Math.random() * this._healthyNodes.length)\n ];\n }\n }\n\n /**\n * @param {NetworkNodeT} node\n */\n increaseBackoff(node) {\n node.increaseBackoff();\n\n for (let i = 0; i < this._healthyNodes.length; i++) {\n if (this._healthyNodes[i] == node) {\n this._healthyNodes.splice(i, 1);\n }\n }\n }\n\n /**\n * @param {NetworkNodeT} node\n */\n decreaseBackoff(node) {\n node.decreaseBackoff();\n }\n\n close() {\n for (const node of this._nodes) {\n node.close();\n }\n\n this._network.clear();\n this._nodes = [];\n }\n}\n"],"names":["ManagedNetwork","constructor","createNetworkChannel","this","_network","Map","_nodes","_healthyNodes","_createNetworkChannel","_ledgerId","_minBackoff","_maxBackoff","_maxNodeAttempts","_nodeMinReadmitPeriod","_nodeMaxReadmitPeriod","_earliestReadmitTime","Date","now","setNetworkName","networkName","console","warn","setLedgerId","ledgerId","toString","LedgerId","fromString","_createNodeFromNetworkEntry","entry","Error","_getNodesToRemove","network","_removeDeadNodes","i","length","_badGrpcStatusCount","_closeNode","_readmitNodes","nextEarliestReadmitTime","Number","MAX_SAFE_INTEGER","searchForNextEarliestReadmitTime","outer","j","_readmitTime","Math","min","push","max","_getNumberOfMostHealthyNodes","count","nodes","healthyNodes","slice","selectedNode","floor","random","filter","node","getKey","close","_removeNodeFromNetwork","splice","get","delete","_setNetwork","newNodes","newNodeKeys","Set","newNodeAddresses","newHealthyNodes","newNetwork","add","address","key","value","has","util.shuffle","isHealthy","newNetworkNodes","set","maxNodeAttempts","setMaxNodeAttempts","minBackoff","setMinBackoff","maxBackoff","setMaxBackoff","nodeMinReadmitPeriod","setNodeMinReadmitPeriod","nodeMaxReadmitPeriod","setNodeMaxReadmitPeriod","getNode","undefined","lockedNodes","Array","from","keys","randomNodeAccountId","randomNode","increaseBackoff","decreaseBackoff","clear"],"mappings":"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"}
1
+ {"version":3,"file":"ManagedNetwork.js","sources":["../../src/client/ManagedNetwork.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport LedgerId from \"../LedgerId.js\";\nimport * as util from \"../util.js\";\n\n/**\n * @typedef {import(\"../channel/Channel.js\").default} Channel\n * @typedef {import(\"../channel/MirrorChannel.js\").default} MirrorChannel\n * @typedef {import(\"../Node.js\").default} Node\n * @typedef {import(\"../MirrorNode.js\").default} MirrorNode\n * @typedef {import(\"../address_book/NodeAddressBook.js\").default} NodeAddressBook\n */\n\n/**\n * @template {Channel | MirrorChannel} ChannelT\n * @typedef {import(\"../ManagedNode.js\").default<ChannelT>} ManagedNode\n */\n\n/**\n * @template {Channel | MirrorChannel} ChannelT\n * @template {ManagedNode<ChannelT>} NetworkNodeT\n * @template {{ toString: () => string }} KeyT\n */\nexport default class ManagedNetwork {\n /**\n * @param {(address: string) => ChannelT} createNetworkChannel\n */\n constructor(createNetworkChannel) {\n /**\n * Map of node account ID (as a string)\n * to the node URL.\n *\n * @internal\n * @type {Map<string, NetworkNodeT[]>}\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this._network = new Map();\n\n /**\n * List of node account IDs.\n *\n * @protected\n * @type {NetworkNodeT[]}\n */\n this._nodes = [];\n\n /**\n * List of node account IDs.\n *\n * @protected\n * @type {NetworkNodeT[]}\n */\n this._healthyNodes = [];\n\n /** @type {(address: string, cert?: string) => ChannelT} */\n this._createNetworkChannel = createNetworkChannel;\n\n /** @type {LedgerId | null} */\n this._ledgerId = null;\n\n this._minBackoff = 8000;\n this._maxBackoff = 1000 * 60 * 60;\n\n /** @type {number} */\n this._maxNodeAttempts = -1;\n\n this._nodeMinReadmitPeriod = this._minBackoff;\n this._nodeMaxReadmitPeriod = this._maxBackoff;\n\n this._earliestReadmitTime = Date.now() + this._nodeMinReadmitPeriod;\n }\n\n /**\n * @deprecated\n * @param {string} networkName\n * @returns {this}\n */\n setNetworkName(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._ledgerId =\n typeof ledgerId === \"string\"\n ? LedgerId.fromString(ledgerId)\n : ledgerId;\n return this;\n }\n\n /**\n * @returns {LedgerId | null}\n */\n get ledgerId() {\n return this._ledgerId != null ? this._ledgerId : null;\n }\n\n /**\n * @abstract\n * @param {[string, KeyT]} entry\n * @returns {NetworkNodeT}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _createNodeFromNetworkEntry(entry) {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @abstract\n * @param {Map<string, KeyT>} network\n * @returns {number[]}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _getNodesToRemove(network) {\n throw new Error(\"not implemented\");\n }\n\n _removeDeadNodes() {\n if (this._maxNodeAttempts > 0) {\n for (let i = this._nodes.length - 1; i >= 0; i--) {\n const node = this._nodes[i];\n\n if (node._badGrpcStatusCount < this._maxNodeAttempts) {\n continue;\n }\n\n this._closeNode(i);\n }\n }\n }\n\n _readmitNodes() {\n const now = Date.now();\n\n if (this._earliestReadmitTime <= now) {\n let nextEarliestReadmitTime = Number.MAX_SAFE_INTEGER;\n let searchForNextEarliestReadmitTime = true;\n\n outer: for (let i = 0; i < this._nodes.length; i++) {\n for (let j = 0; j < this._healthyNodes.length; j++) {\n if (\n searchForNextEarliestReadmitTime &&\n this._nodes[i]._readmitTime > now\n ) {\n nextEarliestReadmitTime = Math.min(\n this._nodes[i]._readmitTime,\n nextEarliestReadmitTime,\n );\n }\n\n if (this._nodes[i] == this._healthyNodes[j]) {\n continue outer;\n }\n }\n\n searchForNextEarliestReadmitTime = false;\n\n if (this._nodes[i]._readmitTime <= now) {\n this._healthyNodes.push(this._nodes[i]);\n }\n }\n\n this._earliestReadmitTime = Math.min(\n Math.max(nextEarliestReadmitTime, this._nodeMinReadmitPeriod),\n this._nodeMaxReadmitPeriod,\n );\n }\n }\n\n /**\n * @param {number} count\n * @returns {NetworkNodeT[]}\n */\n _getNumberOfMostHealthyNodes(count) {\n this._removeDeadNodes();\n this._readmitNodes();\n\n const nodes = [];\n // Create a shallow for safe iteration\n let healthyNodes = this._healthyNodes.slice();\n count = Math.min(count, healthyNodes.length);\n\n for (let i = 0; i < count; i++) {\n // Select a random index\n const nodeIndex = Math.floor(Math.random() * healthyNodes.length);\n const selectedNode = healthyNodes[nodeIndex];\n\n // Check if the node exists\n if (!selectedNode) {\n break; // Break out of the loop if undefined node is selected\n }\n\n // Add the selected node in array for execution\n nodes.push(selectedNode);\n // Remove all nodes with the same account id as\n // the selected node account id from the array\n healthyNodes = healthyNodes.filter(\n // eslint-disable-next-line ie11/no-loop-func\n (node) => node.getKey() !== selectedNode.getKey(),\n );\n }\n\n return nodes;\n }\n\n /**\n * @param {number} i\n */\n _closeNode(i) {\n const node = this._nodes[i];\n\n node.close();\n this._removeNodeFromNetwork(node);\n this._nodes.splice(i, 1);\n }\n\n /**\n * @param {NetworkNodeT} node\n */\n _removeNodeFromNetwork(node) {\n const network = /** @type {NetworkNodeT[]} */ (\n this._network.get(node.getKey())\n );\n\n for (let j = 0; j < network.length; j++) {\n if (network[j] === node) {\n network.splice(j, 1);\n break;\n }\n }\n\n if (network.length === 0) {\n this._network.delete(node.getKey());\n }\n }\n\n /**\n * @param {Map<string, KeyT>} network\n * @returns {this}\n */\n _setNetwork(network) {\n /** @type {NetworkNodeT[]} */\n const newNodes = [];\n const newNodeKeys = new Set();\n const newNodeAddresses = new Set();\n\n /** @type {NetworkNodeT[]} */\n const newHealthyNodes = [];\n\n /** @type {Map<string, NetworkNodeT[]>} */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const newNetwork = new Map();\n\n // Remove nodes that are not in the new network\n for (const i of this._getNodesToRemove(network)) {\n this._closeNode(i);\n }\n\n // Copy all the unclosed nodes\n for (const node of this._nodes) {\n newNodes.push(node);\n newNodeKeys.add(node.getKey());\n newNodeAddresses.add(node.address.toString());\n }\n\n // Add new nodes\n for (const [key, value] of network) {\n if (\n newNodeKeys.has(value.toString()) &&\n newNodeAddresses.has(key)\n ) {\n continue;\n }\n newNodes.push(this._createNodeFromNetworkEntry([key, value]));\n }\n\n // Shuffle the nodes so we don't immediately pick the first nodes\n util.shuffle(newNodes);\n\n // Copy all the nodes into the healhty nodes list initially\n // and push the nodes into the network; this maintains the\n // shuffled state from `newNodes`\n for (const node of newNodes) {\n if (!node.isHealthy()) {\n continue;\n }\n\n newHealthyNodes.push(node);\n\n const newNetworkNodes = newNetwork.has(node.getKey())\n ? /** @type {NetworkNodeT[]} */ (newNetwork.get(node.getKey()))\n : [];\n newNetworkNodes.push(node);\n newNetwork.set(node.getKey(), newNetworkNodes);\n }\n\n this._nodes = newNodes;\n this._healthyNodes = newHealthyNodes;\n this._network = newNetwork;\n\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxNodeAttempts() {\n return this._maxNodeAttempts;\n }\n\n /**\n * @param {number} maxNodeAttempts\n * @returns {this}\n */\n setMaxNodeAttempts(maxNodeAttempts) {\n this._maxNodeAttempts = maxNodeAttempts;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get minBackoff() {\n return this._minBackoff;\n }\n\n /**\n * @param {number} minBackoff\n * @returns {this}\n */\n setMinBackoff(minBackoff) {\n this._minBackoff = minBackoff;\n for (const node of this._nodes) {\n node.setMinBackoff(minBackoff);\n }\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxBackoff() {\n return this._maxBackoff;\n }\n\n /**\n * @param {number} maxBackoff\n * @returns {this}\n */\n setMaxBackoff(maxBackoff) {\n this._maxBackoff = maxBackoff;\n for (const node of this._nodes) {\n node.setMaxBackoff(maxBackoff);\n }\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinReadmitPeriod() {\n return this._nodeMinReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMinReadmitPeriod\n * @returns {this}\n */\n setNodeMinReadmitPeriod(nodeMinReadmitPeriod) {\n this._nodeMinReadmitPeriod = nodeMinReadmitPeriod;\n this._earliestReadmitTime = Date.now() + this._nodeMinReadmitPeriod;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxReadmitPeriod() {\n return this._nodeMaxReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMaxReadmitPeriod\n * @returns {this}\n */\n setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod) {\n this._nodeMaxReadmitPeriod = nodeMaxReadmitPeriod;\n return this;\n }\n\n /**\n * @param {KeyT=} key\n * @returns {NetworkNodeT}\n */\n getNode(key) {\n this._readmitNodes();\n if (key != null && key != undefined) {\n const lockedNodes = this._network.get(key.toString());\n if (lockedNodes) {\n const randomNodeAddress = Math.floor(\n Math.random() * lockedNodes.length,\n );\n return /** @type {NetworkNodeT[]} */ (lockedNodes)[\n randomNodeAddress\n ];\n } else {\n const nodes = Array.from(this._network.keys());\n const randomNodeAccountId =\n nodes[Math.floor(Math.random() * nodes.length)];\n\n const randomNode = this._network.get(randomNodeAccountId);\n // We get the `randomNodeAccountId` from the network mapping,\n // so it cannot be `undefined`\n const randomNodeAddress = Math.floor(\n // @ts-ignore\n Math.random() * randomNode.length,\n );\n // @ts-ignore\n return randomNode[randomNodeAddress];\n }\n } else {\n if (this._healthyNodes.length == 0) {\n throw new Error(\"failed to find a healthy working node\");\n }\n\n return this._healthyNodes[\n Math.floor(Math.random() * this._healthyNodes.length)\n ];\n }\n }\n\n /**\n * @param {NetworkNodeT} node\n */\n increaseBackoff(node) {\n node.increaseBackoff();\n\n for (let i = 0; i < this._healthyNodes.length; i++) {\n if (this._healthyNodes[i] == node) {\n this._healthyNodes.splice(i, 1);\n }\n }\n }\n\n /**\n * @param {NetworkNodeT} node\n */\n decreaseBackoff(node) {\n node.decreaseBackoff();\n }\n\n close() {\n for (const node of this._nodes) {\n node.close();\n }\n\n this._network.clear();\n this._nodes = [];\n }\n}\n"],"names":["ManagedNetwork","constructor","createNetworkChannel","this","_network","Map","_nodes","_healthyNodes","_createNetworkChannel","_ledgerId","_minBackoff","_maxBackoff","_maxNodeAttempts","_nodeMinReadmitPeriod","_nodeMaxReadmitPeriod","_earliestReadmitTime","Date","now","setNetworkName","networkName","console","warn","setLedgerId","ledgerId","toString","LedgerId","fromString","_createNodeFromNetworkEntry","entry","Error","_getNodesToRemove","network","_removeDeadNodes","i","length","_badGrpcStatusCount","_closeNode","_readmitNodes","nextEarliestReadmitTime","Number","MAX_SAFE_INTEGER","searchForNextEarliestReadmitTime","outer","j","_readmitTime","Math","min","push","max","_getNumberOfMostHealthyNodes","count","nodes","healthyNodes","slice","selectedNode","floor","random","filter","node","getKey","close","_removeNodeFromNetwork","splice","get","delete","_setNetwork","newNodes","newNodeKeys","Set","newNodeAddresses","newHealthyNodes","newNetwork","add","address","key","value","has","util.shuffle","isHealthy","newNetworkNodes","set","maxNodeAttempts","setMaxNodeAttempts","minBackoff","setMinBackoff","maxBackoff","setMaxBackoff","nodeMinReadmitPeriod","setNodeMinReadmitPeriod","nodeMaxReadmitPeriod","setNodeMaxReadmitPeriod","getNode","undefined","lockedNodes","Array","from","keys","randomNodeAccountId","randomNode","increaseBackoff","decreaseBackoff","clear"],"mappings":"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"}
@@ -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 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};
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,KAAKC,GAAY,CAACA,EAASA,MACpE,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"],"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"}