diff options
author | Florian Dold <florian@dold.me> | 2023-05-02 10:59:50 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-05-02 10:59:50 +0200 |
commit | 16d30adf0d57f6d954230c437e56e8a8700ef2ae (patch) | |
tree | 1f70267b3d4abd68df5be7da8ac769025a847e4e /packages/taler-wallet-core/src/operations/transactions.ts | |
parent | c4f5c83b8e8614ead5f48952ea8b60b5b3a3971c (diff) | |
download | wallet-core-16d30adf0d57f6d954230c437e56e8a8700ef2ae.tar.xz |
-withdrawal notifications
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, + }); + } +} |