diff --git a/lib/plugins.js b/lib/plugins.js index 7f4934b5..a882ffbd 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -149,25 +149,25 @@ function plugins (settings, deviceId) { function computeAvailableRecyclers (recyclers, redeemableTxs) { if (_.isEmpty(redeemableTxs)) return recyclers - const sumTxs = (sum, tx) => { + const accountProvisioned = (recyclers, tx) => { // cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations - const bills = _.filter(it => _.includes('recycler', it.name) && it.denomination > 0, tx.bills) + const recyclersBills = _.flow( + _.get(['bills']), + _.filter(it => _.includes('recycler', it.name) && it.denomination > 0) + _.zip(recyclers) + )(tx) const sameDenominations = ([recycler, bill]) => recycler?.denomination === bill?.denomination - if (!_.every(sameDenominations, _.zip(recyclers, bills))) { + if (!_.every(sameDenominations, recyclersBills)) throw new Error('Denominations don\'t add up, recyclers were changed.') - } - return _.map(([acc, bill]) => acc + bill.provisioned, _.zip(sum, bills)) + return _.map( + ([recycler, { provisioned }]) => _.set('count', recycler.count - provisioned, recycler), + recyclersBills + ) } - recyclers = _.flow( - // Sum "used" bills per recycler - _.reduce(sumTxs, _.map(_.constant(0), recyclers)), - _.zip(recyclers), - // Remove used bills from recycler counts - _.map(([recycler, provisioned]) => _.set('count', recycler.count - provisioned, recycler)), - )(redeemableTxs) + recyclers = _.reduce(accountProvisioned, recyclers, redeemableTxs) if (_.some(({ count }) => count < 0, recyclers)) throw new Error('Negative note count: %j', counts)