From 52a1f63e0a8cc2ca78910e8b56326376eb1d75d0 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 21 Feb 2024 14:23:01 +0100 Subject: wallet-core: use cancellation tokens when possible --- .../taler-wallet-core/src/pay-peer-push-debit.ts | 32 +++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'packages/taler-wallet-core/src/pay-peer-push-debit.ts') diff --git a/packages/taler-wallet-core/src/pay-peer-push-debit.ts b/packages/taler-wallet-core/src/pay-peer-push-debit.ts index 1bb3b8772..40a5d97a4 100644 --- a/packages/taler-wallet-core/src/pay-peer-push-debit.ts +++ b/packages/taler-wallet-core/src/pay-peer-push-debit.ts @@ -52,7 +52,7 @@ import { import { PeerCoinRepair, selectPeerCoins } from "./coinSelection.js"; import { PendingTaskType, - TaskId, + TaskIdStr, TaskRunResult, TaskRunResultType, TransactionContext, @@ -84,7 +84,7 @@ const logger = new Logger("pay-peer-push-debit.ts"); export class PeerPushDebitTransactionContext implements TransactionContext { readonly transactionId: TransactionIdStr; - readonly retryTag: TaskId; + readonly taskId: TaskIdStr; constructor( public ws: InternalWalletState, @@ -94,7 +94,7 @@ export class PeerPushDebitTransactionContext implements TransactionContext { tag: TransactionType.PeerPushDebit, pursePub, }); - this.retryTag = constructTaskIdentifier({ + this.taskId = constructTaskIdentifier({ tag: PendingTaskType.PeerPushDebit, pursePub, }); @@ -112,7 +112,7 @@ export class PeerPushDebitTransactionContext implements TransactionContext { } async suspendTransaction(): Promise { - const { ws, pursePub, transactionId, retryTag } = this; + const { ws, pursePub, transactionId, taskId: retryTag } = this; const transitionInfo = await ws.db.runReadWriteTx( ["peerPushDebit"], async (tx) => { @@ -170,7 +170,7 @@ export class PeerPushDebitTransactionContext implements TransactionContext { } async abortTransaction(): Promise { - const { ws, pursePub, transactionId, retryTag } = this; + const { ws, pursePub, transactionId, taskId: retryTag } = this; const transitionInfo = await ws.db.runReadWriteTx( ["peerPushDebit"], async (tx) => { @@ -224,7 +224,7 @@ export class PeerPushDebitTransactionContext implements TransactionContext { } async resumeTransaction(): Promise { - const { ws, pursePub, transactionId, retryTag } = this; + const { ws, pursePub, transactionId, taskId: retryTag } = this; const transitionInfo = await ws.db.runReadWriteTx( ["peerPushDebit"], async (tx) => { @@ -282,7 +282,7 @@ export class PeerPushDebitTransactionContext implements TransactionContext { } async failTransaction(): Promise { - const { ws, pursePub, transactionId, retryTag } = this; + const { ws, pursePub, transactionId, taskId: retryTag } = this; const transitionInfo = await ws.db.runReadWriteTx( ["peerPushDebit"], async (tx) => { @@ -440,6 +440,7 @@ async function handlePurseCreationConflict( async function processPeerPushDebitCreateReserve( ws: InternalWalletState, peerPushInitiation: PeerPushDebitRecord, + cancellationToken: CancellationToken, ): Promise { const pursePub = peerPushInitiation.pursePub; const purseExpiration = peerPushInitiation.purseExpiration; @@ -519,6 +520,7 @@ async function processPeerPushDebitCreateReserve( const httpResp = await ws.http.fetch(createPurseUrl.href, { method: "POST", body: reqBody, + cancellationToken, }); { @@ -563,6 +565,7 @@ async function processPeerPushDebitCreateReserve( async function processPeerPushDebitAbortingDeletePurse( ws: InternalWalletState, peerPushInitiation: PeerPushDebitRecord, + cancellationToken: CancellationToken, ): Promise { const { pursePub, pursePriv } = peerPushInitiation; const transactionId = constructTransactionIdentifier({ @@ -582,6 +585,7 @@ async function processPeerPushDebitAbortingDeletePurse( headers: { "taler-purse-signature": sigResp.sig, }, + cancellationToken, }); logger.info(`deleted purse with response status ${resp.status}`); @@ -886,7 +890,11 @@ export async function processPeerPushDebit( switch (peerPushInitiation.status) { case PeerPushDebitStatus.PendingCreatePurse: - return processPeerPushDebitCreateReserve(ws, peerPushInitiation); + return processPeerPushDebitCreateReserve( + ws, + peerPushInitiation, + cancellationToken, + ); case PeerPushDebitStatus.PendingReady: return processPeerPushDebitReady( ws, @@ -894,7 +902,11 @@ export async function processPeerPushDebit( cancellationToken, ); case PeerPushDebitStatus.AbortingDeletePurse: - return processPeerPushDebitAbortingDeletePurse(ws, peerPushInitiation); + return processPeerPushDebitAbortingDeletePurse( + ws, + peerPushInitiation, + cancellationToken, + ); case PeerPushDebitStatus.AbortingRefreshDeleted: return processPeerPushDebitAbortingRefreshDeleted(ws, peerPushInitiation); case PeerPushDebitStatus.AbortingRefreshExpired: @@ -1028,7 +1040,7 @@ export async function initiatePeerPushDebit( hintTransactionId: transactionId, }); - ws.taskScheduler.startShepherdTask(ctx.retryTag); + ws.taskScheduler.startShepherdTask(ctx.taskId); return { contractPriv: contractKeyPair.priv, -- cgit v1.2.3