UNPKG

divvy-lib-transactionparser

Version:

Parses transaction objects to a higher-level view

81 lines (70 loc) 2.11 kB
'use strict' var _ = require('lodash') var BigNumber = require('bignumber.js') // drops is a bignumber.js BigNumber function dropsToXDV(drops) { return drops.dividedBy(1000000) } function normalizeNode(affectedNode) { var diffType = Object.keys(affectedNode)[0] var node = affectedNode[diffType] return Object.assign({}, node, { diffType: diffType, entryType: node.LedgerEntryType, ledgerIndex: node.LedgerIndex, newFields: node.NewFields || {}, finalFields: node.FinalFields || {}, previousFields: node.PreviousFields || {} }) } function normalizeNodes(metadata) { if (!metadata.AffectedNodes) { return [] } return metadata.AffectedNodes.map(normalizeNode) } function parseCurrencyAmount(currencyAmount) { if (currencyAmount === undefined) { return undefined } if (typeof currencyAmount === 'string') { return { currency: 'XDV', value: dropsToXDV(new BigNumber(currencyAmount)).toString() } } return { currency: currencyAmount.currency, counterparty: currencyAmount.issuer, value: currencyAmount.value } } function isAccountField(fieldName) { var fieldNames = ['Account', 'Owner', 'Destination', 'Issuer', 'Target'] return _.includes(fieldNames, fieldName) } function isAmountFieldAffectingIssuer(fieldName) { var fieldNames = ['LowLimit', 'HighLimit', 'TakerPays', 'TakerGets'] return _.includes(fieldNames, fieldName) } function getAffectedAccounts(metadata) { var accounts = [] _.forEach(normalizeNodes(metadata), function(node) { var fields = node.diffType === 'CreatedNode' ? node.newFields : node.finalFields _.forEach(fields, function(fieldValue, fieldName) { if (isAccountField(fieldName)) { accounts.push(fieldValue) } else if (isAmountFieldAffectingIssuer(fieldName) && fieldValue.issuer) { accounts.push(fieldValue.issuer) } }) }) return _.uniq(accounts) } module.exports = { dropsToXDV: dropsToXDV, normalizeNodes: normalizeNodes, parseCurrencyAmount: parseCurrencyAmount, getAffectedAccounts: getAffectedAccounts }