diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index eca3386c..7b788ba4 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -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) diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index 14d14237..8216ee9c 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -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 */ diff --git a/packages/xrpl/src/models/ledger/NFTokenOffer.ts b/packages/xrpl/src/models/ledger/NFTokenOffer.ts new file mode 100644 index 00000000..60a953cc --- /dev/null +++ b/packages/xrpl/src/models/ledger/NFTokenOffer.ts @@ -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 +} diff --git a/packages/xrpl/src/models/ledger/NFTokenPage.ts b/packages/xrpl/src/models/ledger/NFTokenPage.ts new file mode 100644 index 00000000..bfd5be8a --- /dev/null +++ b/packages/xrpl/src/models/ledger/NFTokenPage.ts @@ -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 +} diff --git a/packages/xrpl/src/models/ledger/index.ts b/packages/xrpl/src/models/ledger/index.ts index fbb31d40..66e19aec 100644 --- a/packages/xrpl/src/models/ledger/index.ts +++ b/packages/xrpl/src/models/ledger/index.ts @@ -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, diff --git a/packages/xrpl/src/models/methods/nftInfo.ts b/packages/xrpl/src/models/methods/nftInfo.ts index f8f2b37f..be45be54 100644 --- a/packages/xrpl/src/models/methods/nftInfo.ts +++ b/packages/xrpl/src/models/methods/nftInfo.ts @@ -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 */ diff --git a/packages/xrpl/src/utils/getNFTokenID.ts b/packages/xrpl/src/utils/getNFTokenID.ts index cd9aa6b1..2ba6a5b3 100644 --- a/packages/xrpl/src/utils/getNFTokenID.ts +++ b/packages/xrpl/src/utils/getNFTokenID.ts @@ -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 */