aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/taler-util/src/transactions-types.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/tip.ts27
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts8
3 files changed, 33 insertions, 4 deletions
diff --git a/packages/taler-util/src/transactions-types.ts b/packages/taler-util/src/transactions-types.ts
index 29ddb22a3..017e54e0a 100644
--- a/packages/taler-util/src/transactions-types.ts
+++ b/packages/taler-util/src/transactions-types.ts
@@ -103,6 +103,8 @@ export enum TransactionMinorState {
KycRequired = "kyc-required",
Track = "track",
Refresh = "refresh",
+ Pickup = "pickup",
+ User = "user",
}
export interface TransactionsResponse {
diff --git a/packages/taler-wallet-core/src/operations/tip.ts b/packages/taler-wallet-core/src/operations/tip.ts
index b37288079..5bcf609b5 100644
--- a/packages/taler-wallet-core/src/operations/tip.ts
+++ b/packages/taler-wallet-core/src/operations/tip.ts
@@ -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,
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index 1a511583a..674d4959c 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -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