import { dylib } from "./bindings.ts"; import { readCString, Sanitizer } from "./utils.ts"; export type TransactionInfoPtr = Deno.PointerObject<"transactionInfo">; export class TransactionInfo { #txInfoPtr: TransactionInfoPtr; sanitizer?: Sanitizer; constructor(txInfoPtr: TransactionInfoPtr, sanitizer?: Sanitizer) { this.#txInfoPtr = txInfoPtr; this.sanitizer = sanitizer; } async direction(): Promise<"in" | "out"> { switch (await dylib.symbols.MONERO_TransactionInfo_direction(this.#txInfoPtr)) { case 0: return "in"; case 1: return "out"; default: await this.sanitizer?.(); throw new Error("Invalid TransactionInfo direction"); } } async isPending(): Promise { return await dylib.symbols.MONERO_TransactionInfo_isPending(this.#txInfoPtr); } async isFailed(): Promise { return await dylib.symbols.MONERO_TransactionInfo_isFailed(this.#txInfoPtr); } async isCoinbase(): Promise { return await dylib.symbols.MONERO_TransactionInfo_isCoinbase(this.#txInfoPtr); } async amount(): Promise { return await dylib.symbols.MONERO_TransactionInfo_amount(this.#txInfoPtr); } async fee(): Promise { return await dylib.symbols.MONERO_TransactionInfo_fee(this.#txInfoPtr); } async blockHeight(): Promise { return await dylib.symbols.MONERO_TransactionInfo_blockHeight(this.#txInfoPtr); } async description(): Promise { const description = await dylib.symbols.MONERO_TransactionInfo_description(this.#txInfoPtr); return await readCString(description) || ""; } async subaddrIndex(): Promise { const subaddrIndex = await dylib.symbols.MONERO_TransactionInfo_subaddrIndex(this.#txInfoPtr); return await readCString(subaddrIndex) || ""; } async subaddrAccount(): Promise { return await dylib.symbols.MONERO_TransactionInfo_subaddrAccount(this.#txInfoPtr); } async label(): Promise { const label = await dylib.symbols.MONERO_TransactionInfo_label(this.#txInfoPtr); return await readCString(label) || ""; } async confirmations(): Promise { return await dylib.symbols.MONERO_TransactionInfo_confirmations(this.#txInfoPtr); } async unlockTime(): Promise { return await dylib.symbols.MONERO_TransactionInfo_unlockTime(this.#txInfoPtr); } async hash(): Promise { const hash = await dylib.symbols.MONERO_TransactionInfo_hash(this.#txInfoPtr); return await readCString(hash) || ""; } async timestamp(): Promise { return await dylib.symbols.MONERO_TransactionInfo_timestamp(this.#txInfoPtr); } async paymentId(): Promise { const paymentId = await dylib.symbols.MONERO_TransactionInfo_paymentId(this.#txInfoPtr); return await readCString(paymentId) || ""; } async transfersCount(): Promise { return await dylib.symbols.MONERO_TransactionInfo_transfers_count(this.#txInfoPtr); } async transfersAmount(index: number): Promise { return await dylib.symbols.MONERO_TransactionInfo_transfers_amount(this.#txInfoPtr, index); } async transfersAddress(index: number): Promise { const transfersAddress = await dylib.symbols.MONERO_TransactionInfo_transfers_address(this.#txInfoPtr, index); return await readCString(transfersAddress) || ""; } }