summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/transactions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/operations/transactions.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts48
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,
+ });
+ }
+}