mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-21 04:35:49 +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`,
|
* 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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
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 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,
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user