diff --git a/lib/plugins.js b/lib/plugins.js index 8c849a79..c81f8813 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -109,61 +109,41 @@ function plugins (settings, deviceId) { return tx.fiat.lte(zeroConfLimit) } - function computeAvailableCassettes (cassettes, redeemableTxs) { - if (_.isEmpty(redeemableTxs)) return cassettes - - const accountProvisioned = (cassettes, tx) => { + const accountProvisioned = (cashUnitType, cashUnits, redeemableTxs) => { + const kons = (cashUnits, tx) => { // cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations - const cassettesBills = _.flow( + const cashUnitsBills = _.flow( _.get(['bills']), - _.filter(it => _.includes('cassette', it.name) && it.denomination > 0) - _.zip(cassettes) + _.filter(it => _.includes(cashUnitType, it.name) && it.denomination > 0), + _.zip(cashUnits), )(tx) - const sameDenominations = ([cassette, bill]) => cassette?.denomination === bill?.denomination - if (!_.every(sameDenominations, cassettesBills)) - throw new Error('Denominations don\'t add up, cassettes were changed.') + const sameDenominations = ([cashUnit, bill]) => cashUnit?.denomination === bill?.denomination + if (!_.every(sameDenominations, cashUnitsBills)) + throw new Error(`Denominations don't add up, ${cashUnitType}s were changed.`) return _.map( - ([cassette, { provisioned }]) => _.set('count', cassette.count - provisioned, cassette), - cassettesBills + ([cashUnit, { provisioned }]) => _.set('count', cashUnit.count - provisioned, cashUnit), + cashUnitsBills ) } - cassettes = _.reduce(accountProvisioned, cassettes, redeemableTxs) + return _.reduce(kons, cashUnits, redeemableTxs) + } + function computeAvailableCassettes (cassettes, redeemableTxs) { + if (_.isEmpty(redeemableTxs)) return cassettes + cassettes = accountProvisioned('cassette', cassettes, redeemableTxs) if (_.some(({ count }) => count < 0, cassettes)) throw new Error('Negative note count: %j', counts) - return cassettes } function computeAvailableRecyclers (recyclers, redeemableTxs) { if (_.isEmpty(redeemableTxs)) return recyclers - - const accountProvisioned = (recyclers, tx) => { - // cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations - 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, recyclersBills)) - throw new Error('Denominations don\'t add up, recyclers were changed.') - - return _.map( - ([recycler, { provisioned }]) => _.set('count', recycler.count - provisioned, recycler), - recyclersBills - ) - } - - recyclers = _.reduce(accountProvisioned, recyclers, redeemableTxs) - + recyclers = accountProvisioned('recycler', recyclers, redeemableTxs) if (_.some(({ count }) => count < 0, recyclers)) throw new Error('Negative note count: %j', counts) - return recyclers }