@berrywallet/core
Version:
Berrywallet main Core for work with common cryptocurrencies like Bitcoin, Ethereum, Dash, Litecoin
111 lines (110 loc) • 3.83 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
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 __awaiter(this, void 0, void 0, function* () {
this.emit(`tx.${tx.txid}`, tx);
});
}
destruct() {
this.addrTxEvents = { addrs: [], callback: undefined };
this.removeAllListeners('tx.*');
this.removeAllListeners('addr.*');
}
}
exports.TrackerClient = TrackerClient;