From 4cc61a5a42250480a66a042842974945c2f7a6a1 Mon Sep 17 00:00:00 2001 From: Defined Prototype <5364018+graycraft@users.noreply.github.com> Date: Sun, 20 Apr 2025 23:17:09 +0500 Subject: [PATCH 1/7] feat(lib/nodes/abstract.node.ts): request a node by IP if domain is not available --- src/lib/nodes/abstract.node.ts | 37 ++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/lib/nodes/abstract.node.ts b/src/lib/nodes/abstract.node.ts index 9d2161efe..55d9af76b 100644 --- a/src/lib/nodes/abstract.node.ts +++ b/src/lib/nodes/abstract.node.ts @@ -29,6 +29,10 @@ export abstract class Node { */ wsPort = '36668' + /** + * Node alternative IP + */ + alt_ip?: string /** * Node base URL */ @@ -56,10 +60,22 @@ export abstract class Node { hasSupportedProtocol = true // Healthcheck related params + /** + * Indicates whether a node with alternative IP is available + */ + altIpAvailable = false + /** + * Indicates whether a node with main URL is available + */ + mainUrlAvailable = true /** * Indicates whether node is available. */ online = true + /** + * Indicates whether prefer a node with alternative IP or not + */ + preferAltIp = false /** * Node ping estimation */ @@ -97,13 +113,16 @@ export abstract class Node { healthcheckInProgress = false constructor( - url: string, + endpoint: { alt_ip?: string; url: string }, type: NodeType, kind: NodeKind, label: TNodeLabel, version = '', minNodeVersion = '' ) { + const { alt_ip, url } = endpoint + + this.alt_ip = alt_ip this.url = url this.type = type this.label = label @@ -134,8 +153,21 @@ export abstract class Node { this.height = health.height this.ping = health.ping this.online = true + + if (this.preferAltIp) { + this.altIpAvailable = true + } else { + this.mainUrlAvailable = true + } } catch { - this.online = false + if (this.preferAltIp) { + this.altIpAvailable = false + this.preferAltIp = false + this.online = false + } else if (this.mainUrlAvailable) { + this.mainUrlAvailable = false + this.preferAltIp = true + } } finally { this.healthcheckInProgress = false } @@ -164,6 +196,7 @@ export abstract class Node { getStatus() { return { + alt_ip: this.alt_ip, url: this.url, port: this.port, hostname: this.hostname, From 64e79a0e11a5163fc23f07f501ed4766544b93d7 Mon Sep 17 00:00:00 2001 From: Defined Prototype <5364018+graycraft@users.noreply.github.com> Date: Sun, 20 Apr 2025 23:53:21 +0500 Subject: [PATCH 2/7] feat(lib/nodes/): request a node by IP if domain is not available --- src/lib/nodes/adm/AdmClient.ts | 6 ++++-- src/lib/nodes/adm/AdmNode.ts | 7 ++++--- src/lib/nodes/adm/index.ts | 5 ++++- src/lib/nodes/btc-indexer/BtcIndexer.ts | 5 +++-- src/lib/nodes/btc-indexer/BtcIndexerClient.ts | 2 +- src/lib/nodes/btc-indexer/index.ts | 5 ++++- src/lib/nodes/btc/BtcClient.ts | 2 +- src/lib/nodes/btc/BtcNode.ts | 5 +++-- src/lib/nodes/btc/index.ts | 5 ++++- src/lib/nodes/btc/types/api/common.ts | 1 + src/lib/nodes/dash/DashClient.ts | 2 +- src/lib/nodes/dash/DashNode.ts | 6 ++++-- src/lib/nodes/dash/index.ts | 5 ++++- src/lib/nodes/dash/types/api/common.ts | 1 + src/lib/nodes/doge-indexer/DogeIndexer.ts | 9 ++++----- src/lib/nodes/doge-indexer/DogeIndexerClient.ts | 2 +- src/lib/nodes/doge-indexer/index.ts | 5 ++++- src/lib/nodes/doge/DogeClient.ts | 2 +- src/lib/nodes/doge/DogeNode.ts | 5 +++-- src/lib/nodes/doge/index.ts | 5 ++++- src/lib/nodes/eth-indexer/EthIndexer.ts | 5 +++-- src/lib/nodes/eth-indexer/EthIndexerClient.ts | 2 +- src/lib/nodes/eth-indexer/index.ts | 7 ++++--- src/lib/nodes/eth/EthClient.ts | 4 ++-- src/lib/nodes/eth/EthNode.ts | 2 +- src/lib/nodes/eth/index.ts | 5 ++++- src/lib/nodes/ipfs/IpfsClient.ts | 2 +- src/lib/nodes/ipfs/IpfsNode.ts | 15 ++++++++------- src/lib/nodes/ipfs/index.ts | 5 ++++- src/lib/nodes/kly-indexer/KlyIndexer.ts | 5 +++-- src/lib/nodes/kly-indexer/KlyIndexerClient.ts | 2 +- src/lib/nodes/kly-indexer/index.ts | 7 ++++--- src/lib/nodes/kly/KlyClient.ts | 2 +- src/lib/nodes/kly/KlyNode.ts | 5 +++-- src/lib/nodes/kly/index.ts | 5 ++++- src/lib/nodes/rate-info-service/RateInfoClient.ts | 2 +- .../nodes/rate-info-service/RateInfoService.ts | 12 +++++++----- src/lib/nodes/rate-info-service/index.ts | 7 ++++--- 38 files changed, 112 insertions(+), 67 deletions(-) diff --git a/src/lib/nodes/adm/AdmClient.ts b/src/lib/nodes/adm/AdmClient.ts index 1d0d42485..33b6e48a6 100644 --- a/src/lib/nodes/adm/AdmClient.ts +++ b/src/lib/nodes/adm/AdmClient.ts @@ -16,7 +16,7 @@ import { Client } from '../abstract.client' * is not available at the moment. */ export class AdmClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('adm', 'node', NODE_LABELS.AdmNode) this.nodes = endpoints.map((endpoint) => new AdmNode(endpoint, minNodeVersion)) this.minNodeVersion = minNodeVersion @@ -75,7 +75,9 @@ export class AdmClient extends Client { return this.getNode().timeDelta } - async sendChatTransaction(transaction: RegisterChatMessageTransaction): Promise { + async sendChatTransaction( + transaction: RegisterChatMessageTransaction + ): Promise { return this.post('/api/chats/process', () => ({ transaction })) } } diff --git a/src/lib/nodes/adm/AdmNode.ts b/src/lib/nodes/adm/AdmNode.ts index fe0563169..555b82a01 100644 --- a/src/lib/nodes/adm/AdmNode.ts +++ b/src/lib/nodes/adm/AdmNode.ts @@ -18,6 +18,7 @@ export type Payload = (ctx: AdmNode): Record } export type RequestConfig

= { + baseURL?: string url: string method?: string payload?: P @@ -28,8 +29,8 @@ export type RequestConfig

= { * to the node and verify is status (online/offline, version, ping, etc.) */ export class AdmNode extends Node { - constructor(url: string, minNodeVersion = '0.0.0') { - super(url, 'adm', 'node', NODE_LABELS.AdmNode, '', minNodeVersion) + constructor(endpoint: { alt_ip?: string; url: string }, minNodeVersion = '0.0.0') { + super(endpoint, 'adm', 'node', NODE_LABELS.AdmNode, '', minNodeVersion) this.wsPort = '36668' // default wsPort this.wsProtocol = this.protocol === 'https:' ? 'wss:' : 'ws:' @@ -52,6 +53,7 @@ export class AdmNode extends Node { const { url, method = 'get', payload } = cfg const config: AxiosRequestConfig = { + baseURL: this.preferAltIp ? this.alt_ip : this.url, url, method: method.toLowerCase(), [method === 'get' ? 'params' : 'data']: @@ -72,7 +74,6 @@ export class AdmNode extends Node { // According to https://github.com/axios/axios#handling-errors this means, that request was sent, // but server could not respond. if (!error.response && error.request) { - this.online = false throw new NodeOfflineError() } throw error diff --git a/src/lib/nodes/adm/index.ts b/src/lib/nodes/adm/index.ts index 134177228..695ead53b 100644 --- a/src/lib/nodes/adm/index.ts +++ b/src/lib/nodes/adm/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { AdmClient } from './AdmClient' -const endpoints = (config.adm.nodes.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.adm.nodes.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const adm = new AdmClient(endpoints, config.adm.nodes.minVersion) export default adm diff --git a/src/lib/nodes/btc-indexer/BtcIndexer.ts b/src/lib/nodes/btc-indexer/BtcIndexer.ts index 6bc505ae6..4c2d3dd5b 100644 --- a/src/lib/nodes/btc-indexer/BtcIndexer.ts +++ b/src/lib/nodes/btc-indexer/BtcIndexer.ts @@ -8,8 +8,8 @@ import { NODE_LABELS } from '@/lib/nodes/constants' * to the node and verify is status (online/offline, version, ping, etc.) */ export class BtcIndexer extends Node { - constructor(url: string) { - super(url, 'btc', 'service', NODE_LABELS.BtcIndexer) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'btc', 'service', NODE_LABELS.BtcIndexer) } protected buildClient(): AxiosInstance { @@ -40,6 +40,7 @@ export class BtcIndexer extends Node { return this.client .request({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/btc-indexer/BtcIndexerClient.ts b/src/lib/nodes/btc-indexer/BtcIndexerClient.ts index 46d200cb6..0afd92e1a 100644 --- a/src/lib/nodes/btc-indexer/BtcIndexerClient.ts +++ b/src/lib/nodes/btc-indexer/BtcIndexerClient.ts @@ -17,7 +17,7 @@ import { GetUnspentsParams } from './types/api/get-unspents/get-unspents-params' * is not available at the moment. */ export class BtcIndexerClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('btc', 'service', NODE_LABELS.BtcIndexer) this.nodes = endpoints.map((endpoint) => new BtcIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/btc-indexer/index.ts b/src/lib/nodes/btc-indexer/index.ts index 1ceeed53d..f608dddf5 100644 --- a/src/lib/nodes/btc-indexer/index.ts +++ b/src/lib/nodes/btc-indexer/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { BtcIndexerClient } from './BtcIndexerClient' -const endpoints = (config.btc.services.btcIndexer.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.btc.services.btcIndexer.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const btcIndexer = new BtcIndexerClient(endpoints) export default btcIndexer diff --git a/src/lib/nodes/btc/BtcClient.ts b/src/lib/nodes/btc/BtcClient.ts index 0e8bf6df0..48197811f 100644 --- a/src/lib/nodes/btc/BtcClient.ts +++ b/src/lib/nodes/btc/BtcClient.ts @@ -12,7 +12,7 @@ import { RpcRequest } from './types/api/common' * is not available at the moment. */ export class BtcClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('btc', 'node', NODE_LABELS.BtcNode) this.nodes = endpoints.map((endpoint) => new BtcNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/btc/BtcNode.ts b/src/lib/nodes/btc/BtcNode.ts index ab0862997..3a20e0a40 100644 --- a/src/lib/nodes/btc/BtcNode.ts +++ b/src/lib/nodes/btc/BtcNode.ts @@ -12,8 +12,8 @@ import { BlockchainInfo } from './types/api/blockchain-info' * to the node and verify is status (online/offline, version, ping, etc.) */ export class BtcNode extends Node { - constructor(url: string) { - super(url, 'btc', 'node', NODE_LABELS.BtcNode) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'btc', 'node', NODE_LABELS.BtcNode) } protected buildClient(): AxiosInstance { @@ -53,6 +53,7 @@ export class BtcNode extends Node { return this.client .request>({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, method: 'POST', data: params }) diff --git a/src/lib/nodes/btc/index.ts b/src/lib/nodes/btc/index.ts index 9354436e6..4bf6e6c4f 100644 --- a/src/lib/nodes/btc/index.ts +++ b/src/lib/nodes/btc/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { BtcClient } from './BtcClient' -const endpoints = (config.btc.nodes.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.btc.nodes.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const btc = new BtcClient(endpoints) export default btc diff --git a/src/lib/nodes/btc/types/api/common.ts b/src/lib/nodes/btc/types/api/common.ts index c79227127..ce4351c91 100644 --- a/src/lib/nodes/btc/types/api/common.ts +++ b/src/lib/nodes/btc/types/api/common.ts @@ -23,6 +23,7 @@ type Method = | 'getaddressbalance' export type RpcRequest

= { + baseURL?: string method: M params?: P } diff --git a/src/lib/nodes/dash/DashClient.ts b/src/lib/nodes/dash/DashClient.ts index 5f6362da3..c671112f9 100644 --- a/src/lib/nodes/dash/DashClient.ts +++ b/src/lib/nodes/dash/DashClient.ts @@ -9,7 +9,7 @@ import { Balance } from './types/api/balance' import { Transaction } from './types/api/transaction' export class DashClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('dash', 'node', NODE_LABELS.DashNode) this.nodes = endpoints.map((endpoint) => new DashNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/dash/DashNode.ts b/src/lib/nodes/dash/DashNode.ts index a4fa154c0..2adb57758 100644 --- a/src/lib/nodes/dash/DashNode.ts +++ b/src/lib/nodes/dash/DashNode.ts @@ -11,8 +11,8 @@ import { BlockchainInfo } from './types/api/blockchain-info' * to the node and verify is status (online/offline, version, ping, etc.) */ export class DashNode extends Node { - constructor(url: string) { - super(url, 'dash', 'node', NODE_LABELS.DashNode) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'dash', 'node', NODE_LABELS.DashNode) } protected buildClient(): AxiosInstance { @@ -51,6 +51,7 @@ export class DashNode extends Node { return this.client .request>({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, url: '/', method: 'POST', data: params @@ -73,6 +74,7 @@ export class DashNode extends Node { return this.client .request[]>({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, url: '/', method: 'POST', data: params diff --git a/src/lib/nodes/dash/index.ts b/src/lib/nodes/dash/index.ts index 297b27701..a69da6d77 100644 --- a/src/lib/nodes/dash/index.ts +++ b/src/lib/nodes/dash/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { DashClient } from './DashClient' -const endpoints = (config.dash.nodes.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.dash.nodes.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const dash = new DashClient(endpoints) export default dash diff --git a/src/lib/nodes/dash/types/api/common.ts b/src/lib/nodes/dash/types/api/common.ts index c79227127..ce4351c91 100644 --- a/src/lib/nodes/dash/types/api/common.ts +++ b/src/lib/nodes/dash/types/api/common.ts @@ -23,6 +23,7 @@ type Method = | 'getaddressbalance' export type RpcRequest

= { + baseURL?: string method: M params?: P } diff --git a/src/lib/nodes/doge-indexer/DogeIndexer.ts b/src/lib/nodes/doge-indexer/DogeIndexer.ts index 212758b6e..23bace3c2 100644 --- a/src/lib/nodes/doge-indexer/DogeIndexer.ts +++ b/src/lib/nodes/doge-indexer/DogeIndexer.ts @@ -8,8 +8,8 @@ import { NODE_LABELS } from '@/lib/nodes/constants' * to the node and verify is status (online/offline, version, ping, etc.) */ export class DogeIndexer extends Node { - constructor(url: string) { - super(url, 'doge', 'service', NODE_LABELS.DogeIndexer) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'doge', 'service', NODE_LABELS.DogeIndexer) } protected buildClient(): AxiosInstance { @@ -18,9 +18,7 @@ export class DogeIndexer extends Node { protected async checkHealth() { const time = Date.now() - const height = await this.client - .get('/api/status') - .then((res) => res.data.info.blocks) + const height = await this.client.get('/api/status').then((res) => res.data.info.blocks) return { height, @@ -40,6 +38,7 @@ export class DogeIndexer extends Node { return this.client .request({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/doge-indexer/DogeIndexerClient.ts b/src/lib/nodes/doge-indexer/DogeIndexerClient.ts index a0575b860..d469805aa 100644 --- a/src/lib/nodes/doge-indexer/DogeIndexerClient.ts +++ b/src/lib/nodes/doge-indexer/DogeIndexerClient.ts @@ -12,7 +12,7 @@ import { EstimatedFee, GetEstimatedFeeParams } from './types/api/estimated-fee' import { Balance } from './types/api/balance' export class DogeIndexerClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('doge', 'service', NODE_LABELS.DogeIndexer) this.nodes = endpoints.map((endpoint) => new DogeIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/doge-indexer/index.ts b/src/lib/nodes/doge-indexer/index.ts index 3dc391486..3671f3117 100644 --- a/src/lib/nodes/doge-indexer/index.ts +++ b/src/lib/nodes/doge-indexer/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { DogeIndexerClient } from './DogeIndexerClient' -const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const dogeIndexer = new DogeIndexerClient(endpoints) export default dogeIndexer diff --git a/src/lib/nodes/doge/DogeClient.ts b/src/lib/nodes/doge/DogeClient.ts index f900a3fa2..627eb5451 100644 --- a/src/lib/nodes/doge/DogeClient.ts +++ b/src/lib/nodes/doge/DogeClient.ts @@ -5,7 +5,7 @@ import { DogeNode } from './DogeNode' import { Client } from '../abstract.client' export class DogeClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('doge', 'node', NODE_LABELS.DogeNode) this.nodes = endpoints.map((endpoint) => new DogeNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/doge/DogeNode.ts b/src/lib/nodes/doge/DogeNode.ts index 418e895b1..ed8909fee 100644 --- a/src/lib/nodes/doge/DogeNode.ts +++ b/src/lib/nodes/doge/DogeNode.ts @@ -12,8 +12,8 @@ import { BlockchainInfo } from './types/api/blockchain-info' * to the node and verify is status (online/offline, version, ping, etc.) */ export class DogeNode extends Node { - constructor(url: string) { - super(url, 'doge', 'node', NODE_LABELS.DogeNode) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'doge', 'node', NODE_LABELS.DogeNode) } protected buildClient(): AxiosInstance { @@ -55,6 +55,7 @@ export class DogeNode extends Node { return this.client .request>({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, url: '/', method: 'POST', data: params diff --git a/src/lib/nodes/doge/index.ts b/src/lib/nodes/doge/index.ts index c43df54ae..9e19598a8 100644 --- a/src/lib/nodes/doge/index.ts +++ b/src/lib/nodes/doge/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { DogeClient } from './DogeClient' -const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const doge = new DogeClient(endpoints) export default doge diff --git a/src/lib/nodes/eth-indexer/EthIndexer.ts b/src/lib/nodes/eth-indexer/EthIndexer.ts index 6a709ce0b..1eabad7a7 100644 --- a/src/lib/nodes/eth-indexer/EthIndexer.ts +++ b/src/lib/nodes/eth-indexer/EthIndexer.ts @@ -8,8 +8,8 @@ import { NODE_LABELS } from '@/lib/nodes/constants' * https://github.com/Adamant-im/ETH-transactions-storage */ export class EthIndexer extends Node { - constructor(url: string) { - super(url, 'eth', 'service', NODE_LABELS.EthIndexer) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'eth', 'service', NODE_LABELS.EthIndexer) } protected buildClient(): AxiosInstance { @@ -30,6 +30,7 @@ export class EthIndexer extends Node { return this.client .request({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/eth-indexer/EthIndexerClient.ts b/src/lib/nodes/eth-indexer/EthIndexerClient.ts index b123f9acc..def2f777b 100644 --- a/src/lib/nodes/eth-indexer/EthIndexerClient.ts +++ b/src/lib/nodes/eth-indexer/EthIndexerClient.ts @@ -8,7 +8,7 @@ import { normalizeTransaction } from './utils' import { Client } from '../abstract.client' export class EthIndexerClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('eth', 'service', NODE_LABELS.EthIndexer) this.nodes = endpoints.map((endpoint) => new EthIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/eth-indexer/index.ts b/src/lib/nodes/eth-indexer/index.ts index 149d99eb0..0a8b4cd9b 100644 --- a/src/lib/nodes/eth-indexer/index.ts +++ b/src/lib/nodes/eth-indexer/index.ts @@ -2,9 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { EthIndexerClient } from './EthIndexerClient' -const endpoints = (config.eth.services.ethIndexer.list as NodeInfo[]).map( - (endpoint) => endpoint.url -) +const endpoints = (config.eth.services.ethIndexer.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const ethIndexer = new EthIndexerClient(endpoints) export default ethIndexer diff --git a/src/lib/nodes/eth/EthClient.ts b/src/lib/nodes/eth/EthClient.ts index 2eda5b184..444a76c7c 100644 --- a/src/lib/nodes/eth/EthClient.ts +++ b/src/lib/nodes/eth/EthClient.ts @@ -16,7 +16,7 @@ import { normalizeEthTransaction, normalizeErc20Transaction } from './utils' * is not available at the moment. */ export class EthClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('eth', 'node', NODE_LABELS.EthNode) this.nodes = endpoints.map((endpoint) => new EthNode(endpoint)) this.minNodeVersion = minNodeVersion @@ -32,7 +32,7 @@ export class EthClient extends Client { const isFinalized = !!transaction.blockNumber return isFinalized - } catch (err) { + } catch { return false } } diff --git a/src/lib/nodes/eth/EthNode.ts b/src/lib/nodes/eth/EthNode.ts index cd349a96c..ba8c99a2a 100644 --- a/src/lib/nodes/eth/EthNode.ts +++ b/src/lib/nodes/eth/EthNode.ts @@ -11,7 +11,7 @@ import { formatEthVersion } from '@/lib/nodes/utils/nodeVersionFormatters' export class EthNode extends Node { clientName = '' - constructor(url: string) { + constructor(url: { alt_ip?: string; url: string }) { super(url, 'eth', 'node', NODE_LABELS.EthNode) } diff --git a/src/lib/nodes/eth/index.ts b/src/lib/nodes/eth/index.ts index 1f743b029..7190ca843 100644 --- a/src/lib/nodes/eth/index.ts +++ b/src/lib/nodes/eth/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { EthClient } from './EthClient' -const endpoints = (config.eth.nodes.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.eth.nodes.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const eth = new EthClient(endpoints) export default eth diff --git a/src/lib/nodes/ipfs/IpfsClient.ts b/src/lib/nodes/ipfs/IpfsClient.ts index ee3b6908f..306941ab4 100644 --- a/src/lib/nodes/ipfs/IpfsClient.ts +++ b/src/lib/nodes/ipfs/IpfsClient.ts @@ -12,7 +12,7 @@ import { Client } from '../abstract.client' * is not available at the moment. */ export class IpfsClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('ipfs', 'service', NODE_LABELS.IpfsNode) this.nodes = endpoints.map((endpoint) => new IpfsNode(endpoint, minNodeVersion)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/ipfs/IpfsNode.ts b/src/lib/nodes/ipfs/IpfsNode.ts index fdfb845a5..fe8f6c704 100644 --- a/src/lib/nodes/ipfs/IpfsNode.ts +++ b/src/lib/nodes/ipfs/IpfsNode.ts @@ -32,8 +32,8 @@ export type RequestConfig

= { * to the node and verify is status (online/offline, version, ping, etc.) */ export class IpfsNode extends Node { - constructor(url: string, minNodeVersion = '0.0.0') { - super(url, 'ipfs', 'node', NODE_LABELS.IpfsNode, '', minNodeVersion) + constructor(endpoint: { alt_ip?: string; url: string }, minNodeVersion = '0.0.0') { + super(endpoint, 'ipfs', 'node', NODE_LABELS.IpfsNode, '', minNodeVersion) } protected buildClient(): AxiosInstance { @@ -53,6 +53,7 @@ export class IpfsNode extends Node { const { url, headers, method = 'get', payload, onUploadProgress } = cfg const config: AxiosRequestConfig = { + baseURL: this.preferAltIp ? this.alt_ip : this.url, url, method: method.toLowerCase(), headers, @@ -77,7 +78,6 @@ export class IpfsNode extends Node { // According to https://github.com/axios/axios#handling-errors this means, that request was sent, // but server could not respond. if (!error.response && error.request) { - this.online = false throw new NodeOfflineError() } throw error @@ -117,7 +117,7 @@ export class IpfsNode extends Node { protected async checkHealth() { const time = Date.now() const { timestamp } = await this.fetchNodeInfo() - this.height = timestamp; + this.height = timestamp return { height: this.height, @@ -127,9 +127,10 @@ export class IpfsNode extends Node { formatHeight(height: number): string { return super.formatHeight( - Number(Math.ceil(height / 1000) - .toString() - .substring(2) + Number( + Math.ceil(height / 1000) + .toString() + .substring(2) ) ) } diff --git a/src/lib/nodes/ipfs/index.ts b/src/lib/nodes/ipfs/index.ts index affa21800..15343c909 100644 --- a/src/lib/nodes/ipfs/index.ts +++ b/src/lib/nodes/ipfs/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { IpfsClient } from './IpfsClient' -const endpoints = (config.adm.services.ipfsNode.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.adm.services.ipfsNode.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const ipfs = new IpfsClient(endpoints, config.adm.services.minVersion) export default ipfs diff --git a/src/lib/nodes/kly-indexer/KlyIndexer.ts b/src/lib/nodes/kly-indexer/KlyIndexer.ts index 143482e33..964800b3b 100644 --- a/src/lib/nodes/kly-indexer/KlyIndexer.ts +++ b/src/lib/nodes/kly-indexer/KlyIndexer.ts @@ -8,8 +8,8 @@ import { Endpoints } from './types/api/endpoints' * to the node and verify is status (online/offline, version, ping, etc.) */ export class KlyIndexer extends Node { - constructor(url: string) { - super(url, 'kly', 'service', NODE_LABELS.KlyIndexer) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'kly', 'service', NODE_LABELS.KlyIndexer) } protected buildClient(): AxiosInstance { @@ -31,6 +31,7 @@ export class KlyIndexer extends Node { return this.client .request({ ...requestConfig, + baseURL: this.preferAltIp ? this.alt_ip : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/kly-indexer/KlyIndexerClient.ts b/src/lib/nodes/kly-indexer/KlyIndexerClient.ts index 7806a2c28..163213b02 100644 --- a/src/lib/nodes/kly-indexer/KlyIndexerClient.ts +++ b/src/lib/nodes/kly-indexer/KlyIndexerClient.ts @@ -9,7 +9,7 @@ import { KlyIndexer } from './KlyIndexer' import { Client } from '../abstract.client' export class KlyIndexerClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('kly', 'service', NODE_LABELS.KlyIndexer) this.nodes = endpoints.map((endpoint) => new KlyIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/kly-indexer/index.ts b/src/lib/nodes/kly-indexer/index.ts index d791926f1..068849267 100644 --- a/src/lib/nodes/kly-indexer/index.ts +++ b/src/lib/nodes/kly-indexer/index.ts @@ -2,9 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { KlyIndexerClient } from './KlyIndexerClient' -const endpoints = (config.kly.services.klyService.list as NodeInfo[]).map( - (endpoint) => endpoint.url -) +const endpoints = (config.kly.services.klyService.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const klyIndexer = new KlyIndexerClient(endpoints) export default klyIndexer diff --git a/src/lib/nodes/kly/KlyClient.ts b/src/lib/nodes/kly/KlyClient.ts index d58b66bf9..80cb5a200 100644 --- a/src/lib/nodes/kly/KlyClient.ts +++ b/src/lib/nodes/kly/KlyClient.ts @@ -6,7 +6,7 @@ import { KlyNode } from './KlyNode' import { Client } from '../abstract.client' export class KlyClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('kly', 'node', NODE_LABELS.KlyNode) this.nodes = endpoints.map((endpoint) => new KlyNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/kly/KlyNode.ts b/src/lib/nodes/kly/KlyNode.ts index 586abcd42..6c17a7897 100644 --- a/src/lib/nodes/kly/KlyNode.ts +++ b/src/lib/nodes/kly/KlyNode.ts @@ -10,8 +10,8 @@ import { v4 as uuid } from 'uuid' * to the node and verify is status (online/offline, version, ping, etc.) */ export class KlyNode extends Node { - constructor(url: string) { - super(url, 'kly', 'node', NODE_LABELS.KlyNode) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'kly', 'node', NODE_LABELS.KlyNode) } protected buildClient(): AxiosInstance { @@ -29,6 +29,7 @@ export class KlyNode extends Node { ): Promise { return this.client .post>('/rpc', { + baseURL: this.preferAltIp ? this.alt_ip : this.url, jsonrpc: '2.0', id: uuid(), method, diff --git a/src/lib/nodes/kly/index.ts b/src/lib/nodes/kly/index.ts index eaf6b6c86..15d5c74bb 100644 --- a/src/lib/nodes/kly/index.ts +++ b/src/lib/nodes/kly/index.ts @@ -2,7 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { KlyClient } from './KlyClient' -const endpoints = (config.kly.nodes.list as NodeInfo[]).map((endpoint) => endpoint.url) +const endpoints = (config.kly.nodes.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const kly = new KlyClient(endpoints) export default kly diff --git a/src/lib/nodes/rate-info-service/RateInfoClient.ts b/src/lib/nodes/rate-info-service/RateInfoClient.ts index a19084496..4026ed81d 100644 --- a/src/lib/nodes/rate-info-service/RateInfoClient.ts +++ b/src/lib/nodes/rate-info-service/RateInfoClient.ts @@ -4,7 +4,7 @@ import { RateInfoService } from '@/lib/nodes/rate-info-service/RateInfoService' import { RateInfoResponse } from '@/lib/nodes/rate-info-service/types/RateInfoResponse' export class RateInfoClient extends Client { - constructor(endpoints: string[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { super('adm', 'service', NODE_LABELS.RatesInfo) this.nodes = endpoints.map((endpoint) => new RateInfoService(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/rate-info-service/RateInfoService.ts b/src/lib/nodes/rate-info-service/RateInfoService.ts index e5e026ac2..8526c98ef 100644 --- a/src/lib/nodes/rate-info-service/RateInfoService.ts +++ b/src/lib/nodes/rate-info-service/RateInfoService.ts @@ -7,9 +7,10 @@ import { RateHistoryInfoResponse } from '@/lib/nodes/rate-info-service/types/Rat import { GetHistoryParams } from '@/lib/nodes/rate-info-service/types/GetHistoryParams' export class RateInfoService extends Node { - constructor(url: string) { - super(url, 'adm', 'service', NODE_LABELS.RatesInfo) + constructor(endpoint: { alt_ip?: string; url: string }) { + super(endpoint, 'adm', 'service', NODE_LABELS.RatesInfo) } + protected buildClient(): AxiosInstance { return axios.create({ baseURL: this.url @@ -41,9 +42,10 @@ export class RateInfoService extends Node { formatHeight(height: number): string { return super.formatHeight( - Number(Math.ceil(height / 1000) - .toString() - .substring(2) + Number( + Math.ceil(height / 1000) + .toString() + .substring(2) ) ) } diff --git a/src/lib/nodes/rate-info-service/index.ts b/src/lib/nodes/rate-info-service/index.ts index a5e8d965b..07bcfb386 100644 --- a/src/lib/nodes/rate-info-service/index.ts +++ b/src/lib/nodes/rate-info-service/index.ts @@ -2,9 +2,10 @@ import config from '@/config' import { NodeInfo } from '@/types/wallets' import { RateInfoClient } from '@/lib/nodes/rate-info-service/RateInfoClient' -const endpoints = (config.adm.services.infoService.list as NodeInfo[]).map( - (endpoint) => endpoint.url -) +const endpoints = (config.adm.services.infoService.list as NodeInfo[]).map((endpoint) => ({ + alt_ip: endpoint.alt_ip, + url: endpoint.url +})) export const rateInfoClient = new RateInfoClient(endpoints) export default rateInfoClient From 3828ade5ffce4ece297da6370929ef9475fe4738 Mon Sep 17 00:00:00 2001 From: Defined Prototype <5364018+graycraft@users.noreply.github.com> Date: Tue, 22 Apr 2025 02:02:23 +0500 Subject: [PATCH 3/7] feat(lib/nodes/eth/EthNode.ts): request a node by IP if domain is not available --- src/lib/nodes/eth/EthNode.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/nodes/eth/EthNode.ts b/src/lib/nodes/eth/EthNode.ts index ba8c99a2a..a97ed7197 100644 --- a/src/lib/nodes/eth/EthNode.ts +++ b/src/lib/nodes/eth/EthNode.ts @@ -16,11 +16,15 @@ export class EthNode extends Node { } protected buildClient(): Web3Eth { - return new Web3Eth(new HttpProvider(this.url)) + return new Web3Eth(new HttpProvider(this.preferAltIp ? (this.alt_ip as string) : this.url)) } protected async checkHealth() { const time = Date.now() + + /** Set `clientUrl` for `HttpProvider` depending on `preferAltIp`. */ + this.client = this.buildClient() + const blockNumber = await this.client.getBlockNumber() return { From 4ce93cb7b5e48de69d9ddc5ff9be5067b7a19f44 Mon Sep 17 00:00:00 2001 From: Defined Prototype <5364018+graycraft@users.noreply.github.com> Date: Tue, 22 Apr 2025 23:32:39 +0500 Subject: [PATCH 4/7] chore(src/lib/nodes/): import `NodeInfo` interface instead of explicit type def --- src/config/utils/nodes.ts | 2 +- src/lib/nodes/abstract.node.ts | 3 ++- src/lib/nodes/adm/AdmClient.ts | 3 ++- src/lib/nodes/adm/AdmNode.ts | 3 ++- src/lib/nodes/adm/index.ts | 2 +- src/lib/nodes/btc-indexer/BtcIndexer.ts | 3 ++- src/lib/nodes/btc-indexer/BtcIndexerClient.ts | 3 ++- src/lib/nodes/btc-indexer/index.ts | 2 +- src/lib/nodes/btc/BtcClient.ts | 3 ++- src/lib/nodes/btc/BtcNode.ts | 3 ++- src/lib/nodes/btc/index.ts | 2 +- src/lib/nodes/dash/DashClient.ts | 3 ++- src/lib/nodes/dash/DashNode.ts | 3 ++- src/lib/nodes/dash/index.ts | 2 +- src/lib/nodes/doge-indexer/DogeIndexer.ts | 3 ++- src/lib/nodes/doge-indexer/DogeIndexerClient.ts | 3 ++- src/lib/nodes/doge-indexer/index.ts | 2 +- src/lib/nodes/doge/DogeClient.ts | 3 ++- src/lib/nodes/doge/DogeNode.ts | 3 ++- src/lib/nodes/doge/index.ts | 2 +- src/lib/nodes/eth-indexer/EthIndexer.ts | 3 ++- src/lib/nodes/eth-indexer/EthIndexerClient.ts | 3 ++- src/lib/nodes/eth-indexer/index.ts | 2 +- src/lib/nodes/eth/EthClient.ts | 3 ++- src/lib/nodes/eth/EthNode.ts | 3 ++- src/lib/nodes/eth/index.ts | 2 +- src/lib/nodes/ipfs/IpfsClient.ts | 3 ++- src/lib/nodes/ipfs/IpfsNode.ts | 3 ++- src/lib/nodes/ipfs/index.ts | 2 +- src/lib/nodes/kly-indexer/KlyIndexer.ts | 3 ++- src/lib/nodes/kly-indexer/KlyIndexerClient.ts | 3 ++- src/lib/nodes/kly-indexer/index.ts | 2 +- src/lib/nodes/kly/KlyClient.ts | 3 ++- src/lib/nodes/kly/KlyNode.ts | 3 ++- src/lib/nodes/kly/index.ts | 2 +- src/lib/nodes/rate-info-service/RateInfoClient.ts | 3 ++- src/lib/nodes/rate-info-service/RateInfoService.ts | 3 ++- src/lib/nodes/rate-info-service/index.ts | 2 +- 38 files changed, 63 insertions(+), 38 deletions(-) diff --git a/src/config/utils/nodes.ts b/src/config/utils/nodes.ts index 70a7318d8..e99a87005 100644 --- a/src/config/utils/nodes.ts +++ b/src/config/utils/nodes.ts @@ -1,4 +1,4 @@ -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { BlockchainSymbol } from './types' import config from '../index' diff --git a/src/lib/nodes/abstract.node.ts b/src/lib/nodes/abstract.node.ts index 55d9af76b..e96747d68 100644 --- a/src/lib/nodes/abstract.node.ts +++ b/src/lib/nodes/abstract.node.ts @@ -1,3 +1,4 @@ +import type { NodeInfo } from '@/types/wallets/index.ts' import { getHealthCheckInterval } from './utils/getHealthcheckConfig' import { TNodeLabel } from './constants' import { HealthcheckInterval, HealthcheckResult, NodeKind, NodeStatus, NodeType } from './types' @@ -113,7 +114,7 @@ export abstract class Node { healthcheckInProgress = false constructor( - endpoint: { alt_ip?: string; url: string }, + endpoint: NodeInfo, type: NodeType, kind: NodeKind, label: TNodeLabel, diff --git a/src/lib/nodes/adm/AdmClient.ts b/src/lib/nodes/adm/AdmClient.ts index 33b6e48a6..990636f97 100644 --- a/src/lib/nodes/adm/AdmClient.ts +++ b/src/lib/nodes/adm/AdmClient.ts @@ -5,6 +5,7 @@ import { RegisterChatMessageTransaction } from '@/lib/schema/client' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { AdmNode, Payload, RequestConfig } from './AdmNode' import { Client } from '../abstract.client' @@ -16,7 +17,7 @@ import { Client } from '../abstract.client' * is not available at the moment. */ export class AdmClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('adm', 'node', NODE_LABELS.AdmNode) this.nodes = endpoints.map((endpoint) => new AdmNode(endpoint, minNodeVersion)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/adm/AdmNode.ts b/src/lib/nodes/adm/AdmNode.ts index 555b82a01..ddd671847 100644 --- a/src/lib/nodes/adm/AdmNode.ts +++ b/src/lib/nodes/adm/AdmNode.ts @@ -4,6 +4,7 @@ import { GetNodeStatusResponseDto } from '@/lib/schema/client' import axios, { AxiosInstance, AxiosRequestConfig } from 'axios' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' type FetchNodeInfoResult = { socketSupport: boolean @@ -29,7 +30,7 @@ export type RequestConfig

= { * to the node and verify is status (online/offline, version, ping, etc.) */ export class AdmNode extends Node { - constructor(endpoint: { alt_ip?: string; url: string }, minNodeVersion = '0.0.0') { + constructor(endpoint: NodeInfo, minNodeVersion = '0.0.0') { super(endpoint, 'adm', 'node', NODE_LABELS.AdmNode, '', minNodeVersion) this.wsPort = '36668' // default wsPort diff --git a/src/lib/nodes/adm/index.ts b/src/lib/nodes/adm/index.ts index 695ead53b..f0565d0e4 100644 --- a/src/lib/nodes/adm/index.ts +++ b/src/lib/nodes/adm/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { AdmClient } from './AdmClient' const endpoints = (config.adm.nodes.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/btc-indexer/BtcIndexer.ts b/src/lib/nodes/btc-indexer/BtcIndexer.ts index 4c2d3dd5b..27f42a796 100644 --- a/src/lib/nodes/btc-indexer/BtcIndexer.ts +++ b/src/lib/nodes/btc-indexer/BtcIndexer.ts @@ -2,13 +2,14 @@ import { createBtcLikeClient } from '../utils/createBtcLikeClient' import { AxiosInstance, AxiosRequestConfig } from 'axios' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' /** * Encapsulates a node. Provides methods to send API-requests * to the node and verify is status (online/offline, version, ping, etc.) */ export class BtcIndexer extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'btc', 'service', NODE_LABELS.BtcIndexer) } diff --git a/src/lib/nodes/btc-indexer/BtcIndexerClient.ts b/src/lib/nodes/btc-indexer/BtcIndexerClient.ts index 0afd92e1a..12a5f683f 100644 --- a/src/lib/nodes/btc-indexer/BtcIndexerClient.ts +++ b/src/lib/nodes/btc-indexer/BtcIndexerClient.ts @@ -1,5 +1,6 @@ import type { AxiosRequestConfig } from 'axios' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { Client } from '../abstract.client' import { BtcIndexer } from './BtcIndexer' import { MULTIPLIER, normalizeTransaction } from './utils' @@ -17,7 +18,7 @@ import { GetUnspentsParams } from './types/api/get-unspents/get-unspents-params' * is not available at the moment. */ export class BtcIndexerClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('btc', 'service', NODE_LABELS.BtcIndexer) this.nodes = endpoints.map((endpoint) => new BtcIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/btc-indexer/index.ts b/src/lib/nodes/btc-indexer/index.ts index f608dddf5..03d88262e 100644 --- a/src/lib/nodes/btc-indexer/index.ts +++ b/src/lib/nodes/btc-indexer/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { BtcIndexerClient } from './BtcIndexerClient' const endpoints = (config.btc.services.btcIndexer.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/btc/BtcClient.ts b/src/lib/nodes/btc/BtcClient.ts index 48197811f..8f679f1f7 100644 --- a/src/lib/nodes/btc/BtcClient.ts +++ b/src/lib/nodes/btc/BtcClient.ts @@ -1,5 +1,6 @@ import type { AxiosRequestConfig } from 'axios' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { BtcNode } from './BtcNode' import { Client } from '../abstract.client' import { RpcRequest } from './types/api/common' @@ -12,7 +13,7 @@ import { RpcRequest } from './types/api/common' * is not available at the moment. */ export class BtcClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('btc', 'node', NODE_LABELS.BtcNode) this.nodes = endpoints.map((endpoint) => new BtcNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/btc/BtcNode.ts b/src/lib/nodes/btc/BtcNode.ts index 3a20e0a40..e1aa530e2 100644 --- a/src/lib/nodes/btc/BtcNode.ts +++ b/src/lib/nodes/btc/BtcNode.ts @@ -3,6 +3,7 @@ import { createBtcLikeClient } from '../utils/createBtcLikeClient' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' import { formatBtcVersion } from '@/lib/nodes/utils/nodeVersionFormatters' +import type { NodeInfo } from '@/types/wallets' import { RpcRequest, RpcResponse } from './types/api/common' import { NetworkInfo } from './types/api/network-info' import { BlockchainInfo } from './types/api/blockchain-info' @@ -12,7 +13,7 @@ import { BlockchainInfo } from './types/api/blockchain-info' * to the node and verify is status (online/offline, version, ping, etc.) */ export class BtcNode extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'btc', 'node', NODE_LABELS.BtcNode) } diff --git a/src/lib/nodes/btc/index.ts b/src/lib/nodes/btc/index.ts index 4bf6e6c4f..678422682 100644 --- a/src/lib/nodes/btc/index.ts +++ b/src/lib/nodes/btc/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { BtcClient } from './BtcClient' const endpoints = (config.btc.nodes.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/dash/DashClient.ts b/src/lib/nodes/dash/DashClient.ts index c671112f9..aefbb62f3 100644 --- a/src/lib/nodes/dash/DashClient.ts +++ b/src/lib/nodes/dash/DashClient.ts @@ -1,5 +1,6 @@ import { AxiosRequestConfig } from 'axios' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { DashNode } from './DashNode' import { Client } from '../abstract.client' import { normalizeTransaction } from './utils' @@ -9,7 +10,7 @@ import { Balance } from './types/api/balance' import { Transaction } from './types/api/transaction' export class DashClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('dash', 'node', NODE_LABELS.DashNode) this.nodes = endpoints.map((endpoint) => new DashNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/dash/DashNode.ts b/src/lib/nodes/dash/DashNode.ts index 2adb57758..89ad794c1 100644 --- a/src/lib/nodes/dash/DashNode.ts +++ b/src/lib/nodes/dash/DashNode.ts @@ -2,6 +2,7 @@ import { AxiosInstance, AxiosRequestConfig } from 'axios' import { createBtcLikeClient } from '../utils/createBtcLikeClient' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { RpcRequest, RpcResponse } from './types/api/common' import { NetworkInfo } from './types/api/network-info' import { BlockchainInfo } from './types/api/blockchain-info' @@ -11,7 +12,7 @@ import { BlockchainInfo } from './types/api/blockchain-info' * to the node and verify is status (online/offline, version, ping, etc.) */ export class DashNode extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'dash', 'node', NODE_LABELS.DashNode) } diff --git a/src/lib/nodes/dash/index.ts b/src/lib/nodes/dash/index.ts index a69da6d77..960525399 100644 --- a/src/lib/nodes/dash/index.ts +++ b/src/lib/nodes/dash/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { DashClient } from './DashClient' const endpoints = (config.dash.nodes.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/doge-indexer/DogeIndexer.ts b/src/lib/nodes/doge-indexer/DogeIndexer.ts index 23bace3c2..def158713 100644 --- a/src/lib/nodes/doge-indexer/DogeIndexer.ts +++ b/src/lib/nodes/doge-indexer/DogeIndexer.ts @@ -2,13 +2,14 @@ import { createBtcLikeClient } from '../utils/createBtcLikeClient' import type { AxiosInstance, AxiosRequestConfig } from 'axios' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' /** * Encapsulates a node. Provides methods to send API-requests * to the node and verify is status (online/offline, version, ping, etc.) */ export class DogeIndexer extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'doge', 'service', NODE_LABELS.DogeIndexer) } diff --git a/src/lib/nodes/doge-indexer/DogeIndexerClient.ts b/src/lib/nodes/doge-indexer/DogeIndexerClient.ts index d469805aa..8285e6da7 100644 --- a/src/lib/nodes/doge-indexer/DogeIndexerClient.ts +++ b/src/lib/nodes/doge-indexer/DogeIndexerClient.ts @@ -1,5 +1,6 @@ import type { AxiosRequestConfig } from 'axios' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { DogeIndexer } from './DogeIndexer' import { Client } from '../abstract.client' import { NB_BLOCKS } from './constants' @@ -12,7 +13,7 @@ import { EstimatedFee, GetEstimatedFeeParams } from './types/api/estimated-fee' import { Balance } from './types/api/balance' export class DogeIndexerClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('doge', 'service', NODE_LABELS.DogeIndexer) this.nodes = endpoints.map((endpoint) => new DogeIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/doge-indexer/index.ts b/src/lib/nodes/doge-indexer/index.ts index 3671f3117..e15150504 100644 --- a/src/lib/nodes/doge-indexer/index.ts +++ b/src/lib/nodes/doge-indexer/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { DogeIndexerClient } from './DogeIndexerClient' const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/doge/DogeClient.ts b/src/lib/nodes/doge/DogeClient.ts index 627eb5451..57fca4355 100644 --- a/src/lib/nodes/doge/DogeClient.ts +++ b/src/lib/nodes/doge/DogeClient.ts @@ -1,11 +1,12 @@ import { AxiosRequestConfig } from 'axios' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { RpcRequest } from './types/api/common' import { DogeNode } from './DogeNode' import { Client } from '../abstract.client' export class DogeClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('doge', 'node', NODE_LABELS.DogeNode) this.nodes = endpoints.map((endpoint) => new DogeNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/doge/DogeNode.ts b/src/lib/nodes/doge/DogeNode.ts index ed8909fee..d47cbf5a6 100644 --- a/src/lib/nodes/doge/DogeNode.ts +++ b/src/lib/nodes/doge/DogeNode.ts @@ -3,6 +3,7 @@ import { createBtcLikeClient } from '../utils/createBtcLikeClient' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' import { formatDogeVersion } from '@/lib/nodes/utils/nodeVersionFormatters' +import type { NodeInfo } from '@/types/wallets' import { RpcRequest, RpcResponse } from './types/api/common' import { NetworkInfo } from './types/api/network-info' import { BlockchainInfo } from './types/api/blockchain-info' @@ -12,7 +13,7 @@ import { BlockchainInfo } from './types/api/blockchain-info' * to the node and verify is status (online/offline, version, ping, etc.) */ export class DogeNode extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'doge', 'node', NODE_LABELS.DogeNode) } diff --git a/src/lib/nodes/doge/index.ts b/src/lib/nodes/doge/index.ts index 9e19598a8..0de2d09de 100644 --- a/src/lib/nodes/doge/index.ts +++ b/src/lib/nodes/doge/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { DogeClient } from './DogeClient' const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/eth-indexer/EthIndexer.ts b/src/lib/nodes/eth-indexer/EthIndexer.ts index 1eabad7a7..dad6a75ed 100644 --- a/src/lib/nodes/eth-indexer/EthIndexer.ts +++ b/src/lib/nodes/eth-indexer/EthIndexer.ts @@ -2,13 +2,14 @@ import { Endpoints } from './types/api/endpoints' import axios, { AxiosInstance, AxiosRequestConfig } from 'axios' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' /** * ETH Indexer API * https://github.com/Adamant-im/ETH-transactions-storage */ export class EthIndexer extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'eth', 'service', NODE_LABELS.EthIndexer) } diff --git a/src/lib/nodes/eth-indexer/EthIndexerClient.ts b/src/lib/nodes/eth-indexer/EthIndexerClient.ts index def2f777b..f47d65c31 100644 --- a/src/lib/nodes/eth-indexer/EthIndexerClient.ts +++ b/src/lib/nodes/eth-indexer/EthIndexerClient.ts @@ -1,5 +1,6 @@ import { AxiosRequestConfig } from 'axios' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { GetTransactionsParams } from './types/client/get-transactions-params' import { GetTransactionsRequest } from './types/api/get-transactions/get-transactions.request' import { Endpoints } from './types/api/endpoints' @@ -8,7 +9,7 @@ import { normalizeTransaction } from './utils' import { Client } from '../abstract.client' export class EthIndexerClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('eth', 'service', NODE_LABELS.EthIndexer) this.nodes = endpoints.map((endpoint) => new EthIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/eth-indexer/index.ts b/src/lib/nodes/eth-indexer/index.ts index 0a8b4cd9b..cc6fee07c 100644 --- a/src/lib/nodes/eth-indexer/index.ts +++ b/src/lib/nodes/eth-indexer/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { EthIndexerClient } from './EthIndexerClient' const endpoints = (config.eth.services.ethIndexer.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/eth/EthClient.ts b/src/lib/nodes/eth/EthClient.ts index 444a76c7c..78454b78a 100644 --- a/src/lib/nodes/eth/EthClient.ts +++ b/src/lib/nodes/eth/EthClient.ts @@ -4,6 +4,7 @@ import { NODE_LABELS } from '@/lib/nodes/constants' import { TransactionNotFound } from '@/lib/nodes/utils/errors' import { CryptoSymbol } from '@/lib/constants' import { bytesToHex } from '@/lib/hex' +import type { NodeInfo } from '@/types/wallets' import { EthNode } from './EthNode' import { Client } from '../abstract.client' import { normalizeEthTransaction, normalizeErc20Transaction } from './utils' @@ -16,7 +17,7 @@ import { normalizeEthTransaction, normalizeErc20Transaction } from './utils' * is not available at the moment. */ export class EthClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('eth', 'node', NODE_LABELS.EthNode) this.nodes = endpoints.map((endpoint) => new EthNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/eth/EthNode.ts b/src/lib/nodes/eth/EthNode.ts index a97ed7197..5a9809cc5 100644 --- a/src/lib/nodes/eth/EthNode.ts +++ b/src/lib/nodes/eth/EthNode.ts @@ -3,6 +3,7 @@ import { HttpProvider } from 'web3-providers-http' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' import { formatEthVersion } from '@/lib/nodes/utils/nodeVersionFormatters' +import type { NodeInfo } from '@/types/wallets' /** * Encapsulates a node. Provides methods to send API-requests @@ -11,7 +12,7 @@ import { formatEthVersion } from '@/lib/nodes/utils/nodeVersionFormatters' export class EthNode extends Node { clientName = '' - constructor(url: { alt_ip?: string; url: string }) { + constructor(url: NodeInfo) { super(url, 'eth', 'node', NODE_LABELS.EthNode) } diff --git a/src/lib/nodes/eth/index.ts b/src/lib/nodes/eth/index.ts index 7190ca843..d9a99b22b 100644 --- a/src/lib/nodes/eth/index.ts +++ b/src/lib/nodes/eth/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { EthClient } from './EthClient' const endpoints = (config.eth.nodes.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/ipfs/IpfsClient.ts b/src/lib/nodes/ipfs/IpfsClient.ts index 306941ab4..15ce9d50a 100644 --- a/src/lib/nodes/ipfs/IpfsClient.ts +++ b/src/lib/nodes/ipfs/IpfsClient.ts @@ -1,6 +1,7 @@ import { isNodeOfflineError } from '@/lib/nodes/utils/errors' import { AxiosProgressEvent } from 'axios' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { IpfsNode, Payload, RequestConfig } from './IpfsNode' import { Client } from '../abstract.client' @@ -12,7 +13,7 @@ import { Client } from '../abstract.client' * is not available at the moment. */ export class IpfsClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('ipfs', 'service', NODE_LABELS.IpfsNode) this.nodes = endpoints.map((endpoint) => new IpfsNode(endpoint, minNodeVersion)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/ipfs/IpfsNode.ts b/src/lib/nodes/ipfs/IpfsNode.ts index fe8f6c704..fdf4314bc 100644 --- a/src/lib/nodes/ipfs/IpfsNode.ts +++ b/src/lib/nodes/ipfs/IpfsNode.ts @@ -3,6 +3,7 @@ import { NodeOfflineError } from '@/lib/nodes/utils/errors' import axios, { AxiosInstance, AxiosProgressEvent, AxiosRequestConfig, ResponseType } from 'axios' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' type FetchNodeInfoResult = { availableSizeInMb: number @@ -32,7 +33,7 @@ export type RequestConfig

= { * to the node and verify is status (online/offline, version, ping, etc.) */ export class IpfsNode extends Node { - constructor(endpoint: { alt_ip?: string; url: string }, minNodeVersion = '0.0.0') { + constructor(endpoint: NodeInfo, minNodeVersion = '0.0.0') { super(endpoint, 'ipfs', 'node', NODE_LABELS.IpfsNode, '', minNodeVersion) } diff --git a/src/lib/nodes/ipfs/index.ts b/src/lib/nodes/ipfs/index.ts index 15343c909..82e16f675 100644 --- a/src/lib/nodes/ipfs/index.ts +++ b/src/lib/nodes/ipfs/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { IpfsClient } from './IpfsClient' const endpoints = (config.adm.services.ipfsNode.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/kly-indexer/KlyIndexer.ts b/src/lib/nodes/kly-indexer/KlyIndexer.ts index 964800b3b..1941dd72c 100644 --- a/src/lib/nodes/kly-indexer/KlyIndexer.ts +++ b/src/lib/nodes/kly-indexer/KlyIndexer.ts @@ -1,6 +1,7 @@ import axios, { AxiosInstance, AxiosRequestConfig } from 'axios' import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' +import type { NodeInfo } from '@/types/wallets' import { Endpoints } from './types/api/endpoints' /** @@ -8,7 +9,7 @@ import { Endpoints } from './types/api/endpoints' * to the node and verify is status (online/offline, version, ping, etc.) */ export class KlyIndexer extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'kly', 'service', NODE_LABELS.KlyIndexer) } diff --git a/src/lib/nodes/kly-indexer/KlyIndexerClient.ts b/src/lib/nodes/kly-indexer/KlyIndexerClient.ts index 163213b02..960eb0cd1 100644 --- a/src/lib/nodes/kly-indexer/KlyIndexerClient.ts +++ b/src/lib/nodes/kly-indexer/KlyIndexerClient.ts @@ -2,6 +2,7 @@ import { AxiosRequestConfig } from 'axios' import { KLY_TOKEN_ID } from '@/lib/klayr' import { NODE_LABELS } from '@/lib/nodes/constants' import { TransactionNotFound } from '@/lib/nodes/utils/errors' +import type { NodeInfo } from '@/types/wallets' import { normalizeTransaction } from './utils' import { TransactionParams } from './types/api/transactions/transaction-params' import { Endpoints } from './types/api/endpoints' @@ -9,7 +10,7 @@ import { KlyIndexer } from './KlyIndexer' import { Client } from '../abstract.client' export class KlyIndexerClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('kly', 'service', NODE_LABELS.KlyIndexer) this.nodes = endpoints.map((endpoint) => new KlyIndexer(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/kly-indexer/index.ts b/src/lib/nodes/kly-indexer/index.ts index 068849267..81dfa272c 100644 --- a/src/lib/nodes/kly-indexer/index.ts +++ b/src/lib/nodes/kly-indexer/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { KlyIndexerClient } from './KlyIndexerClient' const endpoints = (config.kly.services.klyService.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/kly/KlyClient.ts b/src/lib/nodes/kly/KlyClient.ts index 80cb5a200..e23bf0886 100644 --- a/src/lib/nodes/kly/KlyClient.ts +++ b/src/lib/nodes/kly/KlyClient.ts @@ -1,12 +1,13 @@ import { convertBeddowsTokly } from '@klayr/transactions' import { NODE_LABELS } from '@/lib/nodes/constants' import { KLY_TOKEN_ID } from '@/lib/klayr' +import type { NodeInfo } from '@/types/wallets' import { RpcMethod, RpcResults } from './types/api' import { KlyNode } from './KlyNode' import { Client } from '../abstract.client' export class KlyClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('kly', 'node', NODE_LABELS.KlyNode) this.nodes = endpoints.map((endpoint) => new KlyNode(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/kly/KlyNode.ts b/src/lib/nodes/kly/KlyNode.ts index 6c17a7897..8f6a1878f 100644 --- a/src/lib/nodes/kly/KlyNode.ts +++ b/src/lib/nodes/kly/KlyNode.ts @@ -3,6 +3,7 @@ import { Node } from '@/lib/nodes/abstract.node' import { NODE_LABELS } from '@/lib/nodes/constants' import { RpcMethod, RpcResults } from './types/api' import { JSONRPCResponse } from '@/lib/klayr' +import type { NodeInfo } from '@/types/wallets' import { v4 as uuid } from 'uuid' /** @@ -10,7 +11,7 @@ import { v4 as uuid } from 'uuid' * to the node and verify is status (online/offline, version, ping, etc.) */ export class KlyNode extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'kly', 'node', NODE_LABELS.KlyNode) } diff --git a/src/lib/nodes/kly/index.ts b/src/lib/nodes/kly/index.ts index 15d5c74bb..74787d2ca 100644 --- a/src/lib/nodes/kly/index.ts +++ b/src/lib/nodes/kly/index.ts @@ -1,5 +1,5 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' +import type { NodeInfo } from '@/types/wallets' import { KlyClient } from './KlyClient' const endpoints = (config.kly.nodes.list as NodeInfo[]).map((endpoint) => ({ diff --git a/src/lib/nodes/rate-info-service/RateInfoClient.ts b/src/lib/nodes/rate-info-service/RateInfoClient.ts index 4026ed81d..dbd4bb079 100644 --- a/src/lib/nodes/rate-info-service/RateInfoClient.ts +++ b/src/lib/nodes/rate-info-service/RateInfoClient.ts @@ -2,9 +2,10 @@ import { NODE_LABELS } from '@/lib/nodes/constants' import { Client } from '@/lib/nodes/abstract.client' import { RateInfoService } from '@/lib/nodes/rate-info-service/RateInfoService' import { RateInfoResponse } from '@/lib/nodes/rate-info-service/types/RateInfoResponse' +import type { NodeInfo } from '@/types/wallets' export class RateInfoClient extends Client { - constructor(endpoints: { alt_ip?: string; url: string }[] = [], minNodeVersion = '0.0.0') { + constructor(endpoints: NodeInfo[] = [], minNodeVersion = '0.0.0') { super('adm', 'service', NODE_LABELS.RatesInfo) this.nodes = endpoints.map((endpoint) => new RateInfoService(endpoint)) this.minNodeVersion = minNodeVersion diff --git a/src/lib/nodes/rate-info-service/RateInfoService.ts b/src/lib/nodes/rate-info-service/RateInfoService.ts index 8526c98ef..9e5c67b36 100644 --- a/src/lib/nodes/rate-info-service/RateInfoService.ts +++ b/src/lib/nodes/rate-info-service/RateInfoService.ts @@ -5,9 +5,10 @@ import { NODE_LABELS } from '@/lib/nodes/constants' import { RateInfoResponse } from '@/lib/nodes/rate-info-service/types/RateInfoResponse' import { RateHistoryInfoResponse } from '@/lib/nodes/rate-info-service/types/RateHistoryInfoResponse' import { GetHistoryParams } from '@/lib/nodes/rate-info-service/types/GetHistoryParams' +import type { NodeInfo } from '@/types/wallets' export class RateInfoService extends Node { - constructor(endpoint: { alt_ip?: string; url: string }) { + constructor(endpoint: NodeInfo) { super(endpoint, 'adm', 'service', NODE_LABELS.RatesInfo) } diff --git a/src/lib/nodes/rate-info-service/index.ts b/src/lib/nodes/rate-info-service/index.ts index 07bcfb386..1579beffe 100644 --- a/src/lib/nodes/rate-info-service/index.ts +++ b/src/lib/nodes/rate-info-service/index.ts @@ -1,6 +1,6 @@ import config from '@/config' -import { NodeInfo } from '@/types/wallets' import { RateInfoClient } from '@/lib/nodes/rate-info-service/RateInfoClient' +import type { NodeInfo } from '@/types/wallets' const endpoints = (config.adm.services.infoService.list as NodeInfo[]).map((endpoint) => ({ alt_ip: endpoint.alt_ip, From 259d74cfa6be278d00957dc111f98c64c3a070c9 Mon Sep 17 00:00:00 2001 From: Defined Prototype <5364018+graycraft@users.noreply.github.com> Date: Tue, 22 Apr 2025 23:40:19 +0500 Subject: [PATCH 5/7] chore(src/lib/nodes/): rename `this.alt_ip` to `this.altIp` --- src/lib/nodes/abstract.node.ts | 6 +++--- src/lib/nodes/adm/AdmNode.ts | 2 +- src/lib/nodes/btc-indexer/BtcIndexer.ts | 2 +- src/lib/nodes/btc/BtcNode.ts | 2 +- src/lib/nodes/dash/DashNode.ts | 4 ++-- src/lib/nodes/doge-indexer/DogeIndexer.ts | 2 +- src/lib/nodes/doge/DogeNode.ts | 2 +- src/lib/nodes/eth-indexer/EthIndexer.ts | 2 +- src/lib/nodes/eth/EthNode.ts | 2 +- src/lib/nodes/ipfs/IpfsNode.ts | 2 +- src/lib/nodes/kly-indexer/KlyIndexer.ts | 2 +- src/lib/nodes/kly/KlyNode.ts | 2 +- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib/nodes/abstract.node.ts b/src/lib/nodes/abstract.node.ts index e96747d68..b75cc22f3 100644 --- a/src/lib/nodes/abstract.node.ts +++ b/src/lib/nodes/abstract.node.ts @@ -33,7 +33,7 @@ export abstract class Node { /** * Node alternative IP */ - alt_ip?: string + altIp?: string /** * Node base URL */ @@ -123,7 +123,7 @@ export abstract class Node { ) { const { alt_ip, url } = endpoint - this.alt_ip = alt_ip + this.altIp = alt_ip this.url = url this.type = type this.label = label @@ -197,7 +197,7 @@ export abstract class Node { getStatus() { return { - alt_ip: this.alt_ip, + alt_ip: this.altIp, url: this.url, port: this.port, hostname: this.hostname, diff --git a/src/lib/nodes/adm/AdmNode.ts b/src/lib/nodes/adm/AdmNode.ts index ddd671847..370d2b940 100644 --- a/src/lib/nodes/adm/AdmNode.ts +++ b/src/lib/nodes/adm/AdmNode.ts @@ -54,7 +54,7 @@ export class AdmNode extends Node { const { url, method = 'get', payload } = cfg const config: AxiosRequestConfig = { - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url, method: method.toLowerCase(), [method === 'get' ? 'params' : 'data']: diff --git a/src/lib/nodes/btc-indexer/BtcIndexer.ts b/src/lib/nodes/btc-indexer/BtcIndexer.ts index 27f42a796..c83ecdad7 100644 --- a/src/lib/nodes/btc-indexer/BtcIndexer.ts +++ b/src/lib/nodes/btc-indexer/BtcIndexer.ts @@ -41,7 +41,7 @@ export class BtcIndexer extends Node { return this.client .request({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/btc/BtcNode.ts b/src/lib/nodes/btc/BtcNode.ts index e1aa530e2..4f61e9df8 100644 --- a/src/lib/nodes/btc/BtcNode.ts +++ b/src/lib/nodes/btc/BtcNode.ts @@ -54,7 +54,7 @@ export class BtcNode extends Node { return this.client .request>({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, method: 'POST', data: params }) diff --git a/src/lib/nodes/dash/DashNode.ts b/src/lib/nodes/dash/DashNode.ts index 89ad794c1..e48bb850f 100644 --- a/src/lib/nodes/dash/DashNode.ts +++ b/src/lib/nodes/dash/DashNode.ts @@ -52,7 +52,7 @@ export class DashNode extends Node { return this.client .request>({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url: '/', method: 'POST', data: params @@ -75,7 +75,7 @@ export class DashNode extends Node { return this.client .request[]>({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url: '/', method: 'POST', data: params diff --git a/src/lib/nodes/doge-indexer/DogeIndexer.ts b/src/lib/nodes/doge-indexer/DogeIndexer.ts index def158713..7d0208591 100644 --- a/src/lib/nodes/doge-indexer/DogeIndexer.ts +++ b/src/lib/nodes/doge-indexer/DogeIndexer.ts @@ -39,7 +39,7 @@ export class DogeIndexer extends Node { return this.client .request({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/doge/DogeNode.ts b/src/lib/nodes/doge/DogeNode.ts index d47cbf5a6..af0b4ae16 100644 --- a/src/lib/nodes/doge/DogeNode.ts +++ b/src/lib/nodes/doge/DogeNode.ts @@ -56,7 +56,7 @@ export class DogeNode extends Node { return this.client .request>({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url: '/', method: 'POST', data: params diff --git a/src/lib/nodes/eth-indexer/EthIndexer.ts b/src/lib/nodes/eth-indexer/EthIndexer.ts index dad6a75ed..110b7ad03 100644 --- a/src/lib/nodes/eth-indexer/EthIndexer.ts +++ b/src/lib/nodes/eth-indexer/EthIndexer.ts @@ -31,7 +31,7 @@ export class EthIndexer extends Node { return this.client .request({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/eth/EthNode.ts b/src/lib/nodes/eth/EthNode.ts index 5a9809cc5..f7f9c7e14 100644 --- a/src/lib/nodes/eth/EthNode.ts +++ b/src/lib/nodes/eth/EthNode.ts @@ -17,7 +17,7 @@ export class EthNode extends Node { } protected buildClient(): Web3Eth { - return new Web3Eth(new HttpProvider(this.preferAltIp ? (this.alt_ip as string) : this.url)) + return new Web3Eth(new HttpProvider(this.preferAltIp ? (this.altIp as string) : this.url)) } protected async checkHealth() { diff --git a/src/lib/nodes/ipfs/IpfsNode.ts b/src/lib/nodes/ipfs/IpfsNode.ts index fdf4314bc..ffdd4d9c1 100644 --- a/src/lib/nodes/ipfs/IpfsNode.ts +++ b/src/lib/nodes/ipfs/IpfsNode.ts @@ -54,7 +54,7 @@ export class IpfsNode extends Node { const { url, headers, method = 'get', payload, onUploadProgress } = cfg const config: AxiosRequestConfig = { - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url, method: method.toLowerCase(), headers, diff --git a/src/lib/nodes/kly-indexer/KlyIndexer.ts b/src/lib/nodes/kly-indexer/KlyIndexer.ts index 1941dd72c..a5a909f55 100644 --- a/src/lib/nodes/kly-indexer/KlyIndexer.ts +++ b/src/lib/nodes/kly-indexer/KlyIndexer.ts @@ -32,7 +32,7 @@ export class KlyIndexer extends Node { return this.client .request({ ...requestConfig, - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, url: path, method, params: method === 'GET' ? params : undefined, diff --git a/src/lib/nodes/kly/KlyNode.ts b/src/lib/nodes/kly/KlyNode.ts index 8f6a1878f..3c38b6fdc 100644 --- a/src/lib/nodes/kly/KlyNode.ts +++ b/src/lib/nodes/kly/KlyNode.ts @@ -30,7 +30,7 @@ export class KlyNode extends Node { ): Promise { return this.client .post>('/rpc', { - baseURL: this.preferAltIp ? this.alt_ip : this.url, + baseURL: this.preferAltIp ? this.altIp : this.url, jsonrpc: '2.0', id: uuid(), method, From 9a5e3afff024e4687eba55a6cd07ae42eb6bcb58 Mon Sep 17 00:00:00 2001 From: Defined Prototype <5364018+graycraft@users.noreply.github.com> Date: Mon, 12 May 2025 21:06:38 +0500 Subject: [PATCH 6/7] refactor(src/lib/nodes/): remove mapping of endpoint properties --- src/lib/nodes/adm/index.ts | 6 ++---- src/lib/nodes/btc-indexer/index.ts | 6 ++---- src/lib/nodes/btc/index.ts | 6 ++---- src/lib/nodes/dash/index.ts | 6 ++---- src/lib/nodes/doge-indexer/index.ts | 6 ++---- src/lib/nodes/doge/index.ts | 6 ++---- src/lib/nodes/eth-indexer/index.ts | 6 ++---- src/lib/nodes/eth/index.ts | 6 ++---- src/lib/nodes/ipfs/index.ts | 6 ++---- src/lib/nodes/kly-indexer/index.ts | 6 ++---- src/lib/nodes/kly/index.ts | 6 ++---- src/lib/nodes/rate-info-service/index.ts | 6 ++---- 12 files changed, 24 insertions(+), 48 deletions(-) diff --git a/src/lib/nodes/adm/index.ts b/src/lib/nodes/adm/index.ts index f0565d0e4..bc2fba629 100644 --- a/src/lib/nodes/adm/index.ts +++ b/src/lib/nodes/adm/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { AdmClient } from './AdmClient' -const endpoints = (config.adm.nodes.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.adm.nodes.list as NodeInfo[] + export const adm = new AdmClient(endpoints, config.adm.nodes.minVersion) export default adm diff --git a/src/lib/nodes/btc-indexer/index.ts b/src/lib/nodes/btc-indexer/index.ts index 03d88262e..6241994c6 100644 --- a/src/lib/nodes/btc-indexer/index.ts +++ b/src/lib/nodes/btc-indexer/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { BtcIndexerClient } from './BtcIndexerClient' -const endpoints = (config.btc.services.btcIndexer.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.btc.services.btcIndexer.list as NodeInfo[] + export const btcIndexer = new BtcIndexerClient(endpoints) export default btcIndexer diff --git a/src/lib/nodes/btc/index.ts b/src/lib/nodes/btc/index.ts index 678422682..231351a48 100644 --- a/src/lib/nodes/btc/index.ts +++ b/src/lib/nodes/btc/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { BtcClient } from './BtcClient' -const endpoints = (config.btc.nodes.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.btc.nodes.list as NodeInfo[] + export const btc = new BtcClient(endpoints) export default btc diff --git a/src/lib/nodes/dash/index.ts b/src/lib/nodes/dash/index.ts index 960525399..5ae703ecc 100644 --- a/src/lib/nodes/dash/index.ts +++ b/src/lib/nodes/dash/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { DashClient } from './DashClient' -const endpoints = (config.dash.nodes.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.dash.nodes.list as NodeInfo[] + export const dash = new DashClient(endpoints) export default dash diff --git a/src/lib/nodes/doge-indexer/index.ts b/src/lib/nodes/doge-indexer/index.ts index e15150504..376a559f0 100644 --- a/src/lib/nodes/doge-indexer/index.ts +++ b/src/lib/nodes/doge-indexer/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { DogeIndexerClient } from './DogeIndexerClient' -const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.doge.nodes.list as NodeInfo[] + export const dogeIndexer = new DogeIndexerClient(endpoints) export default dogeIndexer diff --git a/src/lib/nodes/doge/index.ts b/src/lib/nodes/doge/index.ts index 0de2d09de..d14420456 100644 --- a/src/lib/nodes/doge/index.ts +++ b/src/lib/nodes/doge/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { DogeClient } from './DogeClient' -const endpoints = (config.doge.nodes.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.doge.nodes.list as NodeInfo[] + export const doge = new DogeClient(endpoints) export default doge diff --git a/src/lib/nodes/eth-indexer/index.ts b/src/lib/nodes/eth-indexer/index.ts index cc6fee07c..0b047552d 100644 --- a/src/lib/nodes/eth-indexer/index.ts +++ b/src/lib/nodes/eth-indexer/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { EthIndexerClient } from './EthIndexerClient' -const endpoints = (config.eth.services.ethIndexer.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.eth.services.ethIndexer.list as NodeInfo[] + export const ethIndexer = new EthIndexerClient(endpoints) export default ethIndexer diff --git a/src/lib/nodes/eth/index.ts b/src/lib/nodes/eth/index.ts index d9a99b22b..9bac6c2ec 100644 --- a/src/lib/nodes/eth/index.ts +++ b/src/lib/nodes/eth/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { EthClient } from './EthClient' -const endpoints = (config.eth.nodes.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.eth.nodes.list as NodeInfo[] + export const eth = new EthClient(endpoints) export default eth diff --git a/src/lib/nodes/ipfs/index.ts b/src/lib/nodes/ipfs/index.ts index 82e16f675..507a1c29b 100644 --- a/src/lib/nodes/ipfs/index.ts +++ b/src/lib/nodes/ipfs/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { IpfsClient } from './IpfsClient' -const endpoints = (config.adm.services.ipfsNode.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.adm.services.ipfsNode.list as NodeInfo[] + export const ipfs = new IpfsClient(endpoints, config.adm.services.minVersion) export default ipfs diff --git a/src/lib/nodes/kly-indexer/index.ts b/src/lib/nodes/kly-indexer/index.ts index 81dfa272c..2617c7e41 100644 --- a/src/lib/nodes/kly-indexer/index.ts +++ b/src/lib/nodes/kly-indexer/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { KlyIndexerClient } from './KlyIndexerClient' -const endpoints = (config.kly.services.klyService.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.kly.services.klyService.list as NodeInfo[] + export const klyIndexer = new KlyIndexerClient(endpoints) export default klyIndexer diff --git a/src/lib/nodes/kly/index.ts b/src/lib/nodes/kly/index.ts index 74787d2ca..e67cda5f9 100644 --- a/src/lib/nodes/kly/index.ts +++ b/src/lib/nodes/kly/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import type { NodeInfo } from '@/types/wallets' import { KlyClient } from './KlyClient' -const endpoints = (config.kly.nodes.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.kly.nodes.list as NodeInfo[] + export const kly = new KlyClient(endpoints) export default kly diff --git a/src/lib/nodes/rate-info-service/index.ts b/src/lib/nodes/rate-info-service/index.ts index 1579beffe..a9a7c1506 100644 --- a/src/lib/nodes/rate-info-service/index.ts +++ b/src/lib/nodes/rate-info-service/index.ts @@ -2,10 +2,8 @@ import config from '@/config' import { RateInfoClient } from '@/lib/nodes/rate-info-service/RateInfoClient' import type { NodeInfo } from '@/types/wallets' -const endpoints = (config.adm.services.infoService.list as NodeInfo[]).map((endpoint) => ({ - alt_ip: endpoint.alt_ip, - url: endpoint.url -})) +const endpoints = config.adm.services.infoService.list as NodeInfo[] + export const rateInfoClient = new RateInfoClient(endpoints) export default rateInfoClient From 8b50ec259e32c61770fc118c9baf94695c0a8fdd Mon Sep 17 00:00:00 2001 From: Defined Prototype <5364018+graycraft@users.noreply.github.com> Date: Tue, 13 May 2025 21:20:10 +0500 Subject: [PATCH 7/7] fix(src/lib/nodes/): add `baseURL` detection for `get` requests --- src/lib/nodes/btc-indexer/BtcIndexer.ts | 10 +++++++--- src/lib/nodes/doge-indexer/DogeIndexer.ts | 6 +++++- src/lib/nodes/rate-info-service/RateInfoService.ts | 7 ++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/lib/nodes/btc-indexer/BtcIndexer.ts b/src/lib/nodes/btc-indexer/BtcIndexer.ts index c83ecdad7..f1088a9bb 100644 --- a/src/lib/nodes/btc-indexer/BtcIndexer.ts +++ b/src/lib/nodes/btc-indexer/BtcIndexer.ts @@ -19,9 +19,13 @@ export class BtcIndexer extends Node { protected async checkHealth() { const time = Date.now() - const blockNumber = await this.client.get('/blocks/tip/height').then((res) => { - return Number(res.data) || 0 - }) + const blockNumber = await this.client + .get('/blocks/tip/height', { + baseURL: this.preferAltIp ? this.altIp : this.url + }) + .then((res) => { + return Number(res.data) || 0 + }) return { height: Number(blockNumber), diff --git a/src/lib/nodes/doge-indexer/DogeIndexer.ts b/src/lib/nodes/doge-indexer/DogeIndexer.ts index 7d0208591..684b63fc8 100644 --- a/src/lib/nodes/doge-indexer/DogeIndexer.ts +++ b/src/lib/nodes/doge-indexer/DogeIndexer.ts @@ -19,7 +19,11 @@ export class DogeIndexer extends Node { protected async checkHealth() { const time = Date.now() - const height = await this.client.get('/api/status').then((res) => res.data.info.blocks) + const height = await this.client + .get('/api/status', { + baseURL: this.preferAltIp ? this.altIp : this.url + }) + .then((res) => res.data.info.blocks) return { height, diff --git a/src/lib/nodes/rate-info-service/RateInfoService.ts b/src/lib/nodes/rate-info-service/RateInfoService.ts index 9e5c67b36..f70d34131 100644 --- a/src/lib/nodes/rate-info-service/RateInfoService.ts +++ b/src/lib/nodes/rate-info-service/RateInfoService.ts @@ -19,14 +19,19 @@ export class RateInfoService extends Node { } async getAllRates(): Promise { - const response = await this.client.get('/get') + const response = await this.client.get('/get', { + baseURL: this.preferAltIp ? this.altIp : this.url + }) + return response.data } async getHistory(options: GetHistoryParams) { const response = await this.client.get(`/getHistory`, { + baseURL: this.preferAltIp ? this.altIp : this.url, params: options }) + return response.data }