blockbook-client
Version:
Client for interacting with Trezor's blockbook API
103 lines (102 loc) • 4.99 kB
TypeScript
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;
}>;
}