diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/reward.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/reward.ts | 40 |
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, }; } |