mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-19 19:55:51 +00:00
feat: add ledger entry types for NFTokens (#2349)
Add `NFToken`, `NFTokenPage`, and `NFTokenOffer`
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
16
packages/xrpl/src/models/ledger/NFTokenOffer.ts
Normal file
16
packages/xrpl/src/models/ledger/NFTokenOffer.ts
Normal 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
|
||||
}
|
||||
22
packages/xrpl/src/models/ledger/NFTokenPage.ts
Normal file
22
packages/xrpl/src/models/ledger/NFTokenPage.ts
Normal 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
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user