From eea230de60ea304b4127451707d74cab9d669370 Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Fri, 2 Dec 2016 16:37:55 +0200 Subject: [PATCH] WIP --- lib/config-manager.js | 14 +++++--------- lib/email.js | 2 +- lib/exchange.js | 2 +- lib/notifier.js | 2 +- lib/plugins.js | 43 +++++++++++++++++++++--------------------- lib/routes.js | 18 +++++++++--------- lib/settings-loader.js | 2 +- lib/sms.js | 2 +- lib/ticker.js | 2 +- lib/wallet.js | 2 +- 10 files changed, 42 insertions(+), 47 deletions(-) diff --git a/lib/config-manager.js b/lib/config-manager.js index c17ec6c3..01e0400c 100644 --- a/lib/config-manager.js +++ b/lib/config-manager.js @@ -30,17 +30,13 @@ function fallbackValue (crypto, machine, instances) { function generalScoped (crypto, machine, config) { const scopedValue = (key, instances) => - [key, fallbackValue(crypto, machine, keyedValues(key, instances))] + fallbackValue(crypto, machine, instances) - const keyedValues = (key, instances) => R.filter(r => r.fieldLocator.code === key, instances) - const keys = instances => R.uniq(R.map(r => r.fieldLocator.code, instances)) + const allScopes = key => config.filter(R.pathEq(['fieldLocator', 'code'], key)) + const keys = R.uniq(R.map(r => r.fieldLocator.code, config)) + const keyedValues = keys.map(key => scopedValue(key, allScopes(key))) - const scopedGroups = group => { - const instances = group.values - return [group.code, R.fromPairs(keys(instances).map(key => scopedValue(key, instances)))] - } - - return R.fromPairs(config.groups.map(scopedGroups)) + return R.fromPairs(keys, keyedValues) } function machineScoped (machine, config) { diff --git a/lib/email.js b/lib/email.js index aeb4f16d..85548312 100644 --- a/lib/email.js +++ b/lib/email.js @@ -5,7 +5,7 @@ function sendMessage (rec) { return Promise.resolve() .then(() => { const settings = settingsLoader.settings() - const pluginCode = configManager.unscoped(settings.config).notifications.email + const pluginCode = configManager.unscoped(settings.config).email if (!pluginCode) throw new Error('No email plugin defined') const account = settings.accounts[pluginCode] diff --git a/lib/exchange.js b/lib/exchange.js index 2c678119..6005e08f 100644 --- a/lib/exchange.js +++ b/lib/exchange.js @@ -12,7 +12,7 @@ function fetchExchange (cryptoCode) { return Promise.resolve() .then(() => { const settings = settingsLoader.settings() - const plugin = configManager.cryptoScoped(cryptoCode, settings.config).cryptoServices.exchange + const plugin = configManager.cryptoScoped(cryptoCode, settings.config).exchange if (!plugin) throw noExchangeError(cryptoCode) const account = settings.accounts[plugin] const exchange = require('lamassu-' + plugin) diff --git a/lib/notifier.js b/lib/notifier.js index c23a9c32..418713b4 100644 --- a/lib/notifier.js +++ b/lib/notifier.js @@ -29,7 +29,7 @@ function sameState (a, b) { function checkBalance (rec) { const settings = settingsLoader.settings() const config = configManager.unscoped(settings.config) - const lowBalanceThreshold = config.notifications.lowBalanceThreshold + const lowBalanceThreshold = config.lowBalanceThreshold return lowBalanceThreshold && rec.fiatBalance < lowBalanceThreshold ? {code: 'lowBalance', cryptoCode: rec.cryptoCode, fiatBalance: rec.fiatBalance, fiatCode: rec.fiatCode} : null diff --git a/lib/plugins.js b/lib/plugins.js index 9a06b1ef..55d097b5 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -49,10 +49,10 @@ let lastAlertTime = null function buildRates (deviceId, tickers) { const settings = settingsLoader.settings() const config = configManager.machineScoped(deviceId, settings.config) - const cryptoCodes = config.currencies.cryptoCurrencies + const cryptoCodes = config.cryptoCurrencies - const cashInCommission = new BigNumber(config.commissions.cashInCommission).div(100).plus(1) - const cashOutCommission = new BigNumber(config.commissions.cashOutCommission).div(100).plus(1) + const cashInCommission = new BigNumber(config.cashInCommission).div(100).plus(1) + const cashOutCommission = new BigNumber(config.cashOutCommission).div(100).plus(1) const rates = {} @@ -72,7 +72,7 @@ function buildRates (deviceId, tickers) { function buildBalances (deviceId, balanceRecs) { const settings = settingsLoader.settings() const config = configManager.machineScoped(deviceId, settings.config) - const cryptoCodes = config.currencies.cryptoCurrencies + const cryptoCodes = config.cryptoCurrencies const balances = {} @@ -106,11 +106,11 @@ function buildCartridges (cartridges, virtualCartridges, rec) { function pollQueries (deviceTime, deviceId, deviceRec) { const settings = settingsLoader.settings() const config = configManager.machineScoped(deviceId, settings.config) - const fiatCode = config.currencies.fiatCurrency - const cryptoCodes = config.currencies.cryptoCurrencies - const cartridges = [ config.currencies.topCashOutDenomination, - config.currencies.bottomCashOutDenomination ] - const virtualCartridges = [config.currencies.virtualCashOutDenomination] + const fiatCode = config.fiatCurrency + const cryptoCodes = config.cryptoCurrencies + const cartridges = [ config.topCashOutDenomination, + config.bottomCashOutDenomination ] + const virtualCartridges = [config.virtualCashOutDenomination] const tickerPromises = cryptoCodes.map(c => ticker.getRates(fiatCode, c)) const balancePromises = cryptoCodes.map(wallet.balance) @@ -226,8 +226,8 @@ function cashOut (deviceId, tx) { function dispenseAck (deviceId, tx) { const settings = settingsLoader.settings() const config = configManager.machineScoped(deviceId, settings.config) - const cartridges = [ config.currencies.topCashOutDenomination, - config.currencies.bottomCashOutDenomination ] + const cartridges = [ config.topCashOutDenomination, + config.bottomCashOutDenomination ] return dbm.addDispense(deviceId, tx, cartridges) } @@ -239,7 +239,7 @@ function fiatBalance (fiatCode, cryptoCode, deviceId) { return Promise.all([ticker.getRates(fiatCode, cryptoCode), wallet.balance(cryptoCode)]) .then(([rates, balanceRec]) => { const rawRate = rates.rates.ask - const commission = (new BigNumber(config.commissions.cashInCommission).div(100)).plus(1) + const commission = (new BigNumber(config.cashInCommission).div(100)).plus(1) const balance = balanceRec.balance if (!rawRate || !balance) return null @@ -249,7 +249,7 @@ function fiatBalance (fiatCode, cryptoCode, deviceId) { // `lowBalanceMargin` is our safety net. It's a number > 1, and we divide // all our balances by it to provide a safety margin. - const lowBalanceMargin = (new BigNumber(config.commissions.lowBalanceMargin).div(100)).plus(1) + const lowBalanceMargin = (new BigNumber(config.lowBalanceMargin).div(100)).plus(1) const unitScale = new BigNumber(10).pow(coins[cryptoCode].unitScale) const fiatTransferBalance = balance.div(unitScale).times(rate).div(lowBalanceMargin) @@ -387,15 +387,14 @@ function consolidateTrades (cryptoCode, fiatCode) { function executeTrades () { const settings = settingsLoader.settings() - const config = settings.config return dbm.devices() .then(devices => { const deviceIds = devices.map(device => device.device_id) const lists = deviceIds.map(deviceId => { - const currencies = configManager.machineScoped(deviceId, config).currencies - const fiatCode = currencies.fiatCurrency - const cryptoCodes = currencies.cryptoCurrencies + const config = configManager.machineScoped(deviceId, settings.config) + const fiatCode = config.fiatCurrency + const cryptoCodes = config.cryptoCurrencies return cryptoCodes.map(cryptoCode => ({fiatCode, cryptoCode})) }) @@ -432,11 +431,11 @@ function executeTradesForMarket (settings, fiatCode, cryptoCode) { function sendMessage (rec) { const settings = settingsLoader.settings() - const notifications = configManager.unscoped(settings.config).notifications + const config = configManager.unscoped(settings.config) let promises = [] - if (notifications.notificationsEmailEnabled) promises.push(email.sendMessage(rec)) - if (notifications.notificationsSMSEnabled) promises.push(sms.sendMessage(rec)) + if (config.notificationsEmailEnabled) promises.push(email.sendMessage(rec)) + if (config.notificationsSMSEnabled) promises.push(sms.sendMessage(rec)) return Promise.all(promises) } @@ -496,8 +495,8 @@ function checkNotification () { function checkDeviceBalances (deviceId) { const settings = settingsLoader.settings() const config = configManager.machineScoped(deviceId, settings.config) - const cryptoCodes = config.currencies.cryptoCurrencies - const fiatCode = config.currencies.fiatCurrency + const cryptoCodes = config.cryptoCurrencies + const fiatCode = config.fiatCurrency const fiatBalancePromises = cryptoCodes.map(c => fiatBalance(fiatCode, c, deviceId)) return Promise.all(fiatBalancePromises) diff --git a/lib/routes.js b/lib/routes.js index be801dad..edb117a5 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -37,10 +37,10 @@ function poll (req, res, next) { const cartridges = results.cartridges const reboot = pid && reboots[deviceId] && reboots[deviceId] === pid - const langs = config.languages.machineLanguages + const langs = config.machineLanguages const locale = { - fiatCode: config.currencies.fiatCurrency, + fiatCode: config.fiatCurrency, localeInfo: { primaryLocale: langs[0], primaryLocales: langs @@ -50,21 +50,21 @@ function poll (req, res, next) { const response = { err: null, locale, - txLimit: config.limits.cashInTransactionLimit, - idVerificationEnabled: config.compliance.idVerificationEnabled, - smsVerificationEnabled: config.compliance.smsVerificationEnabled, + txLimit: config.cashInTransactionLimit, + idVerificationEnabled: config.idVerificationEnabled, + smsVerificationEnabled: config.smsVerificationEnabled, cartridges, twoWayMode: !!cartridges, - zeroConfLimit: config.commissions.zeroConfLimit, - fiatTxLimit: config.limits.cashOutTransactionLimit, + zeroConfLimit: config.zeroConfLimit, + fiatTxLimit: config.cashOutTransactionLimit, reboot, rates: results.rates, balances: results.balances, - coins: config.currencies.cryptoCurrencies + coins: config.cryptoCurrencies } if (response.idVerificationEnabled) { - response.idVerificationLimit = config.compliance.idVerificationLimit + response.idVerificationLimit = config.idVerificationLimit } return res.json(response) diff --git a/lib/settings-loader.js b/lib/settings-loader.js index a407df18..e1670e30 100644 --- a/lib/settings-loader.js +++ b/lib/settings-loader.js @@ -11,7 +11,7 @@ function load () { ]) .then(function ([data, accounts]) { settingsCache = { - config: data.data, + config: data.data.config, accounts: accounts } diff --git a/lib/sms.js b/lib/sms.js index a0ac6f4e..8103485e 100644 --- a/lib/sms.js +++ b/lib/sms.js @@ -5,7 +5,7 @@ function sendMessage (rec) { return Promise.resolve() .then(() => { const settings = settingsLoader.settings() - const pluginCode = configManager.unscoped(settings.config).notifications.sms + const pluginCode = configManager.unscoped(settings.config).sms if (!pluginCode) throw new Error('No sms plugin defined') const account = settings.accounts[pluginCode] diff --git a/lib/ticker.js b/lib/ticker.js index 993b9cc3..deeab4da 100644 --- a/lib/ticker.js +++ b/lib/ticker.js @@ -8,7 +8,7 @@ function getRates (fiatCode, cryptoCode) { .then(() => { const settings = settingsLoader.settings() const config = settings.config - const plugin = configManager.cryptoScoped(cryptoCode, config).cryptoServices.ticker + const plugin = configManager.cryptoScoped(cryptoCode, config).ticker const account = settings.accounts[plugin] const ticker = require('lamassu-' + plugin) diff --git a/lib/wallet.js b/lib/wallet.js index ac831b9c..535c8db1 100644 --- a/lib/wallet.js +++ b/lib/wallet.js @@ -8,7 +8,7 @@ function fetchWallet (cryptoCode) { return Promise.resolve() .then(() => { const settings = settingsLoader.settings() - const plugin = configManager.cryptoScoped(cryptoCode, settings.config).cryptoServices.wallet + const plugin = configManager.cryptoScoped(cryptoCode, settings.config).wallet const account = settings.accounts[plugin] const wallet = require('lamassu-' + plugin)