@nextrope/xrpl
Version:
A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser
109 lines (97 loc) • 2.97 kB
text/typescript
import { Amount, MPTAmount } from '../common'
import { BaseTransaction } from './common'
import {
MPTokenIssuanceCreate,
MPTokenIssuanceCreateMetadata,
} from './MPTokenIssuanceCreate'
import {
NFTokenAcceptOffer,
NFTokenAcceptOfferMetadata,
} from './NFTokenAcceptOffer'
import {
NFTokenCancelOffer,
NFTokenCancelOfferMetadata,
} from './NFTokenCancelOffer'
import {
NFTokenCreateOffer,
NFTokenCreateOfferMetadata,
} from './NFTokenCreateOffer'
import { NFTokenMint, NFTokenMintMetadata } from './NFTokenMint'
import { Payment, PaymentMetadata } from './payment'
import type { Transaction } from './transaction'
export interface CreatedNode {
CreatedNode: {
LedgerEntryType: string
LedgerIndex: string
NewFields: { [field: string]: unknown }
}
}
export interface ModifiedNode {
ModifiedNode: {
LedgerEntryType: string
LedgerIndex: string
FinalFields?: { [field: string]: unknown }
PreviousFields?: { [field: string]: unknown }
PreviousTxnID?: string
PreviousTxnLgrSeq?: number
}
}
export interface DeletedNode {
DeletedNode: {
LedgerEntryType: string
LedgerIndex: string
PreviousFields?: { [field: string]: unknown }
FinalFields: { [field: string]: unknown }
}
}
export type Node = CreatedNode | ModifiedNode | DeletedNode
/**
* A typeguard to check if a node is a CreatedNode.
*
* @param node - A node from metadata.
* @returns whether the given node is a CreatedNode.
*/
export function isCreatedNode(node: Node): node is CreatedNode {
return Object.prototype.hasOwnProperty.call(node, `CreatedNode`)
}
/**
* A typeguard to check if a node is a ModifiedNode.
*
* @param node - A node from metadata.
* @returns whether the given node is a ModifiedNode.
*/
export function isModifiedNode(node: Node): node is ModifiedNode {
return Object.prototype.hasOwnProperty.call(node, `ModifiedNode`)
}
/**
* A typeguard to check if a node is a DeletedNode.
*
* @param node - A node from metadata.
* @returns whether the given node is a DeletedNode.
*/
export function isDeletedNode(node: Node): node is DeletedNode {
return Object.prototype.hasOwnProperty.call(node, `DeletedNode`)
}
export interface TransactionMetadataBase {
AffectedNodes: Node[]
DeliveredAmount?: Amount | MPTAmount
// "unavailable" possible for transactions before 2014-01-20
delivered_amount?: Amount | MPTAmount | 'unavailable'
TransactionIndex: number
TransactionResult: string
ParentBatchID?: string
}
export type TransactionMetadata<T extends BaseTransaction = Transaction> =
T extends Payment
? PaymentMetadata
: T extends NFTokenMint
? NFTokenMintMetadata
: T extends NFTokenCreateOffer
? NFTokenCreateOfferMetadata
: T extends NFTokenAcceptOffer
? NFTokenAcceptOfferMetadata
: T extends NFTokenCancelOffer
? NFTokenCancelOfferMetadata
: T extends MPTokenIssuanceCreate
? MPTokenIssuanceCreateMetadata
: TransactionMetadataBase