evernode-js-client 0.6.34 → 0.6.36
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/index.js
CHANGED
@@ -9149,7 +9149,7 @@ module.exports = { mask, unmask };
|
|
9149
9149
|
|
9150
9150
|
|
9151
9151
|
try {
|
9152
|
-
module.exports = require(__nccwpck_require__.ab + "prebuilds/linux-x64/node.
|
9152
|
+
module.exports = require(__nccwpck_require__.ab + "prebuilds/linux-x64/node.napi.node");
|
9153
9153
|
} catch (e) {
|
9154
9154
|
module.exports = __nccwpck_require__(2567);
|
9155
9155
|
}
|
@@ -33340,7 +33340,7 @@ module.exports = isValidUTF8;
|
|
33340
33340
|
|
33341
33341
|
|
33342
33342
|
try {
|
33343
|
-
module.exports = require(__nccwpck_require__.ab + "prebuilds/linux-x64/node.
|
33343
|
+
module.exports = require(__nccwpck_require__.ab + "prebuilds/linux-x64/node.napi1.node");
|
33344
33344
|
} catch (e) {
|
33345
33345
|
module.exports = __nccwpck_require__(9372);
|
33346
33346
|
}
|
@@ -53169,29 +53169,6 @@ class RegistryClient extends BaseEvernodeClient {
|
|
53169
53169
|
super(options.registryAddress, null, Object.values(RegistryEvents), false, options);
|
53170
53170
|
}
|
53171
53171
|
|
53172
|
-
/**
|
53173
|
-
* Gets all the active hosts registered in Evernode without paginating.
|
53174
|
-
* @returns The list of active hosts.
|
53175
|
-
*/
|
53176
|
-
async getActiveHosts() {
|
53177
|
-
let fullHostList = [];
|
53178
|
-
const hosts = await this.getHosts();
|
53179
|
-
if (hosts.nextPageToken) {
|
53180
|
-
let currentPageToken = hosts.nextPageToken;
|
53181
|
-
let nextHosts = null;
|
53182
|
-
fullHostList = fullHostList.concat(hosts.data);
|
53183
|
-
while (currentPageToken) {
|
53184
|
-
nextHosts = await this.getHosts(null, null, currentPageToken);
|
53185
|
-
fullHostList = fullHostList.concat(nextHosts.nextPageToken ? nextHosts.data : nextHosts);
|
53186
|
-
currentPageToken = nextHosts.nextPageToken;
|
53187
|
-
}
|
53188
|
-
} else {
|
53189
|
-
fullHostList = fullHostList.concat(hosts);
|
53190
|
-
}
|
53191
|
-
// Filter only active hosts.
|
53192
|
-
return fullHostList.filter(h => h.active);
|
53193
|
-
}
|
53194
|
-
|
53195
53172
|
/**
|
53196
53173
|
* Gets all the active hosts registered in ledger.
|
53197
53174
|
* @returns The list of active hosts.
|
@@ -53861,6 +53838,12 @@ class HostClient extends BaseEvernodeClient {
|
|
53861
53838
|
* @returns Transaction result.
|
53862
53839
|
*/
|
53863
53840
|
async heartbeat(voteInfo = {}, options = {}) {
|
53841
|
+
let unofferedLeases = await this.getUnofferedLeases();
|
53842
|
+
if (unofferedLeases.length > 0) {
|
53843
|
+
console.log("Unoffered leases detected. Heartbeat was not sent.");
|
53844
|
+
return;
|
53845
|
+
}
|
53846
|
+
|
53864
53847
|
let data;
|
53865
53848
|
// Prepare voteInfo
|
53866
53849
|
if (Object.keys(voteInfo).length > 1) {
|
@@ -57241,7 +57224,7 @@ class XrplApi {
|
|
57241
57224
|
}
|
57242
57225
|
|
57243
57226
|
async #acquireClient() {
|
57244
|
-
while (this.#
|
57227
|
+
while (!(this.#isPrimaryServerConnected || this.#isFallbackServerConnected) && this.#isClientAcquired) {
|
57245
57228
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
57246
57229
|
}
|
57247
57230
|
this.#isClientAcquired = true;
|
@@ -57252,7 +57235,7 @@ class XrplApi {
|
|
57252
57235
|
}
|
57253
57236
|
|
57254
57237
|
async #acquireConnection() {
|
57255
|
-
while (this.#
|
57238
|
+
while (this.#isConnectionAcquired) {
|
57256
57239
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
57257
57240
|
}
|
57258
57241
|
this.#isConnectionAcquired = true;
|
@@ -57263,16 +57246,15 @@ class XrplApi {
|
|
57263
57246
|
}
|
57264
57247
|
|
57265
57248
|
async #setXrplClient(client) {
|
57266
|
-
await this.#acquireClient();
|
57267
57249
|
try {
|
57268
|
-
if (this.#client) // Clear all listeners if there's an already created client.
|
57250
|
+
if (this.#client) { // Clear all listeners if there's an already created client.
|
57269
57251
|
await this.#client.removeAllListeners();
|
57252
|
+
await this.#client.disconnect();
|
57253
|
+
}
|
57270
57254
|
|
57271
57255
|
this.#client = client;
|
57272
|
-
this.#releaseClient();
|
57273
57256
|
}
|
57274
57257
|
catch (e) {
|
57275
|
-
this.#releaseClient();
|
57276
57258
|
console.log("Error occurred in Client initiation:", e)
|
57277
57259
|
}
|
57278
57260
|
}
|
@@ -57372,9 +57354,14 @@ class XrplApi {
|
|
57372
57354
|
}
|
57373
57355
|
|
57374
57356
|
async #attemptFallbackServerReconnect(maxRounds, attemptsPerServer = 3) {
|
57357
|
+
if (!this.#fallbackServers || this.#fallbackServers?.length == 0)
|
57358
|
+
return;
|
57359
|
+
|
57360
|
+
await this.#acquireClient();
|
57361
|
+
|
57375
57362
|
const fallbackServers = this.#fallbackServers;
|
57376
57363
|
let round = 0;
|
57377
|
-
while (
|
57364
|
+
while (!this.#isPermanentlyDisconnected && !this.#isPrimaryServerConnected && !this.#isFallbackServerConnected && (!maxRounds || round < maxRounds)) { // Keep attempting until consumer calls disconnect() manually or if the primary server is disconnected.
|
57378
57365
|
++round;
|
57379
57366
|
serverIterator:
|
57380
57367
|
for (let serverIndex in fallbackServers) {
|
@@ -57384,8 +57371,8 @@ class XrplApi {
|
|
57384
57371
|
break serverIterator;
|
57385
57372
|
}
|
57386
57373
|
++attempt;
|
57374
|
+
const client = new xrpl.Client(server, this.#xrplClientOptions);
|
57387
57375
|
try {
|
57388
|
-
const client = new xrpl.Client(server, this.#xrplClientOptions);
|
57389
57376
|
if (!this.#isPrimaryServerConnected) {
|
57390
57377
|
await this.#handleClientConnect(client);
|
57391
57378
|
this.#isFallbackServerConnected = true;
|
@@ -57393,63 +57380,86 @@ class XrplApi {
|
|
57393
57380
|
break serverIterator;
|
57394
57381
|
}
|
57395
57382
|
catch (e) {
|
57396
|
-
|
57383
|
+
this.#releaseClient();
|
57384
|
+
console.log(`Error occurred while connecting to fallback server ${server}`);
|
57385
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
57386
|
+
if (client.isConnected()) {
|
57387
|
+
console.log('Connection closure already handled');
|
57388
|
+
await client.disconnect();
|
57389
|
+
}
|
57390
|
+
|
57397
57391
|
if (!this.#isPermanentlyDisconnected) {
|
57398
57392
|
if (!maxRounds || round < maxRounds)
|
57399
57393
|
console.log(`Fallback server ${server} connection attempt ${attempt} failed. Retrying in ${2 * round}s...`);
|
57400
57394
|
else
|
57401
|
-
|
57395
|
+
return { error: `Fallback server ${server} connection max attempts failed.`, exception: e };
|
57402
57396
|
await new Promise(resolve => setTimeout(resolve, 2 * round * 1000));
|
57403
57397
|
}
|
57404
57398
|
}
|
57405
57399
|
}
|
57406
57400
|
}
|
57407
|
-
|
57408
57401
|
}
|
57402
|
+
|
57403
|
+
return {};
|
57409
57404
|
}
|
57410
57405
|
|
57411
57406
|
async #attemptPrimaryServerReconnect(maxAttempts = null) {
|
57407
|
+
await this.#acquireClient();
|
57408
|
+
|
57412
57409
|
let attempt = 0;
|
57413
|
-
while (!this.#isPermanentlyDisconnected && !this.#isPrimaryServerConnected) { // Keep attempting until consumer calls disconnect() manually.
|
57410
|
+
while (!this.#isPermanentlyDisconnected && !this.#isPrimaryServerConnected && !this.#isFallbackServerConnected) { // Keep attempting until consumer calls disconnect() manually.
|
57414
57411
|
++attempt;
|
57412
|
+
const client = new xrpl.Client(this.#primaryServer, this.#xrplClientOptions);
|
57415
57413
|
try {
|
57416
|
-
const client = new xrpl.Client(this.#primaryServer, this.#xrplClientOptions);
|
57417
57414
|
await this.#handleClientConnect(client);
|
57418
|
-
this.#isFallbackServerConnected = false;
|
57419
57415
|
this.#isPrimaryServerConnected = true;
|
57420
57416
|
break;
|
57421
57417
|
}
|
57422
57418
|
catch (e) {
|
57423
|
-
|
57419
|
+
this.#releaseClient();
|
57420
|
+
console.log("Error occurred while re-connecting to the primary server")
|
57421
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
57422
|
+
if (client.isConnected()) {
|
57423
|
+
console.log('Connection closure already handled');
|
57424
|
+
await client.disconnect();
|
57425
|
+
}
|
57426
|
+
|
57424
57427
|
if (!this.#isPermanentlyDisconnected) {
|
57425
57428
|
const delaySec = 2 * attempt; // Retry with backoff delay.
|
57426
57429
|
if (!maxAttempts || attempt < maxAttempts)
|
57427
57430
|
console.log(`Primary server ${this.#primaryServer} attempt ${attempt} failed. Retrying in ${delaySec}s...`);
|
57428
57431
|
else
|
57429
|
-
|
57432
|
+
return { error: `Primary server ${this.#primaryServer} connection max attempts failed.`, exception: e };
|
57430
57433
|
await new Promise(resolve => setTimeout(resolve, delaySec * 1000));
|
57431
57434
|
}
|
57432
57435
|
}
|
57433
57436
|
}
|
57437
|
+
|
57438
|
+
return {};
|
57434
57439
|
}
|
57435
57440
|
|
57436
57441
|
async #connectXrplClient(reconnect = false) {
|
57442
|
+
let res = [];
|
57437
57443
|
if (reconnect) {
|
57438
57444
|
if (this.#primaryServer) {
|
57439
|
-
Promise.all([this.#
|
57445
|
+
res = await Promise.all([this.#attemptPrimaryServerReconnect(), this.#attemptFallbackServerReconnect()]);
|
57440
57446
|
} else {
|
57441
|
-
this.#attemptFallbackServerReconnect();
|
57447
|
+
res = [await this.#attemptFallbackServerReconnect()];
|
57442
57448
|
}
|
57443
57449
|
}
|
57444
57450
|
else {
|
57445
57451
|
if (this.#primaryServer) {
|
57446
|
-
Promise.all([this.#
|
57452
|
+
res = await Promise.all([this.#attemptPrimaryServerReconnect(1), this.#attemptFallbackServerReconnect(1, 1)]);
|
57447
57453
|
} else {
|
57448
|
-
this.#attemptFallbackServerReconnect(1, 1);
|
57454
|
+
res = [await this.#attemptFallbackServerReconnect(1, 1)];
|
57449
57455
|
}
|
57450
57456
|
}
|
57451
57457
|
|
57458
|
+
if (res.filter(r => r && !r.error).length == 0)
|
57459
|
+
throw res.filter(r => r && r.error).map(r => r.error);
|
57460
|
+
|
57452
57461
|
await this.#waitForConnection();
|
57462
|
+
this.#releaseClient();
|
57453
57463
|
|
57454
57464
|
// After connection established, check again whether maintainConnections has become false.
|
57455
57465
|
// This is in case the consumer has called disconnect() while connection is being established.
|
@@ -57524,24 +57534,27 @@ class XrplApi {
|
|
57524
57534
|
|
57525
57535
|
async connect() {
|
57526
57536
|
this.#isPermanentlyDisconnected = false;
|
57527
|
-
|
57537
|
+
|
57538
|
+
if (!this.#client || !this.#client.isConnected()) {
|
57539
|
+
await this.#connectXrplClient();
|
57540
|
+
}
|
57528
57541
|
const definitions = await this.#handleClientRequest({ command: 'server_definitions' })
|
57529
57542
|
this.xrplHelper = new XrplHelpers(definitions.result);
|
57530
57543
|
}
|
57531
57544
|
|
57532
57545
|
async disconnect() {
|
57533
|
-
await this.#
|
57546
|
+
await this.#acquireConnection();
|
57534
57547
|
|
57535
57548
|
try {
|
57536
57549
|
this.#isPermanentlyDisconnected = true;
|
57537
57550
|
|
57538
|
-
if (this.#client.isConnected()) {
|
57551
|
+
if (this.#client && this.#client.isConnected()) {
|
57539
57552
|
await this.#client.disconnect().catch(console.error);
|
57540
57553
|
}
|
57541
|
-
this.#
|
57554
|
+
this.#releaseConnection();
|
57542
57555
|
}
|
57543
57556
|
catch (e) {
|
57544
|
-
this.#
|
57557
|
+
this.#releaseConnection();
|
57545
57558
|
throw e;
|
57546
57559
|
}
|
57547
57560
|
}
|
@@ -57746,7 +57759,6 @@ class XrplApi {
|
|
57746
57759
|
return { ...txResult, ...(hookExecRes ? { hookExecutionResult: hookExecRes } : {}) };
|
57747
57760
|
else
|
57748
57761
|
throw { ...txResult, ...(hookExecRes ? { hookExecutionResult: hookExecRes } : {}) };
|
57749
|
-
|
57750
57762
|
}
|
57751
57763
|
|
57752
57764
|
/**
|
package/package.json
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
],
|
7
7
|
"homepage": "https://github.com/HotPocketDev/evernode-js-client",
|
8
8
|
"license": "SEE LICENSE IN https://raw.githubusercontent.com/EvernodeXRPL/evernode-resources/main/license/evernode-license.pdf",
|
9
|
-
"version": "0.6.
|
9
|
+
"version": "0.6.36",
|
10
10
|
"dependencies": {
|
11
11
|
"elliptic": "6.5.4",
|
12
12
|
"libsodium-wrappers": "0.7.10",
|
Binary file
|
Binary file
|