wallet-core: derive DD37 for tipping

This commit is contained in:
Florian Dold 2023-04-24 21:39:28 +02:00
parent e2e56332e2
commit ce41337bd1
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
3 changed files with 33 additions and 4 deletions

View File

@ -103,6 +103,8 @@ export enum TransactionMinorState {
KycRequired = "kyc-required",
Track = "track",
Refresh = "refresh",
Pickup = "pickup",
User = "user",
}
export interface TransactionsResponse {

View File

@ -35,6 +35,9 @@ import {
TalerErrorCode,
TalerProtocolTimestamp,
TipPlanchetDetail,
TransactionMajorState,
TransactionMinorState,
TransactionState,
TransactionType,
URL,
} from "@gnu-taler/taler-util";
@ -67,6 +70,30 @@ import { selectWithdrawalDenominations } from "../util/coinSelection.js";
const logger = new Logger("operations/tip.ts");
/**
* Get the (DD37-style) transaction status based on the
* database record of a tip.
*/
export function computeTipTransactionStatus(
tipRecord: TipRecord,
): TransactionState {
if (tipRecord.pickedUpTimestamp) {
return {
major: TransactionMajorState.Done,
};
}
if (tipRecord.acceptedTimestamp) {
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.Pickup,
};
}
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.User,
};
}
export async function prepareTip(
ws: InternalWalletState,
talerTipUri: string,

View File

@ -68,7 +68,7 @@ import {
import { InternalWalletState } from "../internal-wallet-state.js";
import { PendingTaskType } from "../pending-types.js";
import { assertUnreachable } from "../util/assertUnreachable.js";
import { checkDbInvariant } from "../util/invariants.js";
import { checkDbInvariant, checkLogicInvariant } from "../util/invariants.js";
import { constructTaskIdentifier, TaskIdentifiers } from "../util/retries.js";
import {
makeTombstoneId,
@ -92,7 +92,7 @@ import {
} from "./pay-merchant.js";
import { processPeerPullCredit } from "./pay-peer.js";
import { processRefreshGroup } from "./refresh.js";
import { processTip } from "./tip.js";
import { computeTipTransactionStatus, processTip } from "./tip.js";
import {
augmentPaytoUrisForWithdrawal,
processWithdrawalGroup,
@ -823,11 +823,11 @@ function buildTransactionForTip(
tipRecord: TipRecord,
ort?: OperationRetryRecord,
): Transaction {
if (!tipRecord.acceptedTimestamp) throw Error("");
checkLogicInvariant(!!tipRecord.acceptedTimestamp);
return {
type: TransactionType.Tip,
txState: mkTxStateUnknown(),
txState: computeTipTransactionStatus(tipRecord),
amountEffective: Amounts.stringify(tipRecord.tipAmountEffective),
amountRaw: Amounts.stringify(tipRecord.tipAmountRaw),
extendedStatus: tipRecord.pickedUpTimestamp