aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/taler-util/src/transactions-types.ts6
-rw-r--r--packages/taler-wallet-core/src/db.ts12
-rw-r--r--packages/taler-wallet-core/src/operations/pay-merchant.ts7
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts35
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.ts64
5 files changed, 107 insertions, 17 deletions
diff --git a/packages/taler-util/src/transactions-types.ts b/packages/taler-util/src/transactions-types.ts
index 017e54e0a..a5fc6c070 100644
--- a/packages/taler-util/src/transactions-types.ts
+++ b/packages/taler-util/src/transactions-types.ts
@@ -89,6 +89,7 @@ export enum TransactionMajorState {
Aborting = "aborting",
Aborted = "aborted",
Suspended = "suspended",
+ SuspendedAborting = "suspended-aborting",
Failed = "failed",
// Only used for the notification, never in the transaction history
Deleted = "deleted",
@@ -105,6 +106,11 @@ export enum TransactionMinorState {
Refresh = "refresh",
Pickup = "pickup",
User = "user",
+ Bank = "bank",
+ BankRegisterReserve = "bank-register-reserve",
+ BankConfirmTransfer = "bank-confirm-transfer",
+ WithdrawCoins = "withdraw-coins",
+ ExchangeWaitReserve = "exchange-wait-reserve",
}
export interface TransactionsResponse {
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts
index 9b250cede..cff874508 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -166,6 +166,12 @@ export enum WithdrawalGroupStatus {
Ready = 13,
/**
+ * We are telling the bank that we don't want to complete
+ * the withdrawal!
+ */
+ AbortingBank = 14,
+
+ /**
* The corresponding withdraw record has been created.
* No further processing is done, unless explicitly requested
* by the user.
@@ -176,6 +182,12 @@ export enum WithdrawalGroupStatus {
* The bank aborted the withdrawal.
*/
BankAborted = 51,
+
+ SuspendedRegisteringBank = 52,
+ SuspendedWaitConfirmBank = 53,
+ SuspendedQueryingStatus = 54,
+ SuspendedReady = 55,
+ SuspendedAbortingBank = 55,
}
/**
diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts
index e79314416..52f7f990d 100644
--- a/packages/taler-wallet-core/src/operations/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/operations/pay-merchant.ts
@@ -71,6 +71,7 @@ import {
TalerErrorDetail,
TalerProtocolTimestamp,
TalerProtocolViolationError,
+ TransactionState,
TransactionType,
URL,
} from "@gnu-taler/taler-util";
@@ -2472,3 +2473,9 @@ export async function abortPay(
});
});
}
+
+export function computeWithdrawalTransactionStatus(
+ purchaseRecord: PurchaseRecord,
+): TransactionState {
+ throw Error("not implemented");
+}
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index 674d4959c..cacc179f2 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -95,6 +95,7 @@ import { processRefreshGroup } from "./refresh.js";
import { computeTipTransactionStatus, processTip } from "./tip.js";
import {
augmentPaytoUrisForWithdrawal,
+ computeWithdrawalTransactionStatus,
processWithdrawalGroup,
} from "./withdraw.js";
@@ -643,35 +644,35 @@ function buildTransactionForPeerPushCredit(
}
function buildTransactionForBankIntegratedWithdraw(
- wsr: WithdrawalGroupRecord,
+ wgRecord: WithdrawalGroupRecord,
ort?: OperationRetryRecord,
): Transaction {
- if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.BankIntegrated)
+ if (wgRecord.wgInfo.withdrawalType !== WithdrawalRecordType.BankIntegrated)
throw Error("");
return {
type: TransactionType.Withdrawal,
- txState: mkTxStateUnknown(),
- amountEffective: Amounts.stringify(wsr.denomsSel.totalCoinValue),
- amountRaw: Amounts.stringify(wsr.instructedAmount),
+ txState: computeWithdrawalTransactionStatus(wgRecord),
+ amountEffective: Amounts.stringify(wgRecord.denomsSel.totalCoinValue),
+ amountRaw: Amounts.stringify(wgRecord.instructedAmount),
withdrawalDetails: {
type: WithdrawalType.TalerBankIntegrationApi,
- confirmed: wsr.wgInfo.bankInfo.timestampBankConfirmed ? true : false,
- reservePub: wsr.reservePub,
- bankConfirmationUrl: wsr.wgInfo.bankInfo.confirmUrl,
+ confirmed: wgRecord.wgInfo.bankInfo.timestampBankConfirmed ? true : false,
+ reservePub: wgRecord.reservePub,
+ bankConfirmationUrl: wgRecord.wgInfo.bankInfo.confirmUrl,
reserveIsReady:
- wsr.status === WithdrawalGroupStatus.Finished ||
- wsr.status === WithdrawalGroupStatus.Ready,
+ wgRecord.status === WithdrawalGroupStatus.Finished ||
+ wgRecord.status === WithdrawalGroupStatus.Ready,
},
- exchangeBaseUrl: wsr.exchangeBaseUrl,
- extendedStatus: wsr.timestampFinish
+ exchangeBaseUrl: wgRecord.exchangeBaseUrl,
+ extendedStatus: wgRecord.timestampFinish
? ExtendedStatus.Done
: ExtendedStatus.Pending,
- pending: !wsr.timestampFinish,
- timestamp: wsr.timestampStart,
+ pending: !wgRecord.timestampFinish,
+ timestamp: wgRecord.timestampStart,
transactionId: makeTransactionId(
TransactionType.Withdrawal,
- wsr.withdrawalGroupId,
+ wgRecord.withdrawalGroupId,
),
frozen: false,
...(ort?.lastError ? { error: ort.lastError } : {}),
@@ -697,7 +698,7 @@ function buildTransactionForManualWithdraw(
return {
type: TransactionType.Withdrawal,
- txState: mkTxStateUnknown(),
+ txState: computeWithdrawalTransactionStatus(withdrawalGroup),
amountEffective: Amounts.stringify(
withdrawalGroup.denomsSel.totalCoinValue,
),
@@ -1238,10 +1239,12 @@ export async function getTransactions(
case WithdrawalRecordType.PeerPullCredit:
// Will be reported by the corresponding p2p transaction.
// FIXME: If this is an orphan withdrawal, still report it as a withdrawal!
+ // FIXME: Still report if requested with verbose option?
return;
case WithdrawalRecordType.PeerPushCredit:
// Will be reported by the corresponding p2p transaction.
// FIXME: If this is an orphan withdrawal, still report it as a withdrawal!
+ // FIXME: Still report if requested with verbose option?
return;
case WithdrawalRecordType.BankIntegrated:
transactions.push(
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts
index 23c3e6713..6d5644b06 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.ts
@@ -40,7 +40,6 @@ import {
DenomKeyType,
DenomSelectionState,
Duration,
- durationFromSpec,
encodeCrock,
ExchangeListItem,
ExchangeWithdrawalDetails,
@@ -64,6 +63,9 @@ import {
WithdrawUriInfoResponse,
ExchangeBatchWithdrawRequest,
WalletNotification,
+ TransactionState,
+ TransactionMajorState,
+ TransactionMinorState,
} from "@gnu-taler/taler-util";
import { EddsaKeypair } from "../crypto/cryptoImplementation.js";
import {
@@ -133,6 +135,66 @@ import { isWithdrawableDenom } from "../index.js";
*/
const logger = new Logger("operations/withdraw.ts");
+export function computeWithdrawalTransactionStatus(
+ wgRecord: WithdrawalGroupRecord,
+): TransactionState {
+ switch (wgRecord.status) {
+ case WithdrawalGroupStatus.BankAborted:
+ return {
+ major: TransactionMajorState.Aborted,
+ };
+ case WithdrawalGroupStatus.Finished:
+ return {
+ major: TransactionMajorState.Done,
+ };
+ case WithdrawalGroupStatus.RegisteringBank:
+ return {
+ major: TransactionMajorState.Pending,
+ minor: TransactionMinorState.BankRegisterReserve,
+ };
+ case WithdrawalGroupStatus.Ready:
+ return {
+ major: TransactionMajorState.Pending,
+ minor: TransactionMinorState.WithdrawCoins,
+ };
+ case WithdrawalGroupStatus.QueryingStatus:
+ return {
+ major: TransactionMajorState.Pending,
+ minor: TransactionMinorState.ExchangeWaitReserve,
+ };
+ case WithdrawalGroupStatus.WaitConfirmBank:
+ return {
+ major: TransactionMajorState.Pending,
+ minor: TransactionMinorState.BankConfirmTransfer,
+ };
+ case WithdrawalGroupStatus.AbortingBank:
+ return {
+ major: TransactionMajorState.Aborting,
+ minor: TransactionMinorState.Bank,
+ };
+ case WithdrawalGroupStatus.SuspendedAbortingBank:
+ return {
+ major: TransactionMajorState.SuspendedAborting,
+ minor: TransactionMinorState.Bank,
+ };
+ case WithdrawalGroupStatus.SuspendedQueryingStatus:
+ return {
+ major: TransactionMajorState.Suspended,
+ minor: TransactionMinorState.ExchangeWaitReserve,
+ };
+ case WithdrawalGroupStatus.SuspendedRegisteringBank:
+ return {
+ major: TransactionMajorState.Suspended,
+ minor: TransactionMinorState.BankRegisterReserve,
+ };
+ case WithdrawalGroupStatus.SuspendedWaitConfirmBank:
+ return {
+ major: TransactionMajorState.Suspended,
+ minor: TransactionMinorState.BankConfirmTransfer,
+ };
+ }
+}
+
/**
* Get information about a withdrawal from
* a taler://withdraw URI by asking the bank.