diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/transactions.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index cacc179f2..02b0b56ba 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -26,6 +26,7 @@ import { ExtendedStatus, j2s, Logger, + NotificationType, OrderShortInfo, PaymentStatus, PeerContractTerms, @@ -38,6 +39,7 @@ import { TransactionMajorState, TransactionsRequest, TransactionsResponse, + TransactionState, TransactionType, WithdrawalType, } from "@gnu-taler/taler-util"; @@ -94,6 +96,7 @@ import { processPeerPullCredit } from "./pay-peer.js"; import { processRefreshGroup } from "./refresh.js"; import { computeTipTransactionStatus, processTip } from "./tip.js"; import { + abortWithdrawalTransaction, augmentPaytoUrisForWithdrawal, computeWithdrawalTransactionStatus, processWithdrawalGroup, @@ -1854,24 +1857,55 @@ export async function deleteTransaction( export async function abortTransaction( ws: InternalWalletState, transactionId: string, - forceImmediateAbort?: boolean, ): Promise<void> { - const { type, args: rest } = parseId("txn", transactionId); + const txId = parseTransactionIdentifier(transactionId); + if (!txId) { + throw Error("invalid transaction identifier"); + } - switch (type) { + switch (txId.tag) { case TransactionType.Payment: { - const proposalId = rest[0]; - await abortPay(ws, proposalId, forceImmediateAbort); + await abortPay(ws, txId.proposalId); break; } - case TransactionType.PeerPushDebit: { + case TransactionType.Withdrawal: { + await abortWithdrawalTransaction(ws, txId.withdrawalGroupId); break; } default: { - const unknownTxType: any = type; + const unknownTxType: any = txId.tag; throw Error( `can't abort a '${unknownTxType}' transaction: not yet implemented`, ); } } } + +export interface TransitionInfo { + oldTxState: TransactionState; + newTxState: TransactionState; +} + +/** + * Notify of a state transition if necessary. + */ +export function notifyTransition( + ws: InternalWalletState, + transactionId: string, + ti: TransitionInfo | undefined, +): void { + if ( + ti && + !( + ti.oldTxState.major === ti.newTxState.major && + ti.oldTxState.minor === ti.newTxState.minor + ) + ) { + ws.notify({ + type: NotificationType.TransactionStateTransition, + oldTxState: ti.oldTxState, + newTxState: ti.newTxState, + transactionId, + }); + } +} |