From f479ca01390483a8744207bd9b64ea3b7322231c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 7 Oct 2022 14:45:25 +0200 Subject: [PATCH] wallet-core: fix/deduplicate funding payto URI generation for withdrawals --- .../src/operations/transactions.ts | 39 ++++++++++++------- .../src/operations/withdraw.ts | 22 ++++++++--- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index be1233d2c..555ba0d8d 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -58,7 +58,10 @@ import { processPurchasePay } from "./pay.js"; import { processRefreshGroup } from "./refresh.js"; import { applyRefundFromPurchaseId } from "./refund.js"; import { processTip } from "./tip.js"; -import { processWithdrawalGroup } from "./withdraw.js"; +import { + augmentPaytoUrisForWithdrawal, + processWithdrawalGroup, +} from "./withdraw.js"; const logger = new Logger("taler-wallet-core:transactions.ts"); @@ -473,31 +476,39 @@ function buildTransactionForBankIntegratedWithdraw( } function buildTransactionForManualWithdraw( - wsr: WithdrawalGroupRecord, + withdrawalGroup: WithdrawalGroupRecord, exchangeDetails: ExchangeDetailsRecord, ort?: OperationRetryRecord, ): Transaction { - if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.BankManual) + if (withdrawalGroup.wgInfo.withdrawalType !== WithdrawalRecordType.BankManual) throw Error(""); + const plainPaytoUris = + exchangeDetails.wireInfo?.accounts.map((x) => x.payto_uri) ?? []; + + const exchangePaytoUris = augmentPaytoUrisForWithdrawal( + plainPaytoUris, + withdrawalGroup.reservePub, + withdrawalGroup.instructedAmount, + ); + return { type: TransactionType.Withdrawal, - amountEffective: Amounts.stringify(wsr.denomsSel.totalCoinValue), - amountRaw: Amounts.stringify(wsr.rawWithdrawalAmount), + amountEffective: Amounts.stringify( + withdrawalGroup.denomsSel.totalCoinValue, + ), + amountRaw: Amounts.stringify(withdrawalGroup.rawWithdrawalAmount), withdrawalDetails: { type: WithdrawalType.ManualTransfer, - reservePub: wsr.reservePub, - exchangePaytoUris: - exchangeDetails.wireInfo?.accounts.map((x) => - addPaytoQueryParams(x.payto_uri, { subject: wsr.reservePub }), - ) ?? [], + reservePub: withdrawalGroup.reservePub, + exchangePaytoUris, }, - exchangeBaseUrl: wsr.exchangeBaseUrl, - pending: !wsr.timestampFinish, - timestamp: wsr.timestampStart, + exchangeBaseUrl: withdrawalGroup.exchangeBaseUrl, + pending: !withdrawalGroup.timestampFinish, + timestamp: withdrawalGroup.timestampStart, transactionId: makeEventId( TransactionType.Withdrawal, - wsr.withdrawalGroupId, + withdrawalGroup.withdrawalGroupId, ), frozen: false, ...(ort?.lastError ? { error: ort.lastError } : {}), diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts index d768bbeb2..fb5e2c70a 100644 --- a/packages/taler-wallet-core/src/operations/withdraw.ts +++ b/packages/taler-wallet-core/src/operations/withdraw.ts @@ -1483,6 +1483,19 @@ export async function getFundingPaytoUrisTx( .runReadWrite((tx) => getFundingPaytoUris(tx, withdrawalGroupId)); } +export function augmentPaytoUrisForWithdrawal( + plainPaytoUris: string[], + reservePub: string, + instructedAmount: AmountJson, +): string[] { + return plainPaytoUris.map((x) => + addPaytoQueryParams(x, { + amount: Amounts.stringify(instructedAmount), + message: `Taler Withdrawal ${reservePub}`, + }), + ); +} + /** * Get payto URIs that can be used to fund a withdrawal operation. */ @@ -1512,11 +1525,10 @@ export async function getFundingPaytoUris( ); return []; } - return plainPaytoUris.map((x) => - addPaytoQueryParams(x, { - amount: Amounts.stringify(withdrawalGroup.instructedAmount), - message: `Taler Withdrawal ${withdrawalGroup.reservePub}`, - }), + return augmentPaytoUrisForWithdrawal( + plainPaytoUris, + withdrawalGroup.reservePub, + withdrawalGroup.instructedAmount, ); }