diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts index c7e447dab..e5ae6b73b 100644 --- a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts +++ b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts @@ -42,6 +42,7 @@ import { TalerPreciseTimestamp, TalerProtocolViolationError, TransactionAction, + TransactionIdStr, TransactionMajorState, TransactionMinorState, TransactionState, @@ -69,6 +70,7 @@ import { PendingTaskType, RefreshOperationStatus, StoreNames, + TaskId, WalletStoresV1, createRefreshGroup, timestampPreciseToDb, @@ -93,7 +95,6 @@ import { constructTransactionIdentifier, notifyTransition, parseTransactionIdentifier, - stopLongpolling, } from "./transactions.js"; const logger = new Logger("pay-peer-pull-debit.ts"); @@ -103,8 +104,8 @@ const logger = new Logger("pay-peer-pull-debit.ts"); */ export class PeerPullDebitTransactionContext implements TransactionContext { ws: InternalWalletState; - transactionId: string; - taskId: string; + readonly transactionId: TransactionIdStr; + readonly taskId: TaskId; peerPullDebitId: string; constructor(ws: InternalWalletState, peerPullDebitId: string) { @@ -140,7 +141,6 @@ export class PeerPullDebitTransactionContext implements TransactionContext { const transactionId = this.transactionId; const ws = this.ws; const peerPullDebitId = this.peerPullDebitId; - stopLongpolling(ws, taskId); const transitionInfo = await ws.db .mktx((x) => [x.peerPullDebit]) .runReadWrite(async (tx) => { @@ -185,11 +185,11 @@ export class PeerPullDebitTransactionContext implements TransactionContext { return undefined; }); notifyTransition(ws, transactionId, transitionInfo); + ws.taskScheduler.stopShepherdTask(taskId); } async resumeTransaction(): Promise<void> { const ctx = this; - stopLongpolling(ctx.ws, ctx.taskId); await ctx.transition(async (pi) => { switch (pi.status) { case PeerPullDebitRecordStatus.SuspendedDeposit: @@ -207,11 +207,11 @@ export class PeerPullDebitTransactionContext implements TransactionContext { return TransitionResult.Stay; } }); + this.ws.taskScheduler.startShepherdTask(this.taskId); } async failTransaction(): Promise<void> { const ctx = this; - stopLongpolling(ctx.ws, ctx.taskId); await ctx.transition(async (pi) => { switch (pi.status) { case PeerPullDebitRecordStatus.SuspendedDeposit: @@ -225,6 +225,7 @@ export class PeerPullDebitTransactionContext implements TransactionContext { return TransitionResult.Stay; } }); + this.ws.taskScheduler.stopShepherdTask(this.taskId); } async abortTransaction(): Promise<void> { @@ -325,7 +326,9 @@ export class PeerPullDebitTransactionContext implements TransactionContext { } }, ); + ws.taskScheduler.stopShepherdTask(this.taskId); notifyTransition(ws, this.transactionId, transitionInfo); + ws.taskScheduler.startShepherdTask(this.taskId); } } @@ -405,7 +408,7 @@ async function handlePurseCreationConflict( } await tx.peerPullDebit.put(myPpi); }); - return TaskRunResult.finished(); + return TaskRunResult.backoff(); } async function processPeerPullDebitPendingDeposit( @@ -469,7 +472,7 @@ async function processPeerPullDebitPendingDeposit( } case HttpStatusCode.Gone: { await ctx.abortTransaction(); - return TaskRunResult.finished(); + return TaskRunResult.backoff(); } case HttpStatusCode.Conflict: { return handlePurseCreationConflict(ctx, peerPullInc, httpResp); @@ -529,7 +532,7 @@ async function processPeerPullDebitAbortingRefresh( }); notifyTransition(ws, transactionId, transitionInfo); // FIXME: Shouldn't this be finished in some cases?! - return TaskRunResult.pending(); + return TaskRunResult.backoff(); } export async function processPeerPullDebit( @@ -607,7 +610,7 @@ export async function confirmPeerPullDebit( coinSelRes.result.coins, ); - const ppi = await ws.db + await ws.db .mktx((x) => [ x.exchanges, x.coins, @@ -643,19 +646,19 @@ export async function confirmPeerPullDebit( }; } await tx.peerPullDebit.put(pi); - return pi; }); - const transactionId = constructTransactionIdentifier({ - tag: TransactionType.PeerPullDebit, - peerPullDebitId, - }); + const ctx = new PeerPullDebitTransactionContext(ws, peerPullDebitId); + + const transactionId = ctx.transactionId; ws.notify({ type: NotificationType.BalanceChange, hintTransactionId: transactionId, }); + ws.taskScheduler.startShepherdTask(ctx.taskId); + return { transactionId, }; |