From 04ab9f37801f6a42b85581cc79667239d3fc79e5 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Sat, 11 Feb 2023 14:24:29 +0100 Subject: wallet-core,harness: implement pay templating --- packages/taler-wallet-core/src/wallet.ts | 56 +++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 8 deletions(-) (limited to 'packages/taler-wallet-core/src/wallet.ts') diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index f1ed592bd..57ae85c1c 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -56,8 +56,10 @@ import { codecForInitiatePeerPushPaymentRequest, codecForIntegrationTestArgs, codecForListKnownBankAccounts, + codecForMerchantPostOrderResponse, codecForPrepareDepositRequest, codecForPreparePayRequest, + codecForPreparePayTemplateRequest, codecForPreparePeerPullPaymentRequest, codecForPreparePeerPushPaymentRequest, codecForPrepareRefundRequest, @@ -77,6 +79,7 @@ import { CoinDumpJson, CoinRefreshRequest, CoinStatus, + constructPayUri, CoreApiResponse, DenominationInfo, DenomOperationMap, @@ -88,7 +91,6 @@ import { ExchangesListResponse, ExchangeTosStatusDetails, FeeDescription, - GetBalanceDetailRequest, GetExchangeTosResult, InitResponse, j2s, @@ -96,7 +98,9 @@ import { KnownBankAccountsInfo, Logger, ManualWithdrawalDetails, + MerchantUsingTemplateDetails, NotificationType, + parsePayTemplateUri, parsePaytoUri, RefreshReason, TalerErrorCode, @@ -156,11 +160,7 @@ import { runBackupCycle, } from "./operations/backup/index.js"; import { setWalletDeviceId } from "./operations/backup/state.js"; -import { - getBalanceDetail, - getBalances, - getMerchantPaymentBalanceDetails, -} from "./operations/balance.js"; +import { getBalanceDetail, getBalances } from "./operations/balance.js"; import { getExchangeTosStatus, makeExchangeListItem, @@ -186,7 +186,6 @@ import { } from "./operations/exchanges.js"; import { getMerchantInfo } from "./operations/merchants.js"; import { - abortPay as abortPay, applyRefund, applyRefundFromPurchaseId, confirmPay, @@ -1171,11 +1170,50 @@ async function dispatchRequestInternal( await runPending(ws, true); return {}; } - // FIXME: Deprecate one of the aliases! case WalletApiOperation.PreparePayForUri: { const req = codecForPreparePayRequest().decode(payload); return await preparePayForUri(ws, req.talerPayUri); } + case WalletApiOperation.PreparePayForTemplate: { + const req = codecForPreparePayTemplateRequest().decode(payload); + const url = parsePayTemplateUri(req.talerPayTemplateUri); + const templateDetails: MerchantUsingTemplateDetails = {}; + if (!url) { + throw Error("invalid taler-template URI"); + } + if ( + url.templateParams.amount && + typeof url.templateParams.amount === "string" + ) { + templateDetails.amount = + req.templateParams.amount ?? url.templateParams.amount; + } + if ( + url.templateParams.summary && + typeof url.templateParams.summary === "string" + ) { + templateDetails.summary = + req.templateParams.summary ?? url.templateParams.summary; + } + const reqUrl = new URL( + `templates/${url.templateId}`, + url.merchantBaseUrl, + ); + const httpReq = await ws.http.postJson(reqUrl.href, templateDetails); + const resp = await readSuccessResponseJsonOrThrow( + httpReq, + codecForMerchantPostOrderResponse(), + ); + + const payUri = constructPayUri( + url.merchantBaseUrl, + resp.order_id, + "", + resp.token, + ); + + return await preparePayForUri(ws, payUri); + } case WalletApiOperation.ConfirmPay: { const req = codecForConfirmPayRequest().decode(payload); return await confirmPay(ws, req.proposalId, req.sessionId); @@ -1434,6 +1472,8 @@ async function dispatchRequestInternal( case WalletApiOperation.GetVersion: { return getVersion(ws); } + //default: + // assertUnreachable(operation); } throw TalerError.fromDetail( TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN, -- cgit v1.2.3