@berrywallet/core
Version:
Berrywallet main Core for work with common cryptocurrencies like Bitcoin, Ethereum, Dash, Litecoin
101 lines (100 loc) • 3.16 kB
JavaScript
"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;