taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit a3c7da975b6375f8c57154875642fb29a67e8731
parent 267714074995aab337b474dce2cb0236c2861a9c
Author: Florian Dold <florian@dold.me>
Date:   Tue, 21 Feb 2023 20:31:23 +0100

wallet-core: fix peer-pull-credit long-polling and peer-pull-debit pending operation status

Diffstat:
Mpackages/taler-wallet-core/src/operations/pay-peer.ts | 6++++--
Mpackages/taler-wallet-core/src/operations/pending.ts | 9+++++++--
Mpackages/taler-wallet-core/src/wallet.ts | 4++--
3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/packages/taler-wallet-core/src/operations/pay-peer.ts b/packages/taler-wallet-core/src/operations/pay-peer.ts @@ -1155,7 +1155,7 @@ export async function acceptIncomingPeerPullPayment( * Look up information about an incoming peer pull payment. * Store the results in the wallet DB. */ -export async function preparePeerPullCredit( +export async function preparePeerPullDebit( ws: InternalWalletState, req: PreparePeerPullDebitRequest, ): Promise<PreparePeerPullDebitResponse> { @@ -1279,7 +1279,7 @@ export async function queryPurseForPeerPullCredit( cancellationToken: CancellationToken, ): Promise<LongpollResult> { const purseDepositUrl = new URL( - `purses/${pullIni.pursePub}/merge`, + `purses/${pullIni.pursePub}/deposit`, pullIni.exchangeBaseUrl, ); purseDepositUrl.searchParams.set("timeout_ms", "30000"); @@ -1380,6 +1380,8 @@ export async function processPeerPullCredit( }; } + logger.trace(`processing ${retryTag}, status=${pullIni.status}`); + switch (pullIni.status) { case PeerPullPaymentInitiationStatus.PurseDeposited: { // We implement this case so that the "retry" action on a peer-pull-credit transaction diff --git a/packages/taler-wallet-core/src/operations/pending.ts b/packages/taler-wallet-core/src/operations/pending.ts @@ -390,8 +390,13 @@ async function gatherPeerPullDebitPending( resp: PendingOperationsResponse, ): Promise<void> { await tx.peerPullPaymentIncoming.iter().forEachAsync(async (pi) => { - if (pi.status === PeerPullPaymentIncomingStatus.Paid) { - return; + switch (pi.status) { + case PeerPullPaymentIncomingStatus.Paid: + return; + case PeerPullPaymentIncomingStatus.Proposed: + return; + case PeerPullPaymentIncomingStatus.Accepted: + break; } const opId = TaskIdentifiers.forPeerPullPaymentDebit(pi); const retryRecord = await tx.operationRetries.get(opId); diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts @@ -199,7 +199,7 @@ import { import { acceptIncomingPeerPullPayment, confirmPeerPushPayment, - preparePeerPullCredit, + preparePeerPullDebit, preparePeerPushCredit, initiatePeerPullPayment, initiatePeerPushPayment, @@ -1462,7 +1462,7 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>( } case WalletApiOperation.PreparePeerPullDebit: { const req = codecForCheckPeerPullPaymentRequest().decode(payload); - return await preparePeerPullCredit(ws, req); + return await preparePeerPullDebit(ws, req); } case WalletApiOperation.ConfirmPeerPullDebit: { const req = codecForAcceptPeerPullPaymentRequest().decode(payload);