UNPKG

@bithomp/xrpl-api

Version:

A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger

41 lines (40 loc) 1.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatBidsAndAsks = formatBidsAndAsks; const lodash_1 = __importDefault(require("lodash")); const bignumber_js_1 = __importDefault(require("bignumber.js")); const orderbook_order_1 = require("../parse/ledger/orderbook-order"); function isSameIssue(a, b) { return a.currency === b.currency && a.issuer === b.issuer; } function directionFilter(direction, order) { return order.specification.direction === direction; } function flipOrder(order) { const specification = order.specification; const flippedSpecification = { quantity: specification.totalPrice, totalPrice: specification.quantity, direction: specification.direction === "buy" ? "sell" : "buy", }; const newSpecification = lodash_1.default.merge({}, specification, flippedSpecification); return lodash_1.default.merge({}, order, { specification: newSpecification }); } function alignOrder(base, order) { const quantity = order.specification.quantity; return isSameIssue(quantity, base) ? order : flipOrder(order); } function formatBidsAndAsks(orderbook, offers) { const orders = offers .sort((a, b) => { return new bignumber_js_1.default(a.quality).comparedTo(b.quality) ?? 0; }) .map(orderbook_order_1.parseOrderbookOrder); const alignedOrders = orders.map(lodash_1.default.partial(alignOrder, orderbook.base)); const bids = alignedOrders.filter(lodash_1.default.partial(directionFilter, "buy")); const asks = alignedOrders.filter(lodash_1.default.partial(directionFilter, "sell")); return { bids, asks }; }