UNPKG

divvy-lib-orderbook

Version:
106 lines (84 loc) 2.64 kB
'use strict'; // eslint-disable-line strict Object.defineProperty(exports, '__esModule', { value: true }); var _ = require('lodash'); var binary = require('divvy-binary-codec'); var OrderBookUtils = {}; /** * Formats an offer quality amount to a hex that can be parsed by * Amount.parse_quality * * @param {String} quality * * @return {String} */ OrderBookUtils.convertOfferQualityToHexFromText = function (quality) { return binary.encodeQuality(quality); }; var NODE_TYPES = ['CreatedNode', 'ModifiedNode', 'DeletedNode']; /** * @param {Object} node * @api private */ function getNodeType(node) { var result = null; for (var i = 0; i < NODE_TYPES.length; i++) { var type = NODE_TYPES[i]; if (node.hasOwnProperty(type)) { result = type; break; } } return result; } function divvydAmountToCurrencyString(amount) { return typeof amount === 'string' ? 'XDV' : amount.currency + '/' + (amount.issuer ? amount.issuer : ''); } OrderBookUtils.getValueFromDivvydAmount = function (amount) { return typeof amount === 'string' ? amount : amount.value; }; OrderBookUtils.getAffectedNodes = function (meta, filter) { if (!Array.isArray(meta.AffectedNodes)) { // throw new Error('Metadata missing AffectedNodes'); return []; } var nodes = []; meta.AffectedNodes.forEach(function (rawNode) { var result = {}; result.nodeType = getNodeType(rawNode); if (result.nodeType) { var _node = rawNode[result.nodeType]; result.diffType = result.nodeType; result.entryType = _node.LedgerEntryType; result.ledgerIndex = _node.LedgerIndex; result.fields = _.extend({}, _node.PreviousFields, _node.NewFields, _node.FinalFields); result.fieldsPrev = _node.PreviousFields || {}; result.fieldsNew = _node.NewFields || {}; result.fieldsFinal = _node.FinalFields || {}; if (result.entryType === 'Offer') { var gets = divvydAmountToCurrencyString(result.fields.TakerGets); var pays = divvydAmountToCurrencyString(result.fields.TakerPays); var key = gets + ':' + pays; result.bookKey = key; } nodes.push(result); } }); if (typeof filter === 'object') { return nodes.filter(function (node) { if (filter.nodeType && filter.nodeType !== node.nodeType) { return false; } if (filter.entryType && filter.entryType !== node.entryType) { return false; } if (filter.bookKey && filter.bookKey !== node.bookKey) { return false; } return true; }); } return nodes; }; module.exports = OrderBookUtils;