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:
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,
});
}