refactor bcmonitor initialization
This commit is contained in:
parent
b311917e65
commit
470fd84ab7
|
@ -9,29 +9,40 @@ var Explorers = require('bitcore-explorers');
|
||||||
var request = require('request');
|
var request = require('request');
|
||||||
var io = require('socket.io-client');
|
var io = require('socket.io-client');
|
||||||
|
|
||||||
|
var PROVIDERS = {
|
||||||
|
'insight': {
|
||||||
|
'livenet': 'https://insight.bitpay.com:443',
|
||||||
|
'testnet': 'https://test-insight.bitpay.com:443',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
function BlockChainExplorer(opts) {
|
function BlockChainExplorer(opts) {
|
||||||
$.checkArgument(opts);
|
$.checkArgument(opts);
|
||||||
var provider = opts.provider || 'insight';
|
|
||||||
var network = opts.network || 'livenet';
|
|
||||||
var dfltUrl = network == 'livenet' ? 'https://insight.bitpay.com:443' :
|
|
||||||
'https://test-insight.bitpay.com:443';
|
|
||||||
var url = opts.url || dfltUrl;
|
|
||||||
|
|
||||||
var url;
|
this.provider = opts.provider || 'insight';
|
||||||
switch (provider) {
|
this.network = opts.network || 'livenet';
|
||||||
case 'insight':
|
|
||||||
var explorer = new Explorers.Insight(url, network);
|
$.checkState(PROVIDERS[this.provider], 'Provider ' + this.provider + ' not supported');
|
||||||
explorer.getTransaction = _.bind(getTransactionInsight, explorer, url);
|
$.checkState(PROVIDERS[this.provider][this.network], 'Network ' + this.network + ' not supported');
|
||||||
explorer.getTransactions = _.bind(getTransactionsInsight, explorer, url);
|
|
||||||
explorer.getAddressActivity = _.bind(getAddressActivityInsight, explorer, url);
|
this.url = opts.url || PROVIDERS[this.provider][this.network];
|
||||||
explorer.initSocket = _.bind(initSocketInsight, explorer, url);
|
|
||||||
return explorer;
|
switch (this.provider) {
|
||||||
default:
|
default:
|
||||||
throw new Error('Provider ' + provider + ' not supported');
|
case 'insight':
|
||||||
|
var explorer = new Explorers.Insight(this.url, this.network);
|
||||||
|
explorer.getTransaction = _.bind(getTransactionInsight, explorer, this.url);
|
||||||
|
explorer.getTransactions = _.bind(getTransactionsInsight, explorer, this.url);
|
||||||
|
explorer.getAddressActivity = _.bind(getAddressActivityInsight, explorer, this.url);
|
||||||
|
explorer.initSocket = _.bind(initSocketInsight, explorer, this.url);
|
||||||
|
return explorer;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BlockChainExplorer.prototype.getConnectionInfo = function() {
|
||||||
|
return this.provider + ' (' + this.network + ') @ ' + this.url;
|
||||||
|
};
|
||||||
|
|
||||||
function getTransactionInsight(url, txid, cb) {
|
function getTransactionInsight(url, txid, cb) {
|
||||||
var url = url + '/api/tx/' + txid;
|
var url = url + '/api/tx/' + txid;
|
||||||
var args = {
|
var args = {
|
||||||
|
|
|
@ -17,10 +17,6 @@ function BlockchainMonitor() {};
|
||||||
|
|
||||||
BlockchainMonitor.prototype.start = function(opts, cb) {
|
BlockchainMonitor.prototype.start = function(opts, cb) {
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
$.checkArgument(opts.blockchainExplorerOpts);
|
|
||||||
$.checkArgument(opts.storageOpts);
|
|
||||||
$.checkArgument(opts.messageBrokerOpts);
|
|
||||||
$.checkArgument(opts.lockOpts);
|
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
@ -28,21 +24,39 @@ BlockchainMonitor.prototype.start = function(opts, cb) {
|
||||||
|
|
||||||
function(done) {
|
function(done) {
|
||||||
self.explorers = _.map(['livenet', 'testnet'], function(network) {
|
self.explorers = _.map(['livenet', 'testnet'], function(network) {
|
||||||
var config = opts.blockchainExplorerOpts[network] || {};
|
var explorer;
|
||||||
return self._initExplorer(config.provider, network, config.url);
|
if (opts.blockchainExplorers) {
|
||||||
|
explorer = opts.blockchainExplorers[network];
|
||||||
|
} else {
|
||||||
|
var config = opts.blockchainExplorerOpts[network] || {};
|
||||||
|
var explorer = new BlockchainExplorer({
|
||||||
|
provider: config.provider,
|
||||||
|
network: network,
|
||||||
|
url: config.url,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$.checkState(explorer);
|
||||||
|
self._initExplorer(explorer);
|
||||||
|
return explorer;
|
||||||
});
|
});
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
function(done) {
|
function(done) {
|
||||||
self.storage = new Storage();
|
if (opts.storage) {
|
||||||
self.storage.connect(opts.storageOpts, done);
|
self.storage = opts.storage;
|
||||||
|
done();
|
||||||
|
} else {
|
||||||
|
self.storage = new Storage();
|
||||||
|
self.storage.connect(opts.storageOpts, done);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
function(done) {
|
function(done) {
|
||||||
self.messageBroker = new MessageBroker(opts.messageBrokerOpts);
|
self.messageBroker = opts.messageBroker || new MessageBroker(opts.messageBrokerOpts);
|
||||||
|
self.messageBroker.onMessage(_.bind(self.sendEmail, self));
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
function(done) {
|
function(done) {
|
||||||
self.lock = new Lock(opts.lockOpts);
|
self.lock = opts.lock || new Lock(opts.lockOpts);
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
], function(err) {
|
], function(err) {
|
||||||
|
@ -53,30 +67,21 @@ BlockchainMonitor.prototype.start = function(opts, cb) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
BlockchainMonitor.prototype._initExplorer = function(provider, network, url) {
|
BlockchainMonitor.prototype._initExplorer = function(explorer) {
|
||||||
$.checkArgument(provider == 'insight', 'Blockchain monitor ' + provider + ' not supported');
|
$.checkArgument(explorer.provider == 'insight', 'Blockchain monitor ' + provider + ' not supported');
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var explorer = new BlockchainExplorer({
|
|
||||||
provider: provider,
|
|
||||||
network: network,
|
|
||||||
url: url,
|
|
||||||
});
|
|
||||||
|
|
||||||
var socket = explorer.initSocket();
|
var socket = explorer.initSocket();
|
||||||
|
|
||||||
var connectionInfo = provider + ' (' + network + ') @ ' + url;
|
|
||||||
socket.on('connect', function() {
|
socket.on('connect', function() {
|
||||||
log.info('Connected to ' + connectionInfo);
|
log.info('Connected to ' + explorer.getConnectionInfo());
|
||||||
socket.emit('subscribe', 'inv');
|
socket.emit('subscribe', 'inv');
|
||||||
});
|
});
|
||||||
socket.on('connect_error', function() {
|
socket.on('connect_error', function() {
|
||||||
log.error('Error connecting to ' + connectionInfo);
|
log.error('Error connecting to ' + explorer.getConnectionInfo());
|
||||||
});
|
});
|
||||||
socket.on('tx', _.bind(self._handleIncommingTx, self));
|
socket.on('tx', _.bind(self._handleIncommingTx, self));
|
||||||
|
|
||||||
return explorer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
BlockchainMonitor.prototype._handleIncommingTx = function(data) {
|
BlockchainMonitor.prototype._handleIncommingTx = function(data) {
|
||||||
|
|
|
@ -63,11 +63,7 @@ EmailService.prototype.start = function(opts, cb) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
function(done) {
|
function(done) {
|
||||||
if (opts.messageBroker) {
|
self.messageBroker = opts.messageBroker || new MessageBroker(opts.messageBrokerOpts);
|
||||||
self.messageBroker = opts.messageBroker;
|
|
||||||
} else {
|
|
||||||
self.messageBroker = new MessageBroker(opts.messageBrokerOpts);
|
|
||||||
}
|
|
||||||
self.messageBroker.onMessage(_.bind(self.sendEmail, self));
|
self.messageBroker.onMessage(_.bind(self.sendEmail, self));
|
||||||
done();
|
done();
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,7 +9,7 @@ var BlockchainExplorer = require('../lib/blockchainexplorer');
|
||||||
describe('Blockchain explorer', function() {
|
describe('Blockchain explorer', function() {
|
||||||
describe('#constructor', function() {
|
describe('#constructor', function() {
|
||||||
it('should return a blockchain explorer with basic methods', function() {
|
it('should return a blockchain explorer with basic methods', function() {
|
||||||
var exp = BlockchainExplorer({
|
var exp = new BlockchainExplorer({
|
||||||
provider: 'insight',
|
provider: 'insight',
|
||||||
network: 'testnet',
|
network: 'testnet',
|
||||||
});
|
});
|
||||||
|
@ -19,7 +19,7 @@ describe('Blockchain explorer', function() {
|
||||||
exp.should.respondTo('getAddressActivity');
|
exp.should.respondTo('getAddressActivity');
|
||||||
exp.should.respondTo('getUnspentUtxos');
|
exp.should.respondTo('getUnspentUtxos');
|
||||||
exp.should.respondTo('initSocket');
|
exp.should.respondTo('initSocket');
|
||||||
var exp = BlockchainExplorer({
|
var exp = new BlockchainExplorer({
|
||||||
provider: 'insight',
|
provider: 'insight',
|
||||||
network: 'livenet',
|
network: 'livenet',
|
||||||
});
|
});
|
||||||
|
@ -27,7 +27,7 @@ describe('Blockchain explorer', function() {
|
||||||
});
|
});
|
||||||
it('should fail on unsupported provider', function() {
|
it('should fail on unsupported provider', function() {
|
||||||
(function() {
|
(function() {
|
||||||
var exp = BlockchainExplorer({
|
var exp = new BlockchainExplorer({
|
||||||
provider: 'dummy',
|
provider: 'dummy',
|
||||||
});
|
});
|
||||||
}).should.throw('not supported');
|
}).should.throw('not supported');
|
||||||
|
|
Loading…
Reference in New Issue