diff options
author | Florian Dold <florian@dold.me> | 2023-06-26 12:53:32 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-06-26 12:53:32 +0200 |
commit | eae357160760fba990f705b092e30a0eec6f7b29 (patch) | |
tree | aebd7a303b3c530546353fa7943a386738781d78 /packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts | |
parent | fca893038dc61267c9861186041e129c88b46da8 (diff) | |
download | wallet-core-eae357160760fba990f705b092e30a0eec6f7b29.tar.xz |
wallet-core: allow confirmPeerPullDebit via txId
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts index 322d9ca71..c7b59e6db 100644 --- a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts +++ b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts @@ -78,6 +78,7 @@ import { import { constructTransactionIdentifier, notifyTransition, + parseTransactionIdentifier, stopLongpolling, } from "./transactions.js"; @@ -387,10 +388,25 @@ export async function confirmPeerPullDebit( ws: InternalWalletState, req: ConfirmPeerPullDebitRequest, ): Promise<AcceptPeerPullPaymentResponse> { + + let peerPullPaymentIncomingId: string; + + if (req.transactionId) { + const parsedTx = parseTransactionIdentifier(req.transactionId); + if (!parsedTx || parsedTx.tag !== TransactionType.PeerPullDebit) { + throw Error("invalid peer-pull-debit transaction identifier"); + } + peerPullPaymentIncomingId = parsedTx.peerPullPaymentIncomingId; + } else if (req.peerPullPaymentIncomingId) { + peerPullPaymentIncomingId = req.peerPullPaymentIncomingId; + } else { + throw Error("invalid request, transactionId or peerPullPaymentIncomingId required"); + } + const peerPullInc = await ws.db .mktx((x) => [x.peerPullPaymentIncoming]) .runReadOnly(async (tx) => { - return tx.peerPullPaymentIncoming.get(req.peerPullPaymentIncomingId); + return tx.peerPullPaymentIncoming.get(peerPullPaymentIncomingId); }); if (!peerPullInc) { @@ -436,7 +452,7 @@ export async function confirmPeerPullDebit( // allocationId: `txn:peer-pull-debit:${req.peerPullPaymentIncomingId}`, allocationId: constructTransactionIdentifier({ tag: TransactionType.PeerPullDebit, - peerPullPaymentIncomingId: req.peerPullPaymentIncomingId, + peerPullPaymentIncomingId, }), coinPubs: sel.coins.map((x) => x.coinPub), contributions: sel.coins.map((x) => @@ -446,7 +462,7 @@ export async function confirmPeerPullDebit( }); const pi = await tx.peerPullPaymentIncoming.get( - req.peerPullPaymentIncomingId, + peerPullPaymentIncomingId, ); if (!pi) { throw Error(); @@ -473,7 +489,7 @@ export async function confirmPeerPullDebit( const transactionId = constructTransactionIdentifier({ tag: TransactionType.PeerPullDebit, - peerPullPaymentIncomingId: req.peerPullPaymentIncomingId, + peerPullPaymentIncomingId, }); return { |