@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.
- package/dist/umd.js +426 -82
- package/dist/umd.min.js +14 -14
- package/lib/Executable.cjs +13 -3
- package/lib/Executable.js +1 -1
- package/lib/Executable.js.map +1 -1
- package/lib/channel/Channel.cjs +25 -1
- package/lib/channel/Channel.d.ts +20 -0
- package/lib/channel/Channel.js +1 -1
- package/lib/channel/Channel.js.map +1 -1
- package/lib/channel/NativeChannel.cjs +96 -2
- package/lib/channel/NativeChannel.d.ts +21 -1
- package/lib/channel/NativeChannel.js +1 -1
- package/lib/channel/NativeChannel.js.map +1 -1
- package/lib/channel/NodeChannel.cjs +4 -5
- package/lib/channel/NodeChannel.d.ts +2 -3
- package/lib/channel/NodeChannel.js +1 -1
- package/lib/channel/NodeChannel.js.map +1 -1
- package/lib/channel/WebChannel.cjs +163 -13
- package/lib/channel/WebChannel.d.ts +51 -1
- package/lib/channel/WebChannel.js +1 -1
- package/lib/channel/WebChannel.js.map +1 -1
- package/lib/client/Client.cjs +62 -5
- package/lib/client/Client.d.ts +26 -3
- package/lib/client/Client.js +1 -1
- package/lib/client/Client.js.map +1 -1
- package/lib/client/NativeClient.cjs +1 -1
- package/lib/client/NativeClient.js +1 -1
- package/lib/client/NativeClient.js.map +1 -1
- package/lib/client/NodeClient.cjs +7 -6
- package/lib/client/NodeClient.d.ts +3 -3
- package/lib/client/NodeClient.js +1 -1
- package/lib/client/NodeClient.js.map +1 -1
- package/lib/client/WebClient.cjs +55 -27
- package/lib/client/WebClient.d.ts +6 -0
- package/lib/client/WebClient.js +1 -1
- package/lib/client/WebClient.js.map +1 -1
- package/lib/client/addressbooks/mainnet.cjs +1 -1
- package/lib/client/addressbooks/mainnet.d.ts +1 -1
- package/lib/client/addressbooks/mainnet.js +1 -1
- package/lib/client/addressbooks/mainnet.js.map +1 -1
- package/lib/client/addressbooks/previewnet.cjs +1 -1
- package/lib/client/addressbooks/previewnet.d.ts +1 -1
- package/lib/client/addressbooks/previewnet.js +1 -1
- package/lib/client/addressbooks/previewnet.js.map +1 -1
- package/lib/client/addressbooks/testnet.cjs +1 -1
- package/lib/client/addressbooks/testnet.d.ts +1 -1
- package/lib/client/addressbooks/testnet.js +1 -1
- package/lib/client/addressbooks/testnet.js.map +1 -1
- package/lib/constants/ClientConstants.cjs +17 -1
- package/lib/constants/ClientConstants.d.ts +14 -0
- package/lib/constants/ClientConstants.js +1 -1
- package/lib/constants/ClientConstants.js.map +1 -1
- package/lib/network/AddressBookQuery.cjs +0 -4
- package/lib/network/AddressBookQuery.js +1 -1
- package/lib/network/AddressBookQuery.js.map +1 -1
- package/lib/network/AddressBookQueryWeb.cjs +1 -5
- package/lib/network/AddressBookQueryWeb.js +1 -1
- package/lib/network/AddressBookQueryWeb.js.map +1 -1
- package/lib/version.js +1 -1
- package/package.json +7 -7
- package/src/Executable.js +18 -2
- package/src/channel/Channel.js +25 -1
- package/src/channel/NativeChannel.js +111 -2
- package/src/channel/NodeChannel.js +4 -7
- package/src/channel/WebChannel.js +189 -21
- package/src/client/Client.js +79 -5
- package/src/client/NativeClient.js +1 -1
- package/src/client/NodeClient.js +7 -6
- package/src/client/WebClient.js +64 -31
- package/src/client/addressbooks/mainnet.js +1 -1
- package/src/client/addressbooks/previewnet.js +1 -1
- package/src/client/addressbooks/testnet.js +1 -1
- package/src/constants/ClientConstants.js +16 -0
- package/src/network/AddressBookQuery.js +0 -7
- package/src/network/AddressBookQueryWeb.js +1 -8
package/lib/client/Client.cjs
CHANGED
|
@@ -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 =
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
818
|
+
return () => {
|
|
819
|
+
throw new Error("not implemented");
|
|
820
|
+
};
|
|
764
821
|
}
|
|
765
822
|
|
|
766
823
|
/**
|
package/lib/client/Client.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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";
|
package/lib/client/Client.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
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
|
package/lib/client/Client.js.map
CHANGED
|
@@ -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":"obAyDe,MAAMA,EAMjB,WAAAC,CAAYC,GAORC,KAAKC,eAAiB,IAAIC,EACtBF,KAAKG,+BAUTH,KAAKI,SAAW,IAAIC,EAAQL,KAAKM,yBAMjCN,KAAKO,UAAY,KAMjBP,KAAKQ,0BAA4B,KAMjCR,KAAKS,wBAA0B,IAAIC,EAAK,GAE3B,MAATX,GACsB,MAAlBA,EAAMY,UACNX,KAAKY,YACDb,EAAMY,SAASE,UACfd,EAAMY,SAASG,YAM3Bd,KAAKe,aAAe,KAGpBf,KAAKgB,eAAgB,EAGrBhB,KAAKiB,wBAAyB,EAG9BjB,KAAKkB,YAAc,IAGnBlB,KAAKmB,YAAc,IAGnBnB,KAAKoB,iCAAkC,EAGvCpB,KAAKqB,gBAAkB,KAKvBrB,KAAKsB,oBAAqB,EAG1BtB,KAAKuB,qBAAuB,MAG5BvB,KAAKwB,aAAc,EAEnBxB,KAAKyB,OAAS,EAEdzB,KAAK0B,OAAS,EAED,MAAT3B,IAAiD,IAAhCA,EAAM4B,uBACvB3B,KAAK4B,yBAGI,MAAT7B,GAAgC,MAAfA,EAAM8B,QACvB7B,KAAKyB,OAAS1B,EAAM8B,OAGX,MAAT9B,GAAgC,MAAfA,EAAM+B,QACvB9B,KAAK0B,OAAS3B,EAAM+B,OAKxB9B,KAAK+B,OAQL/B,KAAKgC,QAAU,IACvB,CAOI,cAAAC,CAAeC,GAIX,OADAC,QAAQC,KAAK,yCACNpC,KAAKqC,YAAYH,EAChC,CAMI,eAAIA,GAEA,OADAC,QAAQC,KAAK,sCACW,MAAjBpC,KAAKsC,SAAmBtC,KAAKsC,SAASC,WAAa,IAClE,CAMI,WAAAF,CAAYC,GAOR,OANAtC,KAAKI,SAASiC,YACU,iBAAbC,EACDE,EAASC,WAAWH,GACpBA,GAGHtC,IACf,CAKI,YAAIsC,GACA,OAAkC,MAA3BtC,KAAKI,SAASsC,UAAoB1C,KAAKI,SAASkC,SAAW,IAC1E,CAOI,UAAAK,CAAWC,GAEP,MAAM,IAAIC,MAAM,kBACxB,CAMI,yBAAAC,CAA0BC,GAEtB,OADA/C,KAAKI,SAAS0C,0BAA0BC,GACjC/C,IACf,CAKI,WAAI4C,GACA,OAAO5C,KAAKI,SAASwC,OAC7B,CAKI,SAAIf,GACA,OAAO7B,KAAKyB,MACpB,CAKI,SAAIK,GACA,OAAO9B,KAAK0B,MACpB,CAOI,gBAAAsB,CAAiBC,GACb,MAAM,IAAIJ,MAAM,kBACxB,CAKI,iBAAII,GACA,OAAOjD,KAAKC,eAAe2C,OACnC,CAMI,wBAAIM,GACA,OAAOlD,KAAKC,eAAeiD,oBACnC,CAKI,gBAAIC,GACA,OAAOnD,KAAKgB,aACpB,CAKI,eAAAoC,CAAgBD,GACZnD,KAAKgB,cAAgBmC,CAC7B,CAKI,mBAAAE,GACI,OAAOrD,KAAKI,SAASiD,qBAC7B,CAMI,oBAAAC,CAAqBC,GAEjB,OADAvD,KAAKI,SAASkD,qBAAqBC,GAC5BvD,IACf,CAUI,WAAAY,CAAYC,EAAWC,GACnB,MAAM0C,EACoB,iBAAf1C,EACD2C,EAAWC,cAAc5C,GACzBA,EAEV,OAAOd,KAAK2D,gBAAgB9C,EAAW2C,EAAII,UAAYC,GACnDC,QAAQC,QAAQP,EAAIQ,KAAKH,IAErC,CAKI,WAAAI,GACI,OAAOjE,KAAKO,SACpB,CAWI,eAAAoD,CAAgB9C,EAAW+C,EAAWM,GAClC,MAAMC,EACFtD,aAAqBuD,EACfvD,EACAuD,EAAU3B,WAAW5B,GAiB/B,OAf+B,MAA3Bb,KAAKI,SAASsC,WACdyB,EAAWE,iBAAiBrE,MAGhCA,KAAKO,UAAY,CACb2D,oBAEArD,UAAWsD,EAEXP,UACIA,aAAqBU,EACfV,EACAU,EAAU7B,WAAWmB,IAG5B5D,IACf,CAMI,wBAAAuE,CAAyBC,GAErB,OADAxE,KAAKiB,uBAAyBuD,EACvBxE,IACf,CAKI,8BAAAyE,GACI,OAAOzE,KAAKiB,sBACpB,CAKI,qBAAIyD,GACA,OAAyB,MAAlB1E,KAAKO,UAAoBP,KAAKO,UAAUM,UAAY,IACnE,CAKI,qBAAI8D,GACA,OAAyB,MAAlB3E,KAAKO,UAAoBP,KAAKO,UAAUqD,UAAY,IACnE,CAKI,4BAAIgB,GACA,OAAO5E,KAAKQ,yBACpB,CAMI,qBAAIqE,GACA,OAAO7E,KAAK4E,wBACpB,CASI,2BAAAE,CAA4BF,GACxB,GAAIA,EAAyBG,aAAaC,QAAU,EAChD,MAAM,IAAInC,MAAM,iDAGpB,OADA7C,KAAKQ,0BAA4BoE,EAC1B5E,IACf,CASI,oBAAAiF,CAAqBJ,GACjB,OAAO7E,KAAK8E,4BAA4BD,EAChD,CAKI,kCAAIK,GACA,OAAOlF,KAAKoB,+BACpB,CASI,iCAAA+D,CAAkCD,GAE9B,OADAlF,KAAKoB,gCAAkC8D,EAChClF,IACf,CAKI,0BAAIoF,GACA,OAAOpF,KAAKS,uBACpB,CAMI,mBAAI4E,GACA,OAAOrF,KAAKoF,sBACpB,CAQI,yBAAAE,CAA0BF,GAGtB,GADIG,EAAgBH,EAAuBL,cAAgB,EAEvD,MAAM,IAAIlC,MAAM,+CAGpB,OADA7C,KAAKS,wBAA0B2E,EACxBpF,IACf,CAOI,kBAAAwF,CAAmBH,GACf,OAAOrF,KAAKsF,0BAA0BD,EAC9C,CAKI,eAAII,GACA,OAA4B,MAArBzF,KAAKe,aAAuBf,KAAKe,aAAe,EAC/D,CAMI,cAAA2E,CAAeD,GAEX,OADAzF,KAAKe,aAAe0E,EACbzF,IACf,CAKI,mBAAI2F,GACA,OAAO3F,KAAKI,SAASuF,eAC7B,CAMI,kBAAAC,CAAmBD,GAEf,OADA3F,KAAKI,SAASwF,mBAAmBD,GAC1B3F,IACf,CAKI,gBAAI6F,GACA,OAAO7F,KAAKI,SAAS0F,UAC7B,CAMI,eAAAC,CAAgBF,GAEZ,OADA7F,KAAKI,SAAS4F,cAAcH,GACrB7F,IACf,CAQI,0BAAIiG,GACA,OAAOjG,KAAKI,SAAS6F,sBAC7B,CAYI,yBAAAC,CAA0BD,GAEtB,OADAjG,KAAKI,SAAS8F,0BAA0BD,GACjCjG,IACf,CAMI,aAAAgG,CAAcF,GACV,GAAkB,MAAdA,EACA,MAAM,IAAIjD,MAAM,8BAEpB,GAAIiD,EAAa9F,KAAKmB,YAClB,MAAM,IAAI0B,MAAM,gDAGpB,OADA7C,KAAKkB,YAAc4E,EACZ9F,IACf,CAKI,cAAI8F,GACA,OAAO9F,KAAKkB,WACpB,CAMI,aAAAiF,CAAcC,GACV,GAAkB,MAAdA,EACA,MAAM,IAAIvD,MAAM,8BACb,GAAIuD,EAAapG,KAAKkB,YACzB,MAAM,IAAI2B,MAAM,iDAGpB,OADA7C,KAAKmB,YAAciF,EACZpG,IACf,CAKI,cAAIoG,GACA,OAAOpG,KAAKmB,WACpB,CAMI,iBAAAkF,CAAkBC,GAEd,OADAtG,KAAKI,SAAS4F,cAAcM,GACrBtG,IACf,CAKI,kBAAIsG,GACA,OAAOtG,KAAKI,SAAS0F,UAC7B,CAMI,iBAAAS,CAAkBC,GAEd,OADAxG,KAAKI,SAAS+F,cAAcK,GACrBxG,IACf,CAKI,kBAAIwG,GACA,OAAOxG,KAAKI,SAASgG,UAC7B,CAMI,uBAAAK,CAAwBC,GAEpB,OADA1G,KAAKI,SAASqG,wBAAwBC,GAC/B1G,IACf,CAKI,wBAAI0G,GACA,OAAO1G,KAAKI,SAASsG,oBAC7B,CAMI,uBAAAC,CAAwBC,GAEpB,OADA5G,KAAKI,SAASuG,wBAAwBC,GAC/B5G,IACf,CAKI,wBAAI4G,GACA,OAAO5G,KAAKI,SAASwG,oBAC7B,CAMI,iBAAAC,CAAkBC,GAEd,OADA9G,KAAKqB,gBAAkByF,EAChB9G,IACf,CAKI,kBAAI8G,GACA,OAAO9G,KAAKqB,eACpB,CAKI,uBAAI0F,GACA,OAAO/G,KAAKuB,oBACpB,CAMI,sBAAAyF,CAAuBD,GAInB,OAHAE,aAAajH,KAAK+B,QAClB/B,KAAKuB,qBAAuBwF,EAC5B/G,KAAK4B,yBACE5B,IACf,CAOI,SAAAkH,CAAUC,GAEN,OADAnH,KAAKgC,QAAUmF,EACRnH,IACf,CAOI,UAAImH,GACA,OAAOnH,KAAKgC,OACpB,CAKI,UAAMoF,CAAKvG,SACD,IAAIwG,EAAoB,CAAExG,cAC3ByG,kBAAkB,CACfzG,aAAqBuD,EACfvD,EACAuD,EAAU3B,WAAW5B,KAE9B0G,QAAQvH,KACrB,CAEI,aAAMwH,GACF,IAAK,MAAMC,KAAiBC,OAAOC,OAAO3H,KAAKI,SAASwC,eAC9C5C,KAAKoH,KAAKK,EAE5B,CAMI,mBAAMG,GACF,GAAI5H,KAAKsB,mBACL,OAAOtB,KAGXA,KAAKsB,oBAAqB,EAE1B,IACI,MAAMyB,QAAoB,IAAI8E,GACzBC,UACGC,EAAOC,wBAAwBhI,KAAKyB,OAAQzB,KAAK0B,SAEpD6F,QAAQvH,MACbA,KAAK8C,0BAA0BC,EAClC,CAAC,MAAOkF,GACDjI,KAAKgC,SACLhC,KAAKgC,QAAQkG,MACT,yCACyB,EAAQ3F,aAIrD,CAAkB,QACNvC,KAAKsB,oBAAqB,CACtC,CAEQ,OAAOtB,IACf,CAKI,KAAAmI,GACInI,KAAKI,SAAS+H,QACdnI,KAAKC,eAAekI,QACpBnI,KAAKwB,aAAc,EACnByF,aAAajH,KAAK+B,OAC1B,CAMI,qBAAAzB,GACI,MAAM,IAAIuC,MAAM,kBACxB,CAMI,2BAAA1C,GACI,MAAM,IAAI0C,MAAM,kBACxB,CAKI,sBAAAjB,GAGI5B,KAAK+B,OAASqG,WAAWC,gBACfrI,KAAK4H,gBAEN5H,KAAKwB,aAGNxB,KAAK4B,0BAEV5B,KAAKuB,qBAChB,CAKI,oBAAI+G,GACA,OAAOtI,KAAKwB,WACpB,CAOI,kCAAO+G,CAA4B3F,GAC/B,GAAoC,IAAhC8E,OAAOc,KAAK5F,GAAS6F,OACrB,OAGJ,MAAM,CAAGhB,GAAiBC,OAAOgB,QAAQ9F,GAAS,GAE5C+F,EAAelB,EAAclF,YAE5BqG,EAAgBC,GAAkBF,EACpCG,MAAM,KACNC,IAAIC,QAEHC,EAAiBvB,OAAOC,OAAO/E,GAASsG,MAAOrI,IACjD,MAAM8H,EAAe9H,EAAU0B,YAExB4G,EAAcC,GAAgBT,EAChCG,MAAM,KACNC,IAAIC,QACT,OACIG,IAAiBP,GACjBQ,IAAiBP,IAIzB,IAAKI,EACD,MAAM,IAAIpG,MACN,sEAGhB,CAUI,yBAAOwG,CAAmBzG,GACtB,MAAM8F,EAAUhB,OAAOgB,QAAQ9F,GAC/B,GAAuB,IAAnB8F,EAAQD,OACR,MAAO,CAAE5G,MAAO,EAAGC,MAAO,GAG9B,OAASwH,GAAsBZ,EAAQ,GAEjCC,EAAeW,EAAmB/G,YACjCV,EAAOC,GAAS6G,EAAaG,MAAM,KAAKC,IAAIC,QAEnD,MAAO,CAAEnH,QAAOC,QACxB"}
|
|
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
|
-
|
|
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.
|
|
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
|
*/
|
package/lib/client/NodeClient.js
CHANGED
|
@@ -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),
|
|
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
|