wallet-core: support passing transactionId to confirmPay

This commit is contained in:
Florian Dold 2023-07-06 20:17:59 +02:00
parent d98f048fd6
commit 8b06874f42
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
3 changed files with 25 additions and 3 deletions

View File

@ -1751,14 +1751,19 @@ export const codecForPreparePayTemplateRequest =
.build("PreparePayTemplate");
export interface ConfirmPayRequest {
proposalId: string;
/**
* @deprecated use transactionId instead
*/
proposalId?: string;
transactionId?: string;
sessionId?: string;
forcedCoinSel?: ForcedCoinSel;
}
export const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>
buildCodecForObject<ConfirmPayRequest>()
.property("proposalId", codecForString())
.property("proposalId", codecOptional(codecForString()))
.property("transactionId", codecOptional(codecForString()))
.property("sessionId", codecOptional(codecForString()))
.property("forcedCoinSel", codecForAny())
.build("ConfirmPay");

View File

@ -972,6 +972,10 @@ async function processPlanchetExchangeBatchRequest(
responses.ev_sigs.push(r);
responseCoinIdxs.push(requestCoinIdxs[i]);
} catch (e) {
if (e instanceof TalerError) {
logger.warn(`withdrawing planchet failed: ${j2s(e.errorDetail)}`);
logger.warn(`planchet denom pub hash: ${batchReq.planchets[i].denom_pub_hash}`);
}
await storeCoinError(e, requestCoinIdxs[i]);
}
}

View File

@ -1260,7 +1260,20 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>(
}
case WalletApiOperation.ConfirmPay: {
const req = codecForConfirmPayRequest().decode(payload);
return await confirmPay(ws, req.proposalId, req.sessionId);
let proposalId;
if (req.proposalId) {
// legacy client support
proposalId = req.proposalId;
} else if (req.transactionId) {
const txIdParsed = parseTransactionIdentifier(req.transactionId);
if (txIdParsed?.tag != TransactionType.Payment) {
throw Error("payment transaction ID required");
}
proposalId = txIdParsed.proposalId;
} else {
throw Error("transactionId or (deprecated) proposalId required");
}
return await confirmPay(ws, proposalId, req.sessionId);
}
case WalletApiOperation.AbortTransaction: {
const req = codecForAbortTransaction().decode(payload);