chore: integrate new admin with l-s
This commit is contained in:
parent
6b3db134e7
commit
bf8f1d991c
72 changed files with 1493 additions and 1611 deletions
162
lib/plugins.js
162
lib/plugins.js
|
|
@ -11,7 +11,7 @@ const db = require('./db')
|
|||
const logger = require('./logger')
|
||||
const logs = require('./logs')
|
||||
const T = require('./time')
|
||||
const configManager = require('./config-manager')
|
||||
const configManager = require('./new-config-manager')
|
||||
const ticker = require('./ticker')
|
||||
const wallet = require('./wallet')
|
||||
const exchange = require('./exchange')
|
||||
|
|
@ -34,22 +34,22 @@ const tradesQueues = {}
|
|||
|
||||
function plugins (settings, deviceId) {
|
||||
function buildRates (tickers) {
|
||||
const config = configManager.machineScoped(deviceId, settings.config)
|
||||
const cryptoCodes = config.cryptoCurrencies
|
||||
const localeConfig = configManager.getLocale(deviceId, settings.config)
|
||||
const cryptoCodes = localeConfig.cryptoCurrencies
|
||||
|
||||
const rates = {}
|
||||
|
||||
cryptoCodes.forEach((cryptoCode, i) => {
|
||||
const cryptoConfig = configManager.scoped(cryptoCode, deviceId, settings.config)
|
||||
const commissions = configManager.getCommissions(cryptoCode, deviceId, settings.config)
|
||||
const rateRec = tickers[i]
|
||||
|
||||
if (!rateRec) return
|
||||
|
||||
const cashInCommission = BN(1).add(BN(cryptoConfig.cashInCommission).div(100))
|
||||
const cashInCommission = BN(1).add(BN(commissions.cashIn).div(100))
|
||||
|
||||
const cashOutCommission = _.isNil(cryptoConfig.cashOutCommission)
|
||||
const cashOutCommission = _.isNil(commissions.cashOut)
|
||||
? undefined
|
||||
: BN(1).add(BN(cryptoConfig.cashOutCommission).div(100))
|
||||
: BN(1).add(BN(commissions.cashOut).div(100))
|
||||
|
||||
if (Date.now() - rateRec.timestamp > STALE_TICKER) return logger.warn('Stale rate for ' + cryptoCode)
|
||||
const rate = rateRec.rates
|
||||
|
|
@ -62,19 +62,13 @@ function plugins (settings, deviceId) {
|
|||
return rates
|
||||
}
|
||||
|
||||
function transactionNotificationsEnabled () {
|
||||
const config = configManager.unscoped(settings.config)
|
||||
return config.transactionNotificationsEnabled
|
||||
}
|
||||
|
||||
function notificationsEnabled () {
|
||||
const config = configManager.unscoped(settings.config)
|
||||
return config.notificationsEnabled
|
||||
function getNotificationConfig () {
|
||||
return configManager.getGlobalNotifications(settings.config)
|
||||
}
|
||||
|
||||
function buildBalances (balanceRecs) {
|
||||
const config = configManager.machineScoped(deviceId, settings.config)
|
||||
const cryptoCodes = config.cryptoCurrencies
|
||||
const localeConfig = configManager.getLocale(deviceId, settings.config)
|
||||
const cryptoCodes = localeConfig.cryptoCurrencies
|
||||
|
||||
const balances = {}
|
||||
|
||||
|
|
@ -90,8 +84,8 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function isZeroConf (tx) {
|
||||
const config = configManager.scoped(tx.cryptoCode, deviceId, settings.config)
|
||||
const zeroConfLimit = config.zeroConfLimit
|
||||
const cashOutConfig = configManager.getCashOut(deviceId, settings.config)
|
||||
const zeroConfLimit = cashOutConfig.zeroConfLimit
|
||||
return tx.fiat.lte(zeroConfLimit)
|
||||
}
|
||||
|
||||
|
|
@ -131,14 +125,14 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function buildAvailableCassettes (excludeTxId) {
|
||||
const config = configManager.machineScoped(deviceId, settings.config)
|
||||
const cashOutConfig = configManager.getCashOut(deviceId, settings.config)
|
||||
|
||||
if (!config.cashOutEnabled) return Promise.resolve()
|
||||
if (!cashOutConfig.active) return Promise.resolve()
|
||||
|
||||
const denominations = [config.topCashOutDenomination,
|
||||
config.bottomCashOutDenomination
|
||||
]
|
||||
const virtualCassettes = [config.virtualCashOutDenomination]
|
||||
const denominations = [cashOutConfig.top, cashOutConfig.bottom]
|
||||
|
||||
// TODO new-admin: will this actually be calculated?
|
||||
const virtualCassettes = [cashOutConfig.top + cashOutConfig.bottom]
|
||||
|
||||
return Promise.all([dbm.cassetteCounts(deviceId), cashOutHelper.redeemableTxs(deviceId, excludeTxId)])
|
||||
.then(([rec, _redeemableTxs]) => {
|
||||
|
|
@ -188,11 +182,11 @@ function plugins (settings, deviceId) {
|
|||
function mapCoinSettings (coinParams) {
|
||||
const cryptoCode = coinParams[0]
|
||||
const cryptoNetwork = coinParams[1]
|
||||
const config = configManager.scoped(cryptoCode, deviceId, settings.config)
|
||||
const minimumTx = BN(config.minimumTx)
|
||||
const cashInFee = BN(config.cashInFee)
|
||||
const cashInCommission = BN(config.cashInCommission)
|
||||
const cashOutCommission = _.isNumber(config.cashOutCommission) ? BN(config.cashOutCommission) : null
|
||||
const commissions = configManager.getCommissions(cryptoCode, deviceId, settings.config)
|
||||
const minimumTx = BN(commissions.minimumTx)
|
||||
const cashInFee = BN(commissions.fixedFee)
|
||||
const cashInCommission = BN(commissions.cashIn)
|
||||
const cashOutCommission = _.isNumber(commissions.cashOut) ? BN(commissions.cashOut) : null
|
||||
const cryptoRec = coinUtils.getCryptoCurrency(cryptoCode)
|
||||
|
||||
return {
|
||||
|
|
@ -207,9 +201,10 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function pollQueries (serialNumber, deviceTime, deviceRec) {
|
||||
const config = configManager.machineScoped(deviceId, settings.config)
|
||||
const fiatCode = config.fiatCurrency
|
||||
const cryptoCodes = config.cryptoCurrencies
|
||||
const localeConfig = configManager.getLocale(deviceId, settings.config)
|
||||
|
||||
const fiatCode = localeConfig.fiatCurrency
|
||||
const cryptoCodes = localeConfig.cryptoCurrencies
|
||||
|
||||
const tickerPromises = cryptoCodes.map(c => ticker.getRates(settings, fiatCode, c))
|
||||
const balancePromises = cryptoCodes.map(c => fiatBalance(fiatCode, c))
|
||||
|
|
@ -283,16 +278,14 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function dispenseAck (tx) {
|
||||
const config = configManager.machineScoped(deviceId, settings.config)
|
||||
const cassettes = [config.topCashOutDenomination,
|
||||
config.bottomCashOutDenomination
|
||||
]
|
||||
const cashOutConfig = configManager.getCashOut(deviceId, settings.config)
|
||||
const cassettes = [cashOutConfig.top, cashOutConfig.bottom]
|
||||
|
||||
return dbm.addDispense(deviceId, tx, cassettes)
|
||||
}
|
||||
|
||||
function fiatBalance (fiatCode, cryptoCode) {
|
||||
const config = configManager.scoped(cryptoCode, deviceId, settings.config)
|
||||
const commissions = configManager.getCommissions(cryptoCode, deviceId, settings.config)
|
||||
return Promise.all([
|
||||
ticker.getRates(settings, fiatCode, cryptoCode),
|
||||
wallet.balance(settings, cryptoCode)
|
||||
|
|
@ -301,7 +294,7 @@ function plugins (settings, deviceId) {
|
|||
if (!rates || !balanceRec) return null
|
||||
|
||||
const rawRate = rates.rates.ask
|
||||
const cashInCommission = BN(1).minus(BN(config.cashInCommission).div(100))
|
||||
const cashInCommission = BN(1).minus(BN(commissions.cashIn).div(100))
|
||||
const balance = balanceRec.balance
|
||||
|
||||
if (!rawRate || !balance) return null
|
||||
|
|
@ -344,7 +337,12 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function notifyOperator (tx, rec) {
|
||||
if (!transactionNotificationsEnabled()) return Promise.resolve()
|
||||
const notifications = configManager.getGlobalNotifications(settings.config)
|
||||
|
||||
const notificationsEnabled = notifications.sms.transactions || notifications.email.transactions
|
||||
const highValueTx = tx.fiat.gt(notifications.highValueTransaction)
|
||||
|
||||
if (!notificationsEnabled || !highValueTx) return Promise.resolve()
|
||||
|
||||
const isCashOut = tx.direction === 'cashOut'
|
||||
const zeroConf = isCashOut && isZeroConf(tx)
|
||||
|
|
@ -504,9 +502,9 @@ function plugins (settings, deviceId) {
|
|||
.then(devices => {
|
||||
const deviceIds = devices.map(device => device.deviceId)
|
||||
const lists = deviceIds.map(deviceId => {
|
||||
const config = configManager.machineScoped(deviceId, settings.config)
|
||||
const fiatCode = config.fiatCurrency
|
||||
const cryptoCodes = config.cryptoCurrencies
|
||||
const localeConfig = configManager.getLocale(deviceId, settings.config)
|
||||
const fiatCode = localeConfig.fiatCurrency
|
||||
const cryptoCodes = localeConfig.cryptoCurrencies
|
||||
|
||||
return cryptoCodes.map(cryptoCode => ({
|
||||
fiatCode,
|
||||
|
|
@ -591,21 +589,25 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function sendMessage (rec) {
|
||||
const config = configManager.unscoped(settings.config)
|
||||
const notifications = configManager.getGlobalNotifications(settings.config)
|
||||
|
||||
let promises = []
|
||||
if (config.notificationsEmailEnabled) promises.push(email.sendMessage(settings, rec))
|
||||
if (config.notificationsSMSEnabled) promises.push(sms.sendMessage(settings, rec))
|
||||
if (notifications.email.active && rec.email) promises.push(email.sendMessage(settings, rec))
|
||||
if (notifications.sms.active && rec.sms) promises.push(sms.sendMessage(settings, rec))
|
||||
|
||||
return Promise.all(promises)
|
||||
}
|
||||
|
||||
function sendTransactionMessage (rec) {
|
||||
const config = configManager.unscoped(settings.config)
|
||||
const notifications = configManager.getGlobalNotifications(settings.config)
|
||||
|
||||
let promises = []
|
||||
if (config.transactionNotificationsEmailEnabled) promises.push(email.sendMessage(settings, rec))
|
||||
if (config.transactionNotificationsSMSEnabled) promises.push(sms.sendMessage(settings, rec))
|
||||
|
||||
const emailActive = notifications.email.active && notifications.email.transactions
|
||||
if (emailActive) promises.push(email.sendMessage(settings, rec))
|
||||
|
||||
const smsActive = notifications.sms.active && notifications.sms.transactions
|
||||
if (smsActive) promises.push(sms.sendMessage(settings, rec))
|
||||
|
||||
return Promise.all(promises)
|
||||
}
|
||||
|
|
@ -615,13 +617,16 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function checkDeviceCashBalances (fiatCode, device) {
|
||||
const config = configManager.machineScoped(device.deviceId, settings.config)
|
||||
const denomination1 = config.topCashOutDenomination
|
||||
const denomination2 = config.bottomCashOutDenomination
|
||||
const machineName = config.machineName
|
||||
const cashOutEnabled = config.cashOutEnabled
|
||||
const cashOutConfig = configManager.getCashOut(device.deviceId, settings.config)
|
||||
const denomination1 = cashOutConfig.top
|
||||
const denomination2 = cashOutConfig.bottom
|
||||
const cashOutEnabled = cashOutConfig.active
|
||||
|
||||
const cashInAlert = device.cashbox > config.cashInAlertThreshold
|
||||
const notifications = configManager.getNotifications(null, device.deviceId, settings.config)
|
||||
|
||||
const machineName = device.machineName
|
||||
|
||||
const cashInAlert = device.cashbox > notifications.cashInAlertThreshold
|
||||
? {
|
||||
code: 'CASH_BOX_FULL',
|
||||
machineName,
|
||||
|
|
@ -630,7 +635,7 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
: null
|
||||
|
||||
const cassette1Alert = cashOutEnabled && device.cassette1 < config.cashOutCassette1AlertThreshold
|
||||
const cassette1Alert = cashOutEnabled && device.cassette1 < notifications.fiatBalanceCassette1
|
||||
? {
|
||||
code: 'LOW_CASH_OUT',
|
||||
cassette: 1,
|
||||
|
|
@ -642,7 +647,7 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
: null
|
||||
|
||||
const cassette2Alert = cashOutEnabled && device.cassette2 < config.cashOutCassette2AlertThreshold
|
||||
const cassette2Alert = cashOutEnabled && device.cassette2 < notifications.fiatBalanceCassette2
|
||||
? {
|
||||
code: 'LOW_CASH_OUT',
|
||||
cassette: 2,
|
||||
|
|
@ -661,8 +666,8 @@ function plugins (settings, deviceId) {
|
|||
const fiatBalancePromises = cryptoCodes => _.map(c => fiatBalance(fiatCode, c), cryptoCodes)
|
||||
|
||||
const fetchCryptoCodes = _deviceId => {
|
||||
const config = configManager.machineScoped(_deviceId, settings.config)
|
||||
return config.cryptoCurrencies
|
||||
const localeConfig = configManager.getLocale(_deviceId, settings.config)
|
||||
return localeConfig.cryptoCurrencies
|
||||
}
|
||||
|
||||
const union = _.flow(_.map(fetchCryptoCodes), _.flatten, _.uniq)
|
||||
|
|
@ -678,22 +683,28 @@ function plugins (settings, deviceId) {
|
|||
|
||||
if (!fiatBalance) return null
|
||||
|
||||
const config = configManager.cryptoScoped(cryptoCode, settings.config)
|
||||
const cryptoAlertThreshold = config.cryptoAlertThreshold
|
||||
const notifications = configManager.getNotifications(cryptoCode, null, settings.config)
|
||||
const lowAlertThreshold = notifications.cryptoLowBalance
|
||||
const highAlertThreshold = notifications.cryptoHighBalance
|
||||
|
||||
return BN(fiatBalance.balance).lt(cryptoAlertThreshold)
|
||||
? {
|
||||
code: 'LOW_CRYPTO_BALANCE',
|
||||
cryptoCode,
|
||||
fiatBalance,
|
||||
fiatCode
|
||||
}
|
||||
: null
|
||||
const req = {
|
||||
cryptoCode,
|
||||
fiatBalance,
|
||||
fiatCode,
|
||||
}
|
||||
|
||||
if (BN(fiatBalance.balance).lt(lowAlertThreshold))
|
||||
return _.set('code')('LOW_CRYPTO_BALANCE')(req)
|
||||
|
||||
if (BN(fiatBalance.balance).gt(highAlertThreshold))
|
||||
return _.set('code')('HIGH_CRYPTO_BALANCE')(req)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
function checkBalances () {
|
||||
const globalConfig = configManager.unscoped(settings.config)
|
||||
const fiatCode = globalConfig.fiatCurrency
|
||||
const localeConfig = configManager.getGlobalLocale(settings.config)
|
||||
const fiatCode = localeConfig.fiatCurrency
|
||||
|
||||
return machineLoader.getMachines()
|
||||
.then(devices => {
|
||||
|
|
@ -756,9 +767,10 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
|
||||
function getRawRates () {
|
||||
const config = configManager.unscoped(settings.config)
|
||||
const cryptoCodes = _.flatten(configManager.all('cryptoCurrencies', settings.config))
|
||||
const fiatCode = config.fiatCurrency
|
||||
const localeConfig = configManager.getGlobalLocale(settings.config)
|
||||
const fiatCode = localeConfig.fiatCurrency
|
||||
|
||||
const cryptoCodes = configManager.getAllCryptoCurrencies(settings.config)
|
||||
const tickerPromises = cryptoCodes.map(c => ticker.getRates(settings, fiatCode, c))
|
||||
|
||||
return Promise.all(tickerPromises)
|
||||
|
|
@ -792,7 +804,7 @@ function plugins (settings, deviceId) {
|
|||
buildAvailableCassettes,
|
||||
buy,
|
||||
sell,
|
||||
notificationsEnabled,
|
||||
getNotificationConfig,
|
||||
notifyOperator,
|
||||
fetchCurrentConfigVersion
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue