aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-05-20 15:51:36 -0300
committerSebastian <sebasjm@gmail.com>2024-05-20 15:51:36 -0300
commitee42582de202ecc485cc0e153810f25ecb9055d8 (patch)
tree6467a919136f6fe55af6efaf422fcd270cb7b394 /packages/taler-wallet-core
parentabafae8a1bf5b8b22b09438eac1d2292b6f836f2 (diff)
downloadwallet-core-ee42582de202ecc485cc0e153810f25ecb9055d8.tar.xz
fix #8855
Diffstat (limited to 'packages/taler-wallet-core')
-rw-r--r--packages/taler-wallet-core/src/pay-merchant.ts64
-rw-r--r--packages/taler-wallet-core/src/wallet-api-types.ts3
2 files changed, 41 insertions, 26 deletions
diff --git a/packages/taler-wallet-core/src/pay-merchant.ts b/packages/taler-wallet-core/src/pay-merchant.ts
index f08db3a6a..8b6cb5e8d 100644
--- a/packages/taler-wallet-core/src/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/pay-merchant.ts
@@ -34,6 +34,8 @@ import {
assertUnreachable,
AsyncFlag,
checkDbInvariant,
+ CheckPaymentResponse,
+ CheckPayTemplateReponse,
CheckPayTemplateRequest,
codecForAbortResponse,
codecForMerchantContractTerms,
@@ -79,6 +81,7 @@ import {
TalerErrorCode,
TalerErrorDetail,
TalerMerchantApi,
+ TalerMerchantInstanceHttpClient,
TalerPreciseTimestamp,
TalerProtocolViolationError,
TalerUriAction,
@@ -627,8 +630,7 @@ async function processDownloadProposal(
if (proposal.purchaseStatus != PurchaseStatus.PendingDownloadingProposal) {
logger.error(
- `unexpected state ${proposal.purchaseStatus}/${
- PurchaseStatus[proposal.purchaseStatus]
+ `unexpected state ${proposal.purchaseStatus}/${PurchaseStatus[proposal.purchaseStatus]
} for ${ctx.transactionId} in processDownloadProposal`,
);
return TaskRunResult.finished();
@@ -887,8 +889,7 @@ async function createOrReusePurchase(
oldProposal.claimToken === claimToken
) {
logger.info(
- `Found old proposal (status=${
- PurchaseStatus[oldProposal.purchaseStatus]
+ `Found old proposal (status=${PurchaseStatus[oldProposal.purchaseStatus]
}) for order ${orderId} at ${merchantBaseUrl}`,
);
if (oldProposal.purchaseStatus === PurchaseStatus.DialogShared) {
@@ -1601,16 +1602,31 @@ async function downloadTemplate(
export async function checkPayForTemplate(
wex: WalletExecutionContext,
req: CheckPayTemplateRequest,
-): Promise<TalerMerchantApi.WalletTemplateDetails> {
+): Promise<CheckPayTemplateReponse> {
const parsedUri = parsePayTemplateUri(req.talerPayTemplateUri);
if (!parsedUri) {
throw Error("invalid taler-template URI");
}
- return await downloadTemplate(
+ const asd = await downloadTemplate(
wex,
parsedUri.merchantBaseUrl,
parsedUri.templateId,
);
+
+ const merchantApi = new TalerMerchantInstanceHttpClient(
+ parsedUri.merchantBaseUrl,
+ wex.http,
+ );
+
+ const cfg = await merchantApi.getConfig()
+ if (cfg.type === "fail") {
+ throw TalerError.fromUncheckedDetail(cfg.detail);
+ }
+
+ return {
+ ...asd,
+ supportedCurrencies: Object.keys(cfg.body.currencies)
+ }
}
export async function preparePayForTemplate(
@@ -1630,28 +1646,26 @@ export async function preparePayForTemplate(
parsedUri.templateId,
);
- const amountFromUri = templateInfo.editable_defaults?.amount;
- if (amountFromUri != null) {
- const templateParamsAmount = req.templateParams?.amount;
- if (templateParamsAmount != null) {
- templateDetails.amount = templateParamsAmount as AmountString;
- } else {
- if (Amounts.isCurrency(amountFromUri)) {
- throw Error(
- "Amount from template URI only has a currency without value. The value must be provided in the templateParams.",
- );
- } else {
- templateDetails.amount = amountFromUri as AmountString;
- }
+ const templateParamsAmount = req.templateParams?.amount as AmountString | undefined;
+ if (templateParamsAmount === null) {
+ const amountFromUri = templateInfo.editable_defaults?.amount;
+ if (amountFromUri != null) {
+ templateDetails.amount = amountFromUri as AmountString;
}
+ } else {
+ templateDetails.amount = templateParamsAmount
}
- if (
- templateInfo.editable_defaults?.summary !== undefined &&
- typeof templateInfo.editable_defaults?.summary === "string"
- ) {
- templateDetails.summary =
- req.templateParams?.summary ?? templateInfo.editable_defaults?.summary;
+
+ const templateParamsSummary = req.templateParams?.summary;
+ if (templateParamsSummary === null) {
+ const summaryFromUri = templateInfo.editable_defaults?.summary;
+ if (summaryFromUri != null) {
+ templateDetails.summary = summaryFromUri;
+ }
+ } else {
+ templateDetails.summary = templateParamsSummary
}
+
const reqUrl = new URL(
`templates/${parsedUri.templateId}`,
parsedUri.merchantBaseUrl,
diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts
index 2a1b7d170..1bcab801c 100644
--- a/packages/taler-wallet-core/src/wallet-api-types.ts
+++ b/packages/taler-wallet-core/src/wallet-api-types.ts
@@ -40,6 +40,7 @@ import {
BalancesResponse,
CanonicalizeBaseUrlRequest,
CanonicalizeBaseUrlResponse,
+ CheckPayTemplateReponse,
CheckPayTemplateRequest,
CheckPeerPullCreditRequest,
CheckPeerPullCreditResponse,
@@ -553,7 +554,7 @@ export type SharePaymentOp = {
export type CheckPayForTemplateOp = {
op: WalletApiOperation.CheckPayForTemplate;
request: CheckPayTemplateRequest;
- response: TalerMerchantApi.WalletTemplateDetails;
+ response: CheckPayTemplateReponse;
};
/**