UNPKG

@bithomp/xrpl-api

Version:

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

60 lines (59 loc) 2.31 kB
"use strict"; 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); }