@bithomp/xrpl-api
Version:
A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger
60 lines (59 loc) • 2.31 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseDelegateChanges = parseDelegateChanges;
const utils_1 = require("../utils");
const permissions_1 = require("../ledger/permissions");
function parseDelegateStatus(node) {
if (node.diffType === "CreatedNode") {
return "created";
}
if (node.diffType === "ModifiedNode") {
return "modified";
}
if (node.diffType === "DeletedNode") {
return "deleted";
}
return undefined;
}
function summarizeDelegate(node) {
const final = node.diffType === "CreatedNode" ? node.newFields : node.finalFields;
const prev = node.previousFields;
const summary = {
status: parseDelegateStatus(node),
delegateIndex: node.ledgerIndex,
account: final.Account,
authorize: final.Authorize,
permissions: (0, permissions_1.parsePermissions)(final.Permissions),
};
if (node.diffType === "ModifiedNode") {
summary.permissionsChange = [];
const prevPermissions = (0, permissions_1.parsePermissions)(prev.Permissions);
const finalPermissions = summary.permissions || [];
const addedPermissions = finalPermissions.filter((perm) => !prevPermissions.includes(perm));
const removedPermissions = prevPermissions.filter((perm) => !finalPermissions.includes(perm));
if (addedPermissions.length > 0) {
summary.permissionsChange.push(...addedPermissions);
}
if (removedPermissions.length > 0) {
summary.permissionsChange.push(...removedPermissions);
}
if (summary.permissionsChange.length === 0) {
summary.permissionsChange = undefined;
}
}
if (node.PreviousTxnID) {
summary.previousTxnID = node.PreviousTxnID;
}
return summary;
}
function parseDelegateChanges(metadata) {
const affectedNodes = metadata.AffectedNodes.filter((affectedNode) => {
const node = affectedNode.CreatedNode || affectedNode.ModifiedNode || affectedNode.DeletedNode;
return node.LedgerEntryType === "Delegate";
});
if (affectedNodes.length !== 1) {
return undefined;
}
const normalizedNode = (0, utils_1.normalizeNode)(affectedNodes[0]);
return summarizeDelegate(normalizedNode);
}
;