diff --git a/node/coinstacks/bitcoin/api/src/app.ts b/node/coinstacks/bitcoin/api/src/app.ts index a20c48082..29fecffa5 100644 --- a/node/coinstacks/bitcoin/api/src/app.ts +++ b/node/coinstacks/bitcoin/api/src/app.ts @@ -15,9 +15,7 @@ const INDEXER_WS_URL = process.env.INDEXER_WS_URL const INDEXER_API_KEY = process.env.INDEXER_API_KEY if (!INDEXER_WS_URL) throw new Error('INDEXER_WS_URL env var not set') - -const IS_LIQUIFY = INDEXER_WS_URL.toLowerCase().includes('liquify') -const IS_NOWNODES = INDEXER_WS_URL.toLowerCase().includes('nownodes') +if (!INDEXER_API_KEY) throw new Error('INDEXER_API_KEY env var not set') const logger = new Logger({ namespace: ['unchained', 'coinstacks', 'bitcoin', 'api'], @@ -70,15 +68,12 @@ const transactionHandler: TransactionHandler = async (bloc const registry = new Registry({ addressFormatter: formatAddress, blockHandler, transactionHandler }) -const wsUrl = INDEXER_API_KEY && IS_LIQUIFY ? `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` : INDEXER_WS_URL -const apiKey = INDEXER_API_KEY && IS_NOWNODES ? INDEXER_API_KEY : undefined - const blockbook = new WebsocketClient( - wsUrl, + INDEXER_WS_URL, { + apiKey: INDEXER_API_KEY, blockHandler: registry.onBlock.bind(registry), transactionHandler: registry.onTransaction.bind(registry), - apiKey, }, { resetInterval: 15 * 60 * 1000 } // 15 minutes ) diff --git a/node/coinstacks/bitcoin/api/src/controller.ts b/node/coinstacks/bitcoin/api/src/controller.ts index 31b2552fc..6669a9a63 100644 --- a/node/coinstacks/bitcoin/api/src/controller.ts +++ b/node/coinstacks/bitcoin/api/src/controller.ts @@ -23,11 +23,7 @@ export const logger = new Logger({ level: process.env.LOG_LEVEL, }) -const httpURL = `${INDEXER_URL}/api=${INDEXER_API_KEY}` -const wsURL = `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` -const rpcUrl = `${RPC_URL}/api=${RPC_API_KEY}` - -const blockbook = new Blockbook({ httpURL, wsURL, logger }) +const blockbook = new Blockbook({ httpURL: INDEXER_URL, wsURL: INDEXER_WS_URL, apiKey: INDEXER_API_KEY, logger }) const isXpub = (pubkey: string): boolean => { return pubkey.startsWith('xpub') || pubkey.startsWith('ypub') || pubkey.startsWith('zpub') @@ -41,7 +37,8 @@ export const formatAddress = (address: string): string => { export const service = new Service({ blockbook, - rpcUrl, + rpcUrl: RPC_URL, + rpcApiKey: RPC_API_KEY, isXpub, addressFormatter: formatAddress, }) diff --git a/node/coinstacks/bitcoin/sample.env b/node/coinstacks/bitcoin/sample.env index 037171b46..2bc71d268 100644 --- a/node/coinstacks/bitcoin/sample.env +++ b/node/coinstacks/bitcoin/sample.env @@ -3,8 +3,8 @@ INDEXER_API_KEY= RPC_API_KEY= # ENVIRONMENT VARIABLES -INDEXER_URL=https://gateway.liquify.com -INDEXER_WS_URL=wss://gateway.liquify.com +INDEXER_URL=https://btcbook.nownodes.io +INDEXER_WS_URL=wss://btcbook.nownodes.io/wss LOG_LEVEL=debug NETWORK=mainnet -RPC_URL=https://gateway.liquify.com \ No newline at end of file +RPC_URL=https://btc.nownodes.io \ No newline at end of file diff --git a/node/coinstacks/bitcoincash/api/src/app.ts b/node/coinstacks/bitcoincash/api/src/app.ts index f20efbb03..48022e1f1 100644 --- a/node/coinstacks/bitcoincash/api/src/app.ts +++ b/node/coinstacks/bitcoincash/api/src/app.ts @@ -15,9 +15,7 @@ const INDEXER_WS_URL = process.env.INDEXER_WS_URL const INDEXER_API_KEY = process.env.INDEXER_API_KEY if (!INDEXER_WS_URL) throw new Error('INDEXER_WS_URL env var not set') - -const IS_LIQUIFY = INDEXER_WS_URL.toLowerCase().includes('liquify') -const IS_NOWNODES = INDEXER_WS_URL.toLowerCase().includes('nownodes') +if (!INDEXER_API_KEY) throw new Error('INDEXER_API_KEY env var not set') const logger = new Logger({ namespace: ['unchained', 'coinstacks', 'bitcoincash', 'api'], @@ -72,13 +70,10 @@ const transactionHandler: TransactionHandler = async (bloc const registry = new Registry({ addressFormatter: formatAddress, blockHandler, transactionHandler }) -const wsUrl = INDEXER_API_KEY && IS_LIQUIFY ? `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` : INDEXER_WS_URL -const apiKey = INDEXER_API_KEY && IS_NOWNODES ? INDEXER_API_KEY : undefined - const blockbook = new WebsocketClient( - wsUrl, + INDEXER_WS_URL, { - apiKey, + apiKey: INDEXER_API_KEY, blockHandler: registry.onBlock.bind(registry), transactionHandler: registry.onTransaction.bind(registry), }, diff --git a/node/coinstacks/bitcoincash/api/src/controller.ts b/node/coinstacks/bitcoincash/api/src/controller.ts index b1c834960..62979e0f2 100644 --- a/node/coinstacks/bitcoincash/api/src/controller.ts +++ b/node/coinstacks/bitcoincash/api/src/controller.ts @@ -23,11 +23,7 @@ export const logger = new Logger({ level: process.env.LOG_LEVEL, }) -const httpURL = `${INDEXER_URL}/api=${INDEXER_API_KEY}` -const wsURL = `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` -const rpcUrl = `${RPC_URL}/api=${RPC_API_KEY}` - -const blockbook = new Blockbook({ httpURL, wsURL, logger }) +const blockbook = new Blockbook({ httpURL: INDEXER_URL, wsURL: INDEXER_WS_URL, apiKey: INDEXER_API_KEY, logger }) const isXpub = (pubkey: string): boolean => { return pubkey.startsWith('xpub') || pubkey.startsWith('ypub') || pubkey.startsWith('zpub') @@ -51,7 +47,8 @@ export const formatAddress = (address: string): string => { export const service = new Service({ blockbook, - rpcUrl, + rpcUrl: RPC_URL, + rpcApiKey: RPC_API_KEY, isXpub, addressFormatter: formatAddress, }) diff --git a/node/coinstacks/bitcoincash/sample.env b/node/coinstacks/bitcoincash/sample.env index 037171b46..7b7fb7bfa 100644 --- a/node/coinstacks/bitcoincash/sample.env +++ b/node/coinstacks/bitcoincash/sample.env @@ -3,8 +3,8 @@ INDEXER_API_KEY= RPC_API_KEY= # ENVIRONMENT VARIABLES -INDEXER_URL=https://gateway.liquify.com -INDEXER_WS_URL=wss://gateway.liquify.com +INDEXER_URL=https://bchbook.nownodes.io +INDEXER_WS_URL=wss://bchbook.nownodes.io/wss LOG_LEVEL=debug NETWORK=mainnet -RPC_URL=https://gateway.liquify.com \ No newline at end of file +RPC_URL=https://bch.nownodes.io \ No newline at end of file diff --git a/node/coinstacks/common/api/src/middleware.ts b/node/coinstacks/common/api/src/middleware.ts index f0f8962d0..96a8407ff 100644 --- a/node/coinstacks/common/api/src/middleware.ts +++ b/node/coinstacks/common/api/src/middleware.ts @@ -6,12 +6,10 @@ import cors from 'cors' import { ValidateError } from 'tsoa' import { ApiError, NotFoundError } from '.' -export function errorHandler(err: Error, req: Request, res: Response, next: NextFunction): Response | void { +export function errorHandler(err: Error, _: Request, res: Response, next: NextFunction): Response | void { if (err instanceof ValidateError) { const e = err as ValidateError - console.warn(`Caught Validation Error for ${req.path}:`, e.fields) - return res.status(422).json({ message: 'Validation Failed', details: e.fields, diff --git a/node/coinstacks/dogecoin/api/src/app.ts b/node/coinstacks/dogecoin/api/src/app.ts index 546f22fe1..41e5b9d7d 100644 --- a/node/coinstacks/dogecoin/api/src/app.ts +++ b/node/coinstacks/dogecoin/api/src/app.ts @@ -15,9 +15,7 @@ const INDEXER_WS_URL = process.env.INDEXER_WS_URL const INDEXER_API_KEY = process.env.INDEXER_API_KEY if (!INDEXER_WS_URL) throw new Error('INDEXER_WS_URL env var not set') - -const IS_LIQUIFY = INDEXER_WS_URL.toLowerCase().includes('liquify') -const IS_NOWNODES = INDEXER_WS_URL.toLowerCase().includes('nownodes') +if (!INDEXER_API_KEY) throw new Error('INDEXER_API_KEY env var not set') const logger = new Logger({ namespace: ['unchained', 'coinstacks', 'dogecoin', 'api'], @@ -72,13 +70,10 @@ const transactionHandler: TransactionHandler = async (bloc const registry = new Registry({ addressFormatter: formatAddress, blockHandler, transactionHandler }) -const wsUrl = INDEXER_API_KEY && IS_LIQUIFY ? `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` : INDEXER_WS_URL -const apiKey = INDEXER_API_KEY && IS_NOWNODES ? INDEXER_API_KEY : undefined - const blockbook = new WebsocketClient( - wsUrl, + INDEXER_WS_URL, { - apiKey, + apiKey: INDEXER_API_KEY, blockHandler: registry.onBlock.bind(registry), transactionHandler: registry.onTransaction.bind(registry), }, diff --git a/node/coinstacks/dogecoin/api/src/controller.ts b/node/coinstacks/dogecoin/api/src/controller.ts index 77ef27546..d9b2fbd5e 100644 --- a/node/coinstacks/dogecoin/api/src/controller.ts +++ b/node/coinstacks/dogecoin/api/src/controller.ts @@ -22,11 +22,7 @@ export const logger = new Logger({ level: process.env.LOG_LEVEL, }) -const httpURL = `${INDEXER_URL}/api=${INDEXER_API_KEY}` -const wsURL = `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` -const rpcUrl = `${RPC_URL}/api=${RPC_API_KEY}` - -const blockbook = new Blockbook({ httpURL, wsURL, logger }) +const blockbook = new Blockbook({ httpURL: INDEXER_URL, wsURL: INDEXER_WS_URL, apiKey: INDEXER_API_KEY, logger }) const isXpub = (pubkey: string): boolean => { return pubkey.startsWith('dgub') @@ -36,7 +32,8 @@ export const formatAddress = (address: string): string => address export const service = new Service({ blockbook, - rpcUrl, + rpcUrl: RPC_URL, + rpcApiKey: RPC_API_KEY, isXpub, addressFormatter: formatAddress, }) diff --git a/node/coinstacks/dogecoin/sample.env b/node/coinstacks/dogecoin/sample.env index 037171b46..714330ca7 100644 --- a/node/coinstacks/dogecoin/sample.env +++ b/node/coinstacks/dogecoin/sample.env @@ -3,8 +3,8 @@ INDEXER_API_KEY= RPC_API_KEY= # ENVIRONMENT VARIABLES -INDEXER_URL=https://gateway.liquify.com -INDEXER_WS_URL=wss://gateway.liquify.com +INDEXER_URL=https://dogebook.nownodes.io +INDEXER_WS_URL=wss://dogebook.nownodes.io/wss LOG_LEVEL=debug NETWORK=mainnet -RPC_URL=https://gateway.liquify.com \ No newline at end of file +RPC_URL=https://doge.nownodes.io \ No newline at end of file diff --git a/node/coinstacks/litecoin/api/src/app.ts b/node/coinstacks/litecoin/api/src/app.ts index 3dc2fcf3f..85f889cae 100644 --- a/node/coinstacks/litecoin/api/src/app.ts +++ b/node/coinstacks/litecoin/api/src/app.ts @@ -15,9 +15,7 @@ const INDEXER_WS_URL = process.env.INDEXER_WS_URL const INDEXER_API_KEY = process.env.INDEXER_API_KEY if (!INDEXER_WS_URL) throw new Error('INDEXER_WS_URL env var not set') - -const IS_LIQUIFY = INDEXER_WS_URL.toLowerCase().includes('liquify') -const IS_NOWNODES = INDEXER_WS_URL.toLowerCase().includes('nownodes') +if (!INDEXER_API_KEY) throw new Error('INDEXER_API_KEY env var not set') const logger = new Logger({ namespace: ['unchained', 'coinstacks', 'litecoin', 'api'], @@ -72,13 +70,10 @@ const transactionHandler: TransactionHandler = async (bloc const registry = new Registry({ addressFormatter: formatAddress, blockHandler, transactionHandler }) -const wsUrl = INDEXER_API_KEY && IS_LIQUIFY ? `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` : INDEXER_WS_URL -const apiKey = INDEXER_API_KEY && IS_NOWNODES ? INDEXER_API_KEY : undefined - const blockbook = new WebsocketClient( - wsUrl, + INDEXER_WS_URL, { - apiKey, + apiKey: INDEXER_API_KEY, blockHandler: registry.onBlock.bind(registry), transactionHandler: registry.onTransaction.bind(registry), }, diff --git a/node/coinstacks/litecoin/api/src/controller.ts b/node/coinstacks/litecoin/api/src/controller.ts index bc49e5647..f371917b3 100644 --- a/node/coinstacks/litecoin/api/src/controller.ts +++ b/node/coinstacks/litecoin/api/src/controller.ts @@ -23,11 +23,7 @@ export const logger = new Logger({ level: process.env.LOG_LEVEL, }) -const httpURL = `${INDEXER_URL}/api=${INDEXER_API_KEY}` -const wsURL = `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` -const rpcUrl = `${RPC_URL}/api=${RPC_API_KEY}` - -const blockbook = new Blockbook({ httpURL, wsURL, logger }) +const blockbook = new Blockbook({ httpURL: INDEXER_URL, wsURL: INDEXER_WS_URL, apiKey: INDEXER_API_KEY, logger }) const isXpub = (pubkey: string): boolean => { return pubkey.startsWith('Ltub') || pubkey.startsWith('Mtub') || pubkey.startsWith('zpub') @@ -41,7 +37,8 @@ export const formatAddress = (address: string): string => { export const service = new Service({ blockbook, - rpcUrl, + rpcUrl: RPC_URL, + rpcApiKey: RPC_API_KEY, isXpub, addressFormatter: formatAddress, }) diff --git a/node/coinstacks/litecoin/sample.env b/node/coinstacks/litecoin/sample.env index 037171b46..d7db3f122 100644 --- a/node/coinstacks/litecoin/sample.env +++ b/node/coinstacks/litecoin/sample.env @@ -3,8 +3,8 @@ INDEXER_API_KEY= RPC_API_KEY= # ENVIRONMENT VARIABLES -INDEXER_URL=https://gateway.liquify.com -INDEXER_WS_URL=wss://gateway.liquify.com +INDEXER_URL=https://ltcbook.nownodes.io +INDEXER_WS_URL=wss://ltcbook.nownodes.io/wss LOG_LEVEL=debug NETWORK=mainnet -RPC_URL=https://gateway.liquify.com \ No newline at end of file +RPC_URL=https://ltc.nownodes.io \ No newline at end of file diff --git a/node/coinstacks/zcash/api/src/app.ts b/node/coinstacks/zcash/api/src/app.ts index 3fe79107f..034011f32 100644 --- a/node/coinstacks/zcash/api/src/app.ts +++ b/node/coinstacks/zcash/api/src/app.ts @@ -69,8 +69,9 @@ const transactionHandler: TransactionHandler = async (bloc const registry = new Registry({ addressFormatter: formatAddress, blockHandler, transactionHandler }) const blockbook = new WebsocketClient( - `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}`, + INDEXER_WS_URL, { + apiKey: INDEXER_API_KEY, blockHandler: registry.onBlock.bind(registry), transactionHandler: registry.onTransaction.bind(registry), }, diff --git a/node/coinstacks/zcash/api/src/controller.ts b/node/coinstacks/zcash/api/src/controller.ts index 734f25139..c034be310 100644 --- a/node/coinstacks/zcash/api/src/controller.ts +++ b/node/coinstacks/zcash/api/src/controller.ts @@ -22,11 +22,7 @@ export const logger = new Logger({ level: process.env.LOG_LEVEL, }) -const httpURL = `${INDEXER_URL}/api=${INDEXER_API_KEY}` -const wsURL = `${INDEXER_WS_URL}/api=${INDEXER_API_KEY}` -const rpcUrl = `${RPC_URL}/api=${RPC_API_KEY}` - -const blockbook = new Blockbook({ httpURL, wsURL, logger }) +const blockbook = new Blockbook({ httpURL: INDEXER_URL, wsURL: INDEXER_WS_URL, apiKey: INDEXER_API_KEY, logger }) const isXpub = (pubkey: string): boolean => { return pubkey.startsWith('xpub') @@ -36,7 +32,8 @@ export const formatAddress = (address: string): string => address export const service = new Service({ blockbook, - rpcUrl, + rpcUrl: RPC_URL, + rpcApiKey: RPC_API_KEY, isXpub, addressFormatter: formatAddress, }) diff --git a/node/coinstacks/zcash/sample.env b/node/coinstacks/zcash/sample.env index 037171b46..f962d2715 100644 --- a/node/coinstacks/zcash/sample.env +++ b/node/coinstacks/zcash/sample.env @@ -3,8 +3,8 @@ INDEXER_API_KEY= RPC_API_KEY= # ENVIRONMENT VARIABLES -INDEXER_URL=https://gateway.liquify.com -INDEXER_WS_URL=wss://gateway.liquify.com +INDEXER_URL=https://zecbook.nownodes.io +INDEXER_WS_URL=wss://zecbook.nownodes.io/wss LOG_LEVEL=debug NETWORK=mainnet -RPC_URL=https://gateway.liquify.com \ No newline at end of file +RPC_URL=https://zec.nownodes.io \ No newline at end of file diff --git a/node/packages/blockbook/src/controller.ts b/node/packages/blockbook/src/controller.ts index 0f6d166fa..d77236a69 100644 --- a/node/packages/blockbook/src/controller.ts +++ b/node/packages/blockbook/src/controller.ts @@ -5,23 +5,15 @@ import type { Address, BalanceHistory, Block, BlockbookArgs, BlockIndex, Info, S import { ApiError } from './models' import { Logger } from '@shapeshiftoss/logger' -const defaultArgs: BlockbookArgs = { - httpURL: 'https://indexer.ethereum.shapeshift.com', - wsURL: 'wss://indexer.ethereum.shapeshift.com/websocket', - logger: new Logger({ namespace: ['unchained', 'blockbook'], level: process.env.LOG_LEVEL }), -} - @Route('api/v2') @Tags('v2') export class Blockbook extends Controller { instance: AxiosInstance - wsURL: string logger: Logger - constructor(args: BlockbookArgs = defaultArgs, timeout?: number, retries = 3) { + constructor(args: BlockbookArgs = { httpURL: '', wsURL: '', logger: new Logger() }, timeout?: number, retries = 3) { super() this.logger = args.logger.child({ namespace: ['blockbook'] }) - this.wsURL = args.apiKey ? `${args.wsURL}/${args.apiKey}` : args.wsURL this.instance = axios.create({ timeout: timeout ?? 10000, baseURL: args.httpURL, diff --git a/node/packages/websocket/src/websocket.ts b/node/packages/websocket/src/websocket.ts index d5008e9e5..7ace6f913 100644 --- a/node/packages/websocket/src/websocket.ts +++ b/node/packages/websocket/src/websocket.ts @@ -60,7 +60,7 @@ export abstract class BaseWebsocketClient { this.logger.error({ error, fn: 'ws.onerror' }, 'websocket error') } this.socket.onclose = ({ code, reason }) => { - this.logger.error({ code, reason, fn: 'ws.close' }, 'websocket closed') + this.logger.debug({ code, reason, fn: 'ws.close' }, 'websocket closed') this.close(code) } this.socket.onmessage = (msg) => this.onMessage(msg)