@bithomp/xrpl-api
Version:
A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger
41 lines (40 loc) • 1.8 kB
JavaScript
;
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 };
}