diff --git a/lib/blockchainexplorer.js b/lib/blockchainexplorer.js index a0f4072..428b9a9 100644 --- a/lib/blockchainexplorer.js +++ b/lib/blockchainexplorer.js @@ -30,7 +30,8 @@ function BlockChainExplorer(opts) { return new Insight({ network: network, url: url, - apiPrefix: opts.apiPrefix + apiPrefix: opts.apiPrefix, + userAgent: opts.userAgent, }); default: throw new Error('Provider ' + provider + ' not supported.'); diff --git a/lib/blockchainexplorers/insight.js b/lib/blockchainexplorers/insight.js index bdc68b7..f3778de 100644 --- a/lib/blockchainexplorers/insight.js +++ b/lib/blockchainexplorers/insight.js @@ -15,6 +15,7 @@ function Insight(opts) { this.apiPrefix = opts.apiPrefix || '/api'; this.network = opts.network || 'livenet'; this.hosts = opts.url; + this.userAgent = opts.userAgent || 'bws'; }; @@ -27,6 +28,18 @@ var _parseErr = function(err, res) { return "Error querying the blockchain"; }; +Insight.prototype._doRequest = function(args, cb) { + var opts = { + hosts: this.hosts, + headers: { + 'User-Agent': this.userAgent, + } + }; + console.log('*** [insight.js ln38] opts:', opts); // TODO + + requestList(_.defaults(args, opts), cb); +}; + Insight.prototype.getConnectionInfo = function() { return 'Insight (' + this.network + ') @ ' + this.hosts; }; @@ -38,14 +51,13 @@ Insight.prototype.getUtxos = function(addresses, cb) { var url = this.url + this.apiPrefix + '/addrs/utxo'; var args = { method: 'POST', - hosts: this.hosts, path: this.apiPrefix + '/addrs/utxo', json: { addrs: [].concat(addresses).join(',') }, }; - requestList(args, function(err, res, unspent) { + this._doRequest(args, function(err, res, unspent) { if (err || res.statusCode !== 200) return cb(_parseErr(err, res)); return cb(null, unspent); }); @@ -57,14 +69,13 @@ Insight.prototype.getUtxos = function(addresses, cb) { Insight.prototype.broadcast = function(rawTx, cb) { var args = { method: 'POST', - hosts: this.hosts, path: this.apiPrefix + '/tx/send', json: { rawtx: rawTx }, }; - requestList(args, function(err, res, body) { + this._doRequest(args, function(err, res, body) { if (err || res.statusCode !== 200) return cb(_parseErr(err, res)); return cb(null, body ? body.txid : null); }); @@ -73,12 +84,11 @@ Insight.prototype.broadcast = function(rawTx, cb) { Insight.prototype.getTransaction = function(txid, cb) { var args = { method: 'GET', - hosts: this.hosts, path: this.apiPrefix + '/tx/' + txid, json: true, }; - requestList(args, function(err, res, tx) { + this._doRequest(args, function(err, res, tx) { if (res && res.statusCode == 404) return cb(); if (err || res.statusCode !== 200) return cb(_parseErr(err, res)); @@ -94,14 +104,13 @@ Insight.prototype.getTransactions = function(addresses, from, to, cb) { var args = { method: 'POST', - hosts: this.hosts, path: this.apiPrefix + '/addrs/txs' + (qs.length > 0 ? '?' + qs.join('&') : ''), json: { addrs: [].concat(addresses).join(',') }, }; - requestList(args, function(err, res, txs) { + this._doRequest(args, function(err, res, txs) { if (err || res.statusCode !== 200) return cb(_parseErr(err, res)); if (_.isObject(txs) && txs.items) @@ -119,12 +128,11 @@ Insight.prototype.getAddressActivity = function(address, cb) { var args = { method: 'GET', - hosts: this.hosts, path: self.apiPrefix + '/addr/' + address, json: true, }; - requestList(args, function(err, res, result) { + this._doRequest(args, function(err, res, result) { if (res && res.statusCode == 404) return cb(); if (err || res.statusCode !== 200) return cb(_parseErr(err, res)); @@ -142,11 +150,10 @@ Insight.prototype.estimateFee = function(nbBlocks, cb) { var args = { method: 'GET', - hosts: this.hosts, path: path, json: true, }; - requestList(args, function(err, res, body) { + this._doRequest(args, function(err, res, body) { if (err || res.statusCode !== 200) return cb(_parseErr(err, res)); return cb(null, body); }); diff --git a/lib/blockchainmonitor.js b/lib/blockchainmonitor.js index 938830b..59e2901 100644 --- a/lib/blockchainmonitor.js +++ b/lib/blockchainmonitor.js @@ -13,6 +13,8 @@ var Lock = require('./lock'); var Notification = require('./model/notification'); +var WalletService = require('./server'); + function BlockchainMonitor() {}; BlockchainMonitor.prototype.start = function(opts, cb) { @@ -36,6 +38,7 @@ BlockchainMonitor.prototype.start = function(opts, cb) { provider: config.provider, network: network, url: config.url, + userAgent: WalletService.getServiceVersion(), }); } $.checkState(explorer); diff --git a/lib/server.js b/lib/server.js index d07ec66..d172b05 100644 --- a/lib/server.js +++ b/lib/server.js @@ -864,6 +864,7 @@ WalletService.prototype._getBlockchainExplorer = function(network) { // TODO: provider should be configurable opts.provider = 'insight'; opts.network = network; + opts.userAgent = WalletService.getServiceVersion(); this.blockchainExplorer = new BlockchainExplorer(opts); }