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