first commit
This commit is contained in:
commit
aa7869eb33
386 files changed
+69375
No files matched your search
@@ -0,0 +1,104 @@
|
||||
const _ = require('lodash');
|
||||
const fs = require('fs');
|
||||
const moment = require('moment');
|
||||
const errors = require('./exchangeErrors');
|
||||
|
||||
const Checker = function() {
|
||||
_.bindAll(this);
|
||||
}
|
||||
|
||||
Checker.prototype.getExchangeCapabilities = function(slug) {
|
||||
if(!fs.existsSync(__dirname + '/wrappers/' + slug + '.js'))
|
||||
throw new errors.ExchangeError(`Gekko does not know the exchange "${slug}"`);
|
||||
|
||||
return require('./wrappers/' + slug).getCapabilities();
|
||||
}
|
||||
|
||||
// check if the exchange is configured correctly for monitoring
|
||||
Checker.prototype.cantMonitor = function(conf) {
|
||||
var slug = conf.exchange.toLowerCase();
|
||||
var exchange = this.getExchangeCapabilities(slug);
|
||||
|
||||
if(!exchange)
|
||||
return 'Gekko does not support the exchange ' + slug;
|
||||
|
||||
var name = exchange.name;
|
||||
|
||||
if('monitorError' in exchange)
|
||||
return 'At this moment Gekko can\'t monitor ' + name + ', find out more info here:\n\n' + exchange.monitorError;
|
||||
|
||||
var name = exchange.name;
|
||||
|
||||
if(!_.includes(exchange.currencies, conf.currency))
|
||||
return 'Gekko only supports the currencies [ ' + exchange.currencies.join(', ') + ' ] at ' + name + ' (not ' + conf.currency + ')';
|
||||
|
||||
if(!_.includes(exchange.assets, conf.asset))
|
||||
return 'Gekko only supports the assets [ ' + exchange.assets.join(', ') + ' ] at ' + name + ' (not ' + conf.asset + ')';
|
||||
|
||||
var pair = _.find(exchange.markets, function(p) {
|
||||
return p.pair[0] === conf.currency && p.pair[1] === conf.asset;
|
||||
});
|
||||
|
||||
if(!pair)
|
||||
return 'Gekko does not support this currency/assets pair at ' + name;
|
||||
|
||||
// everything is okay
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if the exchange is configured correctly for fetching
|
||||
// full history
|
||||
Checker.prototype.cantFetchFullHistory = function(conf) {
|
||||
var slug = conf.exchange.toLowerCase();
|
||||
var exchange = this.getExchangeCapabilities(slug);
|
||||
|
||||
if(this.cantMonitor(conf))
|
||||
return this.cantMonitor(conf);
|
||||
|
||||
var name = exchange.name;
|
||||
|
||||
if(!exchange.providesFullHistory)
|
||||
return 'The exchange ' + name + ' does not provide full history (or Gekko doesn\'t support importing it)';
|
||||
|
||||
if ("exchangeMaxHistoryAge" in exchange) {
|
||||
if (moment(config.importer.daterange.from) < moment().subtract(exchange.exchangeMaxHistoryAge, "days")) {
|
||||
return 'Unsupported date from! ' + exchange.name + ' supports history of max ' + exchange.exchangeMaxHistoryAge + ' days..';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check if the exchange if configured correctly for real trading
|
||||
Checker.prototype.cantTrade = function(conf) {
|
||||
var cantMonitor = this.cantMonitor(conf);
|
||||
if(cantMonitor)
|
||||
return cantMonitor;
|
||||
|
||||
var slug = conf.exchange.toLowerCase();
|
||||
var exchange = this.getExchangeCapabilities(slug);
|
||||
var name = exchange.name;
|
||||
|
||||
if(!exchange.tradable)
|
||||
return 'At this moment Gekko can\'t trade at ' + name + '.';
|
||||
|
||||
if(conf.key === 'your-key')
|
||||
return '"your-key" is not a valid API key';
|
||||
|
||||
if(conf.secret === 'your-secret')
|
||||
return '"your-secret" is not a valid API secret';
|
||||
|
||||
var error = false;
|
||||
_.each(exchange.requires, function(req) {
|
||||
if(!conf[req])
|
||||
error = name + ' requires "' + req + '" to be set in the config';
|
||||
}, this);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
Checker.prototype.settings = function(conf) {
|
||||
var slug = conf.exchange.toLowerCase();
|
||||
return this.getExchangeCapabilities(slug);
|
||||
|
||||
}
|
||||
|
||||
module.exports = new Checker();
|
||||
Reference in new issue
Block a user