commit 5f31dad2d3af80ab0f53cc52a8740f9a37ca0e75
parent 7ea8321ddd2d56f43dceaa18340f1d1c39a83e76
Author: Sebastian <sebasjm@gmail.com>
Date: Fri, 20 Jan 2023 15:43:37 -0300
also merge refund when getting transactionById
Diffstat:
1 file changed, 26 insertions(+), 7 deletions(-)
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -286,11 +286,6 @@ export async function getTransactionById(
const purchase = await tx.purchases.get(proposalId);
if (!purchase) throw Error("not found");
- const theRefund = Object.values(purchase.refunds).find(
- (r) => `${r.executionTime.t_s}` === executionTimeStr,
- );
- if (!theRefund) throw Error("not found");
-
const t = await tx.tombstones.get(
makeTombstoneId(
TombstoneTag.DeleteRefund,
@@ -299,17 +294,41 @@ export async function getTransactionById(
),
);
if (t) throw Error("deleted");
+
+ const filteredRefunds = await Promise.all(
+ Object.values(purchase.refunds).map(async (r) => {
+ const t = await tx.tombstones.get(
+ makeTombstoneId(
+ TombstoneTag.DeleteRefund,
+ purchase.proposalId,
+ `${r.executionTime.t_s}`,
+ ),
+ );
+ if (!t) return r;
+ return undefined;
+ }),
+ );
+
+ const cleanRefunds = filteredRefunds.filter(
+ (x): x is WalletRefundItem => !!x,
+ );
+
const download = await expectProposalDownload(ws, purchase, tx);
const contractData = download.contractData;
const refunds = mergeRefundByExecutionTime(
- [theRefund],
+ cleanRefunds,
Amounts.zeroOfAmount(contractData.amount),
);
+ const theRefund = refunds.find(
+ (r) => `${r.executionTime.t_s}` === executionTimeStr,
+ );
+ if (!theRefund) throw Error("not found");
+
return buildTransactionForRefund(
purchase,
contractData,
- refunds[0],
+ theRefund,
undefined,
);
});