UNPKG

xrpl

Version:

A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser

65 lines (56 loc) 2.09 kB
import { decode } from 'ripple-binary-codec' import { CreatedNode, isCreatedNode, TransactionMetadata, } from '../models/transactions/metadata' /** * Ensures that the metadata is in a deserialized format to parse. * * @param meta - the metadata from a `tx` method call. Can be in json format or binary format. * @returns the metadata in a deserialized format. */ function ensureDecodedMeta( meta: TransactionMetadata | string, ): TransactionMetadata { if (typeof meta === 'string') { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Meta is either metadata or serialized metadata. return decode(meta) as unknown as TransactionMetadata } return meta } /** * Gets the XChainClaimID value from the metadata of an `XChainCreateClaimID` transaction. * * @param meta - Metadata from the response to submitting and waiting for an XChainCreateClaimID transaction * or from a `tx` method call. * @returns The XChainClaimID for the minted NFT. * @throws if meta is not TransactionMetadata. */ export default function getXChainClaimID( meta: TransactionMetadata | string | undefined, ): string | undefined { if (typeof meta !== 'string' && meta?.AffectedNodes === undefined) { throw new TypeError(`Unable to parse the parameter given to getXChainClaimID. 'meta' must be the metadata from an XChainCreateClaimID transaction. Received ${JSON.stringify( meta, )} instead.`) } const decodedMeta = ensureDecodedMeta(meta) if (!decodedMeta.TransactionResult) { throw new TypeError( 'Cannot get XChainClaimID from un-validated transaction', ) } if (decodedMeta.TransactionResult !== 'tesSUCCESS') { return undefined } const createdNode = decodedMeta.AffectedNodes.find( (node) => isCreatedNode(node) && node.CreatedNode.LedgerEntryType === 'XChainOwnedClaimID', ) // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- necessary here return (createdNode as CreatedNode).CreatedNode.NewFields .XChainClaimID as string }