@hiero-ledger/sdk 2.76.0 → 2.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/umd.js +426 -82
  2. package/dist/umd.min.js +14 -14
  3. package/lib/Executable.cjs +13 -3
  4. package/lib/Executable.js +1 -1
  5. package/lib/Executable.js.map +1 -1
  6. package/lib/channel/Channel.cjs +25 -1
  7. package/lib/channel/Channel.d.ts +20 -0
  8. package/lib/channel/Channel.js +1 -1
  9. package/lib/channel/Channel.js.map +1 -1
  10. package/lib/channel/NativeChannel.cjs +96 -2
  11. package/lib/channel/NativeChannel.d.ts +21 -1
  12. package/lib/channel/NativeChannel.js +1 -1
  13. package/lib/channel/NativeChannel.js.map +1 -1
  14. package/lib/channel/NodeChannel.cjs +4 -5
  15. package/lib/channel/NodeChannel.d.ts +2 -3
  16. package/lib/channel/NodeChannel.js +1 -1
  17. package/lib/channel/NodeChannel.js.map +1 -1
  18. package/lib/channel/WebChannel.cjs +163 -13
  19. package/lib/channel/WebChannel.d.ts +51 -1
  20. package/lib/channel/WebChannel.js +1 -1
  21. package/lib/channel/WebChannel.js.map +1 -1
  22. package/lib/client/Client.cjs +62 -5
  23. package/lib/client/Client.d.ts +26 -3
  24. package/lib/client/Client.js +1 -1
  25. package/lib/client/Client.js.map +1 -1
  26. package/lib/client/NativeClient.cjs +1 -1
  27. package/lib/client/NativeClient.js +1 -1
  28. package/lib/client/NativeClient.js.map +1 -1
  29. package/lib/client/NodeClient.cjs +7 -6
  30. package/lib/client/NodeClient.d.ts +3 -3
  31. package/lib/client/NodeClient.js +1 -1
  32. package/lib/client/NodeClient.js.map +1 -1
  33. package/lib/client/WebClient.cjs +55 -27
  34. package/lib/client/WebClient.d.ts +6 -0
  35. package/lib/client/WebClient.js +1 -1
  36. package/lib/client/WebClient.js.map +1 -1
  37. package/lib/client/addressbooks/mainnet.cjs +1 -1
  38. package/lib/client/addressbooks/mainnet.d.ts +1 -1
  39. package/lib/client/addressbooks/mainnet.js +1 -1
  40. package/lib/client/addressbooks/mainnet.js.map +1 -1
  41. package/lib/client/addressbooks/previewnet.cjs +1 -1
  42. package/lib/client/addressbooks/previewnet.d.ts +1 -1
  43. package/lib/client/addressbooks/previewnet.js +1 -1
  44. package/lib/client/addressbooks/previewnet.js.map +1 -1
  45. package/lib/client/addressbooks/testnet.cjs +1 -1
  46. package/lib/client/addressbooks/testnet.d.ts +1 -1
  47. package/lib/client/addressbooks/testnet.js +1 -1
  48. package/lib/client/addressbooks/testnet.js.map +1 -1
  49. package/lib/constants/ClientConstants.cjs +17 -1
  50. package/lib/constants/ClientConstants.d.ts +14 -0
  51. package/lib/constants/ClientConstants.js +1 -1
  52. package/lib/constants/ClientConstants.js.map +1 -1
  53. package/lib/network/AddressBookQuery.cjs +0 -4
  54. package/lib/network/AddressBookQuery.js +1 -1
  55. package/lib/network/AddressBookQuery.js.map +1 -1
  56. package/lib/network/AddressBookQueryWeb.cjs +1 -5
  57. package/lib/network/AddressBookQueryWeb.js +1 -1
  58. package/lib/network/AddressBookQueryWeb.js.map +1 -1
  59. package/lib/version.js +1 -1
  60. package/package.json +7 -7
  61. package/src/Executable.js +18 -2
  62. package/src/channel/Channel.js +25 -1
  63. package/src/channel/NativeChannel.js +111 -2
  64. package/src/channel/NodeChannel.js +4 -7
  65. package/src/channel/WebChannel.js +189 -21
  66. package/src/client/Client.js +79 -5
  67. package/src/client/NativeClient.js +1 -1
  68. package/src/client/NodeClient.js +7 -6
  69. package/src/client/WebClient.js +64 -31
  70. package/src/client/addressbooks/mainnet.js +1 -1
  71. package/src/client/addressbooks/previewnet.js +1 -1
  72. package/src/client/addressbooks/testnet.js +1 -1
  73. package/src/constants/ClientConstants.js +16 -0
  74. package/src/network/AddressBookQuery.js +0 -7
  75. package/src/network/AddressBookQueryWeb.js +1 -8
@@ -16,6 +16,7 @@ var _FileId = _interopRequireDefault(require("../file/FileId.cjs"));
16
16
  var _Logger = _interopRequireDefault(require("../logger/Logger.cjs"));
17
17
  var _util = require("../util.cjs");
18
18
  var _AddressBookQuery = _interopRequireDefault(require("../network/AddressBookQuery.cjs"));
19
+ var _ClientConstants = require("../constants/ClientConstants.cjs");
19
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
21
  // SPDX-License-Identifier: Apache-2.0
21
22
 
@@ -48,6 +49,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
48
49
  * @property {boolean} [scheduleNetworkUpdate]
49
50
  * @property {number} [shard]
50
51
  * @property {number} [realm]
52
+ * @property {number} [grpcDeadline]
53
+ * @property {number} [requestTimeout]
51
54
  */
52
55
 
53
56
  /**
@@ -129,7 +132,10 @@ class Client {
129
132
  this._defaultRegenerateTransactionId = true;
130
133
 
131
134
  /** @private */
132
- this._requestTimeout = null;
135
+ this._requestTimeout = _ClientConstants.DEFAULT_REQUEST_TIMEOUT;
136
+
137
+ /** @private */
138
+ this._grpcDeadline = _ClientConstants.DEFAULT_GRPC_DEADLINE;
133
139
 
134
140
  /**
135
141
  * @type {boolean}
@@ -152,6 +158,17 @@ class Client {
152
158
  if (props != null && props.realm != null) {
153
159
  this._realm = props.realm;
154
160
  }
161
+ if (props != null && props.grpcDeadline != null) {
162
+ this.setGrpcDeadline(props.grpcDeadline);
163
+ }
164
+ if (props != null && props.requestTimeout != null) {
165
+ this.setRequestTimeout(props.requestTimeout);
166
+ }
167
+
168
+ // Validate that requestTimeout is larger than grpcDeadline after both are set
169
+ if (this._requestTimeout <= this._grpcDeadline) {
170
+ console.warn(`DEPRECATION WARNING: requestTimeout (${this._requestTimeout}ms) should be larger than grpcDeadline (${this._grpcDeadline}ms). ` + `This configuration may cause operations to fail unexpectedly. ` + `This will throw an error in the next major version. Please adjust your timeout values.`);
171
+ }
155
172
 
156
173
  /** @internal */
157
174
  /** @type {NodeJS.Timeout} */
@@ -649,21 +666,57 @@ class Client {
649
666
  }
650
667
 
651
668
  /**
652
- * @param {number} requestTimeout - Number of milliseconds
669
+ * Set the total request timeout for complete operations.
670
+ *
671
+ * @param {number} requestTimeout - Maximum time in milliseconds for complete Transaction/Query operations
653
672
  * @returns {this}
654
673
  */
655
674
  setRequestTimeout(requestTimeout) {
675
+ if (requestTimeout <= 0) {
676
+ throw new Error("requestTimeout must be a positive number");
677
+ }
678
+ if (requestTimeout <= this._grpcDeadline) {
679
+ console.warn(`DEPRECATION WARNING: requestTimeout (${requestTimeout}ms) should be larger than grpcDeadline (${this._grpcDeadline}ms). ` + `This configuration may cause operations to fail unexpectedly. ` + `This will throw an error in the next major version. Please adjust your timeout values.`);
680
+ }
656
681
  this._requestTimeout = requestTimeout;
657
682
  return this;
658
683
  }
659
684
 
660
685
  /**
661
- * @returns {?number}
686
+ * Get the total request timeout for complete operations.
687
+ *
688
+ * @returns {number} Maximum time in milliseconds for complete Transaction/Query operations
662
689
  */
663
690
  get requestTimeout() {
664
691
  return this._requestTimeout;
665
692
  }
666
693
 
694
+ /**
695
+ * Set the global gRPC deadline for all requests.
696
+ *
697
+ * @param {number} grpcDeadline - Maximum time in milliseconds for a single gRPC request
698
+ * @returns {this}
699
+ */
700
+ setGrpcDeadline(grpcDeadline) {
701
+ if (grpcDeadline <= 0) {
702
+ throw new Error("grpcDeadline must be a positive number");
703
+ }
704
+ if (grpcDeadline >= this._requestTimeout) {
705
+ console.warn(`DEPRECATION WARNING: grpcDeadline (${grpcDeadline}ms) should be smaller than requestTimeout (${this._requestTimeout}ms). ` + `This configuration may cause operations to fail unexpectedly. ` + `This will throw an error in the next major version. Please adjust your timeout values.`);
706
+ }
707
+ this._grpcDeadline = grpcDeadline;
708
+ return this;
709
+ }
710
+
711
+ /**
712
+ * Get the global gRPC deadline for all requests.
713
+ *
714
+ * @returns {number} Maximum time in milliseconds for a single gRPC request
715
+ */
716
+ get grpcDeadline() {
717
+ return this._grpcDeadline;
718
+ }
719
+
667
720
  /**
668
721
  * @returns {number}
669
722
  */
@@ -752,7 +805,9 @@ class Client {
752
805
  * @returns {(address: string) => ChannelT}
753
806
  */
754
807
  _createNetworkChannel() {
755
- throw new Error("not implemented");
808
+ return () => {
809
+ throw new Error("not implemented");
810
+ };
756
811
  }
757
812
 
758
813
  /**
@@ -760,7 +815,9 @@ class Client {
760
815
  * @returns {(address: string) => MirrorChannelT}
761
816
  */
762
817
  _createMirrorNetworkChannel() {
763
- throw new Error("not implemented");
818
+ return () => {
819
+ throw new Error("not implemented");
820
+ };
764
821
  }
765
822
 
766
823
  /**
@@ -22,6 +22,8 @@
22
22
  * @property {boolean} [scheduleNetworkUpdate]
23
23
  * @property {number} [shard]
24
24
  * @property {number} [realm]
25
+ * @property {number} [grpcDeadline]
26
+ * @property {number} [requestTimeout]
25
27
  */
26
28
  /**
27
29
  * @typedef {"mainnet" | "testnet" | "previewnet"} NetworkName
@@ -108,6 +110,8 @@ export default class Client<ChannelT extends Channel, MirrorChannelT extends Mir
108
110
  private _defaultRegenerateTransactionId;
109
111
  /** @private */
110
112
  private _requestTimeout;
113
+ /** @private */
114
+ private _grpcDeadline;
111
115
  /**
112
116
  * @type {boolean}
113
117
  */
@@ -405,14 +409,31 @@ export default class Client<ChannelT extends Channel, MirrorChannelT extends Mir
405
409
  */
406
410
  get nodeMaxReadmitPeriod(): number;
407
411
  /**
408
- * @param {number} requestTimeout - Number of milliseconds
412
+ * Set the total request timeout for complete operations.
413
+ *
414
+ * @param {number} requestTimeout - Maximum time in milliseconds for complete Transaction/Query operations
409
415
  * @returns {this}
410
416
  */
411
417
  setRequestTimeout(requestTimeout: number): this;
412
418
  /**
413
- * @returns {?number}
419
+ * Get the total request timeout for complete operations.
420
+ *
421
+ * @returns {number} Maximum time in milliseconds for complete Transaction/Query operations
422
+ */
423
+ get requestTimeout(): number;
424
+ /**
425
+ * Set the global gRPC deadline for all requests.
426
+ *
427
+ * @param {number} grpcDeadline - Maximum time in milliseconds for a single gRPC request
428
+ * @returns {this}
429
+ */
430
+ setGrpcDeadline(grpcDeadline: number): this;
431
+ /**
432
+ * Get the global gRPC deadline for all requests.
433
+ *
434
+ * @returns {number} Maximum time in milliseconds for a single gRPC request
414
435
  */
415
- get requestTimeout(): number | null;
436
+ get grpcDeadline(): number;
416
437
  /**
417
438
  * @returns {number}
418
439
  */
@@ -489,6 +510,8 @@ export type ClientConfiguration = {
489
510
  scheduleNetworkUpdate?: boolean | undefined;
490
511
  shard?: number | undefined;
491
512
  realm?: number | undefined;
513
+ grpcDeadline?: number | undefined;
514
+ requestTimeout?: number | undefined;
492
515
  };
493
516
  export type NetworkName = "mainnet" | "testnet" | "previewnet";
494
517
  import MirrorNetwork from "./MirrorNetwork.js";
@@ -1,2 +1,2 @@
1
- import t from"../account/AccountId.js";import e from"../account/AccountBalanceQuery.js";import r from"../Hbar.js";import s from"./Network.js";import n from"./MirrorNetwork.js";import o from"../PublicKey.js";import i from"../PrivateKey.js";import a from"../LedgerId.js";import u from"../file/FileId.js";import"pino";import"../logger/LogLevel.js";import{convertToNumber as h}from"../util.js";import d from"../network/AddressBookQuery.js";class l{constructor(t){this._mirrorNetwork=new n(this._createMirrorNetworkChannel()),this._network=new s(this._createNetworkChannel()),this._operator=null,this._defaultMaxTransactionFee=null,this._defaultMaxQueryPayment=new r(1),null!=t&&null!=t.operator&&this.setOperator(t.operator.accountId,t.operator.privateKey),this._maxAttempts=null,this._signOnDemand=!1,this._autoValidateChecksums=!1,this._minBackoff=250,this._maxBackoff=8e3,this._defaultRegenerateTransactionId=!0,this._requestTimeout=null,this._isUpdatingNetwork=!1,this._networkUpdatePeriod=864e5,this._isShutdown=!1,this._shard=0,this._realm=0,null!=t&&!1!==t.scheduleNetworkUpdate&&this._scheduleNetworkUpdate(),null!=t&&null!=t.shard&&(this._shard=t.shard),null!=t&&null!=t.realm&&(this._realm=t.realm),this._timer,this._logger=null}setNetworkName(t){return console.warn("Deprecated: Use `setLedgerId` instead"),this.setLedgerId(t)}get networkName(){return console.warn("Deprecated: Use `ledgerId` instead"),null!=this.ledgerId?this.ledgerId.toString():null}setLedgerId(t){return this._network.setLedgerId("string"==typeof t?a.fromString(t):t),this}get ledgerId(){return null!=this._network._ledgerId?this._network.ledgerId:null}setNetwork(t){throw new Error("not implemented")}setNetworkFromAddressBook(t){return this._network.setNetworkFromAddressBook(t),this}get network(){return this._network.network}get shard(){return this._shard}get realm(){return this._realm}setMirrorNetwork(t){throw new Error("not implemented")}get mirrorNetwork(){return this._mirrorNetwork.network}get mirrorRestApiBaseUrl(){return this._mirrorNetwork.mirrorRestApiBaseUrl}get signOnDemand(){return this._signOnDemand}setSignOnDemand(t){this._signOnDemand=t}isTransportSecurity(){return this._network.isTransportSecurity()}setTransportSecurity(t){return this._network.setTransportSecurity(t),this}setOperator(t,e){const r="string"==typeof e?i.fromStringDer(e):e;return this.setOperatorWith(t,r.publicKey,t=>Promise.resolve(r.sign(t)))}getOperator(){return this._operator}setOperatorWith(e,r,s){const n=e instanceof t?e:t.fromString(e);return null!=this._network._ledgerId&&n.validateChecksum(this),this._operator={transactionSigner:s,accountId:n,publicKey:r instanceof o?r:o.fromString(r)},this}setAutoValidateChecksums(t){return this._autoValidateChecksums=t,this}isAutoValidateChecksumsEnabled(){return this._autoValidateChecksums}get operatorAccountId(){return null!=this._operator?this._operator.accountId:null}get operatorPublicKey(){return null!=this._operator?this._operator.publicKey:null}get defaultMaxTransactionFee(){return this._defaultMaxTransactionFee}get maxTransactionFee(){return this.defaultMaxTransactionFee}setDefaultMaxTransactionFee(t){if(t.toTinybars().toInt()<0)throw new Error("defaultMaxTransactionFee must be non-negative");return this._defaultMaxTransactionFee=t,this}setMaxTransactionFee(t){return this.setDefaultMaxTransactionFee(t)}get defaultRegenerateTransactionId(){return this._defaultRegenerateTransactionId}setDefaultRegenerateTransactionId(t){return this._defaultRegenerateTransactionId=t,this}get defaultMaxQueryPayment(){return this._defaultMaxQueryPayment}get maxQueryPayment(){return this.defaultMaxQueryPayment}setDefaultMaxQueryPayment(t){if(h(t.toTinybars())<0)throw new Error("defaultMaxQueryPayment must be non-negative");return this._defaultMaxQueryPayment=t,this}setMaxQueryPayment(t){return this.setDefaultMaxQueryPayment(t)}get maxAttempts(){return null!=this._maxAttempts?this._maxAttempts:10}setMaxAttempts(t){return this._maxAttempts=t,this}get maxNodeAttempts(){return this._network.maxNodeAttempts}setMaxNodeAttempts(t){return this._network.setMaxNodeAttempts(t),this}get nodeWaitTime(){return this._network.minBackoff}setNodeWaitTime(t){return this._network.setMinBackoff(t),this}get maxNodesPerTransaction(){return this._network.maxNodesPerTransaction}setMaxNodesPerTransaction(t){return this._network.setMaxNodesPerTransaction(t),this}setMinBackoff(t){if(null==t)throw new Error("minBackoff cannot be null.");if(t>this._maxBackoff)throw new Error("minBackoff cannot be larger than maxBackoff.");return this._minBackoff=t,this}get minBackoff(){return this._minBackoff}setMaxBackoff(t){if(null==t)throw new Error("maxBackoff cannot be null.");if(t<this._minBackoff)throw new Error("maxBackoff cannot be smaller than minBackoff.");return this._maxBackoff=t,this}get maxBackoff(){return this._maxBackoff}setNodeMinBackoff(t){return this._network.setMinBackoff(t),this}get nodeMinBackoff(){return this._network.minBackoff}setNodeMaxBackoff(t){return this._network.setMaxBackoff(t),this}get nodeMaxBackoff(){return this._network.maxBackoff}setNodeMinReadmitPeriod(t){return this._network.setNodeMinReadmitPeriod(t),this}get nodeMinReadmitPeriod(){return this._network.nodeMinReadmitPeriod}setNodeMaxReadmitPeriod(t){return this._network.setNodeMaxReadmitPeriod(t),this}get nodeMaxReadmitPeriod(){return this._network.nodeMaxReadmitPeriod}setRequestTimeout(t){return this._requestTimeout=t,this}get requestTimeout(){return this._requestTimeout}get networkUpdatePeriod(){return this._networkUpdatePeriod}setNetworkUpdatePeriod(t){return clearTimeout(this._timer),this._networkUpdatePeriod=t,this._scheduleNetworkUpdate(),this}setLogger(t){return this._logger=t,this}get logger(){return this._logger}async ping(r){await new e({accountId:r}).setNodeAccountIds([r instanceof t?r:t.fromString(r)]).execute(this)}async pingAll(){for(const t of Object.values(this._network.network))await this.ping(t)}async updateNetwork(){if(this._isUpdatingNetwork)return this;this._isUpdatingNetwork=!0;try{const t=await(new d).setFileId(u.getAddressBookFileIdFor(this._shard,this._realm)).execute(this);this.setNetworkFromAddressBook(t)}catch(t){this._logger&&this._logger.trace(`failed to update client address book: ${t.toString()}`)}finally{this._isUpdatingNetwork=!1}return this}close(){this._network.close(),this._mirrorNetwork.close(),this._isShutdown=!0,clearTimeout(this._timer)}_createNetworkChannel(){throw new Error("not implemented")}_createMirrorNetworkChannel(){throw new Error("not implemented")}_scheduleNetworkUpdate(){this._timer=setTimeout(async()=>{await this.updateNetwork(),this._isShutdown||this._scheduleNetworkUpdate()},this._networkUpdatePeriod)}get isClientShutDown(){return this._isShutdown}static _validateNetworkConsistency(t){if(0===Object.keys(t).length)return;const[,e]=Object.entries(t)[0],r=e.toString(),[s,n]=r.split(".").map(Number),o=Object.values(t).every(t=>{const e=t.toString(),[r,o]=e.split(".").map(Number);return r===s&&o===n});if(!o)throw new Error("Network is not valid, all nodes must be in the same shard and realm")}static _extractShardRealm(t){const e=Object.entries(t);if(0===e.length)return{shard:0,realm:0};const[,r]=e[0],s=r.toString(),[n,o]=s.split(".").map(Number);return{shard:n,realm:o}}}export{l as default};
1
+ import e from"../account/AccountId.js";import t from"../account/AccountBalanceQuery.js";import r from"../Hbar.js";import s from"./Network.js";import i from"./MirrorNetwork.js";import n from"../PublicKey.js";import o 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 l from"../network/AddressBookQuery.js";import{DEFAULT_REQUEST_TIMEOUT as d,DEFAULT_GRPC_DEADLINE as m}from"../constants/ClientConstants.js";class c{constructor(e){this._mirrorNetwork=new i(this._createMirrorNetworkChannel()),this._network=new s(this._createNetworkChannel()),this._operator=null,this._defaultMaxTransactionFee=null,this._defaultMaxQueryPayment=new r(1),null!=e&&null!=e.operator&&this.setOperator(e.operator.accountId,e.operator.privateKey),this._maxAttempts=null,this._signOnDemand=!1,this._autoValidateChecksums=!1,this._minBackoff=250,this._maxBackoff=8e3,this._defaultRegenerateTransactionId=!0,this._requestTimeout=d,this._grpcDeadline=m,this._isUpdatingNetwork=!1,this._networkUpdatePeriod=864e5,this._isShutdown=!1,this._shard=0,this._realm=0,null!=e&&!1!==e.scheduleNetworkUpdate&&this._scheduleNetworkUpdate(),null!=e&&null!=e.shard&&(this._shard=e.shard),null!=e&&null!=e.realm&&(this._realm=e.realm),null!=e&&null!=e.grpcDeadline&&this.setGrpcDeadline(e.grpcDeadline),null!=e&&null!=e.requestTimeout&&this.setRequestTimeout(e.requestTimeout),this._requestTimeout<=this._grpcDeadline&&console.warn(`DEPRECATION WARNING: requestTimeout (${this._requestTimeout}ms) should be larger than grpcDeadline (${this._grpcDeadline}ms). This configuration may cause operations to fail unexpectedly. This will throw an error in the next major version. Please adjust your timeout values.`),this._timer,this._logger=null}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(e){return this._network.setLedgerId("string"==typeof e?a.fromString(e):e),this}get ledgerId(){return null!=this._network._ledgerId?this._network.ledgerId:null}setNetwork(e){throw new Error("not implemented")}setNetworkFromAddressBook(e){return this._network.setNetworkFromAddressBook(e),this}get network(){return this._network.network}get shard(){return this._shard}get realm(){return this._realm}setMirrorNetwork(e){throw new Error("not implemented")}get mirrorNetwork(){return this._mirrorNetwork.network}get mirrorRestApiBaseUrl(){return this._mirrorNetwork.mirrorRestApiBaseUrl}get signOnDemand(){return this._signOnDemand}setSignOnDemand(e){this._signOnDemand=e}isTransportSecurity(){return this._network.isTransportSecurity()}setTransportSecurity(e){return this._network.setTransportSecurity(e),this}setOperator(e,t){const r="string"==typeof t?o.fromStringDer(t):t;return this.setOperatorWith(e,r.publicKey,e=>Promise.resolve(r.sign(e)))}getOperator(){return this._operator}setOperatorWith(t,r,s){const i=t instanceof e?t:e.fromString(t);return null!=this._network._ledgerId&&i.validateChecksum(this),this._operator={transactionSigner:s,accountId:i,publicKey:r instanceof n?r:n.fromString(r)},this}setAutoValidateChecksums(e){return this._autoValidateChecksums=e,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(e){if(e.toTinybars().toInt()<0)throw new Error("defaultMaxTransactionFee must be non-negative");return this._defaultMaxTransactionFee=e,this}setMaxTransactionFee(e){return this.setDefaultMaxTransactionFee(e)}get defaultRegenerateTransactionId(){return this._defaultRegenerateTransactionId}setDefaultRegenerateTransactionId(e){return this._defaultRegenerateTransactionId=e,this}get defaultMaxQueryPayment(){return this._defaultMaxQueryPayment}get maxQueryPayment(){return this.defaultMaxQueryPayment}setDefaultMaxQueryPayment(e){if(h(e.toTinybars())<0)throw new Error("defaultMaxQueryPayment must be non-negative");return this._defaultMaxQueryPayment=e,this}setMaxQueryPayment(e){return this.setDefaultMaxQueryPayment(e)}get maxAttempts(){return null!=this._maxAttempts?this._maxAttempts:10}setMaxAttempts(e){return this._maxAttempts=e,this}get maxNodeAttempts(){return this._network.maxNodeAttempts}setMaxNodeAttempts(e){return this._network.setMaxNodeAttempts(e),this}get nodeWaitTime(){return this._network.minBackoff}setNodeWaitTime(e){return this._network.setMinBackoff(e),this}get maxNodesPerTransaction(){return this._network.maxNodesPerTransaction}setMaxNodesPerTransaction(e){return this._network.setMaxNodesPerTransaction(e),this}setMinBackoff(e){if(null==e)throw new Error("minBackoff cannot be null.");if(e>this._maxBackoff)throw new Error("minBackoff cannot be larger than maxBackoff.");return this._minBackoff=e,this}get minBackoff(){return this._minBackoff}setMaxBackoff(e){if(null==e)throw new Error("maxBackoff cannot be null.");if(e<this._minBackoff)throw new Error("maxBackoff cannot be smaller than minBackoff.");return this._maxBackoff=e,this}get maxBackoff(){return this._maxBackoff}setNodeMinBackoff(e){return this._network.setMinBackoff(e),this}get nodeMinBackoff(){return this._network.minBackoff}setNodeMaxBackoff(e){return this._network.setMaxBackoff(e),this}get nodeMaxBackoff(){return this._network.maxBackoff}setNodeMinReadmitPeriod(e){return this._network.setNodeMinReadmitPeriod(e),this}get nodeMinReadmitPeriod(){return this._network.nodeMinReadmitPeriod}setNodeMaxReadmitPeriod(e){return this._network.setNodeMaxReadmitPeriod(e),this}get nodeMaxReadmitPeriod(){return this._network.nodeMaxReadmitPeriod}setRequestTimeout(e){if(e<=0)throw new Error("requestTimeout must be a positive number");return e<=this._grpcDeadline&&console.warn(`DEPRECATION WARNING: requestTimeout (${e}ms) should be larger than grpcDeadline (${this._grpcDeadline}ms). This configuration may cause operations to fail unexpectedly. This will throw an error in the next major version. Please adjust your timeout values.`),this._requestTimeout=e,this}get requestTimeout(){return this._requestTimeout}setGrpcDeadline(e){if(e<=0)throw new Error("grpcDeadline must be a positive number");return e>=this._requestTimeout&&console.warn(`DEPRECATION WARNING: grpcDeadline (${e}ms) should be smaller than requestTimeout (${this._requestTimeout}ms). This configuration may cause operations to fail unexpectedly. This will throw an error in the next major version. Please adjust your timeout values.`),this._grpcDeadline=e,this}get grpcDeadline(){return this._grpcDeadline}get networkUpdatePeriod(){return this._networkUpdatePeriod}setNetworkUpdatePeriod(e){return clearTimeout(this._timer),this._networkUpdatePeriod=e,this._scheduleNetworkUpdate(),this}setLogger(e){return this._logger=e,this}get logger(){return this._logger}async ping(r){await new t({accountId:r}).setNodeAccountIds([r instanceof e?r:e.fromString(r)]).execute(this)}async pingAll(){for(const e of Object.values(this._network.network))await this.ping(e)}async updateNetwork(){if(this._isUpdatingNetwork)return this;this._isUpdatingNetwork=!0;try{const e=await(new l).setFileId(u.getAddressBookFileIdFor(this._shard,this._realm)).execute(this);this.setNetworkFromAddressBook(e)}catch(e){this._logger&&this._logger.trace(`failed to update client address book: ${e.toString()}`)}finally{this._isUpdatingNetwork=!1}return this}close(){this._network.close(),this._mirrorNetwork.close(),this._isShutdown=!0,clearTimeout(this._timer)}_createNetworkChannel(){return()=>{throw new Error("not implemented")}}_createMirrorNetworkChannel(){return()=>{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(e){if(0===Object.keys(e).length)return;const[,t]=Object.entries(e)[0],r=t.toString(),[s,i]=r.split(".").map(Number),n=Object.values(e).every(e=>{const t=e.toString(),[r,n]=t.split(".").map(Number);return r===s&&n===i});if(!n)throw new Error("Network is not valid, all nodes must be in the same shard and realm")}static _extractShardRealm(e){const t=Object.entries(e);if(0===t.length)return{shard:0,realm:0};const[,r]=t[0],s=r.toString(),[i,n]=s.split(".").map(Number);return{shard:i,realm:n}}}export{c 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 {string}\n * @throws {Error} When no mirror network is configured or available\n */\n get mirrorRestApiBaseUrl() {\n return this._mirrorNetwork.mirrorRestApiBaseUrl;\n }\n\n /**\n * @returns {boolean}\n */\n get signOnDemand() {\n return this._signOnDemand;\n }\n\n /**\n * @param {boolean} signOnDemand\n */\n setSignOnDemand(signOnDemand) {\n this._signOnDemand = signOnDemand;\n }\n\n /**\n * @returns {boolean}\n */\n isTransportSecurity() {\n return this._network.isTransportSecurity();\n }\n\n /**\n * @param {boolean} transportSecurity\n * @returns {this}\n */\n setTransportSecurity(transportSecurity) {\n this._network.setTransportSecurity(transportSecurity);\n return this;\n }\n\n /**\n * Set the account that will, by default, pay for transactions and queries built with this client.\n * NOTE: When using string for private key, the string needs to contain DER headers\n *\n * @param {AccountId | string} accountId\n * @param {PrivateKey | string} privateKey\n * @returns {this}\n */\n setOperator(accountId, privateKey) {\n const key =\n typeof privateKey === \"string\"\n ? PrivateKey.fromStringDer(privateKey)\n : privateKey;\n\n return this.setOperatorWith(accountId, key.publicKey, (message) =>\n Promise.resolve(key.sign(message)),\n );\n }\n\n /**\n * @returns {?ClientOperator}\n */\n getOperator() {\n return this._operator;\n }\n\n /**\n * Sets the account that will, by default, pay for transactions and queries built with\n * this client.\n *\n * @param {AccountId | string} accountId\n * @param {PublicKey | string} publicKey\n * @param {(message: Uint8Array) => Promise<Uint8Array>} transactionSigner\n * @returns {this}\n */\n setOperatorWith(accountId, publicKey, transactionSigner) {\n const accountId_ =\n accountId instanceof AccountId\n ? accountId\n : AccountId.fromString(accountId);\n\n if (this._network._ledgerId != null) {\n accountId_.validateChecksum(this);\n }\n\n this._operator = {\n transactionSigner,\n\n accountId: accountId_,\n\n publicKey:\n publicKey instanceof PublicKey\n ? publicKey\n : PublicKey.fromString(publicKey),\n };\n\n return this;\n }\n\n /**\n * @param {boolean} value\n * @returns {this}\n */\n setAutoValidateChecksums(value) {\n this._autoValidateChecksums = value;\n return this;\n }\n\n /**\n * @returns {boolean}\n */\n isAutoValidateChecksumsEnabled() {\n return this._autoValidateChecksums;\n }\n\n /**\n * @returns {?AccountId}\n */\n get operatorAccountId() {\n return this._operator != null ? this._operator.accountId : null;\n }\n\n /**\n * @returns {?PublicKey}\n */\n get operatorPublicKey() {\n return this._operator != null ? this._operator.publicKey : null;\n }\n\n /**\n * @returns {?Hbar}\n */\n get defaultMaxTransactionFee() {\n return this._defaultMaxTransactionFee;\n }\n\n /**\n * @deprecated - Use `defaultMaxTransactionFee` instead\n * @returns {?Hbar}\n */\n get maxTransactionFee() {\n return this.defaultMaxTransactionFee;\n }\n\n /**\n * Set the defaultimum fee to be paid for transactions\n * executed by this client.\n *\n * @param {Hbar} defaultMaxTransactionFee\n * @returns {this}\n */\n setDefaultMaxTransactionFee(defaultMaxTransactionFee) {\n if (defaultMaxTransactionFee.toTinybars().toInt() < 0) {\n throw new Error(\"defaultMaxTransactionFee must be non-negative\");\n }\n this._defaultMaxTransactionFee = defaultMaxTransactionFee;\n return this;\n }\n\n /**\n * @deprecated - Use `setDefaultMaxTransactionFee()` instead\n * Set the maximum fee to be paid for transactions\n * executed by this client.\n * @param {Hbar} maxTransactionFee\n * @returns {this}\n */\n setMaxTransactionFee(maxTransactionFee) {\n return this.setDefaultMaxTransactionFee(maxTransactionFee);\n }\n\n /**\n * @returns {boolean}\n */\n get defaultRegenerateTransactionId() {\n return this._defaultRegenerateTransactionId;\n }\n\n /**\n * Set if a new transaction ID should be generated when a `TRANSACTION_EXPIRED` status\n * is returned.\n *\n * @param {boolean} defaultRegenerateTransactionId\n * @returns {this}\n */\n setDefaultRegenerateTransactionId(defaultRegenerateTransactionId) {\n this._defaultRegenerateTransactionId = defaultRegenerateTransactionId;\n return this;\n }\n\n /**\n * @returns {Hbar}\n */\n get defaultMaxQueryPayment() {\n return this._defaultMaxQueryPayment;\n }\n\n /**\n * @deprecated in a favor of defaultMaxQueryPayment\n * @returns {Hbar}\n */\n get maxQueryPayment() {\n return this.defaultMaxQueryPayment;\n }\n\n /**\n * Set the maximum payment allowable for queries.\n *\n * @param {Hbar} defaultMaxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setDefaultMaxQueryPayment(defaultMaxQueryPayment) {\n const isMaxQueryPaymentNegative =\n convertToNumber(defaultMaxQueryPayment.toTinybars()) < 0;\n if (isMaxQueryPaymentNegative) {\n throw new Error(\"defaultMaxQueryPayment must be non-negative\");\n }\n this._defaultMaxQueryPayment = defaultMaxQueryPayment;\n return this;\n }\n /**\n * @deprecated in a favor of setDefaultMaxQueryPayment()\n * Set the maximum payment allowable for queries.\n * @param {Hbar} maxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setMaxQueryPayment(maxQueryPayment) {\n return this.setDefaultMaxQueryPayment(maxQueryPayment);\n }\n\n /**\n * @returns {number}\n */\n get maxAttempts() {\n return this._maxAttempts != null ? this._maxAttempts : 10;\n }\n\n /**\n * @param {number} maxAttempts\n * @returns {this}\n */\n setMaxAttempts(maxAttempts) {\n this._maxAttempts = maxAttempts;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxNodeAttempts() {\n return this._network.maxNodeAttempts;\n }\n\n /**\n * @param {number} maxNodeAttempts\n * @returns {this}\n */\n setMaxNodeAttempts(maxNodeAttempts) {\n this._network.setMaxNodeAttempts(maxNodeAttempts);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeWaitTime() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeWaitTime\n * @returns {this}\n */\n setNodeWaitTime(nodeWaitTime) {\n this._network.setMinBackoff(nodeWaitTime);\n return this;\n }\n\n /**\n * Gets the maximum number of nodes that a transaction or query will attempt to execute against.\n *\n * @returns {number} The current maximum nodes per transaction setting.\n * Returns -1 if no limit is set (uses network defaults).\n */\n get maxNodesPerTransaction() {\n return this._network.maxNodesPerTransaction;\n }\n\n /**\n * Sets the maximum number of nodes that a transaction or query will execute against.\n *\n * - **Before freezing**: Limits automatic node selection when no explicit nodes are set\n * - **After freezing**: Trims frozen transactions to the first N nodes while preserving signatures\n * - **Special values**: 0 disables limiting, values > available nodes cause no trimming\n *\n * @param {number} maxNodesPerTransaction - Maximum nodes per transaction. Set to 0 to disable.\n * @returns {this} The client instance for method chaining\n */\n setMaxNodesPerTransaction(maxNodesPerTransaction) {\n this._network.setMaxNodesPerTransaction(maxNodesPerTransaction);\n return this;\n }\n\n /**\n * @param {?number} minBackoff\n * @returns {this}\n */\n setMinBackoff(minBackoff) {\n if (minBackoff == null) {\n throw new Error(\"minBackoff cannot be null.\");\n }\n if (minBackoff > this._maxBackoff) {\n throw new Error(\"minBackoff cannot be larger than maxBackoff.\");\n }\n this._minBackoff = minBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get minBackoff() {\n return this._minBackoff;\n }\n\n /**\n * @param {?number} maxBackoff\n * @returns {this}\n */\n setMaxBackoff(maxBackoff) {\n if (maxBackoff == null) {\n throw new Error(\"maxBackoff cannot be null.\");\n } else if (maxBackoff < this._minBackoff) {\n throw new Error(\"maxBackoff cannot be smaller than minBackoff.\");\n }\n this._maxBackoff = maxBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxBackoff() {\n return this._maxBackoff;\n }\n\n /**\n * @param {number} nodeMinBackoff\n * @returns {this}\n */\n setNodeMinBackoff(nodeMinBackoff) {\n this._network.setMinBackoff(nodeMinBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinBackoff() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeMaxBackoff\n * @returns {this}\n */\n setNodeMaxBackoff(nodeMaxBackoff) {\n this._network.setMaxBackoff(nodeMaxBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxBackoff() {\n return this._network.maxBackoff;\n }\n\n /**\n * @param {number} nodeMinReadmitPeriod\n * @returns {this}\n */\n setNodeMinReadmitPeriod(nodeMinReadmitPeriod) {\n this._network.setNodeMinReadmitPeriod(nodeMinReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinReadmitPeriod() {\n return this._network.nodeMinReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMaxReadmitPeriod\n * @returns {this}\n */\n setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod) {\n this._network.setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxReadmitPeriod() {\n return this._network.nodeMaxReadmitPeriod;\n }\n\n /**\n * @param {number} requestTimeout - Number of milliseconds\n * @returns {this}\n */\n setRequestTimeout(requestTimeout) {\n this._requestTimeout = requestTimeout;\n return this;\n }\n\n /**\n * @returns {?number}\n */\n get requestTimeout() {\n return this._requestTimeout;\n }\n\n /**\n * @returns {number}\n */\n get networkUpdatePeriod() {\n return this._networkUpdatePeriod;\n }\n\n /**\n * @param {number} networkUpdatePeriod\n * @returns {this}\n */\n setNetworkUpdatePeriod(networkUpdatePeriod) {\n clearTimeout(this._timer);\n this._networkUpdatePeriod = networkUpdatePeriod;\n this._scheduleNetworkUpdate();\n return this;\n }\n /**\n * Set logger\n *\n * @param {Logger} logger\n * @returns {this}\n */\n setLogger(logger) {\n this._logger = logger;\n return this;\n }\n\n /**\n * Get logger if set\n *\n * @returns {?Logger}\n */\n get logger() {\n return this._logger;\n }\n\n /**\n * @param {AccountId | string} accountId\n */\n async ping(accountId) {\n await new AccountBalanceQuery({ accountId })\n .setNodeAccountIds([\n accountId instanceof AccountId\n ? accountId\n : AccountId.fromString(accountId),\n ])\n .execute(this);\n }\n\n async pingAll() {\n for (const nodeAccountId of Object.values(this._network.network)) {\n await this.ping(nodeAccountId);\n }\n }\n\n /**\n * Update the network address book.\n * @returns {Promise<this>}\n */\n async updateNetwork() {\n if (this._isUpdatingNetwork) {\n return this;\n }\n\n this._isUpdatingNetwork = true;\n\n try {\n const addressBook = await new AddressBookQuery()\n .setFileId(\n FileId.getAddressBookFileIdFor(this._shard, this._realm),\n )\n .execute(this);\n this.setNetworkFromAddressBook(addressBook);\n } catch (error) {\n if (this._logger) {\n this._logger.trace(\n `failed to update client address book: ${\n /** @type {Error} */ (error).toString()\n }`,\n );\n }\n } finally {\n this._isUpdatingNetwork = false;\n }\n\n return this;\n }\n\n /**\n * @returns {void}\n */\n close() {\n this._network.close();\n this._mirrorNetwork.close();\n this._isShutdown = true;\n clearTimeout(this._timer);\n }\n\n /**\n * @abstract\n * @returns {(address: string) => ChannelT}\n */\n _createNetworkChannel() {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @abstract\n * @returns {(address: string) => MirrorChannelT}\n */\n _createMirrorNetworkChannel() {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @private\n */\n _scheduleNetworkUpdate() {\n // This is the automatic network update promise that _eventually_ completes\n // eslint-disable-next-line @typescript-eslint/no-floating-promises,@typescript-eslint/no-misused-promises\n this._timer = setTimeout(async () => {\n await this.updateNetwork();\n\n if (!this._isShutdown) {\n // Recall this method to continuously update the network\n // every `networkUpdatePeriod` amount of itme\n this._scheduleNetworkUpdate();\n }\n }, this._networkUpdatePeriod);\n }\n\n /**\n * @returns {boolean}\n */\n get isClientShutDown() {\n return this._isShutdown;\n }\n\n /**\n * Validates that all nodes in a network are in the same shard and realm.\n *\n * @param {{[key: string]: (string | AccountId)}} network\n */\n static _validateNetworkConsistency(network) {\n if (Object.keys(network).length === 0) {\n return;\n }\n\n const [, nodeAccountId] = Object.entries(network)[0];\n\n const accountIdStr = nodeAccountId.toString();\n\n const [firstNodeShard, firstNodeRealm] = accountIdStr\n .split(\".\")\n .map(Number);\n\n const isNetworkValid = Object.values(network).every((accountId) => {\n const accountIdStr = accountId.toString();\n\n const [currentShard, currentRealm] = accountIdStr\n .split(\".\")\n .map(Number);\n return (\n currentShard === firstNodeShard &&\n currentRealm === firstNodeRealm\n );\n });\n\n if (!isNetworkValid) {\n throw new Error(\n \"Network is not valid, all nodes must be in the same shard and realm\",\n );\n }\n }\n\n /**\n * Extracts shard and realm values from a network configuration.\n * Note: This method assumes the network is consistent (all nodes in same shard/realm).\n * Use validateNetworkConsistency() first to ensure this.\n *\n * @param {{[key: string]: (string | AccountId)}} network\n * @returns {{shard: number, realm: number}}\n */\n static _extractShardRealm(network) {\n const entries = Object.entries(network);\n if (entries.length === 0) {\n return { shard: 0, realm: 0 };\n }\n\n const [, firstNodeAccountId] = entries[0];\n\n const accountIdStr = firstNodeAccountId.toString();\n const [shard, realm] = accountIdStr.split(\".\").map(Number);\n\n return { shard, realm };\n }\n}\n"],"names":["Client","constructor","props","this","_mirrorNetwork","MirrorNetwork","_createMirrorNetworkChannel","_network","Network","_createNetworkChannel","_operator","_defaultMaxTransactionFee","_defaultMaxQueryPayment","Hbar","operator","setOperator","accountId","privateKey","_maxAttempts","_signOnDemand","_autoValidateChecksums","_minBackoff","_maxBackoff","_defaultRegenerateTransactionId","_requestTimeout","_isUpdatingNetwork","_networkUpdatePeriod","_isShutdown","_shard","_realm","scheduleNetworkUpdate","_scheduleNetworkUpdate","shard","realm","_timer","_logger","setNetworkName","networkName","console","warn","setLedgerId","ledgerId","toString","LedgerId","fromString","_ledgerId","setNetwork","network","Error","setNetworkFromAddressBook","addressBook","setMirrorNetwork","mirrorNetwork","mirrorRestApiBaseUrl","signOnDemand","setSignOnDemand","isTransportSecurity","setTransportSecurity","transportSecurity","key","PrivateKey","fromStringDer","setOperatorWith","publicKey","message","Promise","resolve","sign","getOperator","transactionSigner","accountId_","AccountId","validateChecksum","PublicKey","setAutoValidateChecksums","value","isAutoValidateChecksumsEnabled","operatorAccountId","operatorPublicKey","defaultMaxTransactionFee","maxTransactionFee","setDefaultMaxTransactionFee","toTinybars","toInt","setMaxTransactionFee","defaultRegenerateTransactionId","setDefaultRegenerateTransactionId","defaultMaxQueryPayment","maxQueryPayment","setDefaultMaxQueryPayment","convertToNumber","setMaxQueryPayment","maxAttempts","setMaxAttempts","maxNodeAttempts","setMaxNodeAttempts","nodeWaitTime","minBackoff","setNodeWaitTime","setMinBackoff","maxNodesPerTransaction","setMaxNodesPerTransaction","setMaxBackoff","maxBackoff","setNodeMinBackoff","nodeMinBackoff","setNodeMaxBackoff","nodeMaxBackoff","setNodeMinReadmitPeriod","nodeMinReadmitPeriod","setNodeMaxReadmitPeriod","nodeMaxReadmitPeriod","setRequestTimeout","requestTimeout","networkUpdatePeriod","setNetworkUpdatePeriod","clearTimeout","setLogger","logger","ping","AccountBalanceQuery","setNodeAccountIds","execute","pingAll","nodeAccountId","Object","values","updateNetwork","AddressBookQuery","setFileId","FileId","getAddressBookFileIdFor","error","trace","close","setTimeout","async","isClientShutDown","_validateNetworkConsistency","keys","length","entries","accountIdStr","firstNodeShard","firstNodeRealm","split","map","Number","isNetworkValid","every","currentShard","currentRealm","_extractShardRealm","firstNodeAccountId"],"mappings":"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"}
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\";\nimport {\n DEFAULT_GRPC_DEADLINE,\n DEFAULT_REQUEST_TIMEOUT,\n} from \"../constants/ClientConstants.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 * @property {number} [grpcDeadline]\n * @property {number} [requestTimeout]\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 = DEFAULT_REQUEST_TIMEOUT;\n\n /** @private */\n this._grpcDeadline = DEFAULT_GRPC_DEADLINE;\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 if (props != null && props.grpcDeadline != null) {\n this.setGrpcDeadline(props.grpcDeadline);\n }\n\n if (props != null && props.requestTimeout != null) {\n this.setRequestTimeout(props.requestTimeout);\n }\n\n // Validate that requestTimeout is larger than grpcDeadline after both are set\n if (this._requestTimeout <= this._grpcDeadline) {\n console.warn(\n `DEPRECATION WARNING: requestTimeout (${this._requestTimeout}ms) should be larger than grpcDeadline (${this._grpcDeadline}ms). ` +\n `This configuration may cause operations to fail unexpectedly. ` +\n `This will throw an error in the next major version. Please adjust your timeout values.`,\n );\n }\n\n /** @internal */\n /** @type {NodeJS.Timeout} */\n this._timer;\n\n /**\n * Logger\n *\n * @external\n * @type {Logger | null}\n */\n this._logger = null;\n }\n\n /**\n * @deprecated\n * @param {NetworkName} networkName\n * @returns {this}\n */\n setNetworkName(networkName) {\n // uses custom NetworkName type\n // remove if phasing out set|get NetworkName\n console.warn(\"Deprecated: Use `setLedgerId` instead\");\n return this.setLedgerId(networkName);\n }\n\n /**\n * @deprecated\n * @returns {string | null}\n */\n get networkName() {\n console.warn(\"Deprecated: Use `ledgerId` instead\");\n return this.ledgerId != null ? this.ledgerId.toString() : null;\n }\n\n /**\n * @param {string|LedgerId} ledgerId\n * @returns {this}\n */\n setLedgerId(ledgerId) {\n this._network.setLedgerId(\n typeof ledgerId === \"string\"\n ? LedgerId.fromString(ledgerId)\n : ledgerId,\n );\n\n return this;\n }\n\n /**\n * @returns {LedgerId | null}\n */\n get ledgerId() {\n return this._network._ledgerId != null ? this._network.ledgerId : null;\n }\n\n /**\n * @param {{[key: string]: (string | AccountId)} | string} network\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setNetwork(network) {\n // TODO: This logic _can_ be de-duplicated and likely should\n throw new Error(\"not implemented\");\n }\n\n /**\n * @param {NodeAddressBook} addressBook\n * @returns {this}\n */\n setNetworkFromAddressBook(addressBook) {\n this._network.setNetworkFromAddressBook(addressBook);\n return this;\n }\n\n /**\n * @returns {{[key: string]: (string | AccountId)}}\n */\n get network() {\n return this._network.network;\n }\n\n /**\n * @returns {number}\n */\n get shard() {\n return this._shard;\n }\n\n /**\n * @returns {number}\n */\n get realm() {\n return this._realm;\n }\n\n /**\n * @param {string[] | string} mirrorNetwork\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setMirrorNetwork(mirrorNetwork) {\n throw new Error(\"not implemented\");\n }\n\n /**\n * @returns {string[]}\n */\n get mirrorNetwork() {\n return this._mirrorNetwork.network;\n }\n\n /**\n * @returns {string}\n * @throws {Error} When no mirror network is configured or available\n */\n get mirrorRestApiBaseUrl() {\n return this._mirrorNetwork.mirrorRestApiBaseUrl;\n }\n\n /**\n * @returns {boolean}\n */\n get signOnDemand() {\n return this._signOnDemand;\n }\n\n /**\n * @param {boolean} signOnDemand\n */\n setSignOnDemand(signOnDemand) {\n this._signOnDemand = signOnDemand;\n }\n\n /**\n * @returns {boolean}\n */\n isTransportSecurity() {\n return this._network.isTransportSecurity();\n }\n\n /**\n * @param {boolean} transportSecurity\n * @returns {this}\n */\n setTransportSecurity(transportSecurity) {\n this._network.setTransportSecurity(transportSecurity);\n return this;\n }\n\n /**\n * Set the account that will, by default, pay for transactions and queries built with this client.\n * NOTE: When using string for private key, the string needs to contain DER headers\n *\n * @param {AccountId | string} accountId\n * @param {PrivateKey | string} privateKey\n * @returns {this}\n */\n setOperator(accountId, privateKey) {\n const key =\n typeof privateKey === \"string\"\n ? PrivateKey.fromStringDer(privateKey)\n : privateKey;\n\n return this.setOperatorWith(accountId, key.publicKey, (message) =>\n Promise.resolve(key.sign(message)),\n );\n }\n\n /**\n * @returns {?ClientOperator}\n */\n getOperator() {\n return this._operator;\n }\n\n /**\n * Sets the account that will, by default, pay for transactions and queries built with\n * this client.\n *\n * @param {AccountId | string} accountId\n * @param {PublicKey | string} publicKey\n * @param {(message: Uint8Array) => Promise<Uint8Array>} transactionSigner\n * @returns {this}\n */\n setOperatorWith(accountId, publicKey, transactionSigner) {\n const accountId_ =\n accountId instanceof AccountId\n ? accountId\n : AccountId.fromString(accountId);\n\n if (this._network._ledgerId != null) {\n accountId_.validateChecksum(this);\n }\n\n this._operator = {\n transactionSigner,\n\n accountId: accountId_,\n\n publicKey:\n publicKey instanceof PublicKey\n ? publicKey\n : PublicKey.fromString(publicKey),\n };\n\n return this;\n }\n\n /**\n * @param {boolean} value\n * @returns {this}\n */\n setAutoValidateChecksums(value) {\n this._autoValidateChecksums = value;\n return this;\n }\n\n /**\n * @returns {boolean}\n */\n isAutoValidateChecksumsEnabled() {\n return this._autoValidateChecksums;\n }\n\n /**\n * @returns {?AccountId}\n */\n get operatorAccountId() {\n return this._operator != null ? this._operator.accountId : null;\n }\n\n /**\n * @returns {?PublicKey}\n */\n get operatorPublicKey() {\n return this._operator != null ? this._operator.publicKey : null;\n }\n\n /**\n * @returns {?Hbar}\n */\n get defaultMaxTransactionFee() {\n return this._defaultMaxTransactionFee;\n }\n\n /**\n * @deprecated - Use `defaultMaxTransactionFee` instead\n * @returns {?Hbar}\n */\n get maxTransactionFee() {\n return this.defaultMaxTransactionFee;\n }\n\n /**\n * Set the defaultimum fee to be paid for transactions\n * executed by this client.\n *\n * @param {Hbar} defaultMaxTransactionFee\n * @returns {this}\n */\n setDefaultMaxTransactionFee(defaultMaxTransactionFee) {\n if (defaultMaxTransactionFee.toTinybars().toInt() < 0) {\n throw new Error(\"defaultMaxTransactionFee must be non-negative\");\n }\n this._defaultMaxTransactionFee = defaultMaxTransactionFee;\n return this;\n }\n\n /**\n * @deprecated - Use `setDefaultMaxTransactionFee()` instead\n * Set the maximum fee to be paid for transactions\n * executed by this client.\n * @param {Hbar} maxTransactionFee\n * @returns {this}\n */\n setMaxTransactionFee(maxTransactionFee) {\n return this.setDefaultMaxTransactionFee(maxTransactionFee);\n }\n\n /**\n * @returns {boolean}\n */\n get defaultRegenerateTransactionId() {\n return this._defaultRegenerateTransactionId;\n }\n\n /**\n * Set if a new transaction ID should be generated when a `TRANSACTION_EXPIRED` status\n * is returned.\n *\n * @param {boolean} defaultRegenerateTransactionId\n * @returns {this}\n */\n setDefaultRegenerateTransactionId(defaultRegenerateTransactionId) {\n this._defaultRegenerateTransactionId = defaultRegenerateTransactionId;\n return this;\n }\n\n /**\n * @returns {Hbar}\n */\n get defaultMaxQueryPayment() {\n return this._defaultMaxQueryPayment;\n }\n\n /**\n * @deprecated in a favor of defaultMaxQueryPayment\n * @returns {Hbar}\n */\n get maxQueryPayment() {\n return this.defaultMaxQueryPayment;\n }\n\n /**\n * Set the maximum payment allowable for queries.\n *\n * @param {Hbar} defaultMaxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setDefaultMaxQueryPayment(defaultMaxQueryPayment) {\n const isMaxQueryPaymentNegative =\n convertToNumber(defaultMaxQueryPayment.toTinybars()) < 0;\n if (isMaxQueryPaymentNegative) {\n throw new Error(\"defaultMaxQueryPayment must be non-negative\");\n }\n this._defaultMaxQueryPayment = defaultMaxQueryPayment;\n return this;\n }\n /**\n * @deprecated in a favor of setDefaultMaxQueryPayment()\n * Set the maximum payment allowable for queries.\n * @param {Hbar} maxQueryPayment\n * @returns {Client<ChannelT, MirrorChannelT>}\n */\n setMaxQueryPayment(maxQueryPayment) {\n return this.setDefaultMaxQueryPayment(maxQueryPayment);\n }\n\n /**\n * @returns {number}\n */\n get maxAttempts() {\n return this._maxAttempts != null ? this._maxAttempts : 10;\n }\n\n /**\n * @param {number} maxAttempts\n * @returns {this}\n */\n setMaxAttempts(maxAttempts) {\n this._maxAttempts = maxAttempts;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxNodeAttempts() {\n return this._network.maxNodeAttempts;\n }\n\n /**\n * @param {number} maxNodeAttempts\n * @returns {this}\n */\n setMaxNodeAttempts(maxNodeAttempts) {\n this._network.setMaxNodeAttempts(maxNodeAttempts);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeWaitTime() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeWaitTime\n * @returns {this}\n */\n setNodeWaitTime(nodeWaitTime) {\n this._network.setMinBackoff(nodeWaitTime);\n return this;\n }\n\n /**\n * Gets the maximum number of nodes that a transaction or query will attempt to execute against.\n *\n * @returns {number} The current maximum nodes per transaction setting.\n * Returns -1 if no limit is set (uses network defaults).\n */\n get maxNodesPerTransaction() {\n return this._network.maxNodesPerTransaction;\n }\n\n /**\n * Sets the maximum number of nodes that a transaction or query will execute against.\n *\n * - **Before freezing**: Limits automatic node selection when no explicit nodes are set\n * - **After freezing**: Trims frozen transactions to the first N nodes while preserving signatures\n * - **Special values**: 0 disables limiting, values > available nodes cause no trimming\n *\n * @param {number} maxNodesPerTransaction - Maximum nodes per transaction. Set to 0 to disable.\n * @returns {this} The client instance for method chaining\n */\n setMaxNodesPerTransaction(maxNodesPerTransaction) {\n this._network.setMaxNodesPerTransaction(maxNodesPerTransaction);\n return this;\n }\n\n /**\n * @param {?number} minBackoff\n * @returns {this}\n */\n setMinBackoff(minBackoff) {\n if (minBackoff == null) {\n throw new Error(\"minBackoff cannot be null.\");\n }\n if (minBackoff > this._maxBackoff) {\n throw new Error(\"minBackoff cannot be larger than maxBackoff.\");\n }\n this._minBackoff = minBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get minBackoff() {\n return this._minBackoff;\n }\n\n /**\n * @param {?number} maxBackoff\n * @returns {this}\n */\n setMaxBackoff(maxBackoff) {\n if (maxBackoff == null) {\n throw new Error(\"maxBackoff cannot be null.\");\n } else if (maxBackoff < this._minBackoff) {\n throw new Error(\"maxBackoff cannot be smaller than minBackoff.\");\n }\n this._maxBackoff = maxBackoff;\n return this;\n }\n\n /**\n * @returns {number}\n */\n get maxBackoff() {\n return this._maxBackoff;\n }\n\n /**\n * @param {number} nodeMinBackoff\n * @returns {this}\n */\n setNodeMinBackoff(nodeMinBackoff) {\n this._network.setMinBackoff(nodeMinBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinBackoff() {\n return this._network.minBackoff;\n }\n\n /**\n * @param {number} nodeMaxBackoff\n * @returns {this}\n */\n setNodeMaxBackoff(nodeMaxBackoff) {\n this._network.setMaxBackoff(nodeMaxBackoff);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxBackoff() {\n return this._network.maxBackoff;\n }\n\n /**\n * @param {number} nodeMinReadmitPeriod\n * @returns {this}\n */\n setNodeMinReadmitPeriod(nodeMinReadmitPeriod) {\n this._network.setNodeMinReadmitPeriod(nodeMinReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMinReadmitPeriod() {\n return this._network.nodeMinReadmitPeriod;\n }\n\n /**\n * @param {number} nodeMaxReadmitPeriod\n * @returns {this}\n */\n setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod) {\n this._network.setNodeMaxReadmitPeriod(nodeMaxReadmitPeriod);\n return this;\n }\n\n /**\n * @returns {number}\n */\n get nodeMaxReadmitPeriod() {\n return this._network.nodeMaxReadmitPeriod;\n }\n\n /**\n * Set the total request timeout for complete operations.\n *\n * @param {number} requestTimeout - Maximum time in milliseconds for complete Transaction/Query operations\n * @returns {this}\n */\n setRequestTimeout(requestTimeout) {\n if (requestTimeout <= 0) {\n throw new Error(\"requestTimeout must be a positive number\");\n }\n if (requestTimeout <= this._grpcDeadline) {\n console.warn(\n `DEPRECATION WARNING: requestTimeout (${requestTimeout}ms) should be larger than grpcDeadline (${this._grpcDeadline}ms). ` +\n `This configuration may cause operations to fail unexpectedly. ` +\n `This will throw an error in the next major version. Please adjust your timeout values.`,\n );\n }\n this._requestTimeout = requestTimeout;\n return this;\n }\n\n /**\n * Get the total request timeout for complete operations.\n *\n * @returns {number} Maximum time in milliseconds for complete Transaction/Query operations\n */\n get requestTimeout() {\n return this._requestTimeout;\n }\n\n /**\n * Set the global gRPC deadline for all requests.\n *\n * @param {number} grpcDeadline - Maximum time in milliseconds for a single gRPC request\n * @returns {this}\n */\n setGrpcDeadline(grpcDeadline) {\n if (grpcDeadline <= 0) {\n throw new Error(\"grpcDeadline must be a positive number\");\n }\n if (grpcDeadline >= this._requestTimeout) {\n console.warn(\n `DEPRECATION WARNING: grpcDeadline (${grpcDeadline}ms) should be smaller than requestTimeout (${this._requestTimeout}ms). ` +\n `This configuration may cause operations to fail unexpectedly. ` +\n `This will throw an error in the next major version. Please adjust your timeout values.`,\n );\n }\n this._grpcDeadline = grpcDeadline;\n return this;\n }\n\n /**\n * Get the global gRPC deadline for all requests.\n *\n * @returns {number} Maximum time in milliseconds for a single gRPC request\n */\n get grpcDeadline() {\n return this._grpcDeadline;\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 return () => {\n throw new Error(\"not implemented\");\n };\n }\n\n /**\n * @abstract\n * @returns {(address: string) => MirrorChannelT}\n */\n _createMirrorNetworkChannel() {\n return () => {\n throw new Error(\"not implemented\");\n };\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","DEFAULT_REQUEST_TIMEOUT","_grpcDeadline","DEFAULT_GRPC_DEADLINE","_isUpdatingNetwork","_networkUpdatePeriod","_isShutdown","_shard","_realm","scheduleNetworkUpdate","_scheduleNetworkUpdate","shard","realm","grpcDeadline","setGrpcDeadline","requestTimeout","setRequestTimeout","console","warn","_timer","_logger","setNetworkName","networkName","setLedgerId","ledgerId","toString","LedgerId","fromString","_ledgerId","setNetwork","network","Error","setNetworkFromAddressBook","addressBook","setMirrorNetwork","mirrorNetwork","mirrorRestApiBaseUrl","signOnDemand","setSignOnDemand","isTransportSecurity","setTransportSecurity","transportSecurity","key","PrivateKey","fromStringDer","setOperatorWith","publicKey","message","Promise","resolve","sign","getOperator","transactionSigner","accountId_","AccountId","validateChecksum","PublicKey","setAutoValidateChecksums","value","isAutoValidateChecksumsEnabled","operatorAccountId","operatorPublicKey","defaultMaxTransactionFee","maxTransactionFee","setDefaultMaxTransactionFee","toTinybars","toInt","setMaxTransactionFee","defaultRegenerateTransactionId","setDefaultRegenerateTransactionId","defaultMaxQueryPayment","maxQueryPayment","setDefaultMaxQueryPayment","convertToNumber","setMaxQueryPayment","maxAttempts","setMaxAttempts","maxNodeAttempts","setMaxNodeAttempts","nodeWaitTime","minBackoff","setNodeWaitTime","setMinBackoff","maxNodesPerTransaction","setMaxNodesPerTransaction","setMaxBackoff","maxBackoff","setNodeMinBackoff","nodeMinBackoff","setNodeMaxBackoff","nodeMaxBackoff","setNodeMinReadmitPeriod","nodeMinReadmitPeriod","setNodeMaxReadmitPeriod","nodeMaxReadmitPeriod","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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"}
@@ -291,7 +291,7 @@ class NativeClient extends _Client.default {
291
291
  * @returns {(address: string) => NativeChannel}
292
292
  */
293
293
  _createNetworkChannel() {
294
- return address => new _NativeChannel.default(address);
294
+ return address => new _NativeChannel.default(address, this.grpcDeadline);
295
295
  }
296
296
 
297
297
  /**
@@ -1,2 +1,2 @@
1
- import t from"./Client.js";import e from"../channel/NativeChannel.js";import"../account/AccountId.js";import r from"../LedgerId.js";import{WebNetwork as s,MirrorNetwork as o}from"../constants/ClientConstants.js";import n from"../network/AddressBookQueryWeb.js";import i from"../file/FileId.js";class a extends t{constructor(e){if(super(e),null!=e)if("string"==typeof e.network)switch(e.network){case"mainnet":this.setNetwork(s.MAINNET),this.setLedgerId(r.MAINNET),this.setMirrorNetwork(o.MAINNET);break;case"testnet":this.setNetwork(s.TESTNET),this.setLedgerId(r.TESTNET),this.setMirrorNetwork(o.TESTNET);break;case"previewnet":this.setNetwork(s.PREVIEWNET),this.setLedgerId(r.PREVIEWNET),this.setMirrorNetwork(o.PREVIEWNET);break;default:throw new Error(`unknown network: ${e.network}`)}else if(null!=e.network){t._validateNetworkConsistency(e.network);const{shard:r,realm:s}=t._extractShardRealm(e.network);this._shard=r,this._realm=s,this.setNetwork(e.network)}}static fromConfig(t){return new a("string"==typeof t?JSON.parse(t):t)}static forNetwork(t){return new a({network:t})}static forName(t){return new a({network:t})}static forMainnet(){return new a({network:"mainnet"})}static forTestnet(){return new a({network:"testnet"})}static forPreviewnet(){return new a({network:"previewnet"})}static async forMainnetAsync(){return new a({network:"mainnet"}).updateNetwork()}static async forTestnetAsync(){return new a({network:"testnet"}).updateNetwork()}static async forPreviewnetAsync(){return new a({network:"previewnet"}).updateNetwork()}static async forNameAsync(t){const e=new a({network:t});return"local-node"!==t&&await e.updateNetwork(),e}static async forMirrorNetwork(t){const e=new a({mirrorNetwork:t});return await e.updateNetwork(),e}setNetwork(t){if("string"==typeof t)switch(t){case"previewnet":this._network.setNetwork(s.PREVIEWNET);break;case"testnet":this._network.setNetwork(s.TESTNET);break;case"mainnet":this._network.setNetwork(s.MAINNET)}else this._network.setNetwork(t)}setMirrorNetwork(t){if("string"==typeof t)switch(t){case"local-node":this._mirrorNetwork.setNetwork(o.LOCAL_NODE);break;case"previewnet":this._mirrorNetwork.setNetwork(o.PREVIEWNET);break;case"testnet":this._mirrorNetwork.setNetwork(o.TESTNET);break;case"mainnet":this._mirrorNetwork.setNetwork(o.MAINNET);break;default:this._mirrorNetwork.setNetwork([t])}else this._mirrorNetwork.setNetwork(t);return this}async updateNetwork(){if(this._isUpdatingNetwork)return this;this._isUpdatingNetwork=!0;try{const t=await(new n).setFileId(i.getAddressBookFileIdFor(this.shard,this.realm)).execute(this),e={};for(const r of t.nodeAddresses)for(const t of r.addresses)null!=r.accountId&&(e[t.toString()]=r.accountId);this.setNetwork(e)}catch(t){if(this._logger){const e=t instanceof Error?t.message:String(t);this._logger.trace(`failed to update client address book: ${e}`)}}finally{this._isUpdatingNetwork=!1}return this}_createNetworkChannel(){return t=>new e(t)}_createMirrorNetworkChannel(){return()=>{throw new Error("mirror support is not supported in native")}}}export{a as default};
1
+ import t from"./Client.js";import e from"../channel/NativeChannel.js";import"../account/AccountId.js";import r from"../LedgerId.js";import{WebNetwork as s,MirrorNetwork as o}from"../constants/ClientConstants.js";import n from"../network/AddressBookQueryWeb.js";import i from"../file/FileId.js";class a extends t{constructor(e){if(super(e),null!=e)if("string"==typeof e.network)switch(e.network){case"mainnet":this.setNetwork(s.MAINNET),this.setLedgerId(r.MAINNET),this.setMirrorNetwork(o.MAINNET);break;case"testnet":this.setNetwork(s.TESTNET),this.setLedgerId(r.TESTNET),this.setMirrorNetwork(o.TESTNET);break;case"previewnet":this.setNetwork(s.PREVIEWNET),this.setLedgerId(r.PREVIEWNET),this.setMirrorNetwork(o.PREVIEWNET);break;default:throw new Error(`unknown network: ${e.network}`)}else if(null!=e.network){t._validateNetworkConsistency(e.network);const{shard:r,realm:s}=t._extractShardRealm(e.network);this._shard=r,this._realm=s,this.setNetwork(e.network)}}static fromConfig(t){return new a("string"==typeof t?JSON.parse(t):t)}static forNetwork(t){return new a({network:t})}static forName(t){return new a({network:t})}static forMainnet(){return new a({network:"mainnet"})}static forTestnet(){return new a({network:"testnet"})}static forPreviewnet(){return new a({network:"previewnet"})}static async forMainnetAsync(){return new a({network:"mainnet"}).updateNetwork()}static async forTestnetAsync(){return new a({network:"testnet"}).updateNetwork()}static async forPreviewnetAsync(){return new a({network:"previewnet"}).updateNetwork()}static async forNameAsync(t){const e=new a({network:t});return"local-node"!==t&&await e.updateNetwork(),e}static async forMirrorNetwork(t){const e=new a({mirrorNetwork:t});return await e.updateNetwork(),e}setNetwork(t){if("string"==typeof t)switch(t){case"previewnet":this._network.setNetwork(s.PREVIEWNET);break;case"testnet":this._network.setNetwork(s.TESTNET);break;case"mainnet":this._network.setNetwork(s.MAINNET)}else this._network.setNetwork(t)}setMirrorNetwork(t){if("string"==typeof t)switch(t){case"local-node":this._mirrorNetwork.setNetwork(o.LOCAL_NODE);break;case"previewnet":this._mirrorNetwork.setNetwork(o.PREVIEWNET);break;case"testnet":this._mirrorNetwork.setNetwork(o.TESTNET);break;case"mainnet":this._mirrorNetwork.setNetwork(o.MAINNET);break;default:this._mirrorNetwork.setNetwork([t])}else this._mirrorNetwork.setNetwork(t);return this}async updateNetwork(){if(this._isUpdatingNetwork)return this;this._isUpdatingNetwork=!0;try{const t=await(new n).setFileId(i.getAddressBookFileIdFor(this.shard,this.realm)).execute(this),e={};for(const r of t.nodeAddresses)for(const t of r.addresses)null!=r.accountId&&(e[t.toString()]=r.accountId);this.setNetwork(e)}catch(t){if(this._logger){const e=t instanceof Error?t.message:String(t);this._logger.trace(`failed to update client address book: ${e}`)}}finally{this._isUpdatingNetwork=!1}return this}_createNetworkChannel(){return t=>new e(t,this.grpcDeadline)}_createMirrorNetworkChannel(){return()=>{throw new Error("mirror support is not supported in native")}}}export{a as default};
2
2
  //# sourceMappingURL=NativeClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NativeClient.js","sources":["../../src/client/NativeClient.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport Client from \"./Client.js\";\nimport NativeChannel from \"../channel/NativeChannel.js\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport AccountId from \"../account/AccountId.js\";\nimport LedgerId from \"../LedgerId.js\";\nimport { MirrorNetwork, WebNetwork } from \"../constants/ClientConstants.js\";\nimport AddressBookQuery from \"../network/AddressBookQueryWeb.js\";\nimport FileId from \"../file/FileId.js\";\n\n/**\n * @typedef {import(\"./Client.js\").ClientConfiguration} ClientConfiguration\n */\n\n/**\n * @augments {Client<NativeChannel, *>}\n */\nexport default class NativeClient extends Client {\n /**\n * @param {ClientConfiguration} [props]\n */\n constructor(props) {\n super(props);\n\n if (props != null) {\n if (typeof props.network === \"string\") {\n switch (props.network) {\n case \"mainnet\":\n this.setNetwork(WebNetwork.MAINNET);\n this.setLedgerId(LedgerId.MAINNET);\n this.setMirrorNetwork(MirrorNetwork.MAINNET);\n break;\n\n case \"testnet\":\n this.setNetwork(WebNetwork.TESTNET);\n this.setLedgerId(LedgerId.TESTNET);\n this.setMirrorNetwork(MirrorNetwork.TESTNET);\n break;\n\n case \"previewnet\":\n this.setNetwork(WebNetwork.PREVIEWNET);\n this.setLedgerId(LedgerId.PREVIEWNET);\n this.setMirrorNetwork(MirrorNetwork.PREVIEWNET);\n break;\n\n default:\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `unknown network: ${props.network}`,\n );\n }\n } else if (props.network != null) {\n Client._validateNetworkConsistency(props.network);\n\n const { shard, realm } = Client._extractShardRealm(\n props.network,\n );\n\n // Shard and realm are inferred from the network, so we need to set them here\n // to ensure that the client is properly configured.\n this._shard = shard;\n this._realm = realm;\n\n this.setNetwork(props.network);\n }\n }\n }\n\n /**\n * @param {string | ClientConfiguration} data\n * @returns {NativeClient}\n */\n static fromConfig(data) {\n return new NativeClient(\n typeof data === \"string\"\n ? /** @type {ClientConfiguration | undefined} */ (\n JSON.parse(data)\n )\n : data,\n );\n }\n\n /**\n * Construct a client for a specific network.\n *\n * It is the responsibility of the caller to ensure that all nodes in the map are part of the\n * same Hedera network. Failure to do so will result in undefined behavior.\n *\n * The client will load balance all requests to Hedera using a simple round-robin scheme to\n * chose nodes to send transactions to. For one transaction, at most 1/3 of the nodes will be\n * tried.\n *\n * @param {{[key: string]: (string | AccountId)} | string} network\n * @returns {NativeClient}\n */\n static forNetwork(network) {\n return new NativeClient({\n network,\n });\n }\n\n /**\n * @param {string} network\n * @returns {NativeClient}\n */\n static forName(network) {\n return new NativeClient({ network });\n }\n\n /**\n * Construct a Hedera client pre-configured for Mainnet access.\n *\n * @returns {NativeClient}\n */\n static forMainnet() {\n return new NativeClient({\n network: \"mainnet\",\n });\n }\n\n /**\n * Construct a Hedera client pre-configured for Testnet access.\n *\n * @returns {NativeClient}\n */\n static forTestnet() {\n return new NativeClient({\n network: \"testnet\",\n });\n }\n\n /**\n * Construct a Hedera client pre-configured for Previewnet access.\n *\n * @returns {NativeClient}\n */\n static forPreviewnet() {\n return new NativeClient({\n network: \"previewnet\",\n });\n }\n\n /**\n * Construct a Hedera client pre-configured for Mainnet access with network update.\n *\n * @returns {Promise<NativeClient>}\n */\n static async forMainnetAsync() {\n return new NativeClient({\n network: \"mainnet\",\n }).updateNetwork();\n }\n\n /**\n * Construct a Hedera client pre-configured for Testnet access with network update.\n *\n * @returns {Promise<NativeClient>}\n */\n static async forTestnetAsync() {\n return new NativeClient({\n network: \"testnet\",\n }).updateNetwork();\n }\n\n /**\n * Construct a Hedera client pre-configured for Previewnet access with network update.\n *\n * @returns {Promise<NativeClient>}\n */\n static async forPreviewnetAsync() {\n return new NativeClient({\n network: \"previewnet\",\n }).updateNetwork();\n }\n\n /**\n * Construct a client for a specific network with optional network update.\n * Updates network only if the network is not \"local-node\".\n *\n * @param {string} network\n * @returns {Promise<NativeClient>}\n */\n static async forNameAsync(network) {\n const client = new NativeClient({ network });\n\n if (network !== \"local-node\") {\n await client.updateNetwork();\n }\n\n return client;\n }\n\n /**\n * Construct a client configured to use mirror nodes.\n * This will query the address book to get the network nodes.\n *\n * @param {string[] | string} mirrorNetwork\n * @returns {Promise<NativeClient>}\n */\n static async forMirrorNetwork(mirrorNetwork) {\n const client = new NativeClient({\n mirrorNetwork,\n });\n\n await client.updateNetwork();\n\n return client;\n }\n\n /**\n * @param {{[key: string]: (string | AccountId)} | string} network\n * @returns {void}\n */\n setNetwork(network) {\n if (typeof network === \"string\") {\n switch (network) {\n case \"previewnet\":\n this._network.setNetwork(WebNetwork.PREVIEWNET);\n break;\n case \"testnet\":\n this._network.setNetwork(WebNetwork.TESTNET);\n break;\n case \"mainnet\":\n this._network.setNetwork(WebNetwork.MAINNET);\n }\n } else {\n this._network.setNetwork(network);\n }\n }\n\n /**\n * @param {string[] | string} mirrorNetwork\n * @returns {this}\n */\n setMirrorNetwork(mirrorNetwork) {\n if (typeof mirrorNetwork === \"string\") {\n switch (mirrorNetwork) {\n case \"local-node\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.LOCAL_NODE);\n break;\n case \"previewnet\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.PREVIEWNET);\n break;\n case \"testnet\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.TESTNET);\n break;\n case \"mainnet\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.MAINNET);\n break;\n default:\n this._mirrorNetwork.setNetwork([mirrorNetwork]);\n }\n } else {\n this._mirrorNetwork.setNetwork(mirrorNetwork);\n }\n\n return this;\n }\n\n /**\n * @override\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\n /** @type {Record<string, AccountId>} */\n const network = {};\n for (const nodeAddress of addressBook.nodeAddresses) {\n for (const endpoint of nodeAddress.addresses) {\n if (nodeAddress.accountId != null) {\n network[endpoint.toString()] = nodeAddress.accountId;\n }\n }\n }\n\n this.setNetwork(network);\n } catch (/** @type {unknown} */ error) {\n if (this._logger) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this._logger.trace(\n `failed to update client address book: ${errorMessage}`,\n );\n }\n } finally {\n this._isUpdatingNetwork = false;\n }\n\n return this;\n }\n\n /**\n * @override\n * @returns {(address: string) => NativeChannel}\n */\n _createNetworkChannel() {\n return (address) => new NativeChannel(address);\n }\n\n /**\n * @override\n * @returns {(address: string) => *}\n */\n _createMirrorNetworkChannel() {\n return () => {\n throw new Error(\"mirror support is not supported in native\");\n };\n }\n}\n"],"names":["NativeClient","Client","constructor","props","super","network","this","setNetwork","WebNetwork","MAINNET","setLedgerId","LedgerId","setMirrorNetwork","MirrorNetwork","TESTNET","PREVIEWNET","Error","_validateNetworkConsistency","shard","realm","_extractShardRealm","_shard","_realm","fromConfig","data","JSON","parse","forNetwork","forName","forMainnet","forTestnet","forPreviewnet","forMainnetAsync","updateNetwork","forTestnetAsync","forPreviewnetAsync","forNameAsync","client","forMirrorNetwork","mirrorNetwork","_network","_mirrorNetwork","LOCAL_NODE","_isUpdatingNetwork","addressBook","AddressBookQuery","setFileId","FileId","getAddressBookFileIdFor","execute","nodeAddress","nodeAddresses","endpoint","addresses","accountId","toString","error","_logger","errorMessage","message","String","trace","_createNetworkChannel","address","NativeChannel","_createMirrorNetworkChannel"],"mappings":"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"}
1
+ {"version":3,"file":"NativeClient.js","sources":["../../src/client/NativeClient.js"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport Client from \"./Client.js\";\nimport NativeChannel from \"../channel/NativeChannel.js\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport AccountId from \"../account/AccountId.js\";\nimport LedgerId from \"../LedgerId.js\";\nimport { MirrorNetwork, WebNetwork } from \"../constants/ClientConstants.js\";\nimport AddressBookQuery from \"../network/AddressBookQueryWeb.js\";\nimport FileId from \"../file/FileId.js\";\n\n/**\n * @typedef {import(\"./Client.js\").ClientConfiguration} ClientConfiguration\n */\n\n/**\n * @augments {Client<NativeChannel, *>}\n */\nexport default class NativeClient extends Client {\n /**\n * @param {ClientConfiguration} [props]\n */\n constructor(props) {\n super(props);\n\n if (props != null) {\n if (typeof props.network === \"string\") {\n switch (props.network) {\n case \"mainnet\":\n this.setNetwork(WebNetwork.MAINNET);\n this.setLedgerId(LedgerId.MAINNET);\n this.setMirrorNetwork(MirrorNetwork.MAINNET);\n break;\n\n case \"testnet\":\n this.setNetwork(WebNetwork.TESTNET);\n this.setLedgerId(LedgerId.TESTNET);\n this.setMirrorNetwork(MirrorNetwork.TESTNET);\n break;\n\n case \"previewnet\":\n this.setNetwork(WebNetwork.PREVIEWNET);\n this.setLedgerId(LedgerId.PREVIEWNET);\n this.setMirrorNetwork(MirrorNetwork.PREVIEWNET);\n break;\n\n default:\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `unknown network: ${props.network}`,\n );\n }\n } else if (props.network != null) {\n Client._validateNetworkConsistency(props.network);\n\n const { shard, realm } = Client._extractShardRealm(\n props.network,\n );\n\n // Shard and realm are inferred from the network, so we need to set them here\n // to ensure that the client is properly configured.\n this._shard = shard;\n this._realm = realm;\n\n this.setNetwork(props.network);\n }\n }\n }\n\n /**\n * @param {string | ClientConfiguration} data\n * @returns {NativeClient}\n */\n static fromConfig(data) {\n return new NativeClient(\n typeof data === \"string\"\n ? /** @type {ClientConfiguration | undefined} */ (\n JSON.parse(data)\n )\n : data,\n );\n }\n\n /**\n * Construct a client for a specific network.\n *\n * It is the responsibility of the caller to ensure that all nodes in the map are part of the\n * same Hedera network. Failure to do so will result in undefined behavior.\n *\n * The client will load balance all requests to Hedera using a simple round-robin scheme to\n * chose nodes to send transactions to. For one transaction, at most 1/3 of the nodes will be\n * tried.\n *\n * @param {{[key: string]: (string | AccountId)} | string} network\n * @returns {NativeClient}\n */\n static forNetwork(network) {\n return new NativeClient({\n network,\n });\n }\n\n /**\n * @param {string} network\n * @returns {NativeClient}\n */\n static forName(network) {\n return new NativeClient({ network });\n }\n\n /**\n * Construct a Hedera client pre-configured for Mainnet access.\n *\n * @returns {NativeClient}\n */\n static forMainnet() {\n return new NativeClient({\n network: \"mainnet\",\n });\n }\n\n /**\n * Construct a Hedera client pre-configured for Testnet access.\n *\n * @returns {NativeClient}\n */\n static forTestnet() {\n return new NativeClient({\n network: \"testnet\",\n });\n }\n\n /**\n * Construct a Hedera client pre-configured for Previewnet access.\n *\n * @returns {NativeClient}\n */\n static forPreviewnet() {\n return new NativeClient({\n network: \"previewnet\",\n });\n }\n\n /**\n * Construct a Hedera client pre-configured for Mainnet access with network update.\n *\n * @returns {Promise<NativeClient>}\n */\n static async forMainnetAsync() {\n return new NativeClient({\n network: \"mainnet\",\n }).updateNetwork();\n }\n\n /**\n * Construct a Hedera client pre-configured for Testnet access with network update.\n *\n * @returns {Promise<NativeClient>}\n */\n static async forTestnetAsync() {\n return new NativeClient({\n network: \"testnet\",\n }).updateNetwork();\n }\n\n /**\n * Construct a Hedera client pre-configured for Previewnet access with network update.\n *\n * @returns {Promise<NativeClient>}\n */\n static async forPreviewnetAsync() {\n return new NativeClient({\n network: \"previewnet\",\n }).updateNetwork();\n }\n\n /**\n * Construct a client for a specific network with optional network update.\n * Updates network only if the network is not \"local-node\".\n *\n * @param {string} network\n * @returns {Promise<NativeClient>}\n */\n static async forNameAsync(network) {\n const client = new NativeClient({ network });\n\n if (network !== \"local-node\") {\n await client.updateNetwork();\n }\n\n return client;\n }\n\n /**\n * Construct a client configured to use mirror nodes.\n * This will query the address book to get the network nodes.\n *\n * @param {string[] | string} mirrorNetwork\n * @returns {Promise<NativeClient>}\n */\n static async forMirrorNetwork(mirrorNetwork) {\n const client = new NativeClient({\n mirrorNetwork,\n });\n\n await client.updateNetwork();\n\n return client;\n }\n\n /**\n * @param {{[key: string]: (string | AccountId)} | string} network\n * @returns {void}\n */\n setNetwork(network) {\n if (typeof network === \"string\") {\n switch (network) {\n case \"previewnet\":\n this._network.setNetwork(WebNetwork.PREVIEWNET);\n break;\n case \"testnet\":\n this._network.setNetwork(WebNetwork.TESTNET);\n break;\n case \"mainnet\":\n this._network.setNetwork(WebNetwork.MAINNET);\n }\n } else {\n this._network.setNetwork(network);\n }\n }\n\n /**\n * @param {string[] | string} mirrorNetwork\n * @returns {this}\n */\n setMirrorNetwork(mirrorNetwork) {\n if (typeof mirrorNetwork === \"string\") {\n switch (mirrorNetwork) {\n case \"local-node\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.LOCAL_NODE);\n break;\n case \"previewnet\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.PREVIEWNET);\n break;\n case \"testnet\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.TESTNET);\n break;\n case \"mainnet\":\n this._mirrorNetwork.setNetwork(MirrorNetwork.MAINNET);\n break;\n default:\n this._mirrorNetwork.setNetwork([mirrorNetwork]);\n }\n } else {\n this._mirrorNetwork.setNetwork(mirrorNetwork);\n }\n\n return this;\n }\n\n /**\n * @override\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\n /** @type {Record<string, AccountId>} */\n const network = {};\n for (const nodeAddress of addressBook.nodeAddresses) {\n for (const endpoint of nodeAddress.addresses) {\n if (nodeAddress.accountId != null) {\n network[endpoint.toString()] = nodeAddress.accountId;\n }\n }\n }\n\n this.setNetwork(network);\n } catch (/** @type {unknown} */ error) {\n if (this._logger) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this._logger.trace(\n `failed to update client address book: ${errorMessage}`,\n );\n }\n } finally {\n this._isUpdatingNetwork = false;\n }\n\n return this;\n }\n\n /**\n * @override\n * @returns {(address: string) => NativeChannel}\n */\n _createNetworkChannel() {\n return (address) => new NativeChannel(address, this.grpcDeadline);\n }\n\n /**\n * @override\n * @returns {(address: string) => *}\n */\n _createMirrorNetworkChannel() {\n return () => {\n throw new Error(\"mirror support is not supported in native\");\n };\n }\n}\n"],"names":["NativeClient","Client","constructor","props","super","network","this","setNetwork","WebNetwork","MAINNET","setLedgerId","LedgerId","setMirrorNetwork","MirrorNetwork","TESTNET","PREVIEWNET","Error","_validateNetworkConsistency","shard","realm","_extractShardRealm","_shard","_realm","fromConfig","data","JSON","parse","forNetwork","forName","forMainnet","forTestnet","forPreviewnet","forMainnetAsync","updateNetwork","forTestnetAsync","forPreviewnetAsync","forNameAsync","client","forMirrorNetwork","mirrorNetwork","_network","_mirrorNetwork","LOCAL_NODE","_isUpdatingNetwork","addressBook","AddressBookQuery","setFileId","FileId","getAddressBookFileIdFor","execute","nodeAddress","nodeAddresses","endpoint","addresses","accountId","toString","error","_logger","errorMessage","message","String","trace","_createNetworkChannel","address","NativeChannel","grpcDeadline","_createMirrorNetworkChannel"],"mappings":"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"}
@@ -38,9 +38,6 @@ class NodeClient extends _Client.default {
38
38
  */
39
39
  constructor(props) {
40
40
  super(props);
41
-
42
- /** @private */
43
- this._maxExecutionTime = 10000;
44
41
  if (props != null) {
45
42
  if (typeof props.network === "string") {
46
43
  this._setNetworkFromName(props.network);
@@ -279,12 +276,16 @@ class NodeClient extends _Client.default {
279
276
 
280
277
  /**
281
278
  * Available only for NodeClient
282
- *
279
+ * Legacy method maintained for backward compatibility.
280
+ * This method now calls setGrpcDeadline internally to ensure proper validation.
281
+ * @deprecated Use setGrpcDeadline instead.
283
282
  * @param {number} maxExecutionTime
284
283
  * @returns {this}
285
284
  */
286
285
  setMaxExecutionTime(maxExecutionTime) {
287
- this._maxExecutionTime = maxExecutionTime;
286
+ // Use the parent class setGrpcDeadline method to ensure proper validation
287
+ // This ensures that maxExecutionTime follows the same validation rules as grpcDeadline
288
+ this.setGrpcDeadline(maxExecutionTime);
288
289
  return this;
289
290
  }
290
291
 
@@ -356,7 +357,7 @@ class NodeClient extends _Client.default {
356
357
  * @returns {(address: string, cert?: string) => NodeChannel}
357
358
  */
358
359
  _createNetworkChannel() {
359
- return address => new _NodeChannel.default(address, this._maxExecutionTime);
360
+ return address => new _NodeChannel.default(address, this.grpcDeadline);
360
361
  }
361
362
 
362
363
  /**
@@ -137,11 +137,11 @@ export default class NodeClient extends Client<NodeChannel, NodeMirrorChannel> {
137
137
  * @param {ClientConfiguration} [props]
138
138
  */
139
139
  constructor(props?: ClientConfiguration);
140
- /** @private */
141
- private _maxExecutionTime;
142
140
  /**
143
141
  * Available only for NodeClient
144
- *
142
+ * Legacy method maintained for backward compatibility.
143
+ * This method now calls setGrpcDeadline internally to ensure proper validation.
144
+ * @deprecated Use setGrpcDeadline instead.
145
145
  * @param {number} maxExecutionTime
146
146
  * @returns {this}
147
147
  */
@@ -1,2 +1,2 @@
1
- import e from"fs";import r from"util";import t from"./Client.js";import o from"../channel/NodeChannel.js";import s from"../channel/NodeMirrorChannel.js";import n from"../LedgerId.js";import i from"../address_book/NodeAddressBook.js";import{addressBook as a}from"./addressbooks/mainnet.js";import{addressBook as w}from"./addressbooks/testnet.js";import{addressBook as k}from"./addressbooks/previewnet.js";import{decode as N}from"../encoding/hex.js";import{MirrorNetwork as m,LocalNodeNetwork as c}from"../constants/ClientConstants.js";const d=r.promisify(e.readFile);class h extends t{constructor(e){if(super(e),this._maxExecutionTime=1e4,null!=e){if("string"==typeof e.network)this._setNetworkFromName(e.network);else if(null!=e.network){t._validateNetworkConsistency(e.network);const{shard:r,realm:o}=t._extractShardRealm(e.network);this._shard=r,this._realm=o,this.setNetwork(e.network)}if("string"==typeof e.mirrorNetwork)switch(e.mirrorNetwork){case"mainnet":this.setMirrorNetwork(m.MAINNET);break;case"testnet":this.setMirrorNetwork(m.TESTNET);break;case"previewnet":this.setMirrorNetwork(m.PREVIEWNET);break;default:this.setMirrorNetwork([e.mirrorNetwork])}else null!=e.mirrorNetwork&&this.setMirrorNetwork(e.mirrorNetwork)}}static fromConfig(e){return new h("string"==typeof e?JSON.parse(e):e)}static async fromConfigFile(e){return h.fromConfig(await d(e,"utf8"))}static forNetwork(e,r){return new h({network:e,...r})}static forName(e,r={}){return new h({network:e,...r})}static forMainnet(e={}){return new h({network:"mainnet",...e})}static forTestnet(e={}){return new h({network:"testnet",...e})}static async forMirrorNetwork(e,r,t){const o=new h({mirrorNetwork:e,shard:r,realm:t});return await o.updateNetwork(),o}static forPreviewnet(e={}){return new h({network:"previewnet",...e})}static forLocalNode(e={scheduleNetworkUpdate:!1}){return new h({network:"local-node",...e})}static async forMainnetAsync(e={}){return new h({network:"mainnet",...e}).updateNetwork()}static async forTestnetAsync(e={}){return new h({network:"testnet",...e}).updateNetwork()}static async forPreviewnetAsync(e={}){return new h({network:"previewnet",...e}).updateNetwork()}static async forNameAsync(e,r={}){const t=new h({network:e,...r});return"local-node"!==e&&await t.updateNetwork(),t}setNetwork(e){"string"==typeof e?this._setNetworkFromName(e):this._network.setNetwork(e)}setMaxExecutionTime(e){return this._maxExecutionTime=e,this}_setNetworkFromName(e){switch(e){case"mainnet":this.setNetworkFromAddressBook(i.fromBytes(N(a))),this.setMirrorNetwork(m.MAINNET),this.setLedgerId(n.MAINNET);break;case"testnet":this.setNetworkFromAddressBook(i.fromBytes(N(w))),this.setMirrorNetwork(m.TESTNET),this.setLedgerId(n.TESTNET);break;case"previewnet":this.setNetworkFromAddressBook(i.fromBytes(N(k))),this.setMirrorNetwork(m.PREVIEWNET),this.setLedgerId(n.PREVIEWNET);break;case"local-node":this.setNetwork(c),this.setMirrorNetwork(m.LOCAL_NODE),this.setLedgerId(n.LOCAL_NODE);break;default:throw new Error(`unknown network: ${e}`)}return this}setMirrorNetwork(e){if("string"==typeof e)switch(e){case"local-node":this._mirrorNetwork.setNetwork(m.LOCAL_NODE);break;case"previewnet":this._mirrorNetwork.setNetwork(m.PREVIEWNET);break;case"testnet":this._mirrorNetwork.setNetwork(m.TESTNET);break;case"mainnet":this._mirrorNetwork.setNetwork(m.MAINNET);break;default:this._mirrorNetwork.setNetwork([e])}else this._mirrorNetwork.setNetwork(e);return this}_createNetworkChannel(){return e=>new o(e,this._maxExecutionTime)}_createMirrorNetworkChannel(){return e=>new s(e)}}export{h as default};
1
+ import e from"fs";import r from"util";import t from"./Client.js";import o from"../channel/NodeChannel.js";import s from"../channel/NodeMirrorChannel.js";import n from"../LedgerId.js";import i from"../address_book/NodeAddressBook.js";import{addressBook as a}from"./addressbooks/mainnet.js";import{addressBook as w}from"./addressbooks/testnet.js";import{addressBook as k}from"./addressbooks/previewnet.js";import{decode as N}from"../encoding/hex.js";import{MirrorNetwork as m,LocalNodeNetwork as c}from"../constants/ClientConstants.js";const d=r.promisify(e.readFile);class h extends t{constructor(e){if(super(e),null!=e){if("string"==typeof e.network)this._setNetworkFromName(e.network);else if(null!=e.network){t._validateNetworkConsistency(e.network);const{shard:r,realm:o}=t._extractShardRealm(e.network);this._shard=r,this._realm=o,this.setNetwork(e.network)}if("string"==typeof e.mirrorNetwork)switch(e.mirrorNetwork){case"mainnet":this.setMirrorNetwork(m.MAINNET);break;case"testnet":this.setMirrorNetwork(m.TESTNET);break;case"previewnet":this.setMirrorNetwork(m.PREVIEWNET);break;default:this.setMirrorNetwork([e.mirrorNetwork])}else null!=e.mirrorNetwork&&this.setMirrorNetwork(e.mirrorNetwork)}}static fromConfig(e){return new h("string"==typeof e?JSON.parse(e):e)}static async fromConfigFile(e){return h.fromConfig(await d(e,"utf8"))}static forNetwork(e,r){return new h({network:e,...r})}static forName(e,r={}){return new h({network:e,...r})}static forMainnet(e={}){return new h({network:"mainnet",...e})}static forTestnet(e={}){return new h({network:"testnet",...e})}static async forMirrorNetwork(e,r,t){const o=new h({mirrorNetwork:e,shard:r,realm:t});return await o.updateNetwork(),o}static forPreviewnet(e={}){return new h({network:"previewnet",...e})}static forLocalNode(e={scheduleNetworkUpdate:!1}){return new h({network:"local-node",...e})}static async forMainnetAsync(e={}){return new h({network:"mainnet",...e}).updateNetwork()}static async forTestnetAsync(e={}){return new h({network:"testnet",...e}).updateNetwork()}static async forPreviewnetAsync(e={}){return new h({network:"previewnet",...e}).updateNetwork()}static async forNameAsync(e,r={}){const t=new h({network:e,...r});return"local-node"!==e&&await t.updateNetwork(),t}setNetwork(e){"string"==typeof e?this._setNetworkFromName(e):this._network.setNetwork(e)}setMaxExecutionTime(e){return this.setGrpcDeadline(e),this}_setNetworkFromName(e){switch(e){case"mainnet":this.setNetworkFromAddressBook(i.fromBytes(N(a))),this.setMirrorNetwork(m.MAINNET),this.setLedgerId(n.MAINNET);break;case"testnet":this.setNetworkFromAddressBook(i.fromBytes(N(w))),this.setMirrorNetwork(m.TESTNET),this.setLedgerId(n.TESTNET);break;case"previewnet":this.setNetworkFromAddressBook(i.fromBytes(N(k))),this.setMirrorNetwork(m.PREVIEWNET),this.setLedgerId(n.PREVIEWNET);break;case"local-node":this.setNetwork(c),this.setMirrorNetwork(m.LOCAL_NODE),this.setLedgerId(n.LOCAL_NODE);break;default:throw new Error(`unknown network: ${e}`)}return this}setMirrorNetwork(e){if("string"==typeof e)switch(e){case"local-node":this._mirrorNetwork.setNetwork(m.LOCAL_NODE);break;case"previewnet":this._mirrorNetwork.setNetwork(m.PREVIEWNET);break;case"testnet":this._mirrorNetwork.setNetwork(m.TESTNET);break;case"mainnet":this._mirrorNetwork.setNetwork(m.MAINNET);break;default:this._mirrorNetwork.setNetwork([e])}else this._mirrorNetwork.setNetwork(e);return this}_createNetworkChannel(){return e=>new o(e,this.grpcDeadline)}_createMirrorNetworkChannel(){return e=>new s(e)}}export{h as default};
2
2
  //# sourceMappingURL=NodeClient.js.map