UNPKG

zumokit

Version:

ZumoKit is a Wallet as a Service SDK

148 lines (124 loc) 4.61 kB
import { Decimal } from 'decimal.js'; import { TransactionCryptoProperties } from './TransactionCryptoProperties'; import { TransactionFiatProperties } from './TransactionFiatProperties'; import { TransactionCardProperties } from './TransactionCardProperties'; import { TransactionType, TransactionDirection, TransactionStatus, CurrencyCode, Network, TransactionJSON, CustodyOrderJSON, } from '../interfaces'; import { Exchange } from './Exchange'; import { TransactionAmount } from './TransactionAmount'; import { InternalTransaction } from './InternalTransaction'; import { CustodyOrder } from './CustodyOrder'; /** Transaction details. */ export class Transaction { /** @internal */ json: TransactionJSON; /** Identifier. */ id: string; /** Transaction type. */ type: TransactionType; /** Currency code. */ currencyCode: CurrencyCode; /** * Transaction direction relative to account data snapshot. * <p> * See {@link AccountDataSnapshot}. */ direction: TransactionDirection; /** Network type. */ network: Network; /** Transaction status. */ status: TransactionStatus; /** Amount in transaction currency or null if transaction is Ethereum contract deploy. */ amount: Decimal | null; /** Transaction fee in transaction currency or null, if not yet available. */ fee: Decimal | null; /** Transaction nonce or null. Used to prevent double spend. */ nonce: string | null; /** Transaction senders. */ senders: Array<TransactionAmount>; /** Transaction recipients. */ recipients: Array<TransactionAmount>; /** Internal transactions, e.g. ETH contract interaction side effects. */ internalTransactions: Array<InternalTransaction>; /** * Custody order properties if it is a transaction associated with a custody order, null otherwise. */ custodyOrder: CustodyOrder | null; /** * Crypto properties if it is a crypto transaction, null otherwise. * <p> * See {@link TransactionType}. */ cryptoProperties: TransactionCryptoProperties | null; /** * Fiat properties if it is a fiat transaction, null otherwise. * <p> * See {@link TransactionType}. */ fiatProperties: TransactionFiatProperties | null; /** * Card properties if it is a card transaction, null otherwise. * <p> * See {@link TransactionType}. */ cardProperties: TransactionCardProperties | null; /** * Exchange properties if it is a transaction associated with an exchange, null otherwise. */ exchange: Exchange | null; /** Transaction metadata. */ metadata: any; /** Epoch timestamp when transaction was submitted or null for incoming transactions from outside of Zumo ecosystem. */ submittedAt: number | null; /** Epoch timestamp when transaction was submitted or null if transaction was not confirmed yet. */ confirmedAt: number | null; /** Epoch timestamp, minimum non-null value between submitted at and confirmed at timestamps. */ timestamp: number; /** @internal */ constructor(json: TransactionJSON) { this.json = json; this.id = json.id; this.type = json.type as TransactionType; this.currencyCode = json.currencyCode as CurrencyCode; this.direction = json.direction as TransactionDirection; this.network = json.network as Network; this.status = json.status as TransactionStatus; this.amount = json.amount ? new Decimal(json.amount) : null; this.fee = json.fee ? new Decimal(json.fee) : null; this.nonce = json.nonce; this.senders = json.senders.map( (senderJson) => new TransactionAmount(senderJson) ); this.recipients = json.recipients.map( (recipientJson) => new TransactionAmount(recipientJson) ); this.internalTransactions = json.internalTransactions.map( (internalTransactionJson) => new InternalTransaction(internalTransactionJson) ); this.custodyOrder = json.custodyOrder ? new CustodyOrder(json.custodyOrder) : null; this.cryptoProperties = json.cryptoProperties ? new TransactionCryptoProperties(json.cryptoProperties) : null; this.fiatProperties = json.fiatProperties ? new TransactionFiatProperties(json.fiatProperties) : null; this.cardProperties = json.cardProperties ? new TransactionCardProperties(json.cardProperties) : null; this.exchange = json.exchange ? new Exchange(json.exchange) : null; this.metadata = json.metadata ? JSON.parse(json.metadata) : null; this.submittedAt = json.submittedAt; this.confirmedAt = json.confirmedAt; this.timestamp = json.timestamp; } }