UNPKG

@berrywallet/core

Version:

Berrywallet main Core for work with common cryptocurrencies like Bitcoin, Ethereum, Dash, Litecoin

101 lines (100 loc) 3.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_1 = require("lodash"); const events_1 = require("events"); const _1 = require("../../../"); var TrackerEvent; (function (TrackerEvent) { TrackerEvent["Connect"] = "connect"; TrackerEvent["Disconnect"] = "disconnect"; TrackerEvent["ConnectionError"] = "connection_error"; TrackerEvent["Error"] = "error"; TrackerEvent["Block"] = "block"; TrackerEvent["Tx"] = "tx"; })(TrackerEvent = exports.TrackerEvent || (exports.TrackerEvent = {})); class TrackerClient extends events_1.EventEmitter { constructor(networkClient) { super(); this.addrTxEvents = { addrs: [], callback: undefined, }; this.networkClient = networkClient; this.debug = _1.Debug.create('TRACKER_CLIENT::' + this.networkClient.getCoin().getUnit().toString()); } onConnect(callback) { this.on(TrackerEvent.Connect, callback); return this; } onDisconnect(callback) { this.on(TrackerEvent.Disconnect, callback); return this; } onConnectionError(callback) { this.on(TrackerEvent.ConnectionError, callback); return this; } onBlock(callback) { this.on(TrackerEvent.Block, callback); return this; } onTransactionConfirm(txid, callback) { this.once(`tx.${txid}`, callback); return this; } onAddrsTx(addrs, callback) { const coinKeyFormatter = this.networkClient.getCoin().getKeyFormat(); const addrBuffers = lodash_1.map(addrs, (addr) => { return coinKeyFormatter.parseAddress(addr).getData(); }); this.addrTxEvents = { addrs: addrBuffers, callback: callback, }; return this; } isAddrTrack(address) { if (!address) { return false; } let buffer; if (address instanceof Buffer) { buffer = address; } else { const coinKeyFormatter = this.networkClient.getCoin().getKeyFormat(); try { buffer = coinKeyFormatter.parseAddress(address).getData(); } catch (error) { this.debug("Can not parse address %s", address); return false; } } const { addrs = [] } = this.addrTxEvents; return !!lodash_1.find(addrs, (addr) => { return buffer.equals(addr); }); } fireNewBlock(block) { return this.emit(TrackerEvent.Block, block); } fireConnect() { return this.emit(TrackerEvent.Connect); } fireDisconnect() { return this.emit(TrackerEvent.Disconnect); } fireConnectionError(error) { return this.emit(TrackerEvent.ConnectionError, error); } fireTxidConfirmation(tx) { return this.emit(`tx.${tx.txid}`, tx); } destruct() { this.addrTxEvents = { addrs: [], callback: undefined }; this.removeAllListeners('tx.*'); this.removeAllListeners('addr.*'); } } exports.TrackerClient = TrackerClient;