UNPKG

@bithomp/xrpl-api

Version:

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

71 lines (70 loc) 3.06 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseChannelChanges = parseChannelChanges; const bignumber_js_1 = __importDefault(require("bignumber.js")); const amount_1 = __importDefault(require("../ledger/amount")); const source_1 = require("../ledger/source"); const destination_1 = require("../ledger/destination"); const utils_1 = require("../utils"); function parsePaymentChannelStatus(node) { if (node.diffType === "CreatedNode") { return "created"; } if (node.diffType === "ModifiedNode") { return "modified"; } if (node.diffType === "DeletedNode") { return "deleted"; } return undefined; } function summarizePaymentChannel(node) { const final = node.diffType === "CreatedNode" ? node.newFields : node.finalFields; const prev = node.previousFields; const summary = { status: parsePaymentChannelStatus(node), channelId: node.ledgerIndex, source: (0, source_1.parseSource)(final), destination: (0, destination_1.parseDestination)(final), channelAmountDrops: new bignumber_js_1.default(final.Amount || 0).toString(10), amount: (0, amount_1.default)(final.Amount), }; if (final.Balance) { summary.channelBalanceDrops = new bignumber_js_1.default(final.Balance || 0).toString(10); summary.balance = (0, amount_1.default)(final.Balance); } if (prev.Amount) { summary.channelAmountChangeDrops = new bignumber_js_1.default(final.Amount).minus(new bignumber_js_1.default(prev.Amount || 0)).toString(10); summary.amountChange = (0, amount_1.default)(prev.Amount); summary.amountChange.value = new bignumber_js_1.default(summary.amountChange.value) .minus(new bignumber_js_1.default(summary.amount.value)) .toString(10); } if (prev.Balance) { summary.channelBalanceChangeDrops = new bignumber_js_1.default(final.Balance) .minus(new bignumber_js_1.default(prev.Balance || 0)) .toString(10); summary.balanceChange = (0, amount_1.default)(prev.Balance); summary.balanceChange.value = new bignumber_js_1.default(summary.balanceChange.value) .minus(new bignumber_js_1.default(summary.balance?.value || 0)) .toString(10); } if (node.PreviousTxnID) { summary.previousTxnID = node.PreviousTxnID; } return summary; } function parseChannelChanges(metadata) { const affectedNodes = metadata.AffectedNodes.filter((affectedNode) => { const node = affectedNode.CreatedNode || affectedNode.ModifiedNode || affectedNode.DeletedNode; return node.LedgerEntryType === "PayChannel"; }); if (affectedNodes.length !== 1) { return undefined; } const normalizedNode = (0, utils_1.normalizeNode)(affectedNodes[0]); return summarizePaymentChannel(normalizedNode); }