UNPKG

@bithomp/xrpl-api

Version:

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

69 lines (68 loc) 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseRemarksChanges = parseRemarksChanges; const utils_1 = require("../utils"); const remarks_1 = require("../ledger/remarks"); function parseEntryRemarks(node) { const final = node.diffType === "CreatedNode" ? node.newFields : node.finalFields; const prev = node.previousFields; if (!final.Remarks && !prev.Remarks) { return undefined; } const remarks = ((0, remarks_1.parseRemarks)(final.Remarks) || []); if (prev.Remarks) { const previousRemarks = (0, remarks_1.parseRemarks)(prev.Remarks) || []; remarks.forEach((remark) => { const previousRemark = previousRemarks.find((r) => r.name === remark.name); if (previousRemark) { if (previousRemark.value !== remark.value) { remark.status = "modified"; remark.previousValue = previousRemark.value; } } else { remark.status = "created"; } }); previousRemarks.forEach((previousRemark) => { if (!remarks.some((r) => r.name === previousRemark.name)) { remarks.push({ ...previousRemark, status: "deleted", }); } }); } else { remarks.forEach((remark) => { remark.status = "created"; }); } return remarks; } function summarizeRemarks(node) { const summary = { objectID: node.ledgerIndex, entryType: node.entryType, remarks: parseEntryRemarks(node), }; if (node.PreviousTxnID) { summary.previousTxnID = node.PreviousTxnID; } return summary; } function parseRemarksChanges(tx) { if (!tx.ObjectID || !tx.meta || !Array.isArray(tx.meta.AffectedNodes)) { return undefined; } const metadata = tx.meta; const affectedNodes = metadata.AffectedNodes.filter((affectedNode) => { const node = affectedNode.CreatedNode || affectedNode.ModifiedNode || affectedNode.DeletedNode; return node.LedgerIndex === tx.ObjectID; }); if (affectedNodes.length !== 1) { return undefined; } const normalizedNode = (0, utils_1.normalizeNode)(affectedNodes[0]); return summarizeRemarks(normalizedNode); }