From 07ed34e6acfb08ed3e44a5eb7bff14012e54a1aa Mon Sep 17 00:00:00 2001 From: Im-Beast Date: Wed, 20 Nov 2024 18:13:50 +0100 Subject: [PATCH] feat(monero.ts): support returning multiple values whenever necessary --- impls/monero.ts/src/pending_transaction.ts | 9 ++++-- impls/monero.ts/src/unsigned_transaction.ts | 34 +++++++++++++++++---- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/impls/monero.ts/src/pending_transaction.ts b/impls/monero.ts/src/pending_transaction.ts index 862d5f1f..546db531 100644 --- a/impls/monero.ts/src/pending_transaction.ts +++ b/impls/monero.ts/src/pending_transaction.ts @@ -63,14 +63,19 @@ export class PendingTransaction { return await getSymbol("PendingTransaction_fee")(this.#pendingTxPtr); } - async txid(separator: string, sanitize = true): Promise { + async txid(separator: string, sanitize = true): Promise { const result = await getSymbol("PendingTransaction_txid")( this.#pendingTxPtr, CString(separator), ); if (!result) return null; await this.throwIfError(sanitize); - return await readCString(result) || null; + + const txids = (await readCString(result))?.split(separator); + + if (!txids) return null; + if (txids.length > 1) return txids; + return txids[0]; } async txCount(): Promise { diff --git a/impls/monero.ts/src/unsigned_transaction.ts b/impls/monero.ts/src/unsigned_transaction.ts index 318cac9c..b7cb66ff 100644 --- a/impls/monero.ts/src/unsigned_transaction.ts +++ b/impls/monero.ts/src/unsigned_transaction.ts @@ -32,25 +32,47 @@ export class UnsignedTransaction { } } - async amount(separator = ","): Promise { - return readCString(await getSymbol("UnsignedTransaction_amount")(this.#unsignedTxPtr, CString(separator))); + async amount(separator = ","): Promise { + const amounts = (await readCString( + await getSymbol("UnsignedTransaction_amount")(this.#unsignedTxPtr, CString(separator)), + ))?.split(separator); + + if (!amounts) return null; + if (amounts.length > 1) { + return amounts; + } + return amounts[0]; } - async fee(separator = ","): Promise { - return readCString(await getSymbol("UnsignedTransaction_fee")(this.#unsignedTxPtr, CString(separator))); + async fee(separator = ","): Promise { + const fees = (await readCString( + await getSymbol("UnsignedTransaction_fee")(this.#unsignedTxPtr, CString(separator)), + ))?.split(separator); + + if (!fees) return null; + if (fees.length > 1) { + return fees; + } + return fees[0]; } async txCount(): Promise { return await getSymbol("UnsignedTransaction_txCount")(this.#unsignedTxPtr); } - async recipientAddress(separator = ","): Promise { + async recipientAddress(separator = ","): Promise { const result = await getSymbol("UnsignedTransaction_recipientAddress")( this.#unsignedTxPtr, CString(separator), ); await this.throwIfError(); - return await readCString(result); + const addresses = (await readCString(result))?.split(separator); + + if (!addresses) return null; + if (addresses.length > 1) { + return addresses; + } + return addresses[0]; } async sign(signedFileName: string): Promise {