taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 7c61a6d955cb678430a04e9b54e7af216d6a131b
parent 5a98a289a2d8d1b847a6fe73e96f3eea5ac4807b
Author: Florian Dold <florian@dold.me>
Date:   Wed, 22 Jul 2026 13:49:02 +0200

wallet-core: store template URI in purchase

Diffstat:
Mpackages/taler-wallet-core/src/pay-merchant.ts | 18+++++++++++++++---
Mpackages/taler-wallet-core/src/pay-template.ts | 37++++++++++++++++++++++++++++---------
2 files changed, 43 insertions(+), 12 deletions(-)

diff --git a/packages/taler-wallet-core/src/pay-merchant.ts b/packages/taler-wallet-core/src/pay-merchant.ts @@ -168,7 +168,7 @@ import { getScopeForAllCoins, getScopeForAllExchanges, } from "./exchanges.js"; -import { instantiateTemplate } from "./pay-template.js"; +import { instantiateTemplate, instantiateTemplateRaw } from "./pay-template.js"; import { calculateRefreshOutput, createRefreshGroup, @@ -2311,8 +2311,20 @@ export async function preparePayForTemplateV2( wex: WalletExecutionContext, req: PreparePayTemplateRequest, ): Promise<PreparePayV2Result> { - const payUri = await instantiateTemplate(wex, req); - return await preparePayForUriV2(wex, payUri); + const res = await instantiateTemplateRaw(wex, req); + const proposalRes = await createOrReusePurchase( + wex, + res.merchantBaseUrl, + res.orderId, + res.sessionId, + res.claimToken, + undefined, + req.talerPayTemplateUri, + ); + + return { + transactionId: proposalRes.transactionId, + }; } /** diff --git a/packages/taler-wallet-core/src/pay-template.ts b/packages/taler-wallet-core/src/pay-template.ts @@ -21,6 +21,7 @@ import { CheckPayTemplateReponse, CheckPayTemplateRequest, codecForPostOrderResponse, + HostPortPath, j2s, Logger, PreparePayTemplateRequest, @@ -206,15 +207,15 @@ export async function checkPayForTemplate( }; } -/** - * Instantiate a pay template. - * - * @returns A taler://pay/ URI pointing to the order - */ -export async function instantiateTemplate( +export async function instantiateTemplateRaw( wex: WalletExecutionContext, req: PreparePayTemplateRequest, -): Promise<string> { +): Promise<{ + merchantBaseUrl: string; + orderId: string; + sessionId: string; + claimToken: string | undefined; +}> { const parsedUri = Result.orUndefined( TalerUris.parseRestricted( req.talerPayTemplateUri, @@ -291,11 +292,29 @@ export async function instantiateTemplate( codecForPostOrderResponse(), ); - return TalerUris.stringify({ - type: TalerUriAction.Pay, + return { merchantBaseUrl: parsedUri.merchantBaseUrl, orderId: resp.order_id, sessionId: parsedUri.sessionId ?? "", claimToken: resp.token, + }; +} + +/** + * Instantiate a pay template. + * + * @returns A taler://pay/ URI pointing to the order + */ +export async function instantiateTemplate( + wex: WalletExecutionContext, + req: PreparePayTemplateRequest, +): Promise<string> { + const res = await instantiateTemplateRaw(wex, req); + return TalerUris.stringify({ + type: TalerUriAction.Pay, + merchantBaseUrl: res.merchantBaseUrl as HostPortPath, + orderId: res.orderId, + sessionId: res.sessionId ?? "", + claimToken: res.claimToken, }); }