aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-11-16 10:42:05 +0100
committerFlorian Dold <florian@dold.me>2023-11-16 10:42:05 +0100
commitc5f63c097a6f7b07edfa7a481ac37ea45966d04a (patch)
treeef3f387f274b6f10e0f23160c3eb2900f64a262b /packages
parente4a1b373b018d7528828954ff8da96fe6b5f9728 (diff)
downloadwallet-core-c5f63c097a6f7b07edfa7a481ac37ea45966d04a.tar.xz
wallet-core: only hand out talerUri for push payments when the transaction is in the right state
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-util/src/transactions-types.ts5
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts23
2 files changed, 19 insertions, 9 deletions
diff --git a/packages/taler-util/src/transactions-types.ts b/packages/taler-util/src/transactions-types.ts
index 88830d82b..3a7f4d541 100644
--- a/packages/taler-util/src/transactions-types.ts
+++ b/packages/taler-util/src/transactions-types.ts
@@ -406,8 +406,11 @@ export interface TransactionPeerPushDebit extends TransactionCommon {
/**
* URI to accept the payment.
+ *
+ * Only present if the transaction is in a state where the other party can
+ * accept the payment.
*/
- talerUri: string;
+ talerUri?: string;
}
/**
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index a30120baa..7ee6275b0 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -66,6 +66,7 @@ import {
} from "../db.js";
import {
GetReadOnlyAccess,
+ PeerPushDebitStatus,
timestampPreciseFromDb,
timestampProtocolFromDb,
WalletStoresV1,
@@ -136,9 +137,9 @@ import {
import {
iterRecordsForDeposit,
iterRecordsForPeerPullDebit,
- iterRecordsForPeerPullInitiation,
+ iterRecordsForPeerPullInitiation as iterRecordsForPeerPullCredit,
iterRecordsForPeerPushCredit,
- iterRecordsForPeerPushInitiation,
+ iterRecordsForPeerPushInitiation as iterRecordsForPeerPushDebit,
iterRecordsForPurchase,
iterRecordsForRefresh,
iterRecordsForRefund,
@@ -463,6 +464,15 @@ function buildTransactionForPushPaymentDebit(
contractTerms: PeerContractTerms,
ort?: OperationRetryRecord,
): Transaction {
+ let talerUri: string | undefined = undefined;
+ switch (pi.status) {
+ case PeerPushDebitStatus.PendingReady:
+ case PeerPushDebitStatus.SuspendedReady:
+ talerUri = stringifyPayPushUri({
+ exchangeBaseUrl: pi.exchangeBaseUrl,
+ contractPriv: pi.contractPriv,
+ });
+ }
return {
type: TransactionType.PeerPushDebit,
txState: computePeerPushDebitTransactionState(pi),
@@ -475,10 +485,7 @@ function buildTransactionForPushPaymentDebit(
summary: contractTerms.summary,
},
timestamp: timestampPreciseFromDb(pi.timestampCreated),
- talerUri: stringifyPayPushUri({
- exchangeBaseUrl: pi.exchangeBaseUrl,
- contractPriv: pi.contractPriv,
- }),
+ talerUri,
transactionId: constructTransactionIdentifier({
tag: TransactionType.PeerPushDebit,
pursePub: pi.pursePub,
@@ -985,7 +992,7 @@ export async function getTransactions(
x.refundGroups,
])
.runReadOnly(async (tx) => {
- await iterRecordsForPeerPushInitiation(tx, filter, async (pi) => {
+ await iterRecordsForPeerPushDebit(tx, filter, async (pi) => {
const amount = Amounts.parseOrThrow(pi.amount);
if (shouldSkipCurrency(transactionsRequest, amount.currency)) {
@@ -1073,7 +1080,7 @@ export async function getTransactions(
);
});
- await iterRecordsForPeerPullInitiation(tx, filter, async (pi) => {
+ await iterRecordsForPeerPullCredit(tx, filter, async (pi) => {
const currency = Amounts.currencyOf(pi.amount);
if (shouldSkipCurrency(transactionsRequest, currency)) {
return;