diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pay-peer.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/pay-peer.ts | 131 |
1 files changed, 122 insertions, 9 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay-peer.ts b/packages/taler-wallet-core/src/operations/pay-peer.ts index 031bdfb92..edebad65b 100644 --- a/packages/taler-wallet-core/src/operations/pay-peer.ts +++ b/packages/taler-wallet-core/src/operations/pay-peer.ts @@ -79,6 +79,7 @@ import { TransactionMajorState, TransactionMinorState, TalerPreciseTimestamp, + TransactionAction, } from "@gnu-taler/taler-util"; import { SpendCoinDetails } from "../crypto/cryptoImplementation.js"; import { @@ -2008,7 +2009,36 @@ export function computePeerPushDebitTransactionState( case PeerPushPaymentInitiationStatus.Failed: return { major: TransactionMajorState.Failed, - } + }; + } +} + +export function computePeerPushDebitTransactionActions( + ppiRecord: PeerPushPaymentInitiationRecord, +): TransactionAction[] { + switch (ppiRecord.status) { + case PeerPushPaymentInitiationStatus.PendingCreatePurse: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPushPaymentInitiationStatus.PendingReady: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPushPaymentInitiationStatus.Aborted: + return [TransactionAction.Delete]; + case PeerPushPaymentInitiationStatus.AbortingDeletePurse: + return [TransactionAction.Suspend, TransactionAction.Fail]; + case PeerPushPaymentInitiationStatus.AbortingRefresh: + return [TransactionAction.Suspend, TransactionAction.Fail]; + case PeerPushPaymentInitiationStatus.SuspendedAbortingDeletePurse: + return [TransactionAction.Resume, TransactionAction.Fail]; + case PeerPushPaymentInitiationStatus.SuspendedAbortingRefresh: + return [TransactionAction.Resume, TransactionAction.Fail]; + case PeerPushPaymentInitiationStatus.SuspendedCreatePurse: + return [TransactionAction.Resume, TransactionAction.Abort]; + case PeerPushPaymentInitiationStatus.SuspendedReady: + return [TransactionAction.Suspend, TransactionAction.Abort]; + case PeerPushPaymentInitiationStatus.Done: + return [TransactionAction.Delete]; + case PeerPushPaymentInitiationStatus.Failed: + return [TransactionAction.Delete]; } } @@ -2072,7 +2102,7 @@ export async function abortPeerPushDebitTransaction( notifyTransition(ws, transactionId, transitionInfo); } -export async function cancelAbortingPeerPushDebitTransaction( +export async function failPeerPushDebitTransaction( ws: InternalWalletState, pursePub: string, ) { @@ -2316,8 +2346,7 @@ export async function abortPeerPullDebitTransaction( notifyTransition(ws, transactionId, transitionInfo); } - -export async function cancelAbortingPeerPullDebitTransaction( +export async function failPeerPullDebitTransaction( ws: InternalWalletState, peerPullPaymentIncomingId: string, ) { @@ -2501,7 +2530,6 @@ export async function suspendPeerPushCreditTransaction( notifyTransition(ws, transactionId, transitionInfo); } - export async function abortPeerPushCreditTransaction( ws: InternalWalletState, peerPushPaymentIncomingId: string, @@ -2568,7 +2596,7 @@ export async function abortPeerPushCreditTransaction( notifyTransition(ws, transactionId, transitionInfo); } -export async function cancelAbortingPeerPushCreditTransaction( +export async function failPeerPushCreditTransaction( ws: InternalWalletState, peerPushPaymentIncomingId: string, ) { @@ -2765,7 +2793,7 @@ export async function abortPeerPullCreditTransaction( notifyTransition(ws, transactionId, transitionInfo); } -export async function cancelAbortingPeerPullCreditTransaction( +export async function failPeerPullCreditTransaction( ws: InternalWalletState, pursePub: string, ) { @@ -2996,12 +3024,41 @@ export function computePeerPushCreditTransactionState( }; case PeerPushPaymentIncomingStatus.Aborted: return { - major: TransactionMajorState.Aborted + major: TransactionMajorState.Aborted, }; case PeerPushPaymentIncomingStatus.Failed: return { major: TransactionMajorState.Failed, - } + }; + default: + assertUnreachable(pushCreditRecord.status); + } +} + +export function computePeerPushCreditTransactionActions( + pushCreditRecord: PeerPushPaymentIncomingRecord, +): TransactionAction[] { + switch (pushCreditRecord.status) { + case PeerPushPaymentIncomingStatus.DialogProposed: + return []; + case PeerPushPaymentIncomingStatus.PendingMerge: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPushPaymentIncomingStatus.Done: + return [TransactionAction.Delete]; + case PeerPushPaymentIncomingStatus.PendingMergeKycRequired: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPushPaymentIncomingStatus.PendingWithdrawing: + return [TransactionAction.Suspend, TransactionAction.Fail]; + case PeerPushPaymentIncomingStatus.SuspendedMerge: + return [TransactionAction.Resume, TransactionAction.Abort]; + case PeerPushPaymentIncomingStatus.SuspendedMergeKycRequired: + return [TransactionAction.Resume, TransactionAction.Abort]; + case PeerPushPaymentIncomingStatus.SuspendedWithdrawing: + return [TransactionAction.Resume, TransactionAction.Fail]; + case PeerPushPaymentIncomingStatus.Aborted: + return [TransactionAction.Delete]; + case PeerPushPaymentIncomingStatus.Failed: + return [TransactionAction.Delete]; default: assertUnreachable(pushCreditRecord.status); } @@ -3076,6 +3133,39 @@ export function computePeerPullCreditTransactionState( } } +export function computePeerPullCreditTransactionActions( + pullCreditRecord: PeerPullPaymentInitiationRecord, +): TransactionAction[] { + switch (pullCreditRecord.status) { + case PeerPullPaymentInitiationStatus.PendingCreatePurse: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPullPaymentInitiationStatus.PendingMergeKycRequired: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPullPaymentInitiationStatus.PendingReady: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPullPaymentInitiationStatus.DonePurseDeposited: + return [TransactionAction.Delete]; + case PeerPullPaymentInitiationStatus.PendingWithdrawing: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPullPaymentInitiationStatus.SuspendedCreatePurse: + return [TransactionAction.Resume, TransactionAction.Abort]; + case PeerPullPaymentInitiationStatus.SuspendedReady: + return [TransactionAction.Abort, TransactionAction.Resume]; + case PeerPullPaymentInitiationStatus.SuspendedWithdrawing: + return [TransactionAction.Resume, TransactionAction.Fail]; + case PeerPullPaymentInitiationStatus.SuspendedMergeKycRequired: + return [TransactionAction.Resume, TransactionAction.Fail]; + case PeerPullPaymentInitiationStatus.Aborted: + return [TransactionAction.Delete]; + case PeerPullPaymentInitiationStatus.AbortingDeletePurse: + return [TransactionAction.Suspend, TransactionAction.Fail]; + case PeerPullPaymentInitiationStatus.Failed: + return [TransactionAction.Delete]; + case PeerPullPaymentInitiationStatus.SuspendedAbortingDeletePurse: + return [TransactionAction.Resume, TransactionAction.Fail]; + } +} + export function computePeerPullDebitTransactionState( pullDebitRecord: PeerPullPaymentIncomingRecord, ): TransactionState { @@ -3119,3 +3209,26 @@ export function computePeerPullDebitTransactionState( }; } } + +export function computePeerPullDebitTransactionActions( + pullDebitRecord: PeerPullPaymentIncomingRecord, +): TransactionAction[] { + switch (pullDebitRecord.status) { + case PeerPullDebitRecordStatus.DialogProposed: + return []; + case PeerPullDebitRecordStatus.PendingDeposit: + return [TransactionAction.Abort, TransactionAction.Suspend]; + case PeerPullDebitRecordStatus.DonePaid: + return [TransactionAction.Delete]; + case PeerPullDebitRecordStatus.SuspendedDeposit: + return [TransactionAction.Resume, TransactionAction.Abort]; + case PeerPullDebitRecordStatus.Aborted: + return [TransactionAction.Delete]; + case PeerPullDebitRecordStatus.AbortingRefresh: + return [TransactionAction.Fail, TransactionAction.Suspend]; + case PeerPullDebitRecordStatus.Failed: + return [TransactionAction.Delete]; + case PeerPullDebitRecordStatus.SuspendedAbortingRefresh: + return [TransactionAction.Resume, TransactionAction.Fail]; + } +} |