UNPKG

blockbook-client

Version:

Client for interacting with Trezor's blockbook API

103 lines (102 loc) 4.99 kB
import { AxiosRequestConfig } from 'axios'; import { Logger } from '@bitaccess/ts-common'; import * as t from 'io-ts'; import WebSocket from 'ws'; import { GetBlockOptions, SubscribeAddressesEvent, SubscribeNewBlockEvent } from './types/common'; import { XpubDetailsBasic, XpubDetailsTokens, XpubDetailsTokenBalances, XpubDetailsTxids, XpubDetailsTxs, BlockbookConfig, SystemInfo, GetAddressDetailsOptions, UtxoDetails, UtxoDetailsXpub, GetUtxosOptions, GetXpubDetailsOptions, SystemInfoWs } from './types'; export declare abstract class BaseBlockbook<NormalizedTx, SpecificTx, BlockInfo, AddressDetailsBasic, AddressDetailsTokens, AddressDetailsTokenBalances, AddressDetailsTxids, AddressDetailsTxs> { private normalizedTxCodec; private specificTxCodec; private blockInfoCodec; private addressDetailsCodecs; nodes: string[]; disableTypeValidation: boolean; requestTimeoutMs: number; reconnectDelayMs: number; ws: WebSocket; wsConnected: boolean; wsConnectedNode?: string; logger: Logger; debug: boolean; private requestCounter; private wsPendingConnectPromise?; private pingIntervalId; private pendingWsRequests; private subscriptionIdToData; private subscribtionMethodToId; static WS_NORMAL_CLOSURE_CODES: number[]; constructor(config: BlockbookConfig, normalizedTxCodec: t.Type<NormalizedTx>, specificTxCodec: t.Type<SpecificTx>, blockInfoCodec: t.Type<BlockInfo>, addressDetailsCodecs: { basic: t.Type<AddressDetailsBasic>; tokens: t.Type<AddressDetailsTokens>; tokenBalances: t.Type<AddressDetailsTokenBalances>; txids: t.Type<AddressDetailsTxids>; txs: t.Type<AddressDetailsTxs>; }); doAssertType<T>(codec: t.Type<T, any, unknown>, value: unknown, ...rest: any[]): T; private pickNode; httpRequest(method: 'GET' | 'POST', path: string, params?: object, body?: AxiosRequestConfig['data'], options?: Partial<AxiosRequestConfig>): Promise<any>; wsRequest(method: string, params?: object, idOption?: string): Promise<any>; subscribe(method: string, params: object, callback: (result: any) => void | Promise<void>): Promise<any>; unsubscribe(method: string): Promise<any>; private reconnect; private rejectAllPendingRequests; connect(): Promise<string>; disconnect(): Promise<void>; assertWsConnected(msg?: string): void; getInfo(): Promise<SystemInfoWs>; getStatus(): Promise<SystemInfo>; getBestBlock(): Promise<{ height: number; hash: string; }>; getBlockHash(blockNumber: number): Promise<string>; getTx(txid: string): Promise<NormalizedTx>; getTxSpecific(txid: string): Promise<SpecificTx>; getAddressDetails(address: string, options: GetAddressDetailsOptions & { details: 'basic'; }): Promise<AddressDetailsBasic>; getAddressDetails(address: string, options: GetAddressDetailsOptions & { details: 'tokens'; }): Promise<AddressDetailsTokens>; getAddressDetails(address: string, options: GetAddressDetailsOptions & { details: 'tokenBalances'; }): Promise<AddressDetailsTokenBalances>; getAddressDetails(address: string, options?: (GetAddressDetailsOptions & { details: 'txids' | undefined; }) | Omit<GetAddressDetailsOptions, 'details'>): Promise<AddressDetailsTxids>; getAddressDetails(address: string, options: GetAddressDetailsOptions & { details: 'txs'; }): Promise<AddressDetailsTxs>; getXpubDetails(xpub: string, options: GetXpubDetailsOptions & { details: 'basic'; }): Promise<XpubDetailsBasic>; getXpubDetails(xpub: string, options: GetXpubDetailsOptions & { details: 'tokens'; }): Promise<XpubDetailsTokens>; getXpubDetails(xpub: string, options: GetXpubDetailsOptions & { details: 'tokenBalances'; }): Promise<XpubDetailsTokenBalances>; getXpubDetails(xpub: string, options?: (GetXpubDetailsOptions & { details: 'txids' | undefined; }) | Omit<GetXpubDetailsOptions, 'details'>): Promise<XpubDetailsTxids>; getXpubDetails(xpub: string, options: GetXpubDetailsOptions & { details: 'txs'; }): Promise<XpubDetailsTxs>; getUtxosForAddress(address: string, options?: GetUtxosOptions): Promise<UtxoDetails[]>; getUtxosForXpub(xpub: string, options?: GetUtxosOptions): Promise<UtxoDetailsXpub[]>; getBlock(block: string | number, options?: GetBlockOptions): Promise<BlockInfo>; sendTx(txHex: string): Promise<string>; estimateFee(blockTarget: number): Promise<string>; subscribeAddresses(addresses: string[], cb: (e: SubscribeAddressesEvent) => void | Promise<void>): Promise<{ subscribed: true; }>; unsubscribeAddresses(): Promise<{ subscribed: false; }>; subscribeNewBlock(cb: (e: SubscribeNewBlockEvent) => void | Promise<void>): Promise<{ subscribed: true; }>; unsubscribeNewBlock(): Promise<{ subscribed: false; }>; }