@bithomp/xrpl-api
Version:
A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger
148 lines (147 loc) • 6.43 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseAffectedObjects = parseAffectedObjects;
const nftoken_changes_1 = require("./nftoken_changes");
const nftoken_offer_changes_1 = require("./nftoken_offer_changes");
const account_nfts_1 = require("../../models/account_nfts");
const nftoken_flags_1 = __importDefault(require("../ledger/nftoken-flags"));
const nftoken_offer_flags_1 = __importDefault(require("../ledger/nftoken-offer-flags"));
const uritoken_flags_1 = __importDefault(require("../ledger/uritoken-flags"));
const common_1 = require("../../common");
function parseAffectedObjects(tx) {
return new AffectedObjects(tx).call();
}
class AffectedObjects {
constructor(tx) {
this.tx = tx;
this.affectedObjects = {};
this.nftChanges = undefined;
this.nftOfferChanges = undefined;
}
call() {
this.parseNFTokens();
this.parseNFTokenOffers();
this.parseURITokenChanges();
if (Object.keys(this.affectedObjects).length > 0) {
return this.affectedObjects;
}
return undefined;
}
getNFTokenChanges() {
if (this.nftChanges) {
return this.nftChanges;
}
this.nftChanges = (0, nftoken_changes_1.parseNFTokenChanges)(this.tx);
return this.nftChanges;
}
getNFTokenOfferChanges() {
if (this.nftOfferChanges) {
return this.nftOfferChanges;
}
this.nftOfferChanges = (0, nftoken_offer_changes_1.parseNFTokenOfferChanges)(this.tx);
return this.nftOfferChanges;
}
parseNFTokens() {
const nftokens = {};
const nftokenChanges = this.getNFTokenChanges();
for (const account in nftokenChanges) {
for (const nftsChange of nftokenChanges[account]) {
if (nftokens[nftsChange.nftokenID]) {
continue;
}
const nftokenIDInfo = (0, account_nfts_1.parseNFTokenID)(nftsChange.nftokenID);
if (nftokenIDInfo) {
nftokens[nftsChange.nftokenID] = {
nftokenID: nftsChange.nftokenID,
flags: (0, nftoken_flags_1.default)(nftokenIDInfo.Flags),
transferFee: nftokenIDInfo.TransferFee,
issuer: nftokenIDInfo.Issuer,
nftokenTaxon: nftokenIDInfo.NFTokenTaxon,
sequence: nftokenIDInfo.Sequence,
};
}
}
}
const nftokenOfferChanges = this.getNFTokenOfferChanges();
for (const account in nftokenOfferChanges) {
for (const nftokenOfferChange of nftokenOfferChanges[account]) {
if (nftokens[nftokenOfferChange.nftokenID]) {
continue;
}
const nftokenIDInfo = (0, account_nfts_1.parseNFTokenID)(nftokenOfferChange.nftokenID);
if (nftokenIDInfo) {
nftokens[nftokenOfferChange.nftokenID] = {
nftokenID: nftokenOfferChange.nftokenID,
flags: (0, nftoken_flags_1.default)(nftokenIDInfo.Flags),
transferFee: nftokenIDInfo.TransferFee,
issuer: nftokenIDInfo.Issuer,
nftokenTaxon: nftokenIDInfo.NFTokenTaxon,
sequence: nftokenIDInfo.Sequence,
};
}
}
}
if (Object.keys(nftokens).length > 0) {
this.affectedObjects.nftokens = nftokens;
}
}
parseNFTokenOffers() {
const nftokenOffers = {};
const nftokenOfferChanges = this.getNFTokenOfferChanges();
for (const account in nftokenOfferChanges) {
for (const nftokenOfferChange of nftokenOfferChanges[account]) {
if (nftokenOffers[nftokenOfferChange.index]) {
continue;
}
nftokenOffers[nftokenOfferChange.index] = {
index: nftokenOfferChange.index,
nftokenID: nftokenOfferChange.nftokenID,
flags: (0, nftoken_offer_flags_1.default)(nftokenOfferChange.flags),
owner: nftokenOfferChange.owner,
};
}
}
if (Object.keys(nftokenOffers).length > 0) {
this.affectedObjects.nftokenOffers = nftokenOffers;
}
}
parseURITokenChanges() {
const uritokens = {};
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) {
uritokens[uritokenID] = (0, common_1.removeUndefined)({
uritokenID,
flags: (0, uritoken_flags_1.default)(node.NewFields.Flags),
uri: node.NewFields.URI,
digest: node.NewFields.Digest,
issuer: node.NewFields.Issuer,
owner: node.NewFields.Owner,
amount: node.NewFields.Amount,
destination: node.NewFields.Destination,
});
}
if (affectedNode.ModifiedNode || affectedNode.DeletedNode) {
uritokens[uritokenID] = (0, common_1.removeUndefined)({
uritokenID,
flags: (0, uritoken_flags_1.default)(node.FinalFields.Flags),
uri: node.FinalFields.URI,
digest: node.FinalFields.Digest,
issuer: node.FinalFields.Issuer,
owner: node.FinalFields.Owner,
amount: node.FinalFields.Amount,
destination: node.FinalFields.Destination,
});
}
}
}
if (Object.keys(uritokens).length > 0) {
this.affectedObjects.uritokens = uritokens;
}
}
}