summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts33
1 files 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
index 083b6618a..9951fd6b2 100644
--- 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,
);
});