-DD37 wip

This commit is contained in:
Florian Dold 2023-04-25 23:56:57 +02:00
parent f94d7bc151
commit fd86791e42
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
5 changed files with 107 additions and 17 deletions

View File

@ -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 {

View File

@ -165,6 +165,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
@ -176,6 +182,12 @@ export enum WithdrawalGroupStatus {
* The bank aborted the withdrawal.
*/
BankAborted = 51,
SuspendedRegisteringBank = 52,
SuspendedWaitConfirmBank = 53,
SuspendedQueryingStatus = 54,
SuspendedReady = 55,
SuspendedAbortingBank = 55,
}
/**

View File

@ -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");
}

View File

@ -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(

View File

@ -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.