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`,
`nft_buy_offers`, and `nft_sell_offers` requests.
* 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)

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
*/

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 LedgerHashes from './LedgerHashes'
import NegativeUNL from './NegativeUNL'
import { NFTokenOffer } from './NFTokenOffer'
import { NFToken, NFTokenPage } from './NFTokenPage'
import Offer, { OfferFlags } from './Offer'
import PayChannel from './PayChannel'
import RippleState, { RippleStateFlags } from './RippleState'
@@ -32,6 +34,9 @@ export {
LedgerEntry,
LedgerHashes,
NegativeUNL,
NFTokenOffer,
NFTokenPage,
NFToken,
Offer,
OfferFlags,
PayChannel,

View File

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

View File

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