diff --git a/lib/wallet/client.js b/lib/wallet/client.js index aa36677b..9dcbad72 100644 --- a/lib/wallet/client.js +++ b/lib/wallet/client.js @@ -73,16 +73,16 @@ WalletClient.prototype._open = co(function* _open() { }); this.socket.on('block connect', function(entry, txs) { - var data; + var block; try { - data = parseBlock(entry, txs); + block = parseBlock(entry, txs); } catch (e) { self.emit('error', e); return; } - self.emit('block connect', data.entry, data.txs); + self.emit('block connect', block.entry, block.txs); }); this.socket.on('block disconnect', function(entry) { @@ -99,16 +99,16 @@ WalletClient.prototype._open = co(function* _open() { }); this.socket.on('block rescan', function(entry, txs, cb) { - var data; + var block; try { - data = parseBlock(entry, txs); + block = parseBlock(entry, txs); } catch (e) { self.emit('error', e); return cb(); } - self.emit('block rescan', data.entry, data.txs, cb); + self.emit('block rescan', block.entry, block.txs, cb); }); this.socket.on('chain reset', function(tip) { @@ -125,7 +125,12 @@ WalletClient.prototype._open = co(function* _open() { }); this.socket.on('tx', function(tx) { - tx = parseTX(tx); + try { + tx = parseTX(tx); + } catch (e) { + self.emit('error', e); + return; + } self.emit('tx', tx); }); @@ -173,11 +178,7 @@ WalletClient.prototype.onConnect = function onConnect() { WalletClient.prototype.sendAuth = function sendAuth() { var self = this; return new Promise(function(resolve, reject) { - self.socket.emit('auth', self.apiKey, function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('auth', self.apiKey, wrap(resolve, reject)); }); }; @@ -190,11 +191,7 @@ WalletClient.prototype.sendAuth = function sendAuth() { WalletClient.prototype.sendOptions = function sendOptions(options) { var self = this; return new Promise(function(resolve, reject) { - self.socket.emit('options', options, function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('options', options, wrap(resolve, reject)); }); }; @@ -207,11 +204,7 @@ WalletClient.prototype.sendOptions = function sendOptions(options) { WalletClient.prototype.watchChain = function watchChain() { var self = this; return new Promise(function(resolve, reject) { - self.socket.emit('watch chain', function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('watch chain', wrap(resolve, reject)); }); }; @@ -223,11 +216,7 @@ WalletClient.prototype.watchChain = function watchChain() { WalletClient.prototype.getTip = function getTip() { var self = this; return new Promise(function(resolve, reject) { - self.socket.emit('get tip', function(err, tip) { - if (err) - return reject(new Error(err.error)); - resolve(parseEntry(tip)); - }); + self.socket.emit('get tip', wrap(resolve, reject, parseEntry)); }); }; @@ -243,15 +232,7 @@ WalletClient.prototype.getEntry = function getEntry(block) { if (typeof block === 'string') block = util.revHex(block); - self.socket.emit('get entry', block, function(err, entry) { - if (err) - return reject(new Error(err.error)); - - if (!entry) - return resolve(null); - - resolve(parseEntry(entry)); - }); + self.socket.emit('get entry', block, wrap(resolve, reject, parseEntry)); }); }; @@ -265,11 +246,7 @@ WalletClient.prototype.send = function send(tx) { var self = this; return new Promise(function(resolve, reject) { var raw = tx.toRaw(); - self.socket.emit('send', raw, function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('send', raw, wrap(resolve, reject)); }); }; @@ -283,11 +260,7 @@ WalletClient.prototype.setFilter = function setFilter(filter) { var self = this; return new Promise(function(resolve, reject) { var raw = filter.toRaw(); - self.socket.emit('set filter', raw, function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('set filter', raw, wrap(resolve, reject)); }); }; @@ -309,11 +282,7 @@ WalletClient.prototype.addFilter = function addFilter(chunks) { out.push(chunks[i]); return new Promise(function(resolve, reject) { - self.socket.emit('add filter', out, function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('add filter', out, wrap(resolve, reject)); }); }; @@ -325,11 +294,7 @@ WalletClient.prototype.addFilter = function addFilter(chunks) { WalletClient.prototype.resetFilter = function resetFilter() { var self = this; return new Promise(function(resolve, reject) { - self.socket.emit('reset filter', function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('reset filter', wrap(resolve, reject)); }); }; @@ -342,11 +307,8 @@ WalletClient.prototype.resetFilter = function resetFilter() { WalletClient.prototype.estimateFee = function estimateFee(blocks) { var self = this; return new Promise(function(resolve, reject) { - self.socket.emit('estimate fee', blocks, function(err, rate) { - if (err) - return reject(new Error(err.error)); - resolve(Amount.value(rate)); - }); + self.socket.emit('estimate fee', blocks, + wrap(resolve, reject, Amount.value)); }); }; @@ -364,11 +326,7 @@ WalletClient.prototype.rescan = function rescan(start) { if (typeof start === 'string') start = util.revHex(start); - self.socket.emit('rescan', start, function(err) { - if (err) - return reject(new Error(err.error)); - resolve(); - }); + self.socket.emit('rescan', start, wrap(resolve, reject)); }); }; @@ -419,6 +377,34 @@ function BlockResult(entry, txs) { this.txs = txs; } +function wrap(resolve, reject, parse) { + return function(err, result) { + if (err) { + reject(new Error(err.error)); + return; + } + + if (!result) { + resolve(null); + return; + } + + if (!parse) { + resolve(result); + return; + } + + try { + result = parse(result); + } catch (e) { + reject(e); + return; + } + + resolve(result); + }; +} + /* * Expose */