fix: verify config field existance and content
This commit is contained in:
parent
a8085f3f1d
commit
0c0ca09b4e
5 changed files with 15 additions and 25 deletions
|
|
@ -67,7 +67,7 @@ const CRYPTO_CURRENCIES = [
|
|||
}
|
||||
]
|
||||
|
||||
module.exports = {buildUrl, cryptoDir, blockchainDir, configPath, cryptoCurrencies, getCryptoCurrency, toUnit}
|
||||
module.exports = { buildUrl, cryptoDir, blockchainDir, configPath, cryptoCurrencies, getCryptoCurrency, toUnit, isConfigValid }
|
||||
|
||||
function getCryptoCurrency (cryptoCode) {
|
||||
const cryptoCurrency = _.find(['cryptoCode', cryptoCode], CRYPTO_CURRENCIES)
|
||||
|
|
@ -109,3 +109,8 @@ function toUnit (cryptoAtoms, cryptoCode) {
|
|||
const unitScale = cryptoRec.unitScale
|
||||
return cryptoAtoms.shift(-unitScale)
|
||||
}
|
||||
|
||||
function isConfigValid (config, fields) {
|
||||
const values = _.map(it => _.get(it)(config))(fields)
|
||||
return _.every(it => it || it === 0)(values)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ const { BTC, ETH, LTC, BCH } = COINS
|
|||
const CRYPTO = [BTC, ETH, LTC, BCH]
|
||||
const FIAT = ['USD', 'EUR']
|
||||
const AMOUNT_PRECISION = 8
|
||||
const REQUIRED_CONFIG_FIELDS = ['key', 'secret', 'clientId']
|
||||
|
||||
const loadConfig = (account) => {
|
||||
const mapper = {
|
||||
|
|
@ -18,10 +19,4 @@ const loadConfig = (account) => {
|
|||
return { ...mapped, timeout: 3000 }
|
||||
}
|
||||
|
||||
const isConfigValid = options => {
|
||||
const requiredOptions = ['key', 'secret', 'clientId']
|
||||
const givenOptions = _.pick(requiredOptions, options)
|
||||
return _.isEqual(_.keys(givenOptions), requiredOptions)
|
||||
}
|
||||
|
||||
module.exports = { loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
module.exports = { loadConfig, REQUIRED_CONFIG_FIELDS, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
const _ = require('lodash/fp')
|
||||
const ccxt = require('ccxt')
|
||||
|
||||
const { toUnit } = require('../../coin-utils')
|
||||
const { toUnit, isConfigValid } = require('../../coin-utils')
|
||||
const { buildMarket, ALL } = require('../common/ccxt')
|
||||
const { ORDER_TYPES } = require('./consts')
|
||||
|
||||
|
|
@ -13,8 +13,8 @@ function trade (side, account, cryptoAtoms, fiatCode, cryptoCode, exchangeName)
|
|||
const exchangeConfig = ALL[exchangeName]
|
||||
if (!exchangeConfig) throw Error('Exchange configuration not found')
|
||||
|
||||
const { loadOptions, loadConfig = _.noop, isConfigValid, ORDER_TYPE, AMOUNT_PRECISION } = exchangeConfig
|
||||
if (_.isFunction(isConfigValid) && !isConfigValid(account)) throw Error('Invalid config')
|
||||
const { loadOptions, loadConfig = _.noop, REQUIRED_CONFIG_FIELDS, ORDER_TYPE, AMOUNT_PRECISION } = exchangeConfig
|
||||
if (!isConfigValid(account, REQUIRED_CONFIG_FIELDS)) throw Error('Invalid config')
|
||||
|
||||
const symbol = buildMarket(fiatCode, cryptoCode, exchangeName)
|
||||
const precision = _.defaultTo(DEFAULT_AMOUNT_PRECISION, AMOUNT_PRECISION)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ const { BTC, ETH } = COINS
|
|||
const CRYPTO = [BTC, ETH]
|
||||
const FIAT = ['USD']
|
||||
const AMOUNT_PRECISION = 4
|
||||
const REQUIRED_CONFIG_FIELDS = ['clientKey', 'clientSecret', 'userId', 'walletId']
|
||||
|
||||
const loadConfig = (account) => {
|
||||
const mapper = {
|
||||
|
|
@ -20,10 +21,4 @@ const loadConfig = (account) => {
|
|||
}
|
||||
const loadOptions = ({ walletId }) => ({ walletId })
|
||||
|
||||
const isConfigValid = options => {
|
||||
const requiredOptions = ['clientKey', 'clientSecret', 'userId', 'walletId']
|
||||
const givenOptions = _.pick(requiredOptions, options)
|
||||
return _.isEqual(_.keys(givenOptions), requiredOptions)
|
||||
}
|
||||
|
||||
module.exports = { loadOptions, loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
module.exports = { loadOptions, loadConfig, REQUIRED_CONFIG_FIELDS, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ const { BTC, BCH, DASH, ETH, LTC, ZEC } = COINS
|
|||
const CRYPTO = [BTC, ETH, LTC, DASH, ZEC, BCH]
|
||||
const FIAT = ['USD', 'EUR']
|
||||
const AMOUNT_PRECISION = 6
|
||||
const REQUIRED_CONFIG_FIELDS = ['apiKey', 'privateKey']
|
||||
|
||||
const loadConfig = (account) => {
|
||||
const mapper = {
|
||||
|
|
@ -19,10 +20,4 @@ const loadConfig = (account) => {
|
|||
|
||||
const loadOptions = () => ({ expiretm: '+60' })
|
||||
|
||||
const isConfigValid = options => {
|
||||
const requiredOptions = ['apiKey', 'privateKey']
|
||||
const givenOptions = _.pick(requiredOptions, options)
|
||||
return _.isEqual(_.keys(givenOptions), requiredOptions)
|
||||
}
|
||||
|
||||
module.exports = { loadOptions, loadConfig, isConfigValid, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
module.exports = { loadOptions, loadConfig, REQUIRED_CONFIG_FIELDS, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue