summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-04-24 21:39:28 +0200
committerFlorian Dold <florian@dold.me>2023-04-24 21:39:28 +0200
commitce41337bd1f15a82706808d02660d6550c7ab9fc (patch)
treee4d2c16cddd388dc76c762e2ad60db3fdf2b141d /packages/taler-wallet-core/src
parente2e56332e21e28f4fee8436fba64a6a526a43947 (diff)
downloadwallet-core-ce41337bd1f15a82706808d02660d6550c7ab9fc.tar.gz
wallet-core-ce41337bd1f15a82706808d02660d6550c7ab9fc.tar.bz2
wallet-core-ce41337bd1f15a82706808d02660d6550c7ab9fc.zip
wallet-core: derive DD37 for tipping
Diffstat (limited to 'packages/taler-wallet-core/src')
-rw-r--r--packages/taler-wallet-core/src/operations/tip.ts27
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts8
2 files changed, 31 insertions, 4 deletions
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