diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/transactions.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index ac82dc96d..a89557c1d 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -30,6 +30,7 @@ import { PaymentStatus, PeerContractTerms, RefundInfoShort, + RefundPaymentInfo, TalerErrorCode, TalerProtocolTimestamp, Transaction, @@ -64,6 +65,7 @@ import { PeerPushPaymentIncomingStatus, PeerPullPaymentInitiationRecord, RefundGroupRecord, + ContractTermsRecord, } from "../db.js"; import { InternalWalletState } from "../internal-wallet-state.js"; import { PendingTaskType } from "../pending-types.js"; @@ -648,7 +650,18 @@ function buildTransactionForManualWithdraw( function buildTransactionForRefund( refundRecord: RefundGroupRecord, + maybeContractData: WalletContractData | undefined, ): Transaction { + let paymentInfo: RefundPaymentInfo | undefined = undefined; + + if (maybeContractData) { + paymentInfo = { + merchant: maybeContractData.merchant, + summary: maybeContractData.summary, + summary_i18n: maybeContractData.summaryI18n, + }; + } + return { type: TransactionType.Refund, amountEffective: refundRecord.amountEffective, @@ -666,6 +679,7 @@ function buildTransactionForRefund( extendedStatus: ExtendedStatus.Done, frozen: false, pending: false, + paymentInfo, } } @@ -1022,7 +1036,23 @@ export async function getTransactions( if (shouldSkipCurrency(transactionsRequest, currency)) { return; } - transactions.push(buildTransactionForRefund(refundGroup)) + let contractData: WalletContractData | undefined = undefined; + const purchaseTx = await tx.purchases.get(refundGroup.proposalId); + if (purchaseTx && purchaseTx.download) { + const download = purchaseTx.download; + const contractTermsRecord = await tx.contractTerms.get( + download.contractTermsHash, + ); + if (!contractTermsRecord) { + return; + } + contractData = extractContractData( + contractTermsRecord?.contractTermsRaw, + download.contractTermsHash, + download.contractTermsMerchantSig, + ); + } + transactions.push(buildTransactionForRefund(refundGroup, contractData)); }); tx.refreshGroups.iter().forEachAsync(async (rg) => { |