summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/reward.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/operations/reward.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/reward.ts40
1 files changed, 30 insertions, 10 deletions
diff --git a/packages/taler-wallet-core/src/operations/reward.ts b/packages/taler-wallet-core/src/operations/reward.ts
index 62ac81d7f..369c1f40d 100644
--- a/packages/taler-wallet-core/src/operations/reward.ts
+++ b/packages/taler-wallet-core/src/operations/reward.ts
@@ -37,6 +37,7 @@ import {
TalerPreciseTimestamp,
TipPlanchetDetail,
TransactionAction,
+ TransactionIdStr,
TransactionMajorState,
TransactionMinorState,
TransactionState,
@@ -81,6 +82,7 @@ import { selectWithdrawalDenominations } from "../util/coinSelection.js";
import {
constructTransactionIdentifier,
notifyTransition,
+ parseTransactionIdentifier,
stopLongpolling,
} from "./transactions.js";
import { PendingTaskType } from "../pending-types.js";
@@ -643,18 +645,39 @@ export async function processTip(
return TaskRunResult.finished();
}
+export async function acceptTipBackwardCompat(
+ ws: InternalWalletState,
+ walletTipId: string | undefined,
+ transactionIdParam: TransactionIdStr | undefined,
+): Promise<AcceptTipResponse> {
+ if (transactionIdParam) {
+ return acceptTip(ws, transactionIdParam)
+ }
+ if (walletTipId) {
+ /**
+ * old clients use still use tipId
+ */
+ const transactionId = constructTransactionIdentifier({
+ tag: TransactionType.Reward,
+ walletRewardId: walletTipId,
+ });
+ return acceptTip(ws, transactionId)
+ }
+ throw Error("Unable to accept tip: neither tipId (deprecated) nor transactionId was specified")
+}
+
export async function acceptTip(
ws: InternalWalletState,
- walletTipId: string,
+ transactionId: TransactionIdStr,
): Promise<AcceptTipResponse> {
- const transactionId = constructTransactionIdentifier({
- tag: TransactionType.Reward,
- walletRewardId: walletTipId,
- });
+ const pTxId = parseTransactionIdentifier(transactionId)
+ if (!pTxId) throw Error(`Unable to accept tip: invalid tx tag "${transactionId}"`)
+ const rewardId = pTxId.tag === TransactionType.Reward ? pTxId.walletRewardId : undefined;
+ if (!rewardId) throw Error(`Unable to accept tip: txId is not a reward tag "${pTxId.tag}"`)
const dbRes = await ws.db
.mktx((x) => [x.rewards])
.runReadWrite(async (tx) => {
- const tipRecord = await tx.rewards.get(walletTipId);
+ const tipRecord = await tx.rewards.get(rewardId);
if (!tipRecord) {
logger.error("tip not found");
return;
@@ -682,10 +705,7 @@ export async function acceptTip(
const tipRecord = dbRes.tipRecord;
return {
- transactionId: constructTransactionIdentifier({
- tag: TransactionType.Reward,
- walletRewardId: walletTipId,
- }),
+ transactionId,
next_url: tipRecord.next_url,
};
}