evernode-js-client 0.6.48 → 0.6.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +95 -71
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -61222,7 +61222,7 @@ class HostClient extends BaseEvernodeClient {
61222
61222
  */
61223
61223
  async getLeaseByIndex(index) {
61224
61224
  const token = await EvernodeHelpers.getLeaseByIndex(this.xrplApi, index);
61225
- if (token.Issuer !== this.xrplAcc.address)
61225
+ if (token?.Issuer !== this.xrplAcc.address)
61226
61226
  return null;
61227
61227
  return token;
61228
61228
  }
@@ -62335,10 +62335,10 @@ class TenantClient extends BaseEvernodeClient {
62335
62335
  super(xrpAddress, xrpSecret, Object.values(TenantEvents), false, options);
62336
62336
  }
62337
62337
 
62338
- async prepareAccount() {
62338
+ async prepareAccount(options = {}) {
62339
62339
  try {
62340
62340
  if (!await this.xrplAcc.getMessageKey())
62341
- await this.xrplAcc.setAccountFields({ MessageKey: this.accKeyPair.publicKey });
62341
+ await this.xrplAcc.setAccountFields({ MessageKey: this.accKeyPair.publicKey }, options);
62342
62342
  }
62343
62343
  catch (err) {
62344
62344
  console.log("Error in preparing user xrpl account for Evernode.", err);
@@ -62464,21 +62464,29 @@ class TenantClient extends BaseEvernodeClient {
62464
62464
 
62465
62465
  let relevantTx = null;
62466
62466
  while (!rejected && !relevantTx) {
62467
- const txList = await this.xrplAcc.getAccountTrx(tx.details.ledger_index);
62468
- for (let t of txList) {
62469
- t.tx.Memos = TransactionHelper.deserializeMemos(t.tx?.Memos);
62470
- t.tx.HookParameters = TransactionHelper.deserializeHookParams(t.tx?.HookParameters);
62471
-
62472
- if (t.meta?.delivered_amount)
62473
- t.tx.DeliveredAmount = t.meta.delivered_amount;
62474
-
62475
- const res = await this.extractEvernodeEvent(t.tx);
62476
- if ((res?.name === EvernodeEvents.AcquireSuccess || res?.name === EvernodeEvents.AcquireError) && res?.data?.acquireRefId === tx.id) {
62477
- clearTimeout(failTimeout);
62478
- relevantTx = res;
62479
- break;
62467
+ try {
62468
+ const txList = await this.xrplAcc.getAccountTrx(tx.details.ledger_index);
62469
+ for (let t of txList) {
62470
+ t.tx.Memos = TransactionHelper.deserializeMemos(t.tx?.Memos);
62471
+ t.tx.HookParameters = TransactionHelper.deserializeHookParams(t.tx?.HookParameters);
62472
+
62473
+ if (t.meta?.delivered_amount)
62474
+ t.tx.DeliveredAmount = t.meta.delivered_amount;
62475
+
62476
+ const res = await this.extractEvernodeEvent(t.tx);
62477
+ if ((res?.name === EvernodeEvents.AcquireSuccess || res?.name === EvernodeEvents.AcquireError) && res?.data?.acquireRefId === tx.id) {
62478
+ clearTimeout(failTimeout);
62479
+ relevantTx = res;
62480
+ break;
62481
+ }
62480
62482
  }
62481
62483
  }
62484
+ catch (e) {
62485
+ rejected = true;
62486
+ clearTimeout(failTimeout);
62487
+ reject({ error: ErrorCodes.ACQUIRE_ERR, reason: 'UNKNOWN', acquireRefId: tx.id });
62488
+ break;
62489
+ }
62482
62490
  await new Promise(resolveSleep => setTimeout(resolveSleep, 2000));
62483
62491
  }
62484
62492
 
@@ -62579,21 +62587,29 @@ class TenantClient extends BaseEvernodeClient {
62579
62587
 
62580
62588
  let relevantTx = null;
62581
62589
  while (!rejected && !relevantTx) {
62582
- const txList = await this.xrplAcc.getAccountTrx(tx.details.ledger_index);
62583
- for (let t of txList) {
62584
- t.tx.Memos = TransactionHelper.deserializeMemos(t.tx.Memos);
62585
- t.tx.HookParameters = TransactionHelper.deserializeHookParams(t.tx?.HookParameters);
62586
-
62587
- if (t.meta?.delivered_amount)
62588
- t.tx.DeliveredAmount = t.meta.delivered_amount;
62589
-
62590
- const res = await this.extractEvernodeEvent(t.tx);
62591
- if ((res?.name === TenantEvents.ExtendSuccess || res?.name === TenantEvents.ExtendError) && res?.data?.extendRefId === tx.id) {
62592
- clearTimeout(failTimeout);
62593
- relevantTx = res;
62594
- break;
62590
+ try {
62591
+ const txList = await this.xrplAcc.getAccountTrx(tx.details.ledger_index);
62592
+ for (let t of txList) {
62593
+ t.tx.Memos = TransactionHelper.deserializeMemos(t.tx.Memos);
62594
+ t.tx.HookParameters = TransactionHelper.deserializeHookParams(t.tx?.HookParameters);
62595
+
62596
+ if (t.meta?.delivered_amount)
62597
+ t.tx.DeliveredAmount = t.meta.delivered_amount;
62598
+
62599
+ const res = await this.extractEvernodeEvent(t.tx);
62600
+ if ((res?.name === TenantEvents.ExtendSuccess || res?.name === TenantEvents.ExtendError) && res?.data?.extendRefId === tx.id) {
62601
+ clearTimeout(failTimeout);
62602
+ relevantTx = res;
62603
+ break;
62604
+ }
62595
62605
  }
62596
62606
  }
62607
+ catch (e) {
62608
+ rejected = true;
62609
+ clearTimeout(failTimeout);
62610
+ reject({ error: ErrorCodes.EXTEND_ERR, reason: 'UNKNOWN', extendRefId: tx.id });
62611
+ break;
62612
+ }
62597
62613
  await new Promise(resolveSleep => setTimeout(resolveSleep, 1000));
62598
62614
  }
62599
62615
 
@@ -62608,7 +62624,8 @@ class TenantClient extends BaseEvernodeClient {
62608
62624
  reject({
62609
62625
  error: ErrorCodes.EXTEND_ERR,
62610
62626
  transaction: relevantTx?.data.transaction,
62611
- reason: relevantTx?.data.reason
62627
+ reason: relevantTx?.data.reason,
62628
+ extendRefId: relevantTx?.data.extendRefId
62612
62629
  });
62613
62630
  }
62614
62631
  }
@@ -65467,7 +65484,6 @@ const { TransactionHelper } = __nccwpck_require__(7071);
65467
65484
  const { XrplApiEvents } = __nccwpck_require__(3307);
65468
65485
  const { XrplAccount } = __nccwpck_require__(9329);
65469
65486
  const { XrplHelpers } = __nccwpck_require__(3189);
65470
- const { UtilHelpers } = __nccwpck_require__(6687);
65471
65487
 
65472
65488
  const MAX_PAGE_LIMIT = 400;
65473
65489
  const API_REQ_TYPE = {
@@ -65518,7 +65534,7 @@ class XrplApi {
65518
65534
  }
65519
65535
 
65520
65536
  async #acquireClient() {
65521
- while (!(this.#isPrimaryServerConnected || this.#isFallbackServerConnected) && this.#isClientAcquired || this.#isConnectionAcquired) {
65537
+ while (!(this.#isPrimaryServerConnected || this.#isFallbackServerConnected) && this.#isClientAcquired) {
65522
65538
  await new Promise((resolve) => setTimeout(resolve, 100));
65523
65539
  }
65524
65540
  this.#isClientAcquired = true;
@@ -65529,7 +65545,7 @@ class XrplApi {
65529
65545
  }
65530
65546
 
65531
65547
  async #acquireConnection() {
65532
- while (this.#isClientAcquired) {
65548
+ while (this.#isConnectionAcquired) {
65533
65549
  await new Promise((resolve) => setTimeout(resolve, 100));
65534
65550
  }
65535
65551
  this.#isConnectionAcquired = true;
@@ -65564,8 +65580,6 @@ class XrplApi {
65564
65580
 
65565
65581
  if (!FUNCTIONING_SERVER_STATES.includes(serverState))
65566
65582
  throw "Client might have functioning issues."
65567
-
65568
- await this.#setXrplClient(client);
65569
65583
  }
65570
65584
 
65571
65585
  async #initEventListeners(client) {
@@ -65580,6 +65594,10 @@ class XrplApi {
65580
65594
  console.log(errorCode + ': ' + errorMessage);
65581
65595
  });
65582
65596
 
65597
+ client.on('connected', async () => {
65598
+ await this.#setXrplClient(client)
65599
+ });
65600
+
65583
65601
  client.on('disconnected', async (code) => {
65584
65602
  this.#events.emit(XrplApiEvents.DISCONNECTED, code);
65585
65603
 
@@ -65613,7 +65631,12 @@ class XrplApi {
65613
65631
  this.#events.emit(XrplApiEvents.SERVER_DESYNCED, { "event_type": "on_alert", "server_state": serverState });
65614
65632
  }
65615
65633
  } catch (e) {
65616
- console.log("Error occurred while listening to server de-syncs.", e)
65634
+ if (e.name === 'TimeoutError') {
65635
+ console.error("Server timeout detected.");
65636
+ this.#events.emit(XrplApiEvents.DISCONNECTED, 408);
65637
+ }
65638
+ else
65639
+ console.error("Error occurred while listening to server de-syncs.", e);
65617
65640
  } finally {
65618
65641
  clearTimeout(ledgerTimeout);
65619
65642
  }
@@ -65676,50 +65699,51 @@ class XrplApi {
65676
65699
  });
65677
65700
  }
65678
65701
 
65679
- async #attemptFallbackServerReconnect(maxAttempts = null) {
65702
+ async #attemptFallbackServerReconnect(maxRounds, attemptsPerServer = 3) {
65680
65703
  if (!this.#fallbackServers || this.#fallbackServers?.length == 0)
65681
65704
  return;
65682
65705
 
65683
65706
  await this.#acquireClient();
65684
65707
 
65685
- let errors = {};
65686
- let attempt = 0;
65687
- retryIterator:
65688
- while (!this.#isPermanentlyDisconnected && !this.#isPrimaryServerConnected && !this.#isFallbackServerConnected) { // Keep attempting until consumer calls disconnect() manually or if the primary server is disconnected.
65689
- ++attempt;
65690
- for (const server of this.#fallbackServers) {
65691
- const client = new xrpl.Client(server, this.#xrplClientOptions);
65692
- try {
65693
- if (!this.#isPrimaryServerConnected) {
65694
- await this.#handleClientConnect(client);
65695
- this.#isFallbackServerConnected = true;
65708
+ const fallbackServers = this.#fallbackServers;
65709
+ let round = 0;
65710
+ while (!this.#isPermanentlyDisconnected && !this.#isPrimaryServerConnected && !this.#isFallbackServerConnected && (!maxRounds || round < maxRounds)) { // Keep attempting until consumer calls disconnect() manually or if the primary server is disconnected.
65711
+ ++round;
65712
+ serverIterator:
65713
+ for (let serverIndex in fallbackServers) {
65714
+ const server = fallbackServers[serverIndex];
65715
+ for (let attempt = 0; attempt < attemptsPerServer;) {
65716
+ if (this.#isPrimaryServerConnected || this.#isPermanentlyDisconnected) {
65717
+ break serverIterator;
65696
65718
  }
65697
- break retryIterator;
65698
- }
65699
- catch (e) {
65700
- this.#releaseClient();
65701
- console.log(`Error occurred while connecting to fallback server ${server}`);
65702
- await new Promise(resolve => setTimeout(resolve, 1000));
65703
- if (client.isConnected()) {
65704
- console.log('Connection closure already handled');
65705
- await client.disconnect();
65719
+ ++attempt;
65720
+ const client = new xrpl.Client(server, this.#xrplClientOptions);
65721
+ try {
65722
+ if (!this.#isPrimaryServerConnected) {
65723
+ await this.#handleClientConnect(client);
65724
+ this.#isFallbackServerConnected = true;
65725
+ }
65726
+ break serverIterator;
65706
65727
  }
65707
-
65708
- if (!this.#isPermanentlyDisconnected) {
65709
- const delaySec = 2 * attempt; // Retry with backoff delay.
65710
- if (!maxAttempts || attempt < maxAttempts)
65711
- console.log(`Fallback server ${server} connection attempt ${attempt} failed. Retrying in ${delaySec}s...`);
65712
- else {
65713
- errors[server] = { error: `Fallback server ${server} connection max attempts failed.`, exception: e };
65728
+ catch (e) {
65729
+ this.#releaseClient();
65730
+ console.log(`Error occurred while connecting to fallback server ${server}`);
65731
+ await new Promise(resolve => setTimeout(resolve, 1000));
65732
+ if (client.isConnected()) {
65733
+ console.log('Connection closure already handled');
65734
+ await client.disconnect();
65714
65735
  }
65715
65736
 
65716
- await new Promise(resolve => setTimeout(resolve, delaySec * 1000));
65737
+ if (!this.#isPermanentlyDisconnected) {
65738
+ if (!maxRounds || round < maxRounds)
65739
+ console.log(`Fallback server ${server} connection attempt ${attempt} failed. Retrying in ${2 * round}s...`);
65740
+ else
65741
+ return { error: `Fallback server ${server} connection max attempts failed.`, exception: e };
65742
+ await new Promise(resolve => setTimeout(resolve, 2 * round * 1000));
65743
+ }
65717
65744
  }
65718
65745
  }
65719
65746
  }
65720
-
65721
- if (maxAttempts && attempt >= maxAttempts)
65722
- return { error: Object.values(errors) };
65723
65747
  }
65724
65748
 
65725
65749
  return {};
@@ -65771,9 +65795,9 @@ class XrplApi {
65771
65795
  }
65772
65796
  else {
65773
65797
  if (this.#primaryServer) {
65774
- res = await Promise.all([this.#attemptPrimaryServerReconnect(1), this.#attemptFallbackServerReconnect(1)]);
65798
+ res = await Promise.all([this.#attemptPrimaryServerReconnect(1), this.#attemptFallbackServerReconnect(1, 1)]);
65775
65799
  } else {
65776
- res = [await this.#attemptFallbackServerReconnect(1)];
65800
+ res = [await this.#attemptFallbackServerReconnect(1, 1)];
65777
65801
  }
65778
65802
  }
65779
65803
 
@@ -65903,7 +65927,7 @@ class XrplApi {
65903
65927
  const info = await this.getAccountInfo(address);
65904
65928
  const accountFlags = xrpl.parseAccountRootFlags(info.Flags);
65905
65929
  const regularKey = info.RegularKey;
65906
- const derivedPubKeyAddress = UtilHelpers.deriveAddress(publicKey);
65930
+ const derivedPubKeyAddress = kp.deriveAddress(publicKey);
65907
65931
 
65908
65932
  // If the master key is disabled the derived pubkey address should be the regular key.
65909
65933
  // Otherwise it could be account address or the regular key
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.48",
9
+ "version": "0.6.50",
10
10
  "dependencies": {
11
11
  "elliptic": "6.5.4",
12
12
  "libsodium-wrappers": "0.7.10",