feat: add ledger entry types for NFTokens (#2349)

Add `NFToken`, `NFTokenPage`, and `NFTokenOffer`
This commit is contained in:
Caleb Kniffen
2023-06-26 12:57:47 -05:00
committed by GitHub
parent b6d6fafebc
commit b152ebc4ce
7 changed files with 51 additions and 13 deletions

View File

@@ -9,6 +9,8 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr
* Add `ledger_hash` and `ledger_index` to `account_nfts`, * Add `ledger_hash` and `ledger_index` to `account_nfts`,
`nft_buy_offers`, and `nft_sell_offers` requests. `nft_buy_offers`, and `nft_sell_offers` requests.
* Add `nft_page` to `ledger_entry` request. * Add `nft_page` to `ledger_entry` request.
* Add types for `NFTokenPage` and `NFTokenOffer` LedgerEntries.
* Add type for NFToken object that is stored on a `NFTokenPage`.
## 2.8.0 (2023-06-13) ## 2.8.0 (2023-06-13)

View File

@@ -119,7 +119,7 @@ export interface NFTOffer {
} }
/** /**
* One NFToken that might be returned from either an {@link NFTInfoResponse} * One NFToken that might be returned from an {@link NFTInfoResponse}
* *
* @category Responses * @category Responses
*/ */

View File

@@ -0,0 +1,16 @@
import { Amount } from '../common'
import BaseLedgerEntry from './BaseLedgerEntry'
export interface NFTokenOffer extends BaseLedgerEntry {
LedgerEntryType: 'NFTokenOffer'
Amount: Amount
Destination?: string
Expiration: number
Flags: number
NFTokenOfferNode?: string
Owner: string
OwnerNode?: string
PreviousTxnID: string
PreviousTxnLgrSeq: number
}

View File

@@ -0,0 +1,22 @@
import BaseLedgerEntry from './BaseLedgerEntry'
export interface NFToken {
Flags: number
Issuer: string
NFTokenID: string
NFTokenTaxon: number
URI?: string
}
export interface NFTokenWrapper {
NFToken: NFToken
}
export interface NFTokenPage extends BaseLedgerEntry {
LedgerEntryType: 'NFTokenPage'
NextPageMin?: string
NFTokens: NFTokenWrapper[]
PreviousPageMin?: string
PreviousTxnID?: string
PreviousTxnLgrSeq?: number
}

View File

@@ -12,6 +12,8 @@ import Ledger from './Ledger'
import LedgerEntry from './LedgerEntry' import LedgerEntry from './LedgerEntry'
import LedgerHashes from './LedgerHashes' import LedgerHashes from './LedgerHashes'
import NegativeUNL from './NegativeUNL' import NegativeUNL from './NegativeUNL'
import { NFTokenOffer } from './NFTokenOffer'
import { NFToken, NFTokenPage } from './NFTokenPage'
import Offer, { OfferFlags } from './Offer' import Offer, { OfferFlags } from './Offer'
import PayChannel from './PayChannel' import PayChannel from './PayChannel'
import RippleState, { RippleStateFlags } from './RippleState' import RippleState, { RippleStateFlags } from './RippleState'
@@ -32,6 +34,9 @@ export {
LedgerEntry, LedgerEntry,
LedgerHashes, LedgerHashes,
NegativeUNL, NegativeUNL,
NFTokenOffer,
NFTokenPage,
NFToken,
Offer, Offer,
OfferFlags, OfferFlags,
PayChannel, PayChannel,

View File

@@ -3,8 +3,7 @@ import { NFToken } from '../common'
import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod'
/** /**
* The `nft_info` method retrieves information about NFToken * The `nft_info` method retrieves information about an NFToken.
* NFToken.
* *
* @category Requests * @category Requests
*/ */

View File

@@ -1,6 +1,7 @@
import flatMap from 'lodash/flatMap' import flatMap from 'lodash/flatMap'
import { decode } from 'ripple-binary-codec' import { decode } from 'ripple-binary-codec'
import { NFTokenWrapper } from '../models/ledger/NFTokenPage'
import { import {
CreatedNode, CreatedNode,
isCreatedNode, isCreatedNode,
@@ -9,13 +10,6 @@ import {
TransactionMetadata, TransactionMetadata,
} from '../models/transactions/metadata' } from '../models/transactions/metadata'
interface NFToken {
NFToken: {
NFTokenID: string
URI: string
}
}
/** /**
* Ensures that the metadata is in a deserialized format to parse. * Ensures that the metadata is in a deserialized format to parse.
* *
@@ -80,7 +74,7 @@ export default function getNFTokenID(
const previousTokenIDSet = new Set( const previousTokenIDSet = new Set(
flatMap(affectedNodes, (node) => { flatMap(affectedNodes, (node) => {
const nftokens = isModifiedNode(node) const nftokens = isModifiedNode(node)
? (node.ModifiedNode.PreviousFields?.NFTokens as NFToken[]) ? (node.ModifiedNode.PreviousFields?.NFTokens as NFTokenWrapper[])
: [] : []
return nftokens.map((token) => token.NFToken.NFTokenID) return nftokens.map((token) => token.NFToken.NFTokenID)
}).filter((id) => Boolean(id)), }).filter((id) => Boolean(id)),
@@ -90,8 +84,8 @@ export default function getNFTokenID(
const finalTokenIDs = flatMap(affectedNodes, (node) => const finalTokenIDs = flatMap(affectedNodes, (node) =>
( (
(((node as ModifiedNode).ModifiedNode?.FinalFields?.NFTokens ?? (((node as ModifiedNode).ModifiedNode?.FinalFields?.NFTokens ??
(node as CreatedNode).CreatedNode?.NewFields?.NFTokens) as NFToken[]) ?? (node as CreatedNode).CreatedNode?.NewFields
[] ?.NFTokens) as NFTokenWrapper[]) ?? []
).map((token) => token.NFToken.NFTokenID), ).map((token) => token.NFToken.NFTokenID),
).filter((nftokenID) => Boolean(nftokenID)) ).filter((nftokenID) => Boolean(nftokenID))
/* eslint-enable @typescript-eslint/consistent-type-assertions -- Necessary for parsing metadata */ /* eslint-enable @typescript-eslint/consistent-type-assertions -- Necessary for parsing metadata */