diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/transactions.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 33 |
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, ); }); |