taler-typescript-core

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

commit 3dffbc6b6830f69d2f252e729e428acc9d1683bd
parent 2ffe5228d8252417630f681472675054a31e5186
Author: Iván Ávalos <avalos@disroot.org>
Date:   Thu, 10 Apr 2025 15:41:01 +0200

WIP: fix compilation errors

Diffstat:
Mpackages/merchant-backoffice-ui/src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx | 8++++++++
Mpackages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx | 4++--
Mpackages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx | 25++++++++++++++++++++++---
Mpackages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx | 15+++++++++++++--
Mpackages/taler-wallet-webextension/src/components/PaymentButtons.tsx | 9+++++++++
Mpackages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.stories.tsx | 4++--
Mpackages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.tsx | 11+++++++++--
Mpackages/taler-wallet-webextension/src/cta/Payment/state.ts | 4++++
8 files changed, 69 insertions(+), 11 deletions(-)

diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx @@ -15,6 +15,7 @@ */ import { HttpStatusCode, + OrderVersion, TalerError, assertUnreachable, } from "@gnu-taler/taler-util"; @@ -45,6 +46,13 @@ export function OrderCreatedSuccessfully({ if (result instanceof TalerError) { return <ErrorLoadingMerchant error={result} />; } + + if (entity.request.order.version !== undefined && + entity.request.order.version !== OrderVersion.V0 + ) { + return <div>Unsupported order version {entity.request.order.version}</div>; + } + if (result.type === "fail") { switch (result.case) { case HttpStatusCode.NotFound: { diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx @@ -19,7 +19,7 @@ * @author Sebastian Javier Marchano (sebasjm) */ -import { AmountString, TalerMerchantApi } from "@gnu-taler/taler-util"; +import { AmountString, MerchantContractTerms } from "@gnu-taler/taler-util"; import { addDays } from "date-fns"; import { FunctionalComponent, h } from "preact"; import { DetailPage as TestedComponent } from "./DetailPage.js"; @@ -42,7 +42,7 @@ function createExample<Props>( return r; } -const defaultContractTerm: TalerMerchantApi.ContractTerms = { +const defaultContractTerm: MerchantContractTerms = { amount: "TESTKUDOS:10" as AmountString, timestamp: { t_s: new Date().getTime() / 1000, diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx @@ -22,6 +22,7 @@ import { AmountJson, Amounts, + MerchantContractVersion, TalerMerchantApi, stringifyRefundUri, } from "@gnu-taler/taler-util"; @@ -48,7 +49,7 @@ import { RefundModal } from "../list/Table.js"; import { Event, Timeline } from "./Timeline.js"; type Entity = TalerMerchantApi.MerchantOrderStatusResponse; -type CT = TalerMerchantApi.ContractTerms; +type CT = TalerMerchantApi.MerchantContractTermsV0; export interface Props { onBack: () => void; @@ -156,6 +157,12 @@ function ClaimedPage({ id: string; order: TalerMerchantApi.CheckPaymentClaimedResponse; }) { + if (order.contract_terms.version !== undefined && + order.contract_terms.version !== MerchantContractVersion.V0 + ) { + return <div>Unsupported contract version {order.contract_terms.version}</div>; + } + const now = new Date(); const refundable = order.contract_terms.refund_deadline.t_s !== "never" && @@ -299,7 +306,7 @@ function ClaimedPage({ </div> </section> - {order.contract_terms.products.length ? ( + {order.contract_terms.products?.length ? ( <Fragment> <div class="title"> <i18n.Translate>Product list</i18n.Translate> @@ -309,6 +316,9 @@ function ClaimedPage({ ) : undefined} {value.contract_terms && ( + value.contract_terms.version === undefined + || value.contract_terms.version === MerchantContractVersion.V0 + ) && ( <ContractTerms value={value.contract_terms} /> )} </div> @@ -327,6 +337,12 @@ function PaidPage({ order: TalerMerchantApi.CheckPaymentPaidResponse; onRefund: (id: string) => void; }) { + if (order.contract_terms.version !== undefined && + order.contract_terms.version !== MerchantContractVersion.V0 + ) { + return <div>Unsupported contract version {order.contract_terms.version}</div>; + } + const now = new Date(); const refundable = order.contract_terms.refund_deadline.t_s !== "never" && @@ -592,7 +608,7 @@ function PaidPage({ </div> </section> - {order.contract_terms.products.length ? ( + {order.contract_terms.products?.length ? ( <Fragment> <div class="title"> <i18n.Translate>Product list</i18n.Translate> @@ -602,6 +618,9 @@ function PaidPage({ ) : undefined} {value.contract_terms && ( + value.contract_terms.version === undefined + || value.contract_terms.version === MerchantContractVersion.V0 + ) && ( <ContractTerms value={value.contract_terms} /> )} </div> diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx @@ -19,7 +19,7 @@ * @author Sebastian Javier Marchano (sebasjm) */ -import { Amounts, TalerMerchantApi } from "@gnu-taler/taler-util"; +import { Amounts, AmountString, MerchantContractVersion, TalerMerchantApi } from "@gnu-taler/taler-util"; import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { format } from "date-fns"; import { VNode, h } from "preact"; @@ -255,6 +255,17 @@ export function RefundModal({ const { i18n } = useTranslationContext(); // const [errors, setErrors] = useState<FormErrors<State>>({}); + let amount: AmountString; + if (order.order_status === "paid") { + if (order.contract_terms.version !== undefined && + order.contract_terms.version !== MerchantContractVersion.V0 + ) { + return <div>Unsupported contract version {order.contract_terms.version}</div>; + } + + amount = order.contract_terms.amount; + } + const refunds = ( order.order_status === "paid" ? order.refund_details : [] ).reduce(mergeRefunds, []); @@ -268,7 +279,7 @@ export function RefundModal({ ); const orderPrice = order.order_status === "paid" - ? Amounts.parseOrThrow(order.contract_terms.amount) + ? Amounts.parseOrThrow(amount!) : undefined; const totalRefundable = !orderPrice ? Amounts.zeroOfCurrency(totalRefunded.currency) diff --git a/packages/taler-wallet-webextension/src/components/PaymentButtons.tsx b/packages/taler-wallet-webextension/src/components/PaymentButtons.tsx @@ -174,6 +174,15 @@ export function PaymentButtons({ </Fragment> ); } + if (payStatus.status === PreparePayResultType.ChoiceSelection) { + return ( + <Fragment> + <section> + Unsupported payment result {payStatus.status} + </section> + </Fragment> + ); + } assertUnreachable(payStatus); } diff --git a/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.stories.tsx b/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.stories.tsx @@ -18,7 +18,7 @@ * * @author Sebastian Javier Marchano (sebasjm) */ -import { AmountString, ContractTerms } from "@gnu-taler/taler-util"; +import { AmountString, MerchantContractTerms } from "@gnu-taler/taler-util"; import * as tests from "@gnu-taler/web-util/testing"; import { ErrorView, @@ -31,7 +31,7 @@ export default { title: "ShowFullContractTermPopup", }; -const cd: ContractTerms = { +const cd: MerchantContractTerms = { products: [], nonce: "123", amount: "ARS:2" as AmountString, diff --git a/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.tsx b/packages/taler-wallet-webextension/src/components/ShowFullContractTermPopup.tsx @@ -15,9 +15,10 @@ */ import { AbsoluteTime, - ContractTerms, Duration, Location, + MerchantContractTerms, + MerchantContractVersion, TransactionIdStr, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; @@ -95,7 +96,7 @@ export namespace States { export interface Show { status: "show"; hideHandler: ButtonHandler; - contractTerms: ContractTerms; + contractTerms: MerchantContractTerms; } } @@ -193,6 +194,12 @@ export function ShowView({ contractTerms, hideHandler }: States.Show): VNode { const createdAt = AbsoluteTime.fromProtocolTimestamp(contractTerms.timestamp); const { i18n } = useTranslationContext(); + if (contractTerms.version !== undefined && + contractTerms.version !== MerchantContractVersion.V0 + ) { + return <div>Unsupported contract version {contractTerms.version}</div>; + } + return ( <Modal title="Full detail" onClose={hideHandler}> <div style={{ overflowY: "auto", height: "95%", padding: 5 }}> diff --git a/packages/taler-wallet-webextension/src/cta/Payment/state.ts b/packages/taler-wallet-webextension/src/cta/Payment/state.ts @@ -98,6 +98,10 @@ export function useComponentState({ // } const { payStatus } = hook.response; + if (payStatus.status === PreparePayResultType.ChoiceSelection) { + throw Error(`unsupported payment result ${payStatus.status}`); + } + const amount = Amounts.parseOrThrow(payStatus.amountRaw); const foundBalance = hook.response.balance.balances.find(