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