From d759f08225a85858b0de7d98b5c50d410360ee8d Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 10 Jul 2023 14:08:05 -0300 Subject: [PATCH] repurchase detection - check that the old transaction is not refunded - if the old purchase was deleted fallback to no-repurchase detected --- .../src/operations/pay-merchant.ts | 23 +++++++++---------- .../src/wallet/Transaction.tsx | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts index e258a0994..2580c97f5 100644 --- a/packages/taler-wallet-core/src/operations/pay-merchant.ts +++ b/packages/taler-wallet-core/src/operations/pay-merchant.ts @@ -539,7 +539,7 @@ async function processDownloadProposal( } // FIXME: Adjust this to account for refunds, don't count as repurchase // if original order is refunded. - if (otherPurchase) { + if (otherPurchase && otherPurchase.refundAmountAwaiting === undefined) { logger.warn("repurchase detected"); p.purchaseStatus = PurchaseStatus.RepurchaseDetected; p.repurchaseProposalId = otherPurchase.proposalId; @@ -976,17 +976,16 @@ export async function checkPaymentByProposalId( } if (proposal.purchaseStatus === PurchaseStatus.RepurchaseDetected) { const existingProposalId = proposal.repurchaseProposalId; - if (!existingProposalId) { - throw Error("invalid proposal state"); - } - logger.trace("using existing purchase for same product"); - proposal = await ws.db - .mktx((x) => [x.purchases]) - .runReadOnly(async (tx) => { - return tx.purchases.get(existingProposalId); - }); - if (!proposal) { - throw Error("existing proposal is in wrong state"); + if (existingProposalId) { + logger.trace("using existing purchase for same product"); + const oldProposal = await ws.db + .mktx((x) => [x.purchases]) + .runReadOnly(async (tx) => { + return tx.purchases.get(existingProposalId); + }); + if (oldProposal) { + proposal = oldProposal; + } } } const d = await expectProposalDownload(ws, proposal); diff --git a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx index e164a28c5..8d564a275 100644 --- a/packages/taler-wallet-webextension/src/wallet/Transaction.tsx +++ b/packages/taler-wallet-webextension/src/wallet/Transaction.tsx @@ -1497,7 +1497,7 @@ export function PurchaseDetails({ {Amounts.isNonZero(price.fee) && ( - Transaction fees + Fees