aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/wallet.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-02-11 14:24:29 +0100
committerFlorian Dold <florian@dold.me>2023-02-11 14:24:29 +0100
commit04ab9f37801f6a42b85581cc79667239d3fc79e5 (patch)
tree7f5841f5a872a6374251137b75a17d00a258740e /packages/taler-wallet-core/src/wallet.ts
parenta9073a67971e56dc58e8633d10c5e0c7c3920c8a (diff)
downloadwallet-core-04ab9f37801f6a42b85581cc79667239d3fc79e5.tar.xz
wallet-core,harness: implement pay templating
Diffstat (limited to 'packages/taler-wallet-core/src/wallet.ts')
-rw-r--r--packages/taler-wallet-core/src/wallet.ts56
1 files changed, 48 insertions, 8 deletions
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<Op extends WalletApiOperation>(
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<Op extends WalletApiOperation>(
case WalletApiOperation.GetVersion: {
return getVersion(ws);
}
+ //default:
+ // assertUnreachable(operation);
}
throw TalerError.fromDetail(
TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN,