@bithomp/xrpl-api
Version:
A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger
84 lines (83 loc) • 3.25 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseURITokenChanges = parseURITokenChanges;
const common_1 = require("../../common");
function parseURITokenChanges(tx) {
return new URITokenChanges(tx).call();
}
class URITokenChanges {
constructor(tx) {
this.tx = tx;
this.changes = {};
}
call() {
if (this.hasAffectedNodes() === false) {
return this.changes;
}
this.parseAffectedNodes();
return this.changes;
}
hasAffectedNodes() {
if (this.tx.meta?.AffectedNodes === undefined) {
return false;
}
if (this.tx.meta?.AffectedNodes?.length === 0) {
return false;
}
return true;
}
addChange(account, change) {
if (!this.changes[account]) {
this.changes[account] = [];
}
this.changes[account].push((0, common_1.removeUndefined)(change));
}
parseAffectedNodes() {
for (const affectedNode of this.tx.meta.AffectedNodes) {
const node = affectedNode.CreatedNode || affectedNode.ModifiedNode || affectedNode.DeletedNode;
if (node?.LedgerEntryType === "URIToken" && node?.LedgerIndex) {
const uritokenID = node.LedgerIndex;
if (affectedNode.CreatedNode) {
this.addChange(node.NewFields.Owner, {
status: "added",
flags: node.NewFields.Flags,
uritokenID,
uri: node.NewFields.URI,
digest: node.NewFields.Digest,
issuer: node.NewFields.Issuer,
});
}
if (affectedNode.ModifiedNode) {
if (node.PreviousFields.Owner && node.PreviousFields.Owner !== node.FinalFields.Owner) {
this.addChange(node.PreviousFields.Owner, {
status: "removed",
flags: node.FinalFields.Flags,
uritokenID,
uri: node.FinalFields.URI,
digest: node.FinalFields.Digest,
issuer: node.FinalFields.Issuer,
});
this.addChange(node.FinalFields.Owner, {
status: "added",
flags: node.FinalFields.Flags,
uritokenID,
uri: node.FinalFields.URI,
digest: node.FinalFields.Digest,
issuer: node.FinalFields.Issuer,
});
}
}
if (affectedNode.DeletedNode) {
this.addChange(node.FinalFields.Owner, {
status: "removed",
flags: node.FinalFields.Flags,
uritokenID,
uri: node.FinalFields.URI,
digest: node.FinalFields.Digest,
issuer: node.FinalFields.Issuer,
});
}
}
}
}
}