From 326d16620eea86268b69689717f5dff15a4bbf62 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 2 Apr 2025 18:09:29 +0200 Subject: [PATCH 001/292] Expose Adyen dropin events (onReady, onSelect) --- package.json | 9 ++++++++- .../payment_source/AdyenPayment.tsx | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8a73d137..1ac36c47 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,13 @@ "micromatch@<4.0.8": ">=4.0.8", "rollup@>=4.0.0 <4.22.4": ">=4.22.4", "cross-spawn@>=7.0.0 <7.0.5": ">=7.0.5" - } + }, + "onlyBuiltDependencies": [ + "@biomejs/biome", + "esbuild", + "iframe-resizer", + "msw", + "nx" + ] } } diff --git a/packages/react-components/src/components/payment_source/AdyenPayment.tsx b/packages/react-components/src/components/payment_source/AdyenPayment.tsx index dbb72708..862ea116 100644 --- a/packages/react-components/src/components/payment_source/AdyenPayment.tsx +++ b/packages/react-components/src/components/payment_source/AdyenPayment.tsx @@ -76,6 +76,17 @@ export interface AdyenPaymentConfig { recurringDetailReference: string shopperReference: string | undefined }) => Promise + /** + * Callback function to be called when the Adyen component is ready. + * @returns void. + */ + onReady?: () => void + /** + * onSelect callback function to be called when a payment method is selected. + * @param component - The selected payment method component. + * @returns void. + */ + onSelect?: (component: UIElement) => void giftcardErrorComponent?: (message: string) => JSX.Element } @@ -101,6 +112,8 @@ export function AdyenPayment({ styles, onDisableStoredPaymentMethod, giftcardErrorComponent, + onReady, + onSelect, } = { ...defaultConfig, ...config, @@ -580,6 +593,12 @@ export function AdyenPayment({ setPaymentRef({ ref }) } } + if (onSelect) { + onSelect(component) + } + }, + onReady() { + if (onReady) onReady() }, }).mount("#adyen-dropin") if (dropin && checkout) { From b281a1f4cb72fda42655942cfbe2a80940070860 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 2 Apr 2025 19:59:30 +0200 Subject: [PATCH 002/292] v4.21.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 9e33df17..64a082b1 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.20.6", + "version": "4.21.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index df9d9d43..fdd656ad 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.20.6", + "version": "4.21.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From c95ecc019a9535634c356af2f56644ac547200d9 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 9 Apr 2025 16:52:03 +0200 Subject: [PATCH 003/292] Add stripe connected account --- package.json | 2 +- packages/react-components/package.json | 32 +- .../payment_gateways/StripeGateway.tsx | 46 +- .../payment_source/StripePayment.tsx | 130 ++--- pnpm-lock.yaml | 518 +++++++++++------- 5 files changed, 428 insertions(+), 300 deletions(-) diff --git a/package.json b/package.json index 1ac36c47..f3b03b2a 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@biomejs/biome": "1.9.4", "husky": "^9.1.7", "lerna": "^8.2.1", - "typescript": "^5.8.2" + "typescript": "^5.8.3" }, "pnpm": { "overrides": { diff --git a/packages/react-components/package.json b/packages/react-components/package.json index fdd656ad..2afa4f64 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -199,14 +199,14 @@ }, "homepage": "https://github.com/commercelayer/commercelayer-react-components#readme", "dependencies": { - "@adyen/adyen-web": "^6.9.0", + "@adyen/adyen-web": "^6.11.0", "@commercelayer/organization-config": "^2.2.0", - "@commercelayer/sdk": "^6.34.0", - "@stripe/react-stripe-js": "^3.3.0", - "@stripe/stripe-js": "^5.9.2", + "@commercelayer/sdk": "^6.38.0", + "@stripe/react-stripe-js": "^3.6.0", + "@stripe/stripe-js": "^7.0.0", "@tanstack/react-table": "^8.21.2", "@types/iframe-resizer": "^3.5.13", - "braintree-web": "^3.115.2", + "braintree-web": "^3.117.1", "frames-react": "^1.2.2", "iframe-resizer": "^4.3.6", "jwt-decode": "^4.0.0", @@ -214,32 +214,32 @@ "rapid-form": "2.1.0" }, "devDependencies": { - "@commercelayer/js-auth": "^6.7.1", - "@faker-js/faker": "^9.5.1", - "@playwright/test": "^1.50.1", + "@commercelayer/js-auth": "^6.7.2", + "@faker-js/faker": "^9.6.0", + "@playwright/test": "^1.51.1", "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.2.0", - "@types/braintree-web": "^3.96.16", + "@testing-library/react": "^16.3.0", + "@types/braintree-web": "^3.96.17", "@types/lodash": "^4.17.16", - "@types/node": "^22.13.9", + "@types/node": "^22.14.0", "@types/prop-types": "^15.7.14", "@types/react": "^18.3.1", "@types/react-test-renderer": "^18.3.1", "@types/react-window": "^1.8.8", "@vitejs/plugin-react": "^4.3.4", - "@vitest/coverage-v8": "^3.0.7", + "@vitest/coverage-v8": "^3.1.1", "jsdom": "^26.0.0", "minimize-js": "^1.4.0", "msw": "^2.7.3", "react": "^18.3.1", "react-dom": "^18.3.1", "react-test-renderer": "^18.3.1", - "tsc-alias": "^1.8.11", + "tsc-alias": "^1.8.13", "tslib": "^2.8.1", - "typescript": "^5.8.2", - "vite": "^6.2.0", + "typescript": "^5.8.3", + "vite": "^6.2.5", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.0.7" + "vitest": "^3.1.1" }, "peerDependencies": { "react": ">=18.0.0" diff --git a/packages/react-components/src/components/payment_gateways/StripeGateway.tsx b/packages/react-components/src/components/payment_gateways/StripeGateway.tsx index 6ee87e5c..e9eb72d7 100644 --- a/packages/react-components/src/components/payment_gateways/StripeGateway.tsx +++ b/packages/react-components/src/components/payment_gateways/StripeGateway.tsx @@ -1,19 +1,19 @@ -import type { GatewayBaseType } from '#components/payment_gateways/PaymentGateway' -import StripePayment from '#components/payment_source/StripePayment' -import CustomerContext from '#context/CustomerContext' -import OrderContext from '#context/OrderContext' -import PaymentMethodChildrenContext from '#context/PaymentMethodChildrenContext' -import PaymentMethodContext from '#context/PaymentMethodContext' -import PaymentSourceContext from '#context/PaymentSourceContext' +import type { GatewayBaseType } from "#components/payment_gateways/PaymentGateway" +import StripePayment from "#components/payment_source/StripePayment" +import CustomerContext from "#context/CustomerContext" +import OrderContext from "#context/OrderContext" +import PaymentMethodChildrenContext from "#context/PaymentMethodChildrenContext" +import PaymentMethodContext from "#context/PaymentMethodContext" +import PaymentSourceContext from "#context/PaymentSourceContext" import { getPaymentConfig, - type PaymentResource -} from '#reducers/PaymentMethodReducer' -import getCardDetails from '#utils/getCardDetails' -import type { StripeElementLocale } from '@stripe/stripe-js' -import isEmpty from 'lodash/isEmpty' -import { useContext, type JSX } from 'react'; -import PaymentCardsTemplate from '../utils/PaymentCardsTemplate' + type PaymentResource, +} from "#reducers/PaymentMethodReducer" +import getCardDetails from "#utils/getCardDetails" +import type { StripeElementLocale } from "@stripe/stripe-js" +import isEmpty from "lodash/isEmpty" +import { useContext, type JSX } from "react" +import PaymentCardsTemplate from "../utils/PaymentCardsTemplate" type Props = GatewayBaseType @@ -35,16 +35,18 @@ export function StripeGateway(props: Props): JSX.Element | null { const { payments, isGuest } = useContext(CustomerContext) const { currentPaymentMethodId, config, paymentSource } = useContext(PaymentMethodContext) - const paymentResource: PaymentResource = 'stripe_payments' + const paymentResource: PaymentResource = "stripe_payments" const locale = order?.language_code as StripeElementLocale if (!readonly && payment?.id !== currentPaymentMethodId) return null // @ts-expect-error no type const publishableKey = paymentSource?.publishable_key // @ts-expect-error no type + const connectedAccount = paymentSource?.connected_account + // @ts-expect-error no type const clientSecret = paymentSource?.client_secret const stripeConfig = config - ? getPaymentConfig<'stripe_payments'>(paymentResource, config).stripePayment + ? getPaymentConfig<"stripe_payments">(paymentResource, config).stripePayment : {} const customerPayments = !isEmpty(payments) && payments @@ -55,21 +57,21 @@ export function StripeGateway(props: Props): JSX.Element | null { if (readonly || showCard) { const card = getCardDetails({ customerPayment: { - payment_source: paymentSource + payment_source: paymentSource, }, - paymentType: paymentResource + paymentType: paymentResource, }) - if (card?.brand === '') { + if (card?.brand === "") { card.brand = // @ts-expect-error missing type - paymentSource?.payment_instrument?.issuer_type ?? 'credit-card' + paymentSource?.payment_instrument?.issuer_type ?? "credit-card" } const value = { ...card, showCard, handleEditClick, readonly, - paymentSource + paymentSource, } return card?.brand == null ? null : ( @@ -91,6 +93,7 @@ export function StripeGateway(props: Props): JSX.Element | null { show={show} templateCustomerSaveToWallet={templateCustomerSaveToWallet} publishableKey={publishableKey} + connectedAccount={connectedAccount} clientSecret={clientSecret} expressPayments={expressPayments} locale={locale} @@ -103,6 +106,7 @@ export function StripeGateway(props: Props): JSX.Element | null { - interface OnSubmitArgs { - event: SubmitEvent + event: HTMLFormElement | null stripe: Stripe | null elements: StripeElements | null } const defaultOptions: StripePaymentElementOptions = { layout: { - type: 'accordion', + type: "accordion", defaultCollapsed: false, radios: true, - spacedAccordionItems: false + spacedAccordionItems: false, }, - fields: { billingDetails: 'never' } + fields: { billingDetails: "never" }, } -const defaultAppearance: StripeElementsOptions['appearance'] = { - theme: 'stripe', +const defaultAppearance: StripeElementsOptions["appearance"] = { + theme: "stripe", variables: { - colorText: '#32325d', - fontFamily: '"Helvetica Neue", Helvetica, sans-serif' - } + colorText: "#32325d", + fontFamily: '"Helvetica Neue", Helvetica, sans-serif', + }, } function StripePaymentForm({ options = defaultOptions, - templateCustomerSaveToWallet + templateCustomerSaveToWallet, + stripe, }: StripePaymentFormProps): JSX.Element { const ref = useRef(null) const { currentPaymentMethodType, setPaymentMethodErrors, setPaymentRef } = useContext(PaymentMethodContext) const { order } = useContext(OrderContext) - const stripe = useStripe() const elements = useElements() + // biome-ignore lint/correctness/useExhaustiveDependencies: Avoid rerendering the form useEffect(() => { if (ref.current && stripe && elements) { ref.current.onsubmit = async () => { return await onSubmit({ - event: ref.current as any, + event: ref.current, stripe, - elements + elements, }) } setPaymentRef({ ref }) @@ -88,7 +85,7 @@ function StripePaymentForm({ const onSubmit = async ({ event, stripe, - elements + elements, }: OnSubmitArgs): Promise => { if (!stripe) return false @@ -97,51 +94,50 @@ function StripePaymentForm({ event?.elements?.save_payment_source_to_customer_wallet?.checked if (savePaymentSourceToCustomerWallet) setCustomerOrderParam( - '_save_payment_source_to_customer_wallet', - savePaymentSourceToCustomerWallet + "_save_payment_source_to_customer_wallet", + savePaymentSourceToCustomerWallet, ) if (elements != null) { const billingInfo = order?.billing_address - const email = order?.customer_email ?? '' + const email = order?.customer_email ?? "" const billingDetails = { - name: billingInfo?.full_name ?? '', + name: billingInfo?.full_name ?? "", email, phone: billingInfo?.phone, address: { city: billingInfo?.city, country: billingInfo?.country_code, line1: billingInfo?.line_1, - line2: billingInfo?.line_2 ?? '', - postal_code: billingInfo?.zip_code ?? '', - state: billingInfo?.state_code - } + line2: billingInfo?.line_2 ?? "", + postal_code: billingInfo?.zip_code ?? "", + state: billingInfo?.state_code, + }, } const url = new URL(window.location.href) - const cleanUrl = `${url.origin}${url.pathname}?accessToken=${url.searchParams.get('accessToken')}` + const cleanUrl = `${url.origin}${url.pathname}?accessToken=${url.searchParams.get("accessToken")}` const { error } = await stripe.confirmPayment({ elements, confirmParams: { return_url: cleanUrl, payment_method_data: { - billing_details: billingDetails - } + billing_details: billingDetails, + }, }, - redirect: 'if_required' + redirect: "if_required", }) if (error) { console.error(error) setPaymentMethodErrors([ { - code: 'PAYMENT_INTENT_AUTHENTICATION_FAILURE', - resource: 'payment_methods', + code: "PAYMENT_INTENT_AUTHENTICATION_FAILURE", + resource: "payment_methods", field: currentPaymentMethodType, - message: error.message ?? '' - } + message: error.message ?? "", + }, ]) return false - } else { - return true } + return true } return false } @@ -150,11 +146,11 @@ function StripePaymentForm({
{/* */} {templateCustomerSaveToWallet && ( - + {templateCustomerSaveToWallet} )} @@ -162,14 +158,15 @@ function StripePaymentForm({ ) } -type Props = PaymentMethodConfig['stripePayment'] & - Omit & - Partial & { +type Props = PaymentMethodConfig["stripePayment"] & + Omit & + Partial & { show?: boolean publishableKey: string locale?: StripeElementLocale clientSecret: string expressPayments?: boolean + connectedAccount?: string } export function StripePayment({ @@ -177,8 +174,9 @@ export function StripePayment({ show, options, clientSecret, - locale = 'auto', + locale = "auto", expressPayments = false, + connectedAccount, ...p }: Props): JSX.Element | null { const [isLoaded, setIsLoaded] = useState(false) @@ -190,13 +188,16 @@ export function StripePayment({ appearance, ...divProps } = p + // biome-ignore lint/correctness/useExhaustiveDependencies: Avoid refreshing the stripe object useEffect(() => { if (show && publishableKey) { - import('@stripe/stripe-js').then(({ loadStripe }) => { + import("@stripe/stripe-js").then(({ loadStripe }) => { const getStripe = async (): Promise => { - const res = await loadStripe(publishableKey, { - locale - }) + const options = { + locale, + ...(connectedAccount ? { stripeAccount: connectedAccount } : {}), + } satisfies StripeConstructorOptions + const res = await loadStripe(publishableKey, options) if (res != null) { setStripe(res) setIsLoaded(true) @@ -208,11 +209,11 @@ export function StripePayment({ return () => { setIsLoaded(false) } - }, [show, publishableKey]) + }, [show, publishableKey, connectedAccount]) const elementsOptions: StripeElementsOptions = { clientSecret, appearance: { ...defaultAppearance, ...appearance }, - fonts + fonts, } return isLoaded && stripe != null && clientSecret != null ? (
@@ -221,6 +222,7 @@ export function StripePayment({ ) : ( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0834aee0..bec2f4d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,8 +35,8 @@ importers: specifier: ^8.2.1 version: 8.2.1(encoding@0.1.13) typescript: - specifier: ^5.8.2 - version: 5.8.2 + specifier: ^5.8.3 + version: 5.8.3 packages/docs: devDependencies: @@ -108,7 +108,7 @@ importers: version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) '@storybook/react-vite': specifier: ^7.6.17 - version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -123,7 +123,7 @@ importers: version: 18.3.18 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) babel-loader: specifier: ^9.2.1 version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.18.20)) @@ -135,7 +135,7 @@ importers: version: 4.0.0 msw: specifier: ^2.7.0 - version: 2.7.3(@types/node@22.13.10)(typescript@5.8.2) + version: 2.7.3(@types/node@22.14.0)(typescript@5.8.2) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -156,28 +156,28 @@ importers: version: 5.8.2 vite: specifier: ^6.1.0 - version: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + version: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) packages/react-components: dependencies: '@adyen/adyen-web': - specifier: ^6.9.0 - version: 6.9.0 + specifier: ^6.11.0 + version: 6.11.0 '@commercelayer/organization-config': specifier: ^2.2.0 version: 2.2.0 '@commercelayer/sdk': - specifier: ^6.34.0 - version: 6.35.0 + specifier: ^6.38.0 + version: 6.38.0 '@stripe/react-stripe-js': - specifier: ^3.3.0 - version: 3.4.0(@stripe/stripe-js@5.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^3.6.0 + version: 3.6.0(@stripe/stripe-js@7.0.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@stripe/stripe-js': - specifier: ^5.9.2 - version: 5.10.0 + specifier: ^7.0.0 + version: 7.0.0 '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -185,11 +185,11 @@ importers: specifier: ^3.5.13 version: 3.5.13 braintree-web: - specifier: ^3.115.2 - version: 3.116.3 + specifier: ^3.117.1 + version: 3.117.1 frames-react: specifier: ^1.2.2 - version: 1.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2) + version: 1.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3) iframe-resizer: specifier: ^4.3.6 version: 4.4.5 @@ -204,29 +204,29 @@ importers: version: 2.1.0 devDependencies: '@commercelayer/js-auth': - specifier: ^6.7.1 - version: 6.7.1 + specifier: ^6.7.2 + version: 6.7.2 '@faker-js/faker': - specifier: ^9.5.1 + specifier: ^9.6.0 version: 9.6.0 '@playwright/test': - specifier: ^1.50.1 - version: 1.51.0 + specifier: ^1.51.1 + version: 1.51.1 '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 '@testing-library/react': - specifier: ^16.2.0 - version: 16.2.0(@testing-library/dom@10.4.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/braintree-web': - specifier: ^3.96.16 - version: 3.96.16 + specifier: ^3.96.17 + version: 3.96.17 '@types/lodash': specifier: ^4.17.16 version: 4.17.16 '@types/node': - specifier: ^22.13.9 - version: 22.13.10 + specifier: ^22.14.0 + version: 22.14.0 '@types/prop-types': specifier: ^15.7.14 version: 15.7.14 @@ -241,10 +241,10 @@ importers: version: 1.8.8 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) '@vitest/coverage-v8': - specifier: ^3.0.7 - version: 3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(terser@5.39.0)(yaml@2.7.0)) + specifier: ^3.1.1 + version: 3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0)) jsdom: specifier: ^26.0.0 version: 26.0.0 @@ -253,7 +253,7 @@ importers: version: 1.4.0 msw: specifier: ^2.7.3 - version: 2.7.3(@types/node@22.13.10)(typescript@5.8.2) + version: 2.7.3(@types/node@22.14.0)(typescript@5.8.3) react: specifier: ^18.3.1 version: 18.3.1 @@ -264,28 +264,28 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) tsc-alias: - specifier: ^1.8.11 - version: 1.8.11 + specifier: ^1.8.13 + version: 1.8.13 tslib: specifier: ^2.8.1 version: 2.8.1 typescript: - specifier: ^5.8.2 - version: 5.8.2 + specifier: ^5.8.3 + version: 5.8.3 vite: - specifier: ^6.2.0 - version: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + specifier: ^6.2.5 + version: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) vitest: - specifier: ^3.0.7 - version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(terser@5.39.0)(yaml@2.7.0) + specifier: ^3.1.1 + version: 3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) packages: - '@adyen/adyen-web@6.9.0': - resolution: {integrity: sha512-R4TbMuDT7rzSwpUEmgD/idW/a7x3gMv1LIdvHdwiNOEhJeLyCZTCSZBbP0r9SecpRFN1BM1L57FJc4WZfhRS+w==} + '@adyen/adyen-web@6.11.0': + resolution: {integrity: sha512-OSpTq+VN84hNPOV5RpHM8T4TYMgL8sMr0UDa+2yDeTEBTIlNdigCKgDWTXzOHIW/BuPWna4e9n1fuGYnCJgXlQ==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -950,6 +950,10 @@ packages: resolution: {integrity: sha512-GOfOGeLKhdjKa1qTq2KTF14rEKYYX7yvUYH1GYc4YuX3d5DNLqwQJK4eJN054GnAYl4YeyimVSqmLhiwC5OfBA==} engines: {node: '>=18.0.0'} + '@commercelayer/js-auth@6.7.2': + resolution: {integrity: sha512-kk4VqN2iEOreXFq76YqTP83KhBs09Z5Ez9nZNlikXWf5DXzkrOfShqqEwq8ezHjSOlqs4xVyxgQzsEdPP35CeQ==} + engines: {node: '>=18.0.0'} + '@commercelayer/organization-config@2.2.0': resolution: {integrity: sha512-v7vfLru0WiqocrPWfldmqhbG6VKYQcdu480SUCU4wTnDcXLVnlKfgaadkNnv+tVVZXh0qke8/uwrkNoi3VY/Bw==} engines: {node: '>=18', pnpm: '>=7'} @@ -958,6 +962,10 @@ packages: resolution: {integrity: sha512-0Afbon6//2KHCTb6bILk2L9Idj9dP8pw06V1CFtaz1wtAsX4iifubGpOPxHH6CuGi4DFHzgASJRz6+ZZbqb3kA==} engines: {node: '>=20'} + '@commercelayer/sdk@6.38.0': + resolution: {integrity: sha512-fv6GrTFWkQJC4yb86Fix560+S/lKLegTEFpQNTsnNpE8JLkzF63B1dyCWpbGcOtsbCK37I/CXsQf6eof1R15qA==} + engines: {node: '>=20'} + '@csstools/color-helpers@5.0.2': resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} engines: {node: '>=18'} @@ -1638,8 +1646,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.51.0': - resolution: {integrity: sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==} + '@playwright/test@1.51.1': + resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} engines: {node: '>=18'} hasBin: true @@ -2416,15 +2424,15 @@ packages: '@storybook/types@7.6.20': resolution: {integrity: sha512-GncdY3x0LpbhmUAAJwXYtJDUQEwfF175gsjH0/fxPkxPoV7Sef9TM41jQLJW/5+6TnZoCZP/+aJZTJtq3ni23Q==} - '@stripe/react-stripe-js@3.4.0': - resolution: {integrity: sha512-5m0vProlV2qyB7qXHSn25Ao79BjgJW/oiv2ynJ645dpdjeR7fyeb+KSrA4Esk7jqy+aKmdyn70TAIN0BVgh0MA==} + '@stripe/react-stripe-js@3.6.0': + resolution: {integrity: sha512-zEnaUmTOsu7zhl3RWbZ0l1dRiad+QIbcAYzQfF+yYelURJowhAwesRHKWH+qGAIBEpkO6/VCLFHhVLH9DtPlnw==} peerDependencies: - '@stripe/stripe-js': '>=1.44.1 <7.0.0' + '@stripe/stripe-js': '>=1.44.1 <8.0.0' react: '>=16.8.0 <20.0.0' react-dom: '>=16.8.0 <20.0.0' - '@stripe/stripe-js@5.10.0': - resolution: {integrity: sha512-PTigkxMdMUP6B5ISS7jMqJAKhgrhZwjprDqR1eATtFfh0OpKVNp110xiH+goeVdrJ29/4LeZJR4FaHHWstsu0A==} + '@stripe/stripe-js@7.0.0': + resolution: {integrity: sha512-0AWkP+hoIXB5O34FGY7jh687ZPlOqLqMkJDkiSXcp4TaWWidnxjsZSp0xkjyAWbIz4+j1BFXDAK01Rqb7ceBRA==} engines: {node: '>=12.16'} '@tanstack/react-table@8.21.2': @@ -2446,8 +2454,8 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} - '@testing-library/react@16.2.0': - resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} + '@testing-library/react@16.3.0': + resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==} engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 @@ -2478,8 +2486,8 @@ packages: '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} - '@types/applepayjs@14.0.8': - resolution: {integrity: sha512-Yzf5OSitdS+/G8cjaAkPJ0+pBOEf9Vik1XUCdw6ul7Qh6Xb18wTlG/sWA5jKIme3x4fbyTGlSd4mfkvdtP9mRw==} + '@types/applepayjs@14.0.9': + resolution: {integrity: sha512-xEprYbb0TEP/XIiDPbVnTYpDai8fTFpsQfVSfTd81Is2GOMUy7ie019eyX6Mz2ECxfjoUVKaiGSL577roIeHCg==} '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -2499,8 +2507,8 @@ packages: '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - '@types/braintree-web@3.96.16': - resolution: {integrity: sha512-v9gbS2vxpM5Bu5xpUMbKpZVqLjU1SZrDNXtSNSQtKH7Jc8W3dD4n5WK5z+sdnCsZU31/OXkeM/y/mOi8KQjpFw==} + '@types/braintree-web@3.96.17': + resolution: {integrity: sha512-l+ujTICdA34gxov4AAsJLONNvYKbMyOYBnDU8syBhosCp/3IW2bJuZQEmUuOrliYeMmFm20ltQO9VHsRb8066g==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -2616,8 +2624,8 @@ packages: '@types/node@18.19.80': resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==} - '@types/node@22.13.10': - resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + '@types/node@22.14.0': + resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2689,22 +2697,22 @@ packages: resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: '>=4.5.2' + vite: '>=5.1.7' - '@vitest/coverage-v8@3.0.8': - resolution: {integrity: sha512-y7SAKsQirsEJ2F8bulBck4DoluhI2EEgTimHd6EEUgJBGKy9tC25cpywh1MH4FvDGoG2Unt7+asVd1kj4qOSAw==} + '@vitest/coverage-v8@3.1.1': + resolution: {integrity: sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==} peerDependencies: - '@vitest/browser': 3.0.8 - vitest: 3.0.8 + '@vitest/browser': 3.1.1 + vitest: 3.1.1 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.0.8': - resolution: {integrity: sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==} + '@vitest/expect@3.1.1': + resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} - '@vitest/mocker@3.0.8': - resolution: {integrity: sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==} + '@vitest/mocker@3.1.1': + resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} peerDependencies: msw: ^2.4.9 vite: '>=5.1.7' @@ -2714,20 +2722,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.0.8': - resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} + '@vitest/pretty-format@3.1.1': + resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} - '@vitest/runner@3.0.8': - resolution: {integrity: sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==} + '@vitest/runner@3.1.1': + resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} - '@vitest/snapshot@3.0.8': - resolution: {integrity: sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==} + '@vitest/snapshot@3.1.1': + resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} - '@vitest/spy@3.0.8': - resolution: {integrity: sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==} + '@vitest/spy@3.1.1': + resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} - '@vitest/utils@3.0.8': - resolution: {integrity: sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==} + '@vitest/utils@3.1.1': + resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3058,8 +3066,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - braintree-web@3.116.3: - resolution: {integrity: sha512-pZVhmCA88g40XOZonKjD7RaS66tLJBA/EFfHqdqBr4+3IX73ssgmq2OfnWWOrVICgtMhFyG6fqtwwcYFewQ9Sg==} + braintree-web@3.117.1: + resolution: {integrity: sha512-Jv4NO0s90VYpbKMVL7IMigCyWhi+BlCqxS6Ub7auk6Jd4MUPToygKO3ryvvYVMmasm7pEVKRIAH16UMVfcq4FA==} browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} @@ -5472,13 +5480,13 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.51.0: - resolution: {integrity: sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==} + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} engines: {node: '>=18'} hasBin: true - playwright@1.51.0: - resolution: {integrity: sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==} + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} engines: {node: '>=18'} hasBin: true @@ -6337,8 +6345,9 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} - tsc-alias@1.8.11: - resolution: {integrity: sha512-2DuEQ58A9Rj2NE2c1+/qaGKlshni9MCK95MJzRGhQG0CYLw0bE/ACgbhhTSf/p1svLelwqafOd8stQate2bYbg==} + tsc-alias@1.8.13: + resolution: {integrity: sha512-hpuglrm2DoHZE62L8ntYqRNiSQ7J8kvIxEsajzY/QfGOm7EcdhgG5asqoWYi2E2KX0SqUuhOTnV8Ry8D/TnsEA==} + engines: {node: '>=16.20.2'} hasBin: true tsconfck@3.1.5: @@ -6414,6 +6423,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} @@ -6425,8 +6439,8 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -6582,15 +6596,15 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vite-node@3.0.8: - resolution: {integrity: sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==} + vite-node@3.1.1: + resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - vite: '>=4.5.2' + vite: '>=5.1.7' peerDependenciesMeta: vite: optional: true @@ -6635,16 +6649,56 @@ packages: yaml: optional: true - vitest@3.0.8: - resolution: {integrity: sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==} + vite@6.2.5: + resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.1.1: + resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.8 - '@vitest/ui': 3.0.8 + '@vitest/browser': 3.1.1 + '@vitest/ui': 3.1.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -6871,9 +6925,9 @@ packages: snapshots: - '@adyen/adyen-web@6.9.0': + '@adyen/adyen-web@6.11.0': dependencies: - '@types/applepayjs': 14.0.8 + '@types/applepayjs': 14.0.9 '@types/googlepay': 0.7.6 classnames: 2.5.1 preact: 10.22.1 @@ -7680,12 +7734,16 @@ snapshots: '@commercelayer/js-auth@6.7.1': {} + '@commercelayer/js-auth@6.7.2': {} + '@commercelayer/organization-config@2.2.0': dependencies: merge-anything: 5.1.7 '@commercelayer/sdk@6.35.0': {} + '@commercelayer/sdk@6.38.0': {} + '@csstools/color-helpers@5.0.2': {} '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': @@ -7889,17 +7947,17 @@ snapshots: '@hutson/parse-repository-url@3.0.2': {} - '@inquirer/confirm@5.1.8(@types/node@22.13.10)': + '@inquirer/confirm@5.1.8(@types/node@22.14.0)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.13.10) - '@inquirer/type': 3.0.5(@types/node@22.13.10) + '@inquirer/core': 10.1.9(@types/node@22.14.0) + '@inquirer/type': 3.0.5(@types/node@22.14.0) optionalDependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 - '@inquirer/core@10.1.9(@types/node@22.13.10)': + '@inquirer/core@10.1.9(@types/node@22.14.0)': dependencies: '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.14.0) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -7907,13 +7965,13 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@inquirer/figures@1.0.11': {} - '@inquirer/type@3.0.5(@types/node@22.13.10)': + '@inquirer/type@3.0.5(@types/node@22.14.0)': optionalDependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@isaacs/cliui@8.0.2': dependencies: @@ -7964,7 +8022,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -7973,17 +8031,17 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.8.2) - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.2 @@ -8011,7 +8069,7 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@lerna/create@8.2.1(encoding@0.1.13)(typescript@5.8.2)': + '@lerna/create@8.2.1(encoding@0.1.13)(typescript@5.8.3)': dependencies: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 @@ -8029,7 +8087,7 @@ snapshots: console-control-strings: 1.1.0 conventional-changelog-core: 5.0.1 conventional-recommended-bump: 7.0.1 - cosmiconfig: 9.0.0(typescript@5.8.2) + cosmiconfig: 9.0.0(typescript@5.8.3) dedent: 1.5.3 execa: 5.0.0 fs-extra: 11.3.0 @@ -8393,9 +8451,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.51.0': + '@playwright/test@1.51.1': dependencies: - playwright: 1.51.0 + playwright: 1.51.1 '@radix-ui/number@1.0.1': dependencies: @@ -9060,7 +9118,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 @@ -9078,7 +9136,7 @@ snapshots: fs-extra: 11.3.0 magic-string: 0.30.17 rollup: 3.29.5 - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -9426,18 +9484,18 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.35.0) - '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) '@storybook/react': 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) - '@vitejs/plugin-react': 3.1.0(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) + '@vitejs/plugin-react': 3.1.0(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.1 react-dom: 18.3.1(react@18.3.1) - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -9541,14 +9599,14 @@ snapshots: '@types/express': 4.17.21 file-system-cache: 2.3.0 - '@stripe/react-stripe-js@3.4.0(@stripe/stripe-js@5.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@stripe/react-stripe-js@3.6.0(@stripe/stripe-js@7.0.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@stripe/stripe-js': 5.10.0 + '@stripe/stripe-js': 7.0.0 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@stripe/stripe-js@5.10.0': {} + '@stripe/stripe-js@7.0.0': {} '@tanstack/react-table@8.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -9580,7 +9638,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.10 '@testing-library/dom': 10.4.0 @@ -9604,7 +9662,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@types/applepayjs@14.0.8': {} + '@types/applepayjs@14.0.9': {} '@types/aria-query@5.0.4': {} @@ -9632,22 +9690,22 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.13.10 + '@types/node': 22.14.0 - '@types/braintree-web@3.96.16': + '@types/braintree-web@3.96.17': dependencies: '@types/googlepay': 0.7.6 '@types/paypal-checkout-components': 4.0.8 '@types/connect@3.4.38': dependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/cookie@0.6.0': {} '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/debug@4.1.12': dependencies: @@ -9681,7 +9739,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -9698,13 +9756,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/googlepay@0.7.6': {} '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/http-errors@2.0.4': {} @@ -9746,16 +9804,16 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 form-data: 4.0.2 '@types/node@18.19.80': dependencies: undici-types: 5.26.5 - '@types/node@22.13.10': + '@types/node@22.14.0': dependencies: - undici-types: 6.20.0 + undici-types: 6.21.0 '@types/normalize-package-data@2.4.4': {} @@ -9789,12 +9847,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.13.10 + '@types/node': 22.14.0 '@types/send': 0.17.4 '@types/statuses@2.0.5': {} @@ -9815,29 +9873,40 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitejs/plugin-react@3.1.0(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@3.1.0(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-react@4.3.4(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(terser@5.39.0)(yaml@2.7.0))': + '@vitest/coverage-v8@3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -9851,48 +9920,48 @@ snapshots: std-env: 3.8.1 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(terser@5.39.0)(yaml@2.7.0) + vitest: 3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.0.8': + '@vitest/expect@3.1.1': dependencies: - '@vitest/spy': 3.0.8 - '@vitest/utils': 3.0.8 + '@vitest/spy': 3.1.1 + '@vitest/utils': 3.1.1 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.8(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0))': + '@vitest/mocker@3.1.1(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.8 + '@vitest/spy': 3.1.1 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.7.3(@types/node@22.13.10)(typescript@5.8.2) - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + msw: 2.7.3(@types/node@22.14.0)(typescript@5.8.3) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) - '@vitest/pretty-format@3.0.8': + '@vitest/pretty-format@3.1.1': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.0.8': + '@vitest/runner@3.1.1': dependencies: - '@vitest/utils': 3.0.8 + '@vitest/utils': 3.1.1 pathe: 2.0.3 - '@vitest/snapshot@3.0.8': + '@vitest/snapshot@3.1.1': dependencies: - '@vitest/pretty-format': 3.0.8 + '@vitest/pretty-format': 3.1.1 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.0.8': + '@vitest/spy@3.1.1': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.0.8': + '@vitest/utils@3.1.1': dependencies: - '@vitest/pretty-format': 3.0.8 + '@vitest/pretty-format': 3.1.1 loupe: 3.1.3 tinyrainbow: 2.0.0 @@ -10255,7 +10324,7 @@ snapshots: dependencies: fill-range: 7.1.1 - braintree-web@3.116.3: + braintree-web@3.117.1: dependencies: '@braintree/asset-loader': 2.0.2 '@braintree/browser-detection': 2.0.2 @@ -10595,14 +10664,14 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig@9.0.0(typescript@5.8.2): + cosmiconfig@9.0.0(typescript@5.8.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 credit-card-type@10.0.2: {} @@ -11183,12 +11252,12 @@ snapshots: dependencies: '@braintree/uuid': 1.0.1 - frames-react@1.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2): + frames-react@1.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3): dependencies: classnames: 2.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rollup-plugin-typescript2: 0.36.0(rollup@4.35.0)(typescript@5.8.2) + rollup-plugin-typescript2: 0.36.0(rollup@4.35.0)(typescript@5.8.3) tslib: 2.8.1 transitivePeerDependencies: - rollup @@ -11790,7 +11859,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.13.10 + '@types/node': 22.14.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11805,14 +11874,14 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 22.13.10 + '@types/node': 22.14.0 jest-regex-util@29.6.3: {} jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.10 + '@types/node': 22.14.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11820,13 +11889,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -11949,7 +12018,7 @@ snapshots: lerna@8.2.1(encoding@0.1.13): dependencies: - '@lerna/create': 8.2.1(encoding@0.1.13)(typescript@5.8.2) + '@lerna/create': 8.2.1(encoding@0.1.13)(typescript@5.8.3) '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 @@ -11967,7 +12036,7 @@ snapshots: conventional-changelog-angular: 7.0.0 conventional-changelog-core: 5.0.1 conventional-recommended-bump: 7.0.1 - cosmiconfig: 9.0.0(typescript@5.8.2) + cosmiconfig: 9.0.0(typescript@5.8.3) dedent: 1.5.3 envinfo: 7.13.0 execa: 5.0.0 @@ -12019,7 +12088,7 @@ snapshots: strong-log-transformer: 2.1.0 tar: 6.2.1 temp-dir: 1.0.0 - typescript: 5.8.2 + typescript: 5.8.3 upath: 2.0.1 uuid: 10.0.0 validate-npm-package-license: 3.0.4 @@ -12637,12 +12706,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2): + msw@2.7.3(@types/node@22.14.0)(typescript@5.8.2): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.8(@types/node@22.13.10) + '@inquirer/confirm': 5.1.8(@types/node@22.14.0) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -12662,6 +12731,31 @@ snapshots: transitivePeerDependencies: - '@types/node' + msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.8(@types/node@22.14.0) + '@mswjs/interceptors': 0.37.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.37.0 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/node' + multimatch@5.0.0: dependencies: '@types/minimatch': 3.0.5 @@ -13129,11 +13223,11 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - playwright-core@1.51.0: {} + playwright-core@1.51.1: {} - playwright@1.51.0: + playwright@1.51.1: dependencies: - playwright-core: 1.51.0 + playwright-core: 1.51.1 optionalDependencies: fsevents: 2.3.2 @@ -13569,7 +13663,7 @@ snapshots: dependencies: glob: 9.3.5 - rollup-plugin-typescript2@0.36.0(rollup@4.35.0)(typescript@5.8.2): + rollup-plugin-typescript2@0.36.0(rollup@4.35.0)(typescript@5.8.3): dependencies: '@rollup/pluginutils': 4.2.1 find-cache-dir: 3.3.2 @@ -13577,7 +13671,7 @@ snapshots: rollup: 4.35.0 semver: 7.7.1 tslib: 2.8.1 - typescript: 5.8.2 + typescript: 5.8.3 rollup@3.29.5: optionalDependencies: @@ -14061,7 +14155,7 @@ snapshots: ts-dedent@2.2.0: {} - tsc-alias@1.8.11: + tsc-alias@1.8.13: dependencies: chokidar: 3.6.0 commander: 9.5.0 @@ -14074,6 +14168,10 @@ snapshots: optionalDependencies: typescript: 5.8.2 + tsconfck@3.1.5(typescript@5.8.3): + optionalDependencies: + typescript: 5.8.3 + tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 @@ -14119,6 +14217,8 @@ snapshots: typescript@5.8.2: {} + typescript@5.8.3: {} + ufo@1.5.4: {} uglify-js@3.19.3: @@ -14126,7 +14226,7 @@ snapshots: undici-types@5.26.5: {} - undici-types@6.20.0: {} + undici-types@6.21.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -14286,13 +14386,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@3.0.8(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0): + vite-node@3.1.1(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -14307,37 +14407,59 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.8.2) optionalDependencies: - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)): + dependencies: + debug: 4.4.0 + globrex: 0.1.2 + tsconfck: 3.1.5(typescript@5.8.3) + optionalDependencies: + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + - typescript + + vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0): + dependencies: + esbuild: 0.25.1 + postcss: 8.5.3 + rollup: 4.35.0 + optionalDependencies: + '@types/node': 22.14.0 + fsevents: 2.3.3 + terser: 5.39.0 + yaml: 2.7.0 + + vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.1 postcss: 8.5.3 rollup: 4.35.0 optionalDependencies: - '@types/node': 22.13.10 + '@types/node': 22.14.0 fsevents: 2.3.3 terser: 5.39.0 yaml: 2.7.0 - vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.10)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(terser@5.39.0)(yaml@2.7.0): + vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.8 - '@vitest/mocker': 3.0.8(msw@2.7.3(@types/node@22.13.10)(typescript@5.8.2))(vite@6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.8 - '@vitest/runner': 3.0.8 - '@vitest/snapshot': 3.0.8 - '@vitest/spy': 3.0.8 - '@vitest/utils': 3.0.8 + '@vitest/expect': 3.1.1 + '@vitest/mocker': 3.1.1(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + '@vitest/pretty-format': 3.1.1 + '@vitest/runner': 3.1.1 + '@vitest/snapshot': 3.1.1 + '@vitest/spy': 3.1.1 + '@vitest/utils': 3.1.1 chai: 5.2.0 debug: 4.4.0 expect-type: 1.2.0 @@ -14348,12 +14470,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) - vite-node: 3.0.8(@types/node@22.13.10)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite-node: 3.1.1(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.10 + '@types/node': 22.14.0 jsdom: 26.0.0 transitivePeerDependencies: - jiti From 39fa172b4e639035fc30ac805a48245bf9f5f1aa Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 10 Apr 2025 09:58:40 +0200 Subject: [PATCH 004/292] v4.22.0-beta.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 64a082b1..c8f39e0c 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.21.0", + "version": "4.22.0-beta.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 2afa4f64..0c411207 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.21.0", + "version": "4.22.0-beta.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From a4270be691caa0a5fff8cab6c2b168645415a5b4 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 11 Apr 2025 10:52:19 +0200 Subject: [PATCH 005/292] v4.22.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index c8f39e0c..d0506f74 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.22.0-beta.0", + "version": "4.22.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 0c411207..4cce96ae 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.22.0-beta.0", + "version": "4.22.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From f98f9d4e2b2aa143405c9a3c13d9982986e2e5f6 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 14 May 2025 17:38:36 +0200 Subject: [PATCH 006/292] Add new CKO flow library --- .../components/orders/PlaceOrderButton.tsx | 9 + .../components/orders/PlaceOrderContainer.tsx | 89 +++-- .../payment_gateways/PaymentGateway.tsx | 84 ++-- .../payment_methods/PaymentMethod.tsx | 87 ++-- .../payment_source/CheckoutComPayment.tsx | 334 +++++++++------- .../src/reducers/PaymentMethodReducer.ts | 376 +++++++++--------- .../src/reducers/PlaceOrderReducer.ts | 1 - .../src/utils/getCardDetails.ts | 2 +- .../src/utils/getPaymentAttributes.ts | 78 ++-- .../src/utils/snakeToCamelCase.ts | 23 +- pnpm-lock.yaml | 189 ++------- 11 files changed, 618 insertions(+), 654 deletions(-) diff --git a/packages/react-components/src/components/orders/PlaceOrderButton.tsx b/packages/react-components/src/components/orders/PlaceOrderButton.tsx index 29d6f228..36efc4f5 100644 --- a/packages/react-components/src/components/orders/PlaceOrderButton.tsx +++ b/packages/react-components/src/components/orders/PlaceOrderButton.tsx @@ -313,6 +313,15 @@ export function PlaceOrderButton(props: Props): JSX.Element { ): Promise => { e?.preventDefault() e?.stopPropagation() + const isAlreadyPlaced = order?.status === "placed" + if (isAlreadyPlaced) { + setPlaceOrderStatus?.({ status: "placing" }) + onClick?.({ + placed: true, + order: order, + }) + return + } setIsLoading(true) let isValid = true setForceDisable(true) diff --git a/packages/react-components/src/components/orders/PlaceOrderContainer.tsx b/packages/react-components/src/components/orders/PlaceOrderContainer.tsx index 4c8641d7..3f7bcce2 100644 --- a/packages/react-components/src/components/orders/PlaceOrderContainer.tsx +++ b/packages/react-components/src/components/orders/PlaceOrderContainer.tsx @@ -1,4 +1,4 @@ -import PlaceOrderContext from '#context/PlaceOrderContext' +import PlaceOrderContext from "#context/PlaceOrderContext" import { type ReactNode, type RefObject, @@ -6,18 +6,18 @@ import { useEffect, useReducer, type JSX, -} from 'react'; +} from "react" import placeOrderReducer, { placeOrderInitialState, type PlaceOrderOptions, placeOrderPermitted, setButtonRef, - setPlaceOrderStatus -} from '#reducers/PlaceOrderReducer' -import OrderContext from '#context/OrderContext' -import CommerceLayerContext from '#context/CommerceLayerContext' -import { setPlaceOrder } from '../../reducers/PlaceOrderReducer' -import useCustomContext from '#utils/hooks/useCustomContext' + setPlaceOrderStatus, +} from "#reducers/PlaceOrderReducer" +import OrderContext from "#context/OrderContext" +import CommerceLayerContext from "#context/CommerceLayerContext" +import { setPlaceOrder } from "../../reducers/PlaceOrderReducer" +import useCustomContext from "#utils/hooks/useCustomContext" interface Props { children: ReactNode @@ -27,7 +27,7 @@ export function PlaceOrderContainer(props: Props): JSX.Element { const { children, options } = props const [state, dispatch] = useReducer( placeOrderReducer, - placeOrderInitialState + placeOrderInitialState, ) const { order, @@ -35,53 +35,54 @@ export function PlaceOrderContainer(props: Props): JSX.Element { setOrderErrors, include, addResourceToInclude, - includeLoaded + includeLoaded, } = useCustomContext({ context: OrderContext, - contextComponentName: 'OrderContainer', - currentComponentName: 'PlaceOrderContainer', - key: 'order' + contextComponentName: "OrderContainer", + currentComponentName: "PlaceOrderContainer", + key: "order", }) const config = useContext(CommerceLayerContext) + // biome-ignore lint/correctness/useExhaustiveDependencies: Infinite loop useEffect(() => { - if (!include?.includes('shipments.available_shipping_methods')) { + if (!include?.includes("shipments.available_shipping_methods")) { addResourceToInclude({ newResource: [ - 'shipments.available_shipping_methods', - 'shipments.stock_line_items.line_item', - 'shipments.shipping_method', - 'shipments.stock_transfers.line_item', - 'shipments.stock_location' - ] + "shipments.available_shipping_methods", + "shipments.stock_line_items.line_item", + "shipments.shipping_method", + "shipments.stock_transfers.line_item", + "shipments.stock_location", + ], }) - } else if (!includeLoaded?.['shipments.available_shipping_methods']) { + } else if (!includeLoaded?.["shipments.available_shipping_methods"]) { addResourceToInclude({ newResourceLoaded: { - 'shipments.available_shipping_methods': true, - 'shipments.stock_line_items.line_item': true, - 'shipments.shipping_method': true, - 'shipments.stock_transfers.line_item': true, - 'shipments.stock_location': true - } + "shipments.available_shipping_methods": true, + "shipments.stock_line_items.line_item": true, + "shipments.shipping_method": true, + "shipments.stock_transfers.line_item": true, + "shipments.stock_location": true, + }, }) } - if (!include?.includes('billing_address')) { + if (!include?.includes("billing_address")) { addResourceToInclude({ - newResource: 'billing_address' + newResource: "billing_address", }) } else if (!includeLoaded?.billing_address) { addResourceToInclude({ - newResourceLoaded: { billing_address: true } + newResourceLoaded: { billing_address: true }, }) } - if (!include?.includes('shipping_address')) { + if (!include?.includes("shipping_address")) { addResourceToInclude({ - newResource: 'shipping_address', - resourcesIncluded: include + newResource: "shipping_address", + resourcesIncluded: include, }) } else if (!includeLoaded?.shipping_address) { addResourceToInclude({ - newResourceLoaded: { shipping_address: true } + newResourceLoaded: { shipping_address: true }, }) } if (order) { @@ -90,8 +91,8 @@ export function PlaceOrderContainer(props: Props): JSX.Element { dispatch, order, options: { - ...options - } + ...options, + }, }) } }, [order, include, includeLoaded]) @@ -99,12 +100,12 @@ export function PlaceOrderContainer(props: Props): JSX.Element { ...state, setPlaceOrder: async ({ paymentSource, - currentCustomerPaymentSourceId + currentCustomerPaymentSourceId, }: { - paymentSource?: Parameters['0']['paymentSource'] + paymentSource?: Parameters["0"]["paymentSource"] currentCustomerPaymentSourceId?: Parameters< typeof setPlaceOrder - >['0']['currentCustomerPaymentSourceId'] + >["0"]["currentCustomerPaymentSourceId"] }) => await setPlaceOrder({ config, @@ -114,10 +115,10 @@ export function PlaceOrderContainer(props: Props): JSX.Element { paymentSource, include, setOrder, - currentCustomerPaymentSourceId + currentCustomerPaymentSourceId, }), setPlaceOrderStatus: ({ - status + status, }: Parameters[0]) => { setPlaceOrderStatus({ status, dispatch }) }, @@ -127,13 +128,13 @@ export function PlaceOrderContainer(props: Props): JSX.Element { dispatch, order, options: { - ...options - } + ...options, + }, }) }, setButtonRef: (ref: RefObject) => { setButtonRef(ref, dispatch) - } + }, } return ( diff --git a/packages/react-components/src/components/payment_gateways/PaymentGateway.tsx b/packages/react-components/src/components/payment_gateways/PaymentGateway.tsx index 33e4458e..996f567c 100644 --- a/packages/react-components/src/components/payment_gateways/PaymentGateway.tsx +++ b/packages/react-components/src/components/payment_gateways/PaymentGateway.tsx @@ -1,26 +1,27 @@ -import OrderContext from '#context/OrderContext' -import PaymentMethodChildrenContext from '#context/PaymentMethodChildrenContext' -import PaymentMethodContext from '#context/PaymentMethodContext' -import type { PaymentResource } from '#reducers/PaymentMethodReducer' -import type { LoaderType } from '#typings' -import { useContext, useEffect, useState, type JSX } from 'react'; -import type { PaymentSourceProps } from '../payment_source/PaymentSource' -import getLoaderComponent from '#utils/getLoaderComponent' -import AdyenGateway from './AdyenGateway' -import StripeGateway from './StripeGateway' -import BraintreeGateway from './BraintreeGateway' -import PaypalGateway from './PaypalGateway' -import WireTransferGateway from './WireTransferGateway' -import CustomerContext from '#context/CustomerContext' -import CheckoutComGateway from './CheckoutComGateway' -import KlarnaGateway from './KlarnaGateway' +import OrderContext from "#context/OrderContext" +import PaymentMethodChildrenContext from "#context/PaymentMethodChildrenContext" +import PaymentMethodContext from "#context/PaymentMethodContext" +import type { PaymentResource } from "#reducers/PaymentMethodReducer" +import type { LoaderType } from "#typings" +import { useContext, useEffect, useState, type JSX } from "react" +import type { PaymentSourceProps } from "../payment_source/PaymentSource" +import getLoaderComponent from "#utils/getLoaderComponent" +import AdyenGateway from "./AdyenGateway" +import StripeGateway from "./StripeGateway" +import BraintreeGateway from "./BraintreeGateway" +import PaypalGateway from "./PaypalGateway" +import WireTransferGateway from "./WireTransferGateway" +import CustomerContext from "#context/CustomerContext" +import CheckoutComGateway from "./CheckoutComGateway" +import KlarnaGateway from "./KlarnaGateway" import { + getCkoAttributes, getExternalPaymentAttributes, getPaypalAttributes, - getStripeAttributes -} from '#utils/getPaymentAttributes' -import ExternalGateway from './ExternalGateway' -import PlaceOrderContext from '#context/PlaceOrderContext' + getStripeAttributes, +} from "#utils/getPaymentAttributes" +import ExternalGateway from "./ExternalGateway" +import PlaceOrderContext from "#context/PlaceOrderContext" export type GatewayBaseType = Props & { show: boolean @@ -44,7 +45,7 @@ export function PaymentGateway({ templateCustomerSaveToWallet, onClickCustomerCards, show, - loader = 'Loading...', + loader = "Loading...", ...p }: Props): JSX.Element | null { const loaderComponent = getLoaderComponent(loader) @@ -58,7 +59,7 @@ export function PaymentGateway({ config, currentPaymentMethodType, setPaymentSource, - paymentSource + paymentSource, } = useContext(PaymentMethodContext) const paymentResource = readonly ? currentPaymentMethodType @@ -71,24 +72,27 @@ export function PaymentGateway({ !expressPayments ) { let attributes: Record | undefined = {} - if (config != null && paymentResource === 'paypal_payments') { + if (config != null && paymentResource === "paypal_payments") { attributes = getPaypalAttributes(paymentResource, config) } - if (config != null && paymentResource === 'external_payments') { + if (config != null && paymentResource === "external_payments") { attributes = getExternalPaymentAttributes(paymentResource, config) } - if (config != null && paymentResource === 'stripe_payments') { + if (config != null && paymentResource === "stripe_payments") { attributes = getStripeAttributes(paymentResource, config) - if (attributes != null && attributes['return_url'] == null) { - attributes['return_url'] = window.location.href + if (attributes != null && attributes["return_url"] == null) { + attributes["return_url"] = window.location.href } } + if (config != null && paymentResource === "checkout_com_payments") { + attributes = getCkoAttributes(paymentResource, config) + } const setPaymentSources = async (): Promise => { if (order != null) { await setPaymentSource({ paymentResource, order, - attributes + attributes, }) } if (getCustomerPaymentSources) getCustomerPaymentSources() @@ -118,7 +122,7 @@ export function PaymentGateway({ if (expressPayments && show) setLoading(false) if ( order?.status != null && - !['draft', 'pending'].includes(order?.status) && + !["draft", "pending"].includes(order?.status) && show && order?.payment_source?.id != null ) { @@ -130,8 +134,8 @@ export function PaymentGateway({ }, [order?.payment_method?.id, show, paymentSource]) useEffect(() => { - if (status === 'placing') setLoading(true) - if (status === 'standby' && loading) setLoading(false) + if (status === "placing") setLoading(true) + if (status === "standby" && loading) setLoading(false) return () => { setLoading(true) } @@ -148,30 +152,30 @@ export function PaymentGateway({ onClickCustomerCards, loaderComponent, templateCustomerSaveToWallet, - ...p + ...p, } if (currentPaymentMethodType !== paymentResource) return null if (loading) return loaderComponent switch (paymentResource) { - case 'adyen_payments': + case "adyen_payments": return {children} - case 'braintree_payments': + case "braintree_payments": return {children} - case 'checkout_com_payments': + case "checkout_com_payments": return ( {children} ) - case 'external_payments': + case "external_payments": return {children} - case 'klarna_payments': + case "klarna_payments": return {children} - case 'stripe_payments': + case "stripe_payments": return {children} - case 'wire_transfers': + case "wire_transfers": return ( {children} ) - case 'paypal_payments': + case "paypal_payments": return {children} default: return null diff --git a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx index 0a01d70e..0881b7d0 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx @@ -3,34 +3,34 @@ import { useEffect, type MouseEvent, useContext, - type JSX -} from 'react' -import PaymentMethodContext from '#context/PaymentMethodContext' -import PaymentMethodChildrenContext from '#context/PaymentMethodChildrenContext' -import type { LoaderType } from '#typings' -import getLoaderComponent from '#utils/getLoaderComponent' + type JSX, +} from "react" +import PaymentMethodContext from "#context/PaymentMethodContext" +import PaymentMethodChildrenContext from "#context/PaymentMethodChildrenContext" +import type { LoaderType } from "#typings" +import getLoaderComponent from "#utils/getLoaderComponent" import type { Order, - PaymentMethod as PaymentMethodType -} from '@commercelayer/sdk' -import type { PaymentResource } from '#reducers/PaymentMethodReducer' -import useCustomContext from '#utils/hooks/useCustomContext' -import type { DefaultChildrenType } from '#typings/globals' -import OrderContext from '#context/OrderContext' -import CustomerContext from '#context/CustomerContext' + PaymentMethod as PaymentMethodType, +} from "@commercelayer/sdk" +import type { PaymentResource } from "#reducers/PaymentMethodReducer" +import useCustomContext from "#utils/hooks/useCustomContext" +import type { DefaultChildrenType } from "#typings/globals" +import OrderContext from "#context/OrderContext" +import CustomerContext from "#context/CustomerContext" import { getExternalPaymentAttributes, - getPaypalAttributes -} from '#utils/getPaymentAttributes' -import { isEmpty } from '#utils/isEmpty' -import { getAvailableExpressPayments } from '#utils/expressPaymentHelper' -import PlaceOrderContext from '#context/PlaceOrderContext' -import { sortPaymentMethods } from '#utils/payment-methods/sortPaymentMethods' + getPaypalAttributes, +} from "#utils/getPaymentAttributes" +import { isEmpty } from "#utils/isEmpty" +import { getAvailableExpressPayments } from "#utils/expressPaymentHelper" +import PlaceOrderContext from "#context/PlaceOrderContext" +import { sortPaymentMethods } from "#utils/payment-methods/sortPaymentMethods" export interface PaymentMethodOnClickParams { payment?: PaymentMethodType | Record order?: Order - paymentSource?: Order['payment_source'] + paymentSource?: Order["payment_source"] } type Props = { @@ -58,8 +58,8 @@ type Props = { /** * Sort payment methods by an array of strings */ - sortBy?: Array -} & Omit & + sortBy?: Array +} & Omit & ( | { clickableContainer: true @@ -77,7 +77,7 @@ export function PaymentMethod({ children, className, activeClass, - loader = 'Loading...', + loader = "Loading...", clickableContainer, autoSelectSinglePaymentMethod, expressPayments, @@ -87,7 +87,7 @@ export function PaymentMethod({ ...p }: Props): JSX.Element { const [loading, setLoading] = useState(true) - const [paymentSelected, setPaymentSelected] = useState('') + const [paymentSelected, setPaymentSelected] = useState("") const [paymentSourceCreated, setPaymentSourceCreated] = useState(false) const { paymentMethods, @@ -96,12 +96,12 @@ export function PaymentMethod({ setLoading: setLoadingPlaceOrder, paymentSource, setPaymentSource, - config + config, } = useCustomContext({ context: PaymentMethodContext, - contextComponentName: 'PaymentMethodsContainer', - currentComponentName: 'PaymentMethod', - key: 'paymentMethods' + contextComponentName: "PaymentMethodsContainer", + currentComponentName: "PaymentMethod", + key: "paymentMethods", }) const { order } = useContext(OrderContext) const { getCustomerPaymentSources } = useContext(CustomerContext) @@ -119,7 +119,7 @@ export function PaymentMethod({ await setPaymentMethod({ paymentResource, paymentMethodId }) const ps = await setPaymentSource({ paymentResource, - order + order, }) if (ps && paymentMethod && onClick != null) { onClick({ payment: paymentMethod, order, paymentSource: ps }) @@ -154,19 +154,19 @@ export function PaymentMethod({ paymentMethod?.payment_source_type as PaymentResource await setPaymentMethod({ paymentResource, paymentMethodId }) let attributes: Record | undefined = {} - if (config != null && paymentResource === 'paypal_payments') { + if (config != null && paymentResource === "paypal_payments") { attributes = getPaypalAttributes(paymentResource, config) } - if (config != null && paymentResource === 'external_payments') { + if (config != null && paymentResource === "external_payments") { attributes = getExternalPaymentAttributes( paymentResource, - config + config, ) } const ps = await setPaymentSource({ paymentResource, order, - attributes + attributes, }) if (ps && paymentMethod && onClick != null) { setPaymentSourceCreated(true) @@ -180,7 +180,7 @@ export function PaymentMethod({ } setLoadingPlaceOrder({ loading: false }) } - if (typeof autoSelectSinglePaymentMethod === 'function') { + if (typeof autoSelectSinglePaymentMethod === "function") { autoSelectSinglePaymentMethod() } } else { @@ -209,7 +209,7 @@ export function PaymentMethod({ if (currentPaymentMethodId) setPaymentSelected(currentPaymentMethodId) return () => { setLoading(true) - setPaymentSelected('') + setPaymentSelected("") } }, [paymentMethods, currentPaymentMethodId]) @@ -223,19 +223,20 @@ export function PaymentMethod({ if (Array.isArray(hide)) { const source = payment?.payment_source_type as PaymentResource return !hide?.includes(source) - } else if (typeof hide === 'function') { + } + if (typeof hide === "function") { return hide(payment) } return true }) - .map((payment, k) => { + .map((payment) => { const isActive = currentPaymentMethodId === payment?.id const paymentMethodProps = { payment, clickableContainer, paymentSelected, setPaymentSelected, - expressPayments + expressPayments, } const paymentResource = payment?.payment_source_type as PaymentResource const onClickable = !clickableContainer @@ -245,12 +246,12 @@ export function PaymentMethod({ const paymentMethodId = payment?.id const currentPaymentMethodId = order?.payment_method?.id if (paymentMethodId === currentPaymentMethodId) return - if (status === 'placing') return + if (status === "placing") return setLoadingPlaceOrder({ loading: true }) setPaymentSelected(payment.id) const { order: updatedOrder } = await setPaymentMethod({ paymentResource, - paymentMethodId + paymentMethodId, }) if (onClick) onClick({ payment, order: updatedOrder }) setLoadingPlaceOrder({ loading: false }) @@ -258,9 +259,9 @@ export function PaymentMethod({ return (
{ if (onClickable != null) { diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 58d86058..7631b2fc 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -1,102 +1,135 @@ -import { useContext, useRef, type JSX } from 'react'; -import type { - PaymentMethodConfig, - PaymentSourceObject -} from '#reducers/PaymentMethodReducer' -import type { PaymentSourceProps } from './PaymentSource' -import useExternalScript from '#utils/hooks/useExternalScript' -import PaymentMethodContext from '#context/PaymentMethodContext' -import { - Frames, - CardNumber, - ExpiryDate, - Cvv, - type FramesLanguages, - type FramesStyle -} from 'frames-react' -import OrderContext from '#context/OrderContext' -import Parent from '#components/utils/Parent' -import { setCustomerOrderParam } from '#utils/localStorage' -const scriptUrl = 'https://cdn.checkout.com/js/framesv2.min.js' +import { useContext, useEffect, useRef, type JSX } from "react" +import type { PaymentMethodConfig } from "#reducers/PaymentMethodReducer" +import type { PaymentSourceProps } from "./PaymentSource" +import useExternalScript from "#utils/hooks/useExternalScript" +import OrderContext from "#context/OrderContext" +import Parent from "#components/utils/Parent" +import { jwt } from "#utils/jwt" +import CommerceLayerContext from "#context/CommerceLayerContext" +import PaymentMethodContext from "#context/PaymentMethodContext" +import { setCustomerOrderParam } from "#utils/localStorage" -export interface CheckoutComConfig { - containerClassName?: string - hintLabel?: string - name?: string - success_url?: string - failure_url?: string - options?: { - style: FramesStyle +const scriptUrl = "https://checkout-web-components.checkout.com/index.js" + +interface Appearance { + colorAction: string + colorBackground: string + colorBorder: string + colorDisabled: string + colorError: string + colorFormBackground: string + colorFormBorder: string + colorInverse: string + colorOutline: string + colorPrimary: string + colorSecondary: string + colorSuccess: string + button: { + fontFamily: string + fontSize: string + fontWeight: number + letterSpacing: number + lineHeight: string } - [key: string]: unknown + footnote: { + fontFamily: string + fontSize: string + fontWeight: number + letterSpacing: number + lineHeight: string + } + label: { + fontFamily: string + fontSize: string + fontWeight: number + letterSpacing: number + lineHeight: string + } + subheading: { + fontFamily: string + fontSize: string + fontWeight: number + letterSpacing: number + lineHeight: string + } + borderRadius: [string, string] } -const systemLanguages: FramesLanguages[] = [ - 'DE-DE', - 'EN-GB', - 'ES-ES', - 'FR-FR', - 'IT-IT', - 'KO-KR', - 'NL-NL' -] +interface Component { + isValid: () => boolean + type: string + submit: () => unknown + tokenize: () => Promise<{ + data: { + token: string + } + }> +} -const defaultOptions = { - style: { - base: { - color: 'black', - fontSize: '18px' - }, - autofill: { - backgroundColor: 'yellow' - }, - hover: { - color: 'blue' - }, - focus: { - color: 'blue' +interface CheckoutWebComponent { + appearance?: Partial + showPayButton?: boolean + publicKey: string + environment: "sandbox" | "production" + locale?: string + paymentSession: string + onReady?: () => void + submit?: () => unknown + onPaymentCompleted?: ( + component: Component, + paymentResponse: { + status: string + id: string + type: string }, - valid: { - color: 'green' - }, - invalid: { - color: 'red' - }, - placeholder: { - base: { - color: 'gray' - }, - focus: { - border: 'solid 1px blue' - } + ) => Promise + onChange?: (component: Component) => void + onError?: (component: Component, error: unknown) => void + create?: (type: "flow") => { + mount: (element: HTMLElement | null) => void + } + componentOptions?: { + card?: { + displayCardholderName?: "hidden" | "top" | "bottom" } } } -type Props = PaymentMethodConfig['checkoutComPayment'] & - JSX.IntrinsicElements['div'] & { +export interface CheckoutComConfig { + containerClassName?: string + hintLabel?: string + name?: string + success_url: string + failure_url: string + options?: { + appearance: Partial + } + [key: string]: unknown +} + +type Props = Partial & + JSX.IntrinsicElements["div"] & { show?: boolean publicKey: string locale?: string - templateCustomerSaveToWallet?: PaymentSourceProps['templateCustomerSaveToWallet'] + templateCustomerSaveToWallet?: PaymentSourceProps["templateCustomerSaveToWallet"] } export function CheckoutComPayment({ publicKey, - options = defaultOptions, - locale = 'EN-GB', + options, ...p }: Props): JSX.Element | null { const ref = useRef(null) const loaded = useExternalScript(scriptUrl) const { setPaymentRef, - currentPaymentMethodType, - paymentSource, setPaymentSource, - setPaymentMethodErrors + // setPaymentMethodErrors, } = useContext(PaymentMethodContext) + const { accessToken } = useContext(CommerceLayerContext) const { order } = useContext(OrderContext) + // const { setPlaceOrder } = useContext(PlaceOrderContext) const { containerClassName, templateCustomerSaveToWallet, @@ -105,91 +138,94 @@ export function CheckoutComPayment({ show, ...divProps } = p - const handleSubmit = async (): Promise => { - const savePaymentSourceToCustomerWallet: string = + // biome-ignore lint/correctness/useExhaustiveDependencies: Infinite loop + useEffect(() => { + const ps = order?.payment_source + if (loaded && window && ps && accessToken) { // @ts-expect-error no type - ref?.current?.elements?.save_payment_source_to_customer_wallet?.checked - if (savePaymentSourceToCustomerWallet) { - setCustomerOrderParam( - '_save_payment_source_to_customer_wallet', - savePaymentSourceToCustomerWallet - ) - } - if (window.Frames) { - window.Frames.cardholder = { - name: order?.billing_address?.full_name, - billingAddress: { - addressLine1: order?.billing_address?.line_1, - addressLine2: order?.billing_address?.line_2 ?? '', - zip: order?.billing_address?.zip_code ?? '', - city: order?.billing_address?.city, - state: order?.billing_address?.state_code, - country: order?.billing_address?.country_code - }, - phone: order?.billing_address?.phone - } - try { - const data = await window.Frames.submitCard() - if (data.token && paymentSource && currentPaymentMethodType) { - const ps = (await setPaymentSource({ - paymentSourceId: paymentSource.id, - paymentResource: currentPaymentMethodType, - attributes: { - token: data.token, - payment_type: 'token', - success_url: successUrl, - failure_url: failureUrl, - _authorize: true - } - })) as PaymentSourceObject['checkout_com_payments'] - if (ps?.redirect_uri) { - window.location.href = ps.redirect_uri - } + const publicKey = ps.public_key + // @ts-expect-error no type + const paymentSession = ps.payment_session + // @ts-expect-error no type + if (window?.CheckoutWebComponents) { + const environment = jwt(accessToken).test ? "sandbox" : "production" + const locale = order?.language_code ?? "en" + const loadFlow = async () => { + // @ts-expect-error no type + const checkout = await window.CheckoutWebComponents({ + appearance: { + ...options?.appearance, + }, + showPayButton: false, + publicKey, + environment, + locale, + paymentSession, + componentOptions: { + card: { + displayCardholderName: "hidden", + }, + }, + onChange: (component) => { + if (component.isValid()) { + if (ref.current) { + ref.current.onsubmit = async (): Promise => { + const element = ref.current?.elements + const savePaymentSourceToCustomerWallet = + // @ts-expect-error no type + element?.save_payment_source_to_customer_wallet?.checked + if (savePaymentSourceToCustomerWallet) + setCustomerOrderParam( + "_save_payment_source_to_customer_wallet", + savePaymentSourceToCustomerWallet, + ) + const { data } = await component.tokenize() + const token = data?.token + const paymentSource = await setPaymentSource({ + paymentSourceId: ps.id, + paymentResource: "checkout_com_payments", + attributes: { + token, + _authorize: true, + }, + }) + if (paymentSource) { + // @ts-expect-error no type + const response = paymentSource.payment_response + // @ts-expect-error no type + const securityRedirect = paymentSource?.redirect_uri + const isStatusPending = + response?.status.toLowerCase() === "pending" + if (isStatusPending && securityRedirect) { + window.location.href = securityRedirect + return false + } + return true + } + return false + } + setPaymentRef?.({ ref }) + } + } + }, + onError: (component, error) => { + console.error("onError", error, "Component", component.type) + }, + } satisfies CheckoutWebComponent) + const flowComponent = checkout.create("flow") + flowComponent.mount(document.getElementById("flow-container")) } - } catch (error: any) { - console.error(error) - setPaymentMethodErrors([ - { - code: 'PAYMENT_INTENT_AUTHENTICATION_FAILURE', - resource: 'payment_methods', - field: currentPaymentMethodType, - message: error?.message as string - } - ]) + loadFlow() } } - return false - } - const lang = - `${locale.toUpperCase()}-${locale.toUpperCase()}` as FramesLanguages - const localization = systemLanguages.includes(lang) ? lang : 'EN-GB' + }, [loaded, order?.payment_source?.id, accessToken]) return loaded && show ? (
- { - if (e.isValid && ref.current) { - ref.current.onsubmit = async () => { - return await handleSubmit() - } - setPaymentRef({ ref }) - } - }} - cardTokenized={(data) => data} - > - - - - +
{templateCustomerSaveToWallet && ( - + {templateCustomerSaveToWallet} )} diff --git a/packages/react-components/src/reducers/PaymentMethodReducer.ts b/packages/react-components/src/reducers/PaymentMethodReducer.ts index 81b931f0..2792bb18 100644 --- a/packages/react-components/src/reducers/PaymentMethodReducer.ts +++ b/packages/react-components/src/reducers/PaymentMethodReducer.ts @@ -1,15 +1,15 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ -import type { AdyenPaymentConfig } from "#components/payment_source/AdyenPayment"; -import type { BraintreeConfig } from "#components/payment_source/BraintreePayment"; -import type { PaypalConfig } from "#components/payment_source/PaypalPayment"; -import type { StripeConfig } from "#components/payment_source/StripePayment"; -import type { WireTransferConfig } from "#components/payment_source/WireTransferPayment"; -import type { CommerceLayerConfig } from "#context/CommerceLayerContext"; -import type { getOrderContext, updateOrder } from "#reducers/OrderReducer"; -import type { BaseError } from "#typings/errors"; -import baseReducer from "#utils/baseReducer"; -import getErrors, { setErrors } from "#utils/getErrors"; -import getSdk from "#utils/getSdk"; +import type { AdyenPaymentConfig } from "#components/payment_source/AdyenPayment" +import type { BraintreeConfig } from "#components/payment_source/BraintreePayment" +import type { PaypalConfig } from "#components/payment_source/PaypalPayment" +import type { StripeConfig } from "#components/payment_source/StripePayment" +import type { WireTransferConfig } from "#components/payment_source/WireTransferPayment" +import type { CommerceLayerConfig } from "#context/CommerceLayerContext" +import type { getOrderContext, updateOrder } from "#reducers/OrderReducer" +import type { BaseError } from "#typings/errors" +import baseReducer from "#utils/baseReducer" +import getErrors, { setErrors } from "#utils/getErrors" +import getSdk from "#utils/getSdk" import type { Order, PaymentMethod, @@ -21,63 +21,63 @@ import type { ExternalPayment, PaypalPayment, KlarnaPayment, -} from "@commercelayer/sdk"; -import type { Dispatch, MutableRefObject } from "react"; -import type { CheckoutComConfig } from "#components/payment_source/CheckoutComPayment"; -import type { ExternalPaymentConfig } from "#components/payment_source/ExternalPayment"; -import { snakeToCamelCase } from "#utils/snakeToCamelCase"; -import { replace } from "#utils/replace"; -import { pick } from "#utils/pick"; -import type { ResourceKeys } from "#utils/getPaymentAttributes"; +} from "@commercelayer/sdk" +import type { Dispatch, MutableRefObject } from "react" +import type { CheckoutComConfig } from "#components/payment_source/CheckoutComPayment" +import type { ExternalPaymentConfig } from "#components/payment_source/ExternalPayment" +import { snakeToCamelCase } from "#utils/snakeToCamelCase" +import { replace } from "#utils/replace" +import { pick } from "#utils/pick" +import type { ResourceKeys } from "#utils/getPaymentAttributes" -export type PaymentSourceType = Order["payment_source"]; +export type PaymentSourceType = Order["payment_source"] interface Card { - type: string; - brand: string; - last4: string; - exp_year: number; - exp_month: number; + type: string + brand: string + last4: string + exp_year: number + exp_month: number } export interface PaymentSourceObject { adyen_payments: AdyenPayment & { payment_request_data?: { - payment_method?: Card; - }; + payment_method?: Card + } payment_response?: { - resultCode?: "Authorised"; - }; - }; + resultCode?: "Authorised" + } + } braintree_payments: BraintreePayment & { options?: { - card: Card; - }; - }; + card: Card + } + } external_payments: ExternalPayment & { - payment_source_token?: string; - }; - paypal_payments: PaypalPayment; + payment_source_token?: string + } + paypal_payments: PaypalPayment stripe_payments: StripePayment & { options?: { - card: Card; - }; + card: Card + } payment_method?: { - card: Card; - type: string | "klarna" | "card"; - }; - }; - wire_transfers: WireTransfer; + card: Card + type: string | "klarna" | "card" + } + } + wire_transfers: WireTransfer checkout_com_payments: CheckoutComPayment & { payment_response: { source?: Pick & { - scheme: string; - expiry_year: number; - expiry_month: number; - }; - }; - }; - klarna_payments: KlarnaPayment; + scheme: string + expiry_year: number + expiry_month: number + } + } + } + klarna_payments: KlarnaPayment } export type PaymentMethodActionType = @@ -86,40 +86,40 @@ export type PaymentMethodActionType = | "setPaymentMethodConfig" | "setPaymentSource" | "setPaymentRef" - | "setLoading"; + | "setLoading" -export type PaymentRef = MutableRefObject; +export type PaymentRef = MutableRefObject export interface PaymentMethodActionPayload { - errors: BaseError[]; - paymentMethods: PaymentMethod[] | null; - currentPaymentMethodType: PaymentResource; - currentPaymentMethodId: string; - currentPaymentMethodRef: PaymentRef; - currentCustomerPaymentSourceId: string | null; - config: PaymentMethodConfig; - paymentSource: Order["payment_source"] | null; - loading: boolean; + errors: BaseError[] + paymentMethods: PaymentMethod[] | null + currentPaymentMethodType: PaymentResource + currentPaymentMethodId: string + currentPaymentMethodRef: PaymentRef + currentCustomerPaymentSourceId: string | null + config: PaymentMethodConfig + paymentSource: Order["payment_source"] | null + loading: boolean } export function setLoading({ loading, dispatch, }: { - loading: boolean; - dispatch?: Dispatch; + loading: boolean + dispatch?: Dispatch }): void { if (dispatch) dispatch({ type: "setLoading", payload: { loading }, - }); + }) } export type SetPaymentRef = (args: { - ref: PaymentRef; - dispatch?: Dispatch; -}) => void; + ref: PaymentRef + dispatch?: Dispatch +}) => void export const setPaymentRef: SetPaymentRef = ({ ref, dispatch }) => { if (ref && dispatch) { @@ -128,26 +128,26 @@ export const setPaymentRef: SetPaymentRef = ({ ref, dispatch }) => { payload: { currentPaymentMethodRef: ref, }, - }); + }) } -}; +} -export type PaymentMethodState = Partial; +export type PaymentMethodState = Partial export interface PaymentMethodAction { - type: PaymentMethodActionType; - payload: Partial; + type: PaymentMethodActionType + payload: Partial } export const paymentMethodInitialState: PaymentMethodState = { errors: [], paymentMethods: undefined, -}; +} export type SetPaymentMethodErrors = ( errors: V, dispatch?: Dispatch, -) => void; +) => void export const setPaymentMethodErrors: SetPaymentMethodErrors = ( errors, @@ -159,21 +159,21 @@ export const setPaymentMethodErrors: SetPaymentMethodErrors = ( payload: { errors, }, - }); -}; + }) +} type GetPaymentMethods = (args: { - order: Order; - dispatch: Dispatch; -}) => Promise; + order: Order + dispatch: Dispatch +}) => Promise export const getPaymentMethods: GetPaymentMethods = async ({ order, dispatch, }) => { - const paymentMethods = order.available_payment_methods; - const paymentMethod = order.payment_method; - const paymentSource = order.payment_source; + const paymentMethods = order.available_payment_methods + const paymentMethod = order.payment_method + const paymentSource = order.payment_source dispatch({ type: "setPaymentMethods", payload: { @@ -183,10 +183,10 @@ export const getPaymentMethods: GetPaymentMethods = async ({ paymentMethod?.payment_source_type as PaymentResource, paymentSource, }, - }); -}; + }) +} -export type PaymentResource = keyof PaymentSourceObject; +export type PaymentResource = keyof PaymentSourceObject export type PaymentResourceKey = | "braintreePayment" @@ -195,7 +195,7 @@ export type PaymentResourceKey = | "wireTransfer" | "paypalPayment" | "adyenPayment" - | "checkoutComPayment"; + | "checkoutComPayment" export type SDKPaymentResource = | "AdyenPayment" @@ -204,16 +204,16 @@ export type SDKPaymentResource = | "PaypalPayment" | "StripePayment" | "WireTransfer" - | "CheckoutComPayment"; + | "CheckoutComPayment" interface TSetPaymentMethodParams { - config?: CommerceLayerConfig; - dispatch?: Dispatch; - updateOrder?: typeof updateOrder; - setOrderErrors?: (collection: any) => { success: boolean }; - order?: Order; - paymentMethodId: string; - paymentResource?: PaymentResource; + config?: CommerceLayerConfig + dispatch?: Dispatch + updateOrder?: typeof updateOrder + setOrderErrors?: (collection: any) => { success: boolean } + order?: Order + paymentMethodId: string + paymentResource?: PaymentResource } export async function setPaymentMethod({ @@ -227,17 +227,17 @@ export async function setPaymentMethod({ }: TSetPaymentMethodParams): Promise<{ success: boolean; order?: Order }> { let response: { success: boolean; order?: Order } = { success: false, - }; + } try { if (config && order && dispatch && paymentResource) { - localStorage.removeItem("_save_payment_source_to_customer_wallet"); - const sdk = getSdk(config); + localStorage.removeItem("_save_payment_source_to_customer_wallet") + const sdk = getSdk(config) const attributes = { payment_method: sdk.payment_methods.relationship(paymentMethodId), - }; + } if (updateOrder != null) { - const currentOrder = await updateOrder({ id: order.id, attributes }); - response = currentOrder; + const currentOrder = await updateOrder({ id: order.id, attributes }) + response = currentOrder } dispatch({ type: "setPaymentMethods", @@ -246,41 +246,41 @@ export async function setPaymentMethod({ currentPaymentMethodType: paymentResource, errors: [], }, - }); - if (setOrderErrors) setOrderErrors([]); + }) + if (setOrderErrors) setOrderErrors([]) } - return response; + return response } catch (error: any) { const errors = getErrors({ error, resource: "orders", field: paymentResource, - }); - console.error("Set payment method", errors); - return response; + }) + console.error("Set payment method", errors) + return response } } type PaymentSourceTypes = | (StripePayment & WireTransfer) - | (StripePayment | WireTransfer); + | (StripePayment | WireTransfer) export type SetPaymentSourceResponse = { - order: Order; - paymentSource: PaymentSourceTypes; -} | null; + order: Order + paymentSource: PaymentSourceTypes +} | null export interface SetPaymentSourceParams extends Omit { - config?: CommerceLayerConfig; - dispatch?: Dispatch; - getOrder?: getOrderContext; - attributes?: Record; - order?: Order; - paymentResource: PaymentResource; - paymentSourceId?: string; - customerPaymentSourceId?: string; - updateOrder?: typeof updateOrder; + config?: CommerceLayerConfig + dispatch?: Dispatch + getOrder?: getOrderContext + attributes?: Record + order?: Order + paymentResource: PaymentResource + paymentSourceId?: string + customerPaymentSourceId?: string + updateOrder?: typeof updateOrder } export async function setPaymentSource({ @@ -296,28 +296,29 @@ export async function setPaymentSource({ errors: currentErrors, }: SetPaymentSourceParams): Promise { try { - const isAlreadyPlaced = order?.status === "placed"; + const isAlreadyPlaced = order?.status === "placed" if (config && order && !isAlreadyPlaced) { - let paymentSource: PaymentSourceType; - const sdk = getSdk(config); + let paymentSource: PaymentSourceType + const sdk = getSdk(config) if (!customerPaymentSourceId) { if (!paymentSourceId) { + // biome-ignore lint/suspicious/noExplicitAny: Multiple types const attrs: any = { ...attributes, order: sdk.orders.relationship(order.id), - }; - paymentSource = await sdk[paymentResource].create(attrs); + } + paymentSource = await sdk[paymentResource].create(attrs) } else { const attrs = { id: paymentSourceId, ...attributes, - }; + } paymentSource = attributes != null ? await sdk[paymentResource].update(attrs) - : await sdk[paymentResource].retrieve(paymentSourceId); + : await sdk[paymentResource].retrieve(paymentSourceId) } - getOrder && (await getOrder(order.id)); + getOrder && (await getOrder(order.id)) if (dispatch) { dispatch({ type: "setPaymentSource", @@ -326,26 +327,25 @@ export async function setPaymentSource({ errors: [], currentCustomerPaymentSourceId: null, }, - }); + }) } - return paymentSource; - } else { - if (updateOrder != null) { - const { order: orderUpdated } = await updateOrder({ - id: order.id, - attributes: { - _customer_payment_source_id: customerPaymentSourceId, + return paymentSource + } + if (updateOrder != null) { + const { order: orderUpdated } = await updateOrder({ + id: order.id, + attributes: { + _customer_payment_source_id: customerPaymentSourceId, + }, + }) + if (dispatch != null && orderUpdated != null) { + dispatch({ + type: "setPaymentSource", + payload: { + paymentSource: orderUpdated.payment_source, + currentCustomerPaymentSourceId: orderUpdated.payment_source?.id, }, - }); - if (dispatch != null && orderUpdated != null) { - dispatch({ - type: "setPaymentSource", - payload: { - paymentSource: orderUpdated.payment_source, - currentCustomerPaymentSourceId: orderUpdated.payment_source?.id, - }, - }); - } + }) } } } @@ -354,21 +354,21 @@ export async function setPaymentSource({ error, resource: "payment_methods", field: paymentResource, - }); + }) if (errors != null && errors?.length > 0) { - const [error] = errors; + const [error] = errors if (error?.status === "401" && getOrder != null && order != null) { - const currentOrder = await getOrder(order?.id); + const currentOrder = await getOrder(order?.id) if ( currentOrder?.status != null && !["placed", "approved"].includes(currentOrder.status) ) { - console.error("Set payment source:", errors); + console.error("Set payment source:", errors) setErrors({ currentErrors, newErrors: errors, dispatch, - }); + }) } } } else { @@ -376,19 +376,19 @@ export async function setPaymentSource({ currentErrors, newErrors: errors, dispatch, - }); + }) } } - return undefined; + return undefined } export type UpdatePaymentSource = (args: { - id: string; - attributes: Record; - paymentResource: PaymentResource; - config?: CommerceLayerConfig; - dispatch?: Dispatch; -}) => Promise; + id: string + attributes: Record + paymentResource: PaymentResource + config?: CommerceLayerConfig + dispatch?: Dispatch +}) => Promise export const updatePaymentSource: UpdatePaymentSource = async ({ id, @@ -399,30 +399,30 @@ export const updatePaymentSource: UpdatePaymentSource = async ({ }) => { if (config) { try { - const sdk = getSdk(config); + const sdk = getSdk(config) const paymentSource = await sdk[paymentResource].update({ id, ...attributes, - }); + }) if (dispatch) { dispatch({ type: "setPaymentSource", payload: { paymentSource }, - }); + }) } } catch (err) { - console.error("Update payment source:", err); + console.error("Update payment source:", err) } } -}; +} export type DestroyPaymentSource = (args: { - paymentSourceId: string; - paymentResource: PaymentResource; - dispatch?: Dispatch; - updateOrder?: typeof updateOrder; - orderId?: string; -}) => Promise; + paymentSourceId: string + paymentResource: PaymentResource + dispatch?: Dispatch + updateOrder?: typeof updateOrder + orderId?: string +}) => Promise export const destroyPaymentSource: DestroyPaymentSource = async ({ paymentSourceId, @@ -442,26 +442,26 @@ export const destroyPaymentSource: DestroyPaymentSource = async ({ dispatch({ type: "setPaymentSource", payload: { paymentSource: undefined }, - }); + }) } -}; +} export interface PaymentMethodConfig { - adyenPayment?: AdyenPaymentConfig; - braintreePayment?: BraintreeConfig; - checkoutComPayment?: CheckoutComConfig; - externalPayment?: ExternalPaymentConfig; + adyenPayment?: AdyenPaymentConfig + braintreePayment?: BraintreeConfig + checkoutComPayment?: CheckoutComConfig + externalPayment?: ExternalPaymentConfig klarnaPayment?: Pick & - Pick; - paypalPayment?: PaypalConfig; - stripePayment?: StripeConfig; - wireTransfer?: Partial; + Pick + paypalPayment?: PaypalConfig + stripePayment?: StripeConfig + wireTransfer?: Partial } type SetPaymentMethodConfig = ( config: PaymentMethodConfig, dispatch: Dispatch, -) => void; +) => void export const setPaymentMethodConfig: SetPaymentMethodConfig = ( config, @@ -470,8 +470,8 @@ export const setPaymentMethodConfig: SetPaymentMethodConfig = ( dispatch({ type: "setPaymentMethodConfig", payload: { config }, - }); -}; + }) +} export function getPaymentConfig< R extends PaymentResource = PaymentResource, @@ -481,9 +481,9 @@ export function getPaymentConfig< replace(paymentResource, "payments", "payment"), "transfers", "transfer", - ); - const resource = snakeToCamelCase(resourceKeys); - return pick(config, [resource]); + ) + const resource = snakeToCamelCase(resourceKeys) + return pick(config, [resource]) } const type: PaymentMethodActionType[] = [ @@ -493,7 +493,7 @@ const type: PaymentMethodActionType[] = [ "setPaymentSource", "setPaymentRef", "setLoading", -]; +] const paymentMethodReducer = ( state: PaymentMethodState, @@ -503,6 +503,6 @@ const paymentMethodReducer = ( PaymentMethodState, PaymentMethodAction, PaymentMethodActionType[] - >(state, reducer, type); + >(state, reducer, type) -export default paymentMethodReducer; +export default paymentMethodReducer diff --git a/packages/react-components/src/reducers/PlaceOrderReducer.ts b/packages/react-components/src/reducers/PlaceOrderReducer.ts index 8b68de9d..b57f0499 100644 --- a/packages/react-components/src/reducers/PlaceOrderReducer.ts +++ b/packages/react-components/src/reducers/PlaceOrderReducer.ts @@ -214,7 +214,6 @@ export async function setPlaceOrder({ const payment = await sdk[paymentType].update({ id: paymentSource.id, _details: true, - session_id: options?.checkoutCom?.session_id, }) // @ts-expect-error no type if (payment?.payment_response?.status !== "Authorized") { diff --git a/packages/react-components/src/utils/getCardDetails.ts b/packages/react-components/src/utils/getCardDetails.ts index 58c45b36..e2f73930 100644 --- a/packages/react-components/src/utils/getCardDetails.ts +++ b/packages/react-components/src/utils/getCardDetails.ts @@ -117,7 +117,7 @@ export default function getCardDetails({ customerPayment.payment_source as PaymentSourceObject[typeof paymentType] if (ps?.type !== paymentType) break const source = ps?.metadata?.["card"] ?? { - brand: ps?.payment_instrument?.["issuer_type"].replace("_", "-") ?? "", + brand: ps?.payment_instrument?.["issuer_type"]?.replace("_", "-") ?? "", last4: ps?.metadata?.["last4"] ?? "", exp_month: ps?.metadata?.["exp_month"] ?? "", exp_year: ps?.metadata?.["exp_year"] ?? "", diff --git a/packages/react-components/src/utils/getPaymentAttributes.ts b/packages/react-components/src/utils/getPaymentAttributes.ts index 5c03991f..635c2547 100644 --- a/packages/react-components/src/utils/getPaymentAttributes.ts +++ b/packages/react-components/src/utils/getPaymentAttributes.ts @@ -1,14 +1,15 @@ -import type { PaypalConfig } from '#components/payment_source/PaypalPayment' +import type { PaypalConfig } from "#components/payment_source/PaypalPayment" import { getPaymentConfig, type PaymentMethodConfig, - type PaymentResource -} from '#reducers/PaymentMethodReducer' -import type { ExternalPayment } from '@commercelayer/sdk' -import { pick } from './pick' -import { replace, type StringReplace } from './replace' -import { type SnakeToCamelCase, snakeToCamelCase } from './snakeToCamelCase' -import type { StripeConfig } from '#components/payment_source/StripePayment' + type PaymentResource, +} from "#reducers/PaymentMethodReducer" +import type { ExternalPayment } from "@commercelayer/sdk" +import { pick } from "./pick" +import { replace, type StringReplace } from "./replace" +import { type SnakeToCamelCase, snakeToCamelCase } from "./snakeToCamelCase" +import type { StripeConfig } from "#components/payment_source/StripePayment" +import type { CheckoutComConfig } from "#components/payment_source/CheckoutComPayment" interface Params { resource: R @@ -18,28 +19,28 @@ interface Params { export type ResourceKeys = SnakeToCamelCase< StringReplace< - StringReplace, - 'transfers', - 'transfer' + StringReplace, + "transfers", + "transfer" > > export function getPaymentAttributes< R extends PaymentResource = PaymentResource, - C extends PaymentMethodConfig = PaymentMethodConfig + C extends PaymentMethodConfig = PaymentMethodConfig, >(params: Params): Pick> | undefined { const { resource, config, keys } = params const attributes = getPaymentConfig(resource, config) const keysCamelCase: ResourceKeys[] = keys.map((key) => { const k = replace( - replace(key, 'payments', 'payment'), - 'transfers', - 'transfer' + replace(key, "payments", "payment"), + "transfers", + "transfer", ) return snakeToCamelCase(k) }) const currentResource = snakeToCamelCase( - replace(replace(resource, 'payments', 'payment'), 'transfers', 'transfer') + replace(replace(resource, "payments", "payment"), "transfers", "transfer"), ) return attributes != null && currentResource in attributes ? pick(attributes, keysCamelCase) @@ -48,42 +49,57 @@ export function getPaymentAttributes< export function getPaypalAttributes( paymentResource: PaymentResource, - config: PaymentMethodConfig -): Pick | undefined { + config: PaymentMethodConfig, +): Pick | undefined { const attributes = getPaymentAttributes({ resource: paymentResource, config, - keys: ['paypal_payments'] + keys: ["paypal_payments"], }) - return attributes?.paypalPayment != null && 'paypalPayment' in attributes - ? pick(attributes?.paypalPayment, ['return_url', 'cancel_url']) + return attributes?.paypalPayment != null && "paypalPayment" in attributes + ? pick(attributes?.paypalPayment, ["return_url", "cancel_url"]) : undefined } export function getExternalPaymentAttributes( paymentResource: PaymentResource, - config: PaymentMethodConfig -): Pick | undefined { + config: PaymentMethodConfig, +): Pick | undefined { const attributes = getPaymentAttributes({ resource: paymentResource, config, - keys: ['external_payments'] + keys: ["external_payments"], }) - return attributes?.externalPayment != null && 'externalPayment' in attributes - ? pick(attributes?.externalPayment, ['payment_source_token']) + return attributes?.externalPayment != null && "externalPayment" in attributes + ? pick(attributes?.externalPayment, ["payment_source_token"]) : undefined } export function getStripeAttributes( paymentResource: PaymentResource, - config: PaymentMethodConfig -): Pick | undefined { + config: PaymentMethodConfig, +): Pick | undefined { const attributes = getPaymentAttributes({ resource: paymentResource, config, - keys: ['stripe_payments'] + keys: ["stripe_payments"], }) - return attributes?.stripePayment != null && 'stripePayment' in attributes - ? pick(attributes?.stripePayment, ['return_url']) + return attributes?.stripePayment != null && "stripePayment" in attributes + ? pick(attributes?.stripePayment, ["return_url"]) + : undefined +} + +export function getCkoAttributes( + paymentResource: PaymentResource, + config: PaymentMethodConfig, +): Pick | undefined { + const attributes = getPaymentAttributes({ + resource: paymentResource, + config, + keys: ["checkout_com_payments"], + }) + return attributes?.checkoutComPayment != null && + "checkoutComPayment" in attributes + ? pick(attributes?.checkoutComPayment, ["success_url", "failure_url"]) : undefined } diff --git a/packages/react-components/src/utils/snakeToCamelCase.ts b/packages/react-components/src/utils/snakeToCamelCase.ts index 5bcc121f..af2ea0fc 100644 --- a/packages/react-components/src/utils/snakeToCamelCase.ts +++ b/packages/react-components/src/utils/snakeToCamelCase.ts @@ -11,12 +11,23 @@ export type SnakeToCamelCaseNested = T extends object } : T +/** + * + * @param value - The string to convert from snake_case to camelCase + * @example + * snakeToCamelCase("hello_world") // "helloWorld" + * snakeToCamelCase("hello_world_test") // "helloWorldTest" + * @returns string + * @description Converts a string from snake_case to camelCase + */ export function snakeToCamelCase( - value: S + value: S, ): SnakeToCamelCase { - const words = value.toLowerCase().split('_') - const first = words[0] ?? '' - const firstLetter = words[1]?.[0]?.toUpperCase() ?? '' - const second = words[1]?.substring(1) ?? '' - return `${first}${firstLetter}${second}` as SnakeToCamelCase + const words = value.toLowerCase().split("_") + const first = words[0] ?? "" + const secondLetter = words[1]?.[0]?.toUpperCase() ?? "" + const second = words[1]?.substring(1) ?? "" + const thirdLetter = words[2]?.[0]?.toUpperCase() ?? "" + const third = words[2]?.substring(1) ?? "" + return `${first}${secondLetter}${second}${thirdLetter}${third}` as SnakeToCamelCase } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bec2f4d7..95ce1bb5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,10 +48,10 @@ importers: version: 7.26.9(@babel/core@7.26.10) '@commercelayer/js-auth': specifier: ^6.7.1 - version: 6.7.1 + version: 6.7.2 '@commercelayer/sdk': specifier: ^6.32.0 - version: 6.35.0 + version: 6.38.0 '@mdx-js/react': specifier: ^3.1.0 version: 3.1.0(@types/react@18.3.18)(react@18.3.1) @@ -105,10 +105,10 @@ importers: version: 8.6.6(storybook@7.6.20(encoding@0.1.13)) '@storybook/react': specifier: ^7.6.17 - version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) + version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@storybook/react-vite': specifier: ^7.6.17 - version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -123,7 +123,7 @@ importers: version: 18.3.18 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) babel-loader: specifier: ^9.2.1 version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.18.20)) @@ -135,7 +135,7 @@ importers: version: 4.0.0 msw: specifier: ^2.7.0 - version: 2.7.3(@types/node@22.14.0)(typescript@5.8.2) + version: 2.7.3(@types/node@22.14.0)(typescript@5.8.3) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -153,19 +153,22 @@ importers: version: 4.37.0 typescript: specifier: ^5.7.3 - version: 5.8.2 + version: 5.8.3 vite: specifier: ^6.1.0 - version: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + version: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) packages/react-components: dependencies: '@adyen/adyen-web': specifier: ^6.11.0 version: 6.11.0 + '@checkout.com/checkout-web-components': + specifier: 0.6.0-beta + version: 0.6.0-beta '@commercelayer/organization-config': specifier: ^2.2.0 version: 2.2.0 @@ -942,14 +945,13 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@checkout.com/checkout-web-components@0.6.0-beta': + resolution: {integrity: sha512-dj5745XGQdgmv0/RdyepXM+ghlWXJx5Z+BHNUKjQrw43kMWOsuuHiKBu9gSSnwVT60iW9sXlLvZ83nlilfwoJg==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@commercelayer/js-auth@6.7.1': - resolution: {integrity: sha512-GOfOGeLKhdjKa1qTq2KTF14rEKYYX7yvUYH1GYc4YuX3d5DNLqwQJK4eJN054GnAYl4YeyimVSqmLhiwC5OfBA==} - engines: {node: '>=18.0.0'} - '@commercelayer/js-auth@6.7.2': resolution: {integrity: sha512-kk4VqN2iEOreXFq76YqTP83KhBs09Z5Ez9nZNlikXWf5DXzkrOfShqqEwq8ezHjSOlqs4xVyxgQzsEdPP35CeQ==} engines: {node: '>=18.0.0'} @@ -958,10 +960,6 @@ packages: resolution: {integrity: sha512-v7vfLru0WiqocrPWfldmqhbG6VKYQcdu480SUCU4wTnDcXLVnlKfgaadkNnv+tVVZXh0qke8/uwrkNoi3VY/Bw==} engines: {node: '>=18', pnpm: '>=7'} - '@commercelayer/sdk@6.35.0': - resolution: {integrity: sha512-0Afbon6//2KHCTb6bILk2L9Idj9dP8pw06V1CFtaz1wtAsX4iifubGpOPxHH6CuGi4DFHzgASJRz6+ZZbqb3kA==} - engines: {node: '>=20'} - '@commercelayer/sdk@6.38.0': resolution: {integrity: sha512-fv6GrTFWkQJC4yb86Fix560+S/lKLegTEFpQNTsnNpE8JLkzF63B1dyCWpbGcOtsbCK37I/CXsQf6eof1R15qA==} engines: {node: '>=20'} @@ -2697,7 +2695,7 @@ packages: resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: '>=5.1.7' + vite: '>=4.5.2' '@vitest/coverage-v8@3.1.1': resolution: {integrity: sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==} @@ -6418,11 +6416,6 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -6604,51 +6597,11 @@ packages: vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - vite: '>=5.1.7' + vite: '>=4.5.2' peerDependenciesMeta: vite: optional: true - vite@6.2.2: - resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@6.2.5: resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -7729,19 +7682,17 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + '@checkout.com/checkout-web-components@0.6.0-beta': {} + '@colors/colors@1.5.0': optional: true - '@commercelayer/js-auth@6.7.1': {} - '@commercelayer/js-auth@6.7.2': {} '@commercelayer/organization-config@2.2.0': dependencies: merge-anything: 5.1.7 - '@commercelayer/sdk@6.35.0': {} - '@commercelayer/sdk@6.38.0': {} '@csstools/color-helpers@5.0.2': {} @@ -8035,15 +7986,15 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.8.2) - vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + react-docgen-typescript: 2.2.2(typescript@5.8.3) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 '@jridgewell/gen-mapping@0.3.8': dependencies: @@ -9118,7 +9069,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 @@ -9136,9 +9087,9 @@ snapshots: fs-extra: 11.3.0 magic-string: 0.30.17 rollup: 3.29.5 - vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - encoding - supports-color @@ -9484,18 +9435,18 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.35.0) - '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) - '@storybook/react': 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) - '@vitejs/plugin-react': 3.1.0(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + '@storybook/react': 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@vitejs/plugin-react': 3.1.0(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.1 react-dom: 18.3.1(react@18.3.1) - vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -9504,7 +9455,7 @@ snapshots: - typescript - vite-plugin-glimmerx - '@storybook/react@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2)': + '@storybook/react@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: '@storybook/client-logger': 7.6.20 '@storybook/core-client': 7.6.20 @@ -9530,7 +9481,7 @@ snapshots: type-fest: 2.19.0 util-deprecate: 1.0.2 optionalDependencies: - typescript: 5.8.2 + typescript: 5.8.3 transitivePeerDependencies: - encoding - supports-color @@ -9873,25 +9824,14 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitejs/plugin-react@3.1.0(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@3.1.0(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) - transitivePeerDependencies: - - supports-color - - '@vitejs/plugin-react@4.3.4(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': - dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -12706,31 +12646,6 @@ snapshots: ms@2.1.3: {} - msw@2.7.3(@types/node@22.14.0)(typescript@5.8.2): - dependencies: - '@bundled-es-modules/cookie': 2.0.1 - '@bundled-es-modules/statuses': 1.0.1 - '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.8(@types/node@22.14.0) - '@mswjs/interceptors': 0.37.6 - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.6.0 - '@types/statuses': 2.0.5 - graphql: 16.10.0 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - strict-event-emitter: 0.5.1 - type-fest: 4.37.0 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.8.2 - transitivePeerDependencies: - - '@types/node' - msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 @@ -13398,9 +13313,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-docgen-typescript@2.2.2(typescript@5.8.2): + react-docgen-typescript@2.2.2(typescript@5.8.3): dependencies: - typescript: 5.8.2 + typescript: 5.8.3 react-docgen@7.1.1: dependencies: @@ -14164,10 +14079,6 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfck@3.1.5(typescript@5.8.2): - optionalDependencies: - typescript: 5.8.2 - tsconfck@3.1.5(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 @@ -14215,8 +14126,6 @@ snapshots: typescript@4.9.5: {} - typescript@5.8.2: {} - typescript@5.8.3: {} ufo@1.5.4: {} @@ -14407,17 +14316,6 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.2)(vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)): - dependencies: - debug: 4.4.0 - globrex: 0.1.2 - tsconfck: 3.1.5(typescript@5.8.2) - optionalDependencies: - vite: 6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) - transitivePeerDependencies: - - supports-color - - typescript - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)): dependencies: debug: 4.4.0 @@ -14429,17 +14327,6 @@ snapshots: - supports-color - typescript - vite@6.2.2(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0): - dependencies: - esbuild: 0.25.1 - postcss: 8.5.3 - rollup: 4.35.0 - optionalDependencies: - '@types/node': 22.14.0 - fsevents: 2.3.3 - terser: 5.39.0 - yaml: 2.7.0 - vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.1 From fea6cea772c78f599482c9f1502062408e17efc9 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 14 May 2025 17:53:04 +0200 Subject: [PATCH 007/292] v4.23.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- pnpm-lock.yaml | 8 -------- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index d0506f74..f9d6fde4 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.22.0", + "version": "4.23.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 4cce96ae..047f02e3 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.22.0", + "version": "4.23.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95ce1bb5..e1379793 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -166,9 +166,6 @@ importers: '@adyen/adyen-web': specifier: ^6.11.0 version: 6.11.0 - '@checkout.com/checkout-web-components': - specifier: 0.6.0-beta - version: 0.6.0-beta '@commercelayer/organization-config': specifier: ^2.2.0 version: 2.2.0 @@ -945,9 +942,6 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - '@checkout.com/checkout-web-components@0.6.0-beta': - resolution: {integrity: sha512-dj5745XGQdgmv0/RdyepXM+ghlWXJx5Z+BHNUKjQrw43kMWOsuuHiKBu9gSSnwVT60iW9sXlLvZ83nlilfwoJg==} - '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -7682,8 +7676,6 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 - '@checkout.com/checkout-web-components@0.6.0-beta': {} - '@colors/colors@1.5.0': optional: true From a26b7bc47e76a1fa4ef8e5467ec9811f667c9975 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 15 May 2025 15:50:48 +0200 Subject: [PATCH 008/292] Fix load CKO configuration --- .../payment_gateways/CheckoutComGateway.tsx | 38 +++++++++---------- .../payment_source/CheckoutComPayment.tsx | 6 +-- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/packages/react-components/src/components/payment_gateways/CheckoutComGateway.tsx b/packages/react-components/src/components/payment_gateways/CheckoutComGateway.tsx index c471871d..a4c68c29 100644 --- a/packages/react-components/src/components/payment_gateways/CheckoutComGateway.tsx +++ b/packages/react-components/src/components/payment_gateways/CheckoutComGateway.tsx @@ -1,19 +1,19 @@ -import CheckoutComPayment from '#components/payment_source/CheckoutComPayment' -import type { GatewayBaseType } from '#components/payment_gateways/PaymentGateway' -import CustomerContext from '#context/CustomerContext' -import OrderContext from '#context/OrderContext' -import PaymentMethodChildrenContext from '#context/PaymentMethodChildrenContext' -import PaymentMethodContext from '#context/PaymentMethodContext' -import PaymentSourceContext from '#context/PaymentSourceContext' +import CheckoutComPayment from "#components/payment_source/CheckoutComPayment" +import type { GatewayBaseType } from "#components/payment_gateways/PaymentGateway" +import CustomerContext from "#context/CustomerContext" +import OrderContext from "#context/OrderContext" +import PaymentMethodChildrenContext from "#context/PaymentMethodChildrenContext" +import PaymentMethodContext from "#context/PaymentMethodContext" +import PaymentSourceContext from "#context/PaymentSourceContext" import { getPaymentConfig, - type PaymentResource -} from '#reducers/PaymentMethodReducer' -import type { StripeElementLocale } from '@stripe/stripe-js' -import isEmpty from 'lodash/isEmpty' -import React, { type JSX } from 'react'; -import PaymentCardsTemplate from '#components/utils/PaymentCardsTemplate' -import getCardDetails from '#utils/getCardDetails' + type PaymentResource, +} from "#reducers/PaymentMethodReducer" +import type { StripeElementLocale } from "@stripe/stripe-js" +import isEmpty from "lodash/isEmpty" +import React, { type JSX } from "react" +import PaymentCardsTemplate from "#components/utils/PaymentCardsTemplate" +import getCardDetails from "#utils/getCardDetails" type Props = GatewayBaseType @@ -35,14 +35,14 @@ export function CheckoutComGateway(props: Props): JSX.Element | null { const { payments, isGuest } = React.useContext(CustomerContext) const { currentPaymentMethodId, config, paymentSource } = React.useContext(PaymentMethodContext) - const paymentResource: PaymentResource = 'checkout_com_payments' + const paymentResource: PaymentResource = "checkout_com_payments" const locale = order?.language_code as StripeElementLocale if (!readonly && payment?.id !== currentPaymentMethodId) return null // @ts-expect-error no type const publicKey = paymentSource?.public_key const paymentConfig = config - ? getPaymentConfig<'checkout_com_payments'>(paymentResource, config) + ? getPaymentConfig<"checkout_com_payments">(paymentResource, config) : {} const customerPayments = !isEmpty(payments) && payments @@ -53,9 +53,9 @@ export function CheckoutComGateway(props: Props): JSX.Element | null { if (readonly || showCard) { const card = getCardDetails({ customerPayment: { - payment_source: paymentSource + payment_source: paymentSource, }, - paymentType: paymentResource + paymentType: paymentResource, }) const value = { ...card, showCard, handleEditClick, readonly } return !card.brand ? null : ( @@ -79,7 +79,7 @@ export function CheckoutComGateway(props: Props): JSX.Element | null { templateCustomerSaveToWallet={templateCustomerSaveToWallet} publicKey={publicKey} locale={locale} - {...paymentConfig} + {...paymentConfig.checkoutComPayment} /> ) diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 7631b2fc..0d9ec256 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -122,11 +122,7 @@ export function CheckoutComPayment({ }: Props): JSX.Element | null { const ref = useRef(null) const loaded = useExternalScript(scriptUrl) - const { - setPaymentRef, - setPaymentSource, - // setPaymentMethodErrors, - } = useContext(PaymentMethodContext) + const { setPaymentRef, setPaymentSource } = useContext(PaymentMethodContext) const { accessToken } = useContext(CommerceLayerContext) const { order } = useContext(OrderContext) // const { setPlaceOrder } = useContext(PlaceOrderContext) From 4c2a0828cf1a5c95c37f21b2a3272f927488d520 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 15 May 2025 16:14:28 +0200 Subject: [PATCH 009/292] v4.23.1 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index f9d6fde4..c28b31e1 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.0", + "version": "4.23.1", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 047f02e3..7d79df6e 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.0", + "version": "4.23.1", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From d5031020cf31a8feaaf1e207d0395ba984684689 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 19 May 2025 11:33:28 +0200 Subject: [PATCH 010/292] Fix CKO config types --- .../payment_source/CheckoutComPayment.tsx | 69 ++++++++----------- 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 0d9ec256..928df0f6 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -11,48 +11,33 @@ import { setCustomerOrderParam } from "#utils/localStorage" const scriptUrl = "https://checkout-web-components.checkout.com/index.js" +interface ElementAppearance { + fontFamily?: string + fontSize?: string + fontWeight?: number + letterSpacing?: number + lineHeight?: string +} + interface Appearance { - colorAction: string - colorBackground: string - colorBorder: string - colorDisabled: string - colorError: string - colorFormBackground: string - colorFormBorder: string - colorInverse: string - colorOutline: string - colorPrimary: string - colorSecondary: string - colorSuccess: string - button: { - fontFamily: string - fontSize: string - fontWeight: number - letterSpacing: number - lineHeight: string - } - footnote: { - fontFamily: string - fontSize: string - fontWeight: number - letterSpacing: number - lineHeight: string - } - label: { - fontFamily: string - fontSize: string - fontWeight: number - letterSpacing: number - lineHeight: string - } - subheading: { - fontFamily: string - fontSize: string - fontWeight: number - letterSpacing: number - lineHeight: string - } - borderRadius: [string, string] + colorAction?: string + colorBackground?: string + colorBorder?: string + colorDisabled?: string + colorError?: string + colorFormBackground?: string + colorFormBorder?: string + colorInverse?: string + colorOutline?: string + colorPrimary?: string + colorSecondary?: string + colorSuccess?: string + borderRadius?: [string, string] + button?: ElementAppearance + footnote?: ElementAppearance + label?: ElementAppearance + input?: ElementAppearance + subheading?: ElementAppearance } interface Component { @@ -102,7 +87,7 @@ export interface CheckoutComConfig { success_url: string failure_url: string options?: { - appearance: Partial + appearance: Appearance } [key: string]: unknown } From 009a5b43d6a04306b8b4f33421e7ad49d1b1a51b Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 19 May 2025 12:06:00 +0200 Subject: [PATCH 011/292] v4.23.2 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index c28b31e1..d3f5151c 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.1", + "version": "4.23.2", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 7d79df6e..adfb1859 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.1", + "version": "4.23.2", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 7940948f532597c4ca50cbfc0fe921bd5f8b3c8b Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 22 May 2025 19:13:06 +0200 Subject: [PATCH 012/292] Fix show CKO payment error --- .../components/orders/PlaceOrderButton.tsx | 70 ++++++++++++++++++- .../payment_source/CheckoutComPayment.tsx | 18 ++++- .../src/reducers/PlaceOrderReducer.ts | 27 +------ 3 files changed, 86 insertions(+), 29 deletions(-) diff --git a/packages/react-components/src/components/orders/PlaceOrderButton.tsx b/packages/react-components/src/components/orders/PlaceOrderButton.tsx index 36efc4f5..b9c7b644 100644 --- a/packages/react-components/src/components/orders/PlaceOrderButton.tsx +++ b/packages/react-components/src/components/orders/PlaceOrderButton.tsx @@ -299,9 +299,38 @@ export function PlaceOrderButton(props: Props): JSX.Element { ["draft", "pending"].includes(order?.status) && autoPlaceOrder ) { - handleClick() + // @ts-expect-error no type + const paymentResponse = order?.payment_source?.payment_response + const paymentStatus = paymentResponse?.status?.toLowerCase() + if (paymentStatus === "pending") { + setPaymentSource({ + paymentSourceId: paymentSource?.id, + paymentResource: "checkout_com_payments", + attributes: { + _details: 1, + }, + }).then((res) => { + // @ts-expect-error no type + const paymentStatus: string = res?.payment_response?.status + if (paymentStatus.toLowerCase() === "authorized") { + handleClick() + } else { + if (options?.checkoutCom) { + options.checkoutCom.session_id = undefined + } + setPaymentMethodErrors([ + { + code: "PAYMENT_INTENT_AUTHENTICATION_FAILURE", + resource: "payment_methods", + field: currentPaymentMethodType, + message: paymentStatus, + }, + ]) + } + }) + } } - }, [options?.checkoutCom, paymentType]) + }, [options?.checkoutCom, paymentType, order?.payment_source?.id]) // biome-ignore lint/correctness/useExhaustiveDependencies: Need to test useEffect(() => { if (ref?.current != null && setButtonRef != null) { @@ -314,7 +343,11 @@ export function PlaceOrderButton(props: Props): JSX.Element { e?.preventDefault() e?.stopPropagation() const isAlreadyPlaced = order?.status === "placed" + const isDraftOrder = order?.status === "draft" if (isAlreadyPlaced) { + /** + * Order already placed + */ setPlaceOrderStatus?.({ status: "placing" }) onClick?.({ placed: true, @@ -322,6 +355,24 @@ export function PlaceOrderButton(props: Props): JSX.Element { }) return } + if (isDraftOrder) { + /** + * Draft order cannot be placed + */ + setPlaceOrderStatus?.({ status: "standby" }) + onClick?.({ + placed: false, + order: order, + errors: [ + { + code: "VALIDATION_ERROR", + resource: "orders", + message: "Draft order cannot be placed", + }, + ], + }) + return + } setIsLoading(true) let isValid = true setForceDisable(true) @@ -360,6 +411,21 @@ export function PlaceOrderButton(props: Props): JSX.Element { ) { isValid = true } + } else if ( + currentPaymentMethodRef?.current?.onsubmit && + options?.checkoutCom?.session_id && + // @ts-expect-error no type + checkPaymentSource?.payment_response?.status?.toLowerCase() === "declined" + ) { + /** + * Permit to place order with declined payment using Checkout.com + */ + isValid = (await currentPaymentMethodRef.current?.onsubmit({ + // @ts-expect-error no type + paymentSource: checkPaymentSource, + setPlaceOrder, + onclickCallback: onClick, + })) as boolean } else if (card?.brand) { isValid = true } diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 928df0f6..5e62d759 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -190,7 +190,23 @@ export function CheckoutComPayment({ } }, onError: (component, error) => { - console.error("onError", error, "Component", component.type) + console.error("onError", { error }, "Component", component.type) + }, + onPaymentCompleted: async (component, paymentResponse) => { + console.log("onPaymentCompleted -----", { + paymentResponse, + component, + ps, + }) + const paymentSource = await setPaymentSource({ + paymentSourceId: ps.id, + paymentResource: "checkout_com_payments", + attributes: { + token: paymentResponse.id, + _authorize: true, + }, + }) + console.log("paymentSource", { paymentSource }) }, } satisfies CheckoutWebComponent) const flowComponent = checkout.create("flow") diff --git a/packages/react-components/src/reducers/PlaceOrderReducer.ts b/packages/react-components/src/reducers/PlaceOrderReducer.ts index b57f0499..7ca66323 100644 --- a/packages/react-components/src/reducers/PlaceOrderReducer.ts +++ b/packages/react-components/src/reducers/PlaceOrderReducer.ts @@ -32,7 +32,7 @@ export interface PlaceOrderOptions { redirectResult?: string } checkoutCom?: { - session_id: string + session_id: string | undefined } stripe?: { /** @@ -206,31 +206,6 @@ export async function setPlaceOrder({ paypal_payer_id: options?.paypalPayerId, }) } - if ( - paymentType === "checkout_com_payments" && - paymentSource && - options?.checkoutCom?.session_id - ) { - const payment = await sdk[paymentType].update({ - id: paymentSource.id, - _details: true, - }) - // @ts-expect-error no type - if (payment?.payment_response?.status !== "Authorized") { - // @ts-expect-error no type - const [action] = payment?.payment_response?.actions || [""] - const errors: BaseError[] = [ - { - code: "PAYMENT_NOT_APPROVED_FOR_EXECUTION", - message: action?.response_summary, - resource: "orders", - field: "checkout_com_payments", - }, - ] - // eslint-disable-next-line @typescript-eslint/no-throw-literal - throw { errors } - } - } const updateAttributes: OrderUpdate = { id: order.id, _place: true, From c2ab2fbc8479f1333863c7dfb97630df7d78cba1 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 22 May 2025 19:17:23 +0200 Subject: [PATCH 013/292] v4.23.3-beta.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index d3f5151c..6ba4cf0c 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.2", + "version": "4.23.3-beta.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index adfb1859..6445d592 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.2", + "version": "4.23.3-beta.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From f0cb7a8c401fb3af36c19996635abc07b73acaa9 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 23 May 2025 19:02:43 +0200 Subject: [PATCH 014/292] Fix place draft order --- .../components/orders/PlaceOrderButton.tsx | 26 ++++++++++-- .../payment_source/CheckoutComPayment.tsx | 40 ++++++++++--------- .../src/reducers/OrderReducer.ts | 3 +- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/packages/react-components/src/components/orders/PlaceOrderButton.tsx b/packages/react-components/src/components/orders/PlaceOrderButton.tsx index b9c7b644..66df44ee 100644 --- a/packages/react-components/src/components/orders/PlaceOrderButton.tsx +++ b/packages/react-components/src/components/orders/PlaceOrderButton.tsx @@ -17,6 +17,7 @@ import getCardDetails from "#utils/getCardDetails" import type { BaseError } from "#typings/errors" import type { Order } from "@commercelayer/sdk" import { checkPaymentIntent } from "#utils/stripe/retrievePaymentIntent" +import useCommerceLayer from "#hooks/useCommerceLayer" interface ChildrenProps extends Omit { /** @@ -73,6 +74,7 @@ export function PlaceOrderButton(props: Props): JSX.Element { const [notPermitted, setNotPermitted] = useState(true) const [forceDisable, setForceDisable] = useState(disabled) const [isLoading, setIsLoading] = useState(false) + const { sdkClient } = useCommerceLayer() const { currentPaymentMethodRef, loading, @@ -82,7 +84,7 @@ export function PlaceOrderButton(props: Props): JSX.Element { setPaymentMethodErrors, currentCustomerPaymentSourceId, } = useContext(PaymentMethodContext) - const { order } = useContext(OrderContext) + const { order, setOrderErrors } = useContext(OrderContext) const isFree = order?.total_amount_with_taxes_cents === 0 // biome-ignore lint/correctness/useExhaustiveDependencies: Need to test useEffect(() => { @@ -342,8 +344,19 @@ export function PlaceOrderButton(props: Props): JSX.Element { ): Promise => { e?.preventDefault() e?.stopPropagation() - const isAlreadyPlaced = order?.status === "placed" - const isDraftOrder = order?.status === "draft" + const sdk = sdkClient() + if (sdk == null) return + if (order == null) return + /** + * Check if the order is already placed or in draft status to avoid placing it again + * and to prevent placing a draft order + * @see https://docs.commercelayer.io/core/how-tos/placing-orders/checkout/placing-the-order + */ + const { status } = await sdk.orders.retrieve(order?.id, { + fields: ["status"], + }) + const isAlreadyPlaced = status === "placed" + const isDraftOrder = status === "draft" if (isAlreadyPlaced) { /** * Order already placed @@ -371,6 +384,13 @@ export function PlaceOrderButton(props: Props): JSX.Element { }, ], }) + setOrderErrors([ + { + code: "VALIDATION_ERROR", + resource: "orders", + message: "Draft order cannot be placed", + }, + ]) return } setIsLoading(true) diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 5e62d759..6e3a76d7 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -192,25 +192,29 @@ export function CheckoutComPayment({ onError: (component, error) => { console.error("onError", { error }, "Component", component.type) }, - onPaymentCompleted: async (component, paymentResponse) => { - console.log("onPaymentCompleted -----", { - paymentResponse, - component, - ps, - }) - const paymentSource = await setPaymentSource({ - paymentSourceId: ps.id, - paymentResource: "checkout_com_payments", - attributes: { - token: paymentResponse.id, - _authorize: true, - }, - }) - console.log("paymentSource", { paymentSource }) - }, + // onPaymentCompleted: async (component, paymentResponse) => { + // console.log("onPaymentCompleted -----", { + // paymentResponse, + // component, + // ps, + // }) + // const paymentSource = await setPaymentSource({ + // paymentSourceId: ps.id, + // paymentResource: "checkout_com_payments", + // attributes: { + // token: paymentResponse.id, + // _authorize: true, + // }, + // }) + // console.log("paymentSource", { paymentSource }) + // }, } satisfies CheckoutWebComponent) - const flowComponent = checkout.create("flow") - flowComponent.mount(document.getElementById("flow-container")) + // const flowComponent = checkout.create("flow") + const flowComponent = checkout.create("card") + if (await flowComponent.isAvailable()) { + flowComponent.mount(document.getElementById("flow-container")) + } + // flowComponent.mount(document.getElementById("flow-container")) } loadFlow() } diff --git a/packages/react-components/src/reducers/OrderReducer.ts b/packages/react-components/src/reducers/OrderReducer.ts index c1f68821..f8eb3e41 100644 --- a/packages/react-components/src/reducers/OrderReducer.ts +++ b/packages/react-components/src/reducers/OrderReducer.ts @@ -37,6 +37,7 @@ export type GetOrderParams = Partial<{ id: string persistKey: string state: OrderState + options: QueryParamsRetrieve }> export type GetOrder = (params: GetOrderParams) => Promise @@ -192,11 +193,11 @@ export const getApiOrder: GetOrder = async ( persistKey, deleteLocalOrder, state, + options = {}, } = params const sdk = config != null ? getSdk(config) : undefined try { if (sdk == null) return undefined - const options: QueryParamsRetrieve = {} if (state?.include && state.include.length > 0) { options.include = state.include } From cd3a1984f65bdf63118f75e2f6e4868a5ad7bd85 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 23 May 2025 19:03:17 +0200 Subject: [PATCH 015/292] v4.23.3-beta.1 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 6ba4cf0c..896d7f9e 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.3-beta.0", + "version": "4.23.3-beta.1", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 6445d592..a6e0cd6f 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.3-beta.0", + "version": "4.23.3-beta.1", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From c9c54719fd230e51cae3611e7c7e448cbef2a426 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 28 May 2025 10:55:20 +0200 Subject: [PATCH 016/292] v4.23.3 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 896d7f9e..346b770e 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.3-beta.1", + "version": "4.23.3", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index a6e0cd6f..2285d835 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.3-beta.1", + "version": "4.23.3", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 1ad05913e1c6905a6db940e06f40505c6bf8326b Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 29 May 2025 20:20:22 +0200 Subject: [PATCH 017/292] Fix avoid place order in draft --- package.json | 2 +- packages/react-components/package.json | 36 +- .../components/orders/PlaceOrderButton.tsx | 78 +-- .../payment_source/StripePayment.tsx | 32 +- pnpm-lock.yaml | 622 ++++++++++++------ 5 files changed, 498 insertions(+), 272 deletions(-) diff --git a/package.json b/package.json index f3b03b2a..1f2d1a73 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "husky": "^9.1.7", - "lerna": "^8.2.1", + "lerna": "^8.2.2", "typescript": "^5.8.3" }, "pnpm": { diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 2285d835..fb5e5780 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -199,14 +199,14 @@ }, "homepage": "https://github.com/commercelayer/commercelayer-react-components#readme", "dependencies": { - "@adyen/adyen-web": "^6.11.0", - "@commercelayer/organization-config": "^2.2.0", - "@commercelayer/sdk": "^6.38.0", - "@stripe/react-stripe-js": "^3.6.0", - "@stripe/stripe-js": "^7.0.0", - "@tanstack/react-table": "^8.21.2", + "@adyen/adyen-web": "^6.15.0", + "@commercelayer/organization-config": "^2.3.0", + "@commercelayer/sdk": "^6.42.0", + "@stripe/react-stripe-js": "^3.7.0", + "@stripe/stripe-js": "^7.3.1", + "@tanstack/react-table": "^8.21.3", "@types/iframe-resizer": "^3.5.13", - "braintree-web": "^3.117.1", + "braintree-web": "^3.120.0", "frames-react": "^1.2.2", "iframe-resizer": "^4.3.6", "jwt-decode": "^4.0.0", @@ -215,31 +215,31 @@ }, "devDependencies": { "@commercelayer/js-auth": "^6.7.2", - "@faker-js/faker": "^9.6.0", - "@playwright/test": "^1.51.1", + "@faker-js/faker": "^9.8.0", + "@playwright/test": "^1.52.0", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.3.0", "@types/braintree-web": "^3.96.17", - "@types/lodash": "^4.17.16", - "@types/node": "^22.14.0", + "@types/lodash": "^4.17.17", + "@types/node": "^22.15.23", "@types/prop-types": "^15.7.14", "@types/react": "^18.3.1", "@types/react-test-renderer": "^18.3.1", "@types/react-window": "^1.8.8", - "@vitejs/plugin-react": "^4.3.4", - "@vitest/coverage-v8": "^3.1.1", - "jsdom": "^26.0.0", + "@vitejs/plugin-react": "^4.5.0", + "@vitest/coverage-v8": "^3.1.4", + "jsdom": "^26.1.0", "minimize-js": "^1.4.0", - "msw": "^2.7.3", + "msw": "^2.8.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-test-renderer": "^18.3.1", - "tsc-alias": "^1.8.13", + "tsc-alias": "^1.8.16", "tslib": "^2.8.1", "typescript": "^5.8.3", - "vite": "^6.2.5", + "vite": "^6.3.5", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.1.1" + "vitest": "^3.1.4" }, "peerDependencies": { "react": ">=18.0.0" diff --git a/packages/react-components/src/components/orders/PlaceOrderButton.tsx b/packages/react-components/src/components/orders/PlaceOrderButton.tsx index 66df44ee..edb57cff 100644 --- a/packages/react-components/src/components/orders/PlaceOrderButton.tsx +++ b/packages/react-components/src/components/orders/PlaceOrderButton.tsx @@ -347,51 +347,55 @@ export function PlaceOrderButton(props: Props): JSX.Element { const sdk = sdkClient() if (sdk == null) return if (order == null) return - /** - * Check if the order is already placed or in draft status to avoid placing it again - * and to prevent placing a draft order - * @see https://docs.commercelayer.io/core/how-tos/placing-orders/checkout/placing-the-order - */ - const { status } = await sdk.orders.retrieve(order?.id, { - fields: ["status"], - }) - const isAlreadyPlaced = status === "placed" - const isDraftOrder = status === "draft" - if (isAlreadyPlaced) { + + const isStripePayment = paymentType === "stripe_payments" + if (!isStripePayment) { /** - * Order already placed + * Check if the order is already placed or in draft status to avoid placing it again + * and to prevent placing a draft order + * @see https://docs.commercelayer.io/core/how-tos/placing-orders/checkout/placing-the-order */ - setPlaceOrderStatus?.({ status: "placing" }) - onClick?.({ - placed: true, - order: order, + const { status } = await sdk.orders.retrieve(order?.id, { + fields: ["status"], }) - return - } - if (isDraftOrder) { - /** - * Draft order cannot be placed - */ - setPlaceOrderStatus?.({ status: "standby" }) - onClick?.({ - placed: false, - order: order, - errors: [ + const isAlreadyPlaced = status === "placed" + const isDraftOrder = status === "draft" + if (isAlreadyPlaced) { + /** + * Order already placed + */ + setPlaceOrderStatus?.({ status: "placing" }) + onClick?.({ + placed: true, + order: order, + }) + return + } + if (isDraftOrder) { + /** + * Draft order cannot be placed + */ + setPlaceOrderStatus?.({ status: "standby" }) + onClick?.({ + placed: false, + order: order, + errors: [ + { + code: "VALIDATION_ERROR", + resource: "orders", + message: "Draft order cannot be placed", + }, + ], + }) + setOrderErrors([ { code: "VALIDATION_ERROR", resource: "orders", message: "Draft order cannot be placed", }, - ], - }) - setOrderErrors([ - { - code: "VALIDATION_ERROR", - resource: "orders", - message: "Draft order cannot be placed", - }, - ]) - return + ]) + return + } } setIsLoading(true) let isValid = true diff --git a/packages/react-components/src/components/payment_source/StripePayment.tsx b/packages/react-components/src/components/payment_source/StripePayment.tsx index c39cfdb6..33621a5d 100644 --- a/packages/react-components/src/components/payment_source/StripePayment.tsx +++ b/packages/react-components/src/components/payment_source/StripePayment.tsx @@ -7,6 +7,7 @@ import type { StripeElementLocale, StripeElements, StripeElementsOptions, + StripePaymentElementChangeEvent, StripePaymentElementOptions, } from "@stripe/stripe-js" import type { PaymentMethodConfig } from "#reducers/PaymentMethodReducer" @@ -15,6 +16,7 @@ import Parent from "#components/utils/Parent" import { setCustomerOrderParam } from "#utils/localStorage" import OrderContext from "#context/OrderContext" import { StripeExpressPayment } from "./StripeExpressPayment" +import useCommerceLayer from "#hooks/useCommerceLayer" export interface StripeConfig { containerClassName?: string @@ -64,7 +66,8 @@ function StripePaymentForm({ const ref = useRef(null) const { currentPaymentMethodType, setPaymentMethodErrors, setPaymentRef } = useContext(PaymentMethodContext) - const { order } = useContext(OrderContext) + const { order, setOrderErrors } = useContext(OrderContext) + const { sdkClient } = useCommerceLayer() const elements = useElements() // biome-ignore lint/correctness/useExhaustiveDependencies: Avoid rerendering the form useEffect(() => { @@ -142,12 +145,39 @@ function StripePaymentForm({ return false } + async function handleChange(event: StripePaymentElementChangeEvent) { + // Handle change events from the PaymentElement + if (event.complete) { + const sdk = sdkClient() + if (sdk == null) return + if (order == null) return + const { status } = await sdk.orders.retrieve(order?.id, { + fields: ["status"], + }) + const isDraftOrder = status === "draft" + if (isDraftOrder) { + /** + * Draft order cannot be placed + */ + setOrderErrors([ + { + code: "VALIDATION_ERROR", + resource: "orders", + message: "Draft order cannot be placed", + }, + ]) + return + } + } + } + return ( {/* */} {templateCustomerSaveToWallet && ( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e1379793..3eebb0fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,8 +32,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 lerna: - specifier: ^8.2.1 - version: 8.2.1(encoding@0.1.13) + specifier: ^8.2.2 + version: 8.2.2(encoding@0.1.13) typescript: specifier: ^5.8.3 version: 5.8.3 @@ -108,7 +108,7 @@ importers: version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@storybook/react-vite': specifier: ^7.6.17 - version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -123,7 +123,7 @@ importers: version: 18.3.18 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) babel-loader: specifier: ^9.2.1 version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.18.20)) @@ -135,7 +135,7 @@ importers: version: 4.0.0 msw: specifier: ^2.7.0 - version: 2.7.3(@types/node@22.14.0)(typescript@5.8.3) + version: 2.7.3(@types/node@22.15.23)(typescript@5.8.3) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -156,37 +156,37 @@ importers: version: 5.8.3 vite: specifier: ^6.1.0 - version: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + version: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) packages/react-components: dependencies: '@adyen/adyen-web': - specifier: ^6.11.0 - version: 6.11.0 + specifier: ^6.15.0 + version: 6.15.0 '@commercelayer/organization-config': - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^2.3.0 + version: 2.3.0 '@commercelayer/sdk': - specifier: ^6.38.0 - version: 6.38.0 + specifier: ^6.42.0 + version: 6.42.0 '@stripe/react-stripe-js': - specifier: ^3.6.0 - version: 3.6.0(@stripe/stripe-js@7.0.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^3.7.0 + version: 3.7.0(@stripe/stripe-js@7.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@stripe/stripe-js': - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.3.1 + version: 7.3.1 '@tanstack/react-table': - specifier: ^8.21.2 - version: 8.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^8.21.3 + version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/iframe-resizer': specifier: ^3.5.13 version: 3.5.13 braintree-web: - specifier: ^3.117.1 - version: 3.117.1 + specifier: ^3.120.0 + version: 3.120.0 frames-react: specifier: ^1.2.2 version: 1.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3) @@ -207,11 +207,11 @@ importers: specifier: ^6.7.2 version: 6.7.2 '@faker-js/faker': - specifier: ^9.6.0 - version: 9.6.0 + specifier: ^9.8.0 + version: 9.8.0 '@playwright/test': - specifier: ^1.51.1 - version: 1.51.1 + specifier: ^1.52.0 + version: 1.52.0 '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -222,11 +222,11 @@ importers: specifier: ^3.96.17 version: 3.96.17 '@types/lodash': - specifier: ^4.17.16 - version: 4.17.16 + specifier: ^4.17.17 + version: 4.17.17 '@types/node': - specifier: ^22.14.0 - version: 22.14.0 + specifier: ^22.15.23 + version: 22.15.23 '@types/prop-types': specifier: ^15.7.14 version: 15.7.14 @@ -240,20 +240,20 @@ importers: specifier: ^1.8.8 version: 1.8.8 '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.3.4(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + specifier: ^4.5.0 + version: 4.5.0(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) '@vitest/coverage-v8': - specifier: ^3.1.1 - version: 3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0)) + specifier: ^3.1.4 + version: 3.1.4(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0)) jsdom: - specifier: ^26.0.0 - version: 26.0.0 + specifier: ^26.1.0 + version: 26.1.0 minimize-js: specifier: ^1.4.0 version: 1.4.0 msw: - specifier: ^2.7.3 - version: 2.7.3(@types/node@22.14.0)(typescript@5.8.3) + specifier: ^2.8.5 + version: 2.8.5(@types/node@22.15.23)(typescript@5.8.3) react: specifier: ^18.3.1 version: 18.3.1 @@ -264,8 +264,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) tsc-alias: - specifier: ^1.8.13 - version: 1.8.13 + specifier: ^1.8.16 + version: 1.8.16 tslib: specifier: ^2.8.1 version: 2.8.1 @@ -273,19 +273,19 @@ importers: specifier: ^5.8.3 version: 5.8.3 vite: - specifier: ^6.2.5 - version: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + specifier: ^6.3.5 + version: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) vitest: - specifier: ^3.1.1 - version: 3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) + specifier: ^3.1.4 + version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) packages: - '@adyen/adyen-web@6.11.0': - resolution: {integrity: sha512-OSpTq+VN84hNPOV5RpHM8T4TYMgL8sMr0UDa+2yDeTEBTIlNdigCKgDWTXzOHIW/BuPWna4e9n1fuGYnCJgXlQ==} + '@adyen/adyen-web@6.15.0': + resolution: {integrity: sha512-Ormyln86jo365jIHEDyb1xZETLxqg/XD1/sYf0Kb1H+8XCzVURKYVhdBTxpc4l9B3gcHq43tiNhzwf9sL4nc6g==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -950,14 +950,18 @@ packages: resolution: {integrity: sha512-kk4VqN2iEOreXFq76YqTP83KhBs09Z5Ez9nZNlikXWf5DXzkrOfShqqEwq8ezHjSOlqs4xVyxgQzsEdPP35CeQ==} engines: {node: '>=18.0.0'} - '@commercelayer/organization-config@2.2.0': - resolution: {integrity: sha512-v7vfLru0WiqocrPWfldmqhbG6VKYQcdu480SUCU4wTnDcXLVnlKfgaadkNnv+tVVZXh0qke8/uwrkNoi3VY/Bw==} + '@commercelayer/organization-config@2.3.0': + resolution: {integrity: sha512-VVmp+HDBNYL0auAdxsMFWA2+ol9yX/QKPLKDK5VPiVF2CgdB6AK5m1ktHkeb1ztL+724zyK+LEg+bfmvTKn/WQ==} engines: {node: '>=18', pnpm: '>=7'} '@commercelayer/sdk@6.38.0': resolution: {integrity: sha512-fv6GrTFWkQJC4yb86Fix560+S/lKLegTEFpQNTsnNpE8JLkzF63B1dyCWpbGcOtsbCK37I/CXsQf6eof1R15qA==} engines: {node: '>=20'} + '@commercelayer/sdk@6.42.0': + resolution: {integrity: sha512-tZD1+dGT8SjKKMw6LVgzqZSIon1AsX5fdiiQpZi8zT/LAjtpkOpwz8aVnL0p7sqSlBNq55VVeDqYBwNB++DehA==} + engines: {node: '>=20'} + '@csstools/color-helpers@5.0.2': resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} engines: {node: '>=18'} @@ -1286,8 +1290,8 @@ packages: cpu: [x64] os: [win32] - '@faker-js/faker@9.6.0': - resolution: {integrity: sha512-3vm4by+B5lvsFPSyep3ELWmZfE3kicDtmemVpuwl1yH7tqtnHdsA6hG8fbXedMVdkzgtvzWoRgjSB4Q+FHnZiw==} + '@faker-js/faker@9.8.0': + resolution: {integrity: sha512-U9wpuSrJC93jZBxx/Qq2wPjCuYISBueyVUGK7qqdmj7r/nxaxwW8AQDCLeRO7wZnjj94sh3p246cAYjUKuqgfg==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} '@fal-works/esbuild-plugin-global-externals@2.1.2': @@ -1407,8 +1411,8 @@ packages: '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - '@lerna/create@8.2.1': - resolution: {integrity: sha512-Cz2u/fwc03D1EE6VFZCLMmI8FIUtGmxHQ3ECeNblsxv9i0YSKWe4Xm18sjO1xltG/K5ByiH8/HMeY9dlyAv22A==} + '@lerna/create@8.2.2': + resolution: {integrity: sha512-1yn1MvWn2Yz0SFgTTQnef2m1YedF7KwqLLVIOrGkgQrkVHzsveAIk1A1RcRa2yyUh+siKI1YcJ7lUZIEt+qQ3Q==} engines: {node: '>=18.0.0'} '@mdx-js/react@2.3.0': @@ -1426,6 +1430,10 @@ packages: resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} engines: {node: '>=18'} + '@mswjs/interceptors@0.38.7': + resolution: {integrity: sha512-Jkb27iSn7JPdkqlTqKfhncFfnEZsIJVYxsFbUSWEkxdIPdsyngrhoDBk0/BGD2FQcRH99vlRrkHpNTyKqI+0/w==} + engines: {node: '>=18'} + '@napi-rs/wasm-runtime@0.2.4': resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} @@ -1638,8 +1646,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.51.1': - resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} + '@playwright/test@1.52.0': + resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} engines: {node: '>=18'} hasBin: true @@ -2052,6 +2060,9 @@ packages: '@radix-ui/rect@1.0.1': resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + '@rolldown/pluginutils@1.0.0-beta.9': + resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==} + '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -2416,26 +2427,26 @@ packages: '@storybook/types@7.6.20': resolution: {integrity: sha512-GncdY3x0LpbhmUAAJwXYtJDUQEwfF175gsjH0/fxPkxPoV7Sef9TM41jQLJW/5+6TnZoCZP/+aJZTJtq3ni23Q==} - '@stripe/react-stripe-js@3.6.0': - resolution: {integrity: sha512-zEnaUmTOsu7zhl3RWbZ0l1dRiad+QIbcAYzQfF+yYelURJowhAwesRHKWH+qGAIBEpkO6/VCLFHhVLH9DtPlnw==} + '@stripe/react-stripe-js@3.7.0': + resolution: {integrity: sha512-PYls/2S9l0FF+2n0wHaEJsEU8x7CmBagiH7zYOsxbBlLIHEsqUIQ4MlIAbV9Zg6xwT8jlYdlRIyBTHmO3yM7kQ==} peerDependencies: '@stripe/stripe-js': '>=1.44.1 <8.0.0' react: '>=16.8.0 <20.0.0' react-dom: '>=16.8.0 <20.0.0' - '@stripe/stripe-js@7.0.0': - resolution: {integrity: sha512-0AWkP+hoIXB5O34FGY7jh687ZPlOqLqMkJDkiSXcp4TaWWidnxjsZSp0xkjyAWbIz4+j1BFXDAK01Rqb7ceBRA==} + '@stripe/stripe-js@7.3.1': + resolution: {integrity: sha512-pTzb864TQWDRQBPLgSPFRoyjSDUqpCkbEgTzpsjiTjGz1Z5SxZNXJek28w1s6Dyry4CyW4/Izj5jHE/J9hCJYQ==} engines: {node: '>=12.16'} - '@tanstack/react-table@8.21.2': - resolution: {integrity: sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg==} + '@tanstack/react-table@8.21.3': + resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} engines: {node: '>=12'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - '@tanstack/table-core@8.21.2': - resolution: {integrity: sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA==} + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} engines: {node: '>=12'} '@testing-library/dom@10.4.0': @@ -2586,6 +2597,9 @@ packages: '@types/lodash@4.17.16': resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} + '@types/lodash@4.17.17': + resolution: {integrity: sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -2616,8 +2630,8 @@ packages: '@types/node@18.19.80': resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==} - '@types/node@22.14.0': - resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} + '@types/node@22.15.23': + resolution: {integrity: sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2691,20 +2705,26 @@ packages: peerDependencies: vite: '>=4.5.2' - '@vitest/coverage-v8@3.1.1': - resolution: {integrity: sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==} + '@vitejs/plugin-react@4.5.0': + resolution: {integrity: sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: '>=4.5.2' + + '@vitest/coverage-v8@3.1.4': + resolution: {integrity: sha512-G4p6OtioySL+hPV7Y6JHlhpsODbJzt1ndwHAFkyk6vVjpK03PFsKnauZIzcd0PrK4zAbc5lc+jeZ+eNGiMA+iw==} peerDependencies: - '@vitest/browser': 3.1.1 - vitest: 3.1.1 + '@vitest/browser': 3.1.4 + vitest: 3.1.4 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.1.1': - resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} + '@vitest/expect@3.1.4': + resolution: {integrity: sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==} - '@vitest/mocker@3.1.1': - resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} + '@vitest/mocker@3.1.4': + resolution: {integrity: sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==} peerDependencies: msw: ^2.4.9 vite: '>=5.1.7' @@ -2714,20 +2734,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.1.1': - resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} + '@vitest/pretty-format@3.1.4': + resolution: {integrity: sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==} - '@vitest/runner@3.1.1': - resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} + '@vitest/runner@3.1.4': + resolution: {integrity: sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==} - '@vitest/snapshot@3.1.1': - resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} + '@vitest/snapshot@3.1.4': + resolution: {integrity: sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==} - '@vitest/spy@3.1.1': - resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} + '@vitest/spy@3.1.4': + resolution: {integrity: sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==} - '@vitest/utils@3.1.1': - resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} + '@vitest/utils@3.1.4': + resolution: {integrity: sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3058,8 +3078,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - braintree-web@3.117.1: - resolution: {integrity: sha512-Jv4NO0s90VYpbKMVL7IMigCyWhi+BlCqxS6Ub7auk6Jd4MUPToygKO3ryvvYVMmasm7pEVKRIAH16UMVfcq4FA==} + braintree-web@3.120.0: + resolution: {integrity: sha512-iAQVpMllthfLdRXRl5gpsiKfNkhHw6EEfkNxwrdoikhs2iXRx7OQFY3VbJpUQUQjAmSV4ORsLwAwhaGw5qA88Q==} browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} @@ -3655,6 +3675,9 @@ packages: es-module-lexer@1.6.0: resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -3751,8 +3774,8 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - expect-type@1.2.0: - resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} exponential-backoff@3.1.2: @@ -3795,6 +3818,14 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.5: + resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} @@ -3984,6 +4015,9 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + giget@1.2.5: resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} hasBin: true @@ -4529,8 +4563,8 @@ packages: '@babel/preset-env': optional: true - jsdom@26.0.0: - resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} peerDependencies: canvas: ^3.0.0 @@ -4608,8 +4642,8 @@ packages: resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} engines: {node: '>=14.0.0'} - lerna@8.2.1: - resolution: {integrity: sha512-Xwjv9/4ixp7fpBWhtvp7dz4NoQT8DEf7hzibHKCgu/8kmZUHeXsTn+TKspHqhI+p4YDmdkDnkg8xmymz73kVOg==} + lerna@8.2.2: + resolution: {integrity: sha512-GkqBELTG4k7rfzAwRok2pKBvhNo046Hfwcj7TuhDah3q58/BBBAqvIFLfqEI5fglnNOs6maMSn6/MWjccQE55A==} engines: {node: '>=18.0.0'} hasBin: true @@ -5052,6 +5086,16 @@ packages: typescript: optional: true + msw@2.8.5: + resolution: {integrity: sha512-uSp82wwBjOBV+VIt4rtUgwrbNFCobZICSd2iexS4IMIwFxDexSojiwnrZF3TK6yxxUt1PBHZdsfOwuI9JzWphA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + multimatch@5.0.0: resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} engines: {node: '>=10'} @@ -5472,13 +5516,13 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.51.1: - resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + playwright-core@1.52.0: + resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} engines: {node: '>=18'} hasBin: true - playwright@1.51.1: - resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + playwright@1.52.0: + resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} engines: {node: '>=18'} hasBin: true @@ -5691,6 +5735,10 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -5842,6 +5890,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve.exports@2.0.3: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} @@ -6095,8 +6146,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.8.1: - resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -6266,6 +6317,10 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6337,8 +6392,8 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} - tsc-alias@1.8.13: - resolution: {integrity: sha512-hpuglrm2DoHZE62L8ntYqRNiSQ7J8kvIxEsajzY/QfGOm7EcdhgG5asqoWYi2E2KX0SqUuhOTnV8Ry8D/TnsEA==} + tsc-alias@1.8.16: + resolution: {integrity: sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==} engines: {node: '>=16.20.2'} hasBin: true @@ -6583,15 +6638,15 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vite-node@3.1.1: - resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} + vite-node@3.1.4: + resolution: {integrity: sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - vite: '>=4.5.2' + vite: '>=5.1.7' peerDependenciesMeta: vite: optional: true @@ -6636,16 +6691,56 @@ packages: yaml: optional: true - vitest@3.1.1: - resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==} + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.1.4: + resolution: {integrity: sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.1 - '@vitest/ui': 3.1.1 + '@vitest/browser': 3.1.4 + '@vitest/ui': 3.1.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -6872,7 +6967,7 @@ packages: snapshots: - '@adyen/adyen-web@6.11.0': + '@adyen/adyen-web@6.15.0': dependencies: '@types/applepayjs': 14.0.9 '@types/googlepay': 0.7.6 @@ -7681,12 +7776,14 @@ snapshots: '@commercelayer/js-auth@6.7.2': {} - '@commercelayer/organization-config@2.2.0': + '@commercelayer/organization-config@2.3.0': dependencies: merge-anything: 5.1.7 '@commercelayer/sdk@6.38.0': {} + '@commercelayer/sdk@6.42.0': {} + '@csstools/color-helpers@5.0.2': {} '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': @@ -7867,7 +7964,7 @@ snapshots: '@esbuild/win32-x64@0.25.1': optional: true - '@faker-js/faker@9.6.0': {} + '@faker-js/faker@9.8.0': {} '@fal-works/esbuild-plugin-global-externals@2.1.2': {} @@ -7890,17 +7987,17 @@ snapshots: '@hutson/parse-repository-url@3.0.2': {} - '@inquirer/confirm@5.1.8(@types/node@22.14.0)': + '@inquirer/confirm@5.1.8(@types/node@22.15.23)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.14.0) - '@inquirer/type': 3.0.5(@types/node@22.14.0) + '@inquirer/core': 10.1.9(@types/node@22.15.23) + '@inquirer/type': 3.0.5(@types/node@22.15.23) optionalDependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 - '@inquirer/core@10.1.9(@types/node@22.14.0)': + '@inquirer/core@10.1.9(@types/node@22.15.23)': dependencies: '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.14.0) + '@inquirer/type': 3.0.5(@types/node@22.15.23) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -7908,13 +8005,13 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@inquirer/figures@1.0.11': {} - '@inquirer/type@3.0.5(@types/node@22.14.0)': + '@inquirer/type@3.0.5(@types/node@22.15.23)': optionalDependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@isaacs/cliui@8.0.2': dependencies: @@ -7965,7 +8062,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -7974,17 +8071,17 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.8.3) - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.3 @@ -8012,7 +8109,7 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@lerna/create@8.2.1(encoding@0.1.13)(typescript@5.8.3)': + '@lerna/create@8.2.2(encoding@0.1.13)(typescript@5.8.3)': dependencies: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 @@ -8115,6 +8212,15 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 + '@mswjs/interceptors@0.38.7': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + '@napi-rs/wasm-runtime@0.2.4': dependencies: '@emnapi/core': 1.3.1 @@ -8394,9 +8500,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.51.1': + '@playwright/test@1.52.0': dependencies: - playwright: 1.51.1 + playwright: 1.52.0 '@radix-ui/number@1.0.1': dependencies: @@ -8760,6 +8866,8 @@ snapshots: dependencies: '@babel/runtime': 7.26.10 + '@rolldown/pluginutils@1.0.0-beta.9': {} + '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 @@ -9061,7 +9169,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 @@ -9079,7 +9187,7 @@ snapshots: fs-extra: 11.3.0 magic-string: 0.30.17 rollup: 3.29.5 - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -9427,18 +9535,18 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.35.0) - '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) '@storybook/react': 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@vitejs/plugin-react': 3.1.0(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) + '@vitejs/plugin-react': 3.1.0(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.1 react-dom: 18.3.1(react@18.3.1) - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -9542,22 +9650,22 @@ snapshots: '@types/express': 4.17.21 file-system-cache: 2.3.0 - '@stripe/react-stripe-js@3.6.0(@stripe/stripe-js@7.0.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@stripe/react-stripe-js@3.7.0(@stripe/stripe-js@7.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@stripe/stripe-js': 7.0.0 + '@stripe/stripe-js': 7.3.1 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@stripe/stripe-js@7.0.0': {} + '@stripe/stripe-js@7.3.1': {} - '@tanstack/react-table@8.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-table@8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/table-core': 8.21.2 + '@tanstack/table-core': 8.21.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/table-core@8.21.2': {} + '@tanstack/table-core@8.21.3': {} '@testing-library/dom@10.4.0': dependencies: @@ -9633,7 +9741,7 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/braintree-web@3.96.17': dependencies: @@ -9642,13 +9750,13 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/cookie@0.6.0': {} '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/debug@4.1.12': dependencies: @@ -9682,7 +9790,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -9699,13 +9807,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/googlepay@0.7.6': {} '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/http-errors@2.0.4': {} @@ -9727,6 +9835,8 @@ snapshots: '@types/lodash@4.17.16': {} + '@types/lodash@4.17.17': {} + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 @@ -9747,14 +9857,14 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 form-data: 4.0.2 '@types/node@18.19.80': dependencies: undici-types: 5.26.5 - '@types/node@22.14.0': + '@types/node@22.15.23': dependencies: undici-types: 6.21.0 @@ -9790,12 +9900,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.14.0 + '@types/node': 22.15.23 '@types/send': 0.17.4 '@types/statuses@2.0.5': {} @@ -9816,29 +9926,41 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitejs/plugin-react@3.1.0(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@3.1.0(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-react@4.5.0(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@rolldown/pluginutils': 1.0.0-beta.9 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0))': + '@vitest/coverage-v8@3.1.4(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -9849,51 +9971,51 @@ snapshots: istanbul-reports: 3.1.7 magic-string: 0.30.17 magicast: 0.3.5 - std-env: 3.8.1 + std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.1.1': + '@vitest/expect@3.1.4': dependencies: - '@vitest/spy': 3.1.1 - '@vitest/utils': 3.1.1 + '@vitest/spy': 3.1.4 + '@vitest/utils': 3.1.4 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.1(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0))': + '@vitest/mocker@3.1.4(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.1.1 + '@vitest/spy': 3.1.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.7.3(@types/node@22.14.0)(typescript@5.8.3) - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + msw: 2.8.5(@types/node@22.15.23)(typescript@5.8.3) + vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) - '@vitest/pretty-format@3.1.1': + '@vitest/pretty-format@3.1.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.1': + '@vitest/runner@3.1.4': dependencies: - '@vitest/utils': 3.1.1 + '@vitest/utils': 3.1.4 pathe: 2.0.3 - '@vitest/snapshot@3.1.1': + '@vitest/snapshot@3.1.4': dependencies: - '@vitest/pretty-format': 3.1.1 + '@vitest/pretty-format': 3.1.4 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.1': + '@vitest/spy@3.1.4': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.1.1': + '@vitest/utils@3.1.4': dependencies: - '@vitest/pretty-format': 3.1.1 + '@vitest/pretty-format': 3.1.4 loupe: 3.1.3 tinyrainbow: 2.0.0 @@ -10256,7 +10378,7 @@ snapshots: dependencies: fill-range: 7.1.1 - braintree-web@3.117.1: + braintree-web@3.120.0: dependencies: '@braintree/asset-loader': 2.0.2 '@braintree/browser-detection': 2.0.2 @@ -10860,6 +10982,8 @@ snapshots: es-module-lexer@1.6.0: {} + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -10981,9 +11105,9 @@ snapshots: execa@5.0.0: dependencies: cross-spawn: 7.0.6 - get-stream: 6.0.0 + get-stream: 6.0.1 human-signals: 2.1.0 - is-stream: 2.0.0 + is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -11002,7 +11126,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - expect-type@1.2.0: {} + expect-type@1.2.1: {} exponential-backoff@3.1.2: {} @@ -11085,6 +11209,10 @@ snapshots: dependencies: pend: 1.2.0 + fdir@6.4.5(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fetch-retry@5.0.6: {} figures@3.2.0: @@ -11282,6 +11410,10 @@ snapshots: get-stream@6.0.1: {} + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + giget@1.2.5: dependencies: citty: 0.1.6 @@ -11780,7 +11912,7 @@ snapshots: jest-diff@29.7.0: dependencies: - chalk: 4.1.0 + chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 @@ -11791,7 +11923,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.14.0 + '@types/node': 22.15.23 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11806,14 +11938,14 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 22.14.0 + '@types/node': 22.15.23 jest-regex-util@29.6.3: {} jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.14.0 + '@types/node': 22.15.23 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11821,13 +11953,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -11874,12 +12006,11 @@ snapshots: transitivePeerDependencies: - supports-color - jsdom@26.0.0: + jsdom@26.1.0: dependencies: cssstyle: 4.3.0 data-urls: 5.0.0 decimal.js: 10.5.0 - form-data: 4.0.2 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -11948,9 +12079,9 @@ snapshots: dotenv: 16.4.7 dotenv-expand: 10.0.0 - lerna@8.2.1(encoding@0.1.13): + lerna@8.2.2(encoding@0.1.13): dependencies: - '@lerna/create': 8.2.1(encoding@0.1.13)(typescript@5.8.3) + '@lerna/create': 8.2.2(encoding@0.1.13)(typescript@5.8.3) '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 @@ -12638,12 +12769,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3): + msw@2.7.3(@types/node@22.15.23)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.8(@types/node@22.14.0) + '@inquirer/confirm': 5.1.8(@types/node@22.15.23) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -12663,13 +12794,38 @@ snapshots: transitivePeerDependencies: - '@types/node' + msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.8(@types/node@22.15.23) + '@mswjs/interceptors': 0.38.7 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.10.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.37.0 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/node' + multimatch@5.0.0: dependencies: '@types/minimatch': 3.0.5 array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.0.5 + minimatch: 3.1.2 mute-stream@0.0.8: {} @@ -12806,7 +12962,7 @@ snapshots: '@yarnpkg/parsers': 3.0.2 '@zkochan/js-yaml': 0.0.7 axios: 1.8.3 - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 8.0.1 @@ -12901,9 +13057,9 @@ snapshots: ora@5.3.0: dependencies: bl: 4.1.0 - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -13130,11 +13286,11 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - playwright-core@1.51.1: {} + playwright-core@1.52.0: {} - playwright@1.51.1: + playwright@1.52.0: dependencies: - playwright-core: 1.51.1 + playwright-core: 1.52.0 optionalDependencies: fsevents: 2.3.2 @@ -13348,6 +13504,8 @@ snapshots: react-refresh@0.14.2: {} + react-refresh@0.17.0: {} + react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): dependencies: react: 18.3.1 @@ -13533,6 +13691,8 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve.exports@2.0.3: {} resolve@1.22.10: @@ -13832,7 +13992,7 @@ snapshots: statuses@2.0.1: {} - std-env@3.8.1: {} + std-env@3.9.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -14009,6 +14169,11 @@ snapshots: tinyexec@0.3.2: {} + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.5(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.2: {} tinyrainbow@2.0.0: {} @@ -14062,10 +14227,11 @@ snapshots: ts-dedent@2.2.0: {} - tsc-alias@1.8.13: + tsc-alias@1.8.16: dependencies: chokidar: 3.6.0 commander: 9.5.0 + get-tsconfig: 4.10.1 globby: 11.1.0 mylas: 2.1.13 normalize-path: 3.0.0 @@ -14287,13 +14453,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@3.1.1(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0): + vite-node@3.1.4(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 - es-module-lexer: 1.6.0 + es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -14308,54 +14474,80 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.8.3) optionalDependencies: - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)): + dependencies: + debug: 4.4.0 + globrex: 0.1.2 + tsconfck: 3.1.5(typescript@5.8.3) + optionalDependencies: + vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + - typescript + + vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.1 postcss: 8.5.3 rollup: 4.35.0 optionalDependencies: - '@types/node': 22.14.0 + '@types/node': 22.15.23 + fsevents: 2.3.3 + terser: 5.39.0 + yaml: 2.7.0 + + vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0): + dependencies: + esbuild: 0.25.1 + fdir: 6.4.5(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.3 + rollup: 4.35.0 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 22.15.23 fsevents: 2.3.3 terser: 5.39.0 yaml: 2.7.0 - vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.14.0)(jsdom@26.0.0)(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0): + vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.1.1 - '@vitest/mocker': 3.1.1(msw@2.7.3(@types/node@22.14.0)(typescript@5.8.3))(vite@6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0)) - '@vitest/pretty-format': 3.1.1 - '@vitest/runner': 3.1.1 - '@vitest/snapshot': 3.1.1 - '@vitest/spy': 3.1.1 - '@vitest/utils': 3.1.1 + '@vitest/expect': 3.1.4 + '@vitest/mocker': 3.1.4(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + '@vitest/pretty-format': 3.1.4 + '@vitest/runner': 3.1.4 + '@vitest/snapshot': 3.1.4 + '@vitest/spy': 3.1.4 + '@vitest/utils': 3.1.4 chai: 5.2.0 debug: 4.4.0 - expect-type: 1.2.0 + expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 - std-env: 3.8.1 + std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 + tinyglobby: 0.2.14 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.5(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) - vite-node: 3.1.1(@types/node@22.14.0)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite-node: 3.1.4(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.14.0 - jsdom: 26.0.0 + '@types/node': 22.15.23 + jsdom: 26.1.0 transitivePeerDependencies: - jiti - less From e21fc4ca8249d6dcdc98b00fa25eab6450b8520b Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 29 May 2025 20:21:16 +0200 Subject: [PATCH 018/292] v4.23.4-beta.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 346b770e..483c813f 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.3", + "version": "4.23.4-beta.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index fb5e5780..361bd81d 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.3", + "version": "4.23.4-beta.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 5ab3f8decce33944a3f2a7c5b3a3197c9f8054d6 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Tue, 3 Jun 2025 09:56:40 +0200 Subject: [PATCH 019/292] v4.23.4 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 483c813f..0de53e4f 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.4-beta.0", + "version": "4.23.4", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 361bd81d..ff783a19 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.4-beta.0", + "version": "4.23.4", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From ce9b6347207e95eba842906b18686e667b972b12 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 30 May 2025 18:11:22 +0200 Subject: [PATCH 020/292] Add Adyen subscriptions --- .../src/components/payment_source/AdyenPayment.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react-components/src/components/payment_source/AdyenPayment.tsx b/packages/react-components/src/components/payment_source/AdyenPayment.tsx index 862ea116..b85a9208 100644 --- a/packages/react-components/src/components/payment_source/AdyenPayment.tsx +++ b/packages/react-components/src/components/payment_source/AdyenPayment.tsx @@ -30,6 +30,7 @@ import PlaceOrderContext from "#context/PlaceOrderContext" import OrderContext from "#context/OrderContext" import { getPublicIP } from "#utils/getPublicIp" import CustomerContext from "#context/CustomerContext" +import { hasSubscriptions } from "#utils/hasSubscriptions" interface PaymentMethodsStyle { card?: CardConfiguration["styles"] @@ -227,6 +228,10 @@ export function AdyenPayment({ message?: string } > => { + let recurringProcessingModel = "CardOnFile" + if (order && hasSubscriptions(order)) { + recurringProcessingModel = "Subscription" + } const url = cleanUrlBy() const { type: currentPaymentMethodType } = state.data.paymentMethod const shopperIp = await getPublicIP() @@ -256,7 +261,7 @@ export function AdyenPayment({ redirect_from_issuer_method: "GET", shopper_ip: shopperIp, shopperInteraction: "Ecommerce", - recurringProcessingModel: "CardOnFile", + recurringProcessingModel, browser_info: { ...browserInfo(), }, From 90c43272f44736f026d0c0e5e01503e035508333 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 4 Jun 2025 12:10:16 +0200 Subject: [PATCH 021/292] Hide customer payments when the order contains a subscription --- packages/react-components/package.json | 12 +- .../payment_gateways/AdyenGateway.tsx | 56 +-- .../payment_source/AdyenPayment.tsx | 13 +- pnpm-lock.yaml | 344 ++++++++++-------- 4 files changed, 234 insertions(+), 191 deletions(-) diff --git a/packages/react-components/package.json b/packages/react-components/package.json index ff783a19..0412bd1c 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -206,7 +206,7 @@ "@stripe/stripe-js": "^7.3.1", "@tanstack/react-table": "^8.21.3", "@types/iframe-resizer": "^3.5.13", - "braintree-web": "^3.120.0", + "braintree-web": "^3.120.2", "frames-react": "^1.2.2", "iframe-resizer": "^4.3.6", "jwt-decode": "^4.0.0", @@ -221,16 +221,16 @@ "@testing-library/react": "^16.3.0", "@types/braintree-web": "^3.96.17", "@types/lodash": "^4.17.17", - "@types/node": "^22.15.23", + "@types/node": "^22.15.29", "@types/prop-types": "^15.7.14", "@types/react": "^18.3.1", "@types/react-test-renderer": "^18.3.1", "@types/react-window": "^1.8.8", - "@vitejs/plugin-react": "^4.5.0", - "@vitest/coverage-v8": "^3.1.4", + "@vitejs/plugin-react": "^4.5.1", + "@vitest/coverage-v8": "^3.2.1", "jsdom": "^26.1.0", "minimize-js": "^1.4.0", - "msw": "^2.8.5", + "msw": "^2.9.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-test-renderer": "^18.3.1", @@ -239,7 +239,7 @@ "typescript": "^5.8.3", "vite": "^6.3.5", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.1.4" + "vitest": "^3.2.1" }, "peerDependencies": { "react": ">=18.0.0" diff --git a/packages/react-components/src/components/payment_gateways/AdyenGateway.tsx b/packages/react-components/src/components/payment_gateways/AdyenGateway.tsx index 8003ece9..ac99fcd5 100644 --- a/packages/react-components/src/components/payment_gateways/AdyenGateway.tsx +++ b/packages/react-components/src/components/payment_gateways/AdyenGateway.tsx @@ -1,19 +1,20 @@ -import type { GatewayBaseType } from '#components/payment_gateways/PaymentGateway' -import CommerceLayerContext from '#context/CommerceLayerContext' -import CustomerContext from '#context/CustomerContext' -import OrderContext from '#context/OrderContext' -import PaymentMethodChildrenContext from '#context/PaymentMethodChildrenContext' -import PaymentMethodContext from '#context/PaymentMethodContext' -import PaymentSourceContext from '#context/PaymentSourceContext' -import type { PaymentResource } from '#reducers/PaymentMethodReducer' -import type { StripeElementLocale } from '@stripe/stripe-js' -import isEmpty from 'lodash/isEmpty' -import { useContext, type JSX } from 'react' -import AdyenPayment from '#components/payment_source/AdyenPayment' -import PaymentCardsTemplate from '../utils/PaymentCardsTemplate' -import { jwt } from '#utils/jwt' -import getCardDetails from '#utils/getCardDetails' -import { getPaymentAttributes } from '#utils/getPaymentAttributes' +import type { GatewayBaseType } from "#components/payment_gateways/PaymentGateway" +import CommerceLayerContext from "#context/CommerceLayerContext" +import CustomerContext from "#context/CustomerContext" +import OrderContext from "#context/OrderContext" +import PaymentMethodChildrenContext from "#context/PaymentMethodChildrenContext" +import PaymentMethodContext from "#context/PaymentMethodContext" +import PaymentSourceContext from "#context/PaymentSourceContext" +import type { PaymentResource } from "#reducers/PaymentMethodReducer" +import type { StripeElementLocale } from "@stripe/stripe-js" +import isEmpty from "lodash/isEmpty" +import { useContext, type JSX } from "react" +import AdyenPayment from "#components/payment_source/AdyenPayment" +import PaymentCardsTemplate from "../utils/PaymentCardsTemplate" +import { jwt } from "#utils/jwt" +import getCardDetails from "#utils/getCardDetails" +import { getPaymentAttributes } from "#utils/getPaymentAttributes" +import { hasSubscriptions } from "#utils/hasSubscriptions" type Props = GatewayBaseType @@ -35,23 +36,23 @@ export function AdyenGateway(props: Props): JSX.Element | null { const { payments, isGuest } = useContext(CustomerContext) const { currentPaymentMethodId, config, paymentSource } = useContext(PaymentMethodContext) - const paymentResource: PaymentResource = 'adyen_payments' + const paymentResource: PaymentResource = "adyen_payments" const locale = order?.language_code as StripeElementLocale if (!readonly && payment?.id !== currentPaymentMethodId) return null // @ts-expect-error no type const clientKey = paymentSource?.public_key - const environment = accessToken && jwt(accessToken).test ? 'test' : 'live' + const environment = accessToken && jwt(accessToken).test ? "test" : "live" const adyenConfig = getPaymentAttributes({ resource: paymentResource, config: config ?? {}, - keys: ['adyen_payments'] + keys: ["adyen_payments"], }) const paymentConfig = adyenConfig?.adyenPayment - const customerPayments = + let customerPayments = !isEmpty(payments) && payments ? payments.filter((customerPayment) => { return ( - customerPayment.payment_source?.type === 'adyen_payments' || + customerPayment.payment_source?.type === "adyen_payments" || customerPayment.payment_method != null ) }) @@ -59,9 +60,9 @@ export function AdyenGateway(props: Props): JSX.Element | null { if (readonly || showCard) { const card = getCardDetails({ customerPayment: { - payment_source: paymentSource + payment_source: paymentSource, }, - paymentType: paymentResource + paymentType: paymentResource, }) const value = { ...card, showCard, handleEditClick, readonly } return isEmpty(card) ? null : ( @@ -70,11 +71,18 @@ export function AdyenGateway(props: Props): JSX.Element | null { ) } - const hasStoredPaymentMethods = + let hasStoredPaymentMethods = // @ts-expect-error missing type paymentSource?.payment_methods?.storedPaymentMethods != null && // @ts-expect-error missing type paymentSource?.payment_methods?.storedPaymentMethods.length > 0 + if (order && hasSubscriptions(order)) { + /** + * When the order has subscriptions, we do not show stored payment methods + */ + hasStoredPaymentMethods = false + customerPayments = [] + } if (!isGuest && templateCustomerCards) { return ( <> diff --git a/packages/react-components/src/components/payment_source/AdyenPayment.tsx b/packages/react-components/src/components/payment_source/AdyenPayment.tsx index b85a9208..3eae33ce 100644 --- a/packages/react-components/src/components/payment_source/AdyenPayment.tsx +++ b/packages/react-components/src/components/payment_source/AdyenPayment.tsx @@ -228,10 +228,6 @@ export function AdyenPayment({ message?: string } > => { - let recurringProcessingModel = "CardOnFile" - if (order && hasSubscriptions(order)) { - recurringProcessingModel = "Subscription" - } const url = cleanUrlBy() const { type: currentPaymentMethodType } = state.data.paymentMethod const shopperIp = await getPublicIP() @@ -261,7 +257,6 @@ export function AdyenPayment({ redirect_from_issuer_method: "GET", shopper_ip: shopperIp, shopperInteraction: "Ecommerce", - recurringProcessingModel, browser_info: { ...browserInfo(), }, @@ -459,7 +454,7 @@ export function AdyenPayment({ } } - // biome-ignore lint/correctness/useExhaustiveDependencies: + // biome-ignore lint/correctness/useExhaustiveDependencies: Infite loop useEffect(() => { const paymentMethodsResponse = { // @ts-expect-error no type @@ -478,10 +473,12 @@ export function AdyenPayment({ "Payment methods are not available. Please, check your Adyen configuration.", ) } - const showStoredPaymentMethods = + let showStoredPaymentMethods = // @ts-expect-error no type paymentSource?.payment_methods?.storedPaymentMethods != null ?? false - + if (order && hasSubscriptions(order)) { + showStoredPaymentMethods = false + } const options = { locale: order?.language_code ?? locale, environment, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3eebb0fe..b23c23d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,7 +108,7 @@ importers: version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@storybook/react-vite': specifier: ^7.6.17 - version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -123,7 +123,7 @@ importers: version: 18.3.18 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) babel-loader: specifier: ^9.2.1 version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.18.20)) @@ -135,7 +135,7 @@ importers: version: 4.0.0 msw: specifier: ^2.7.0 - version: 2.7.3(@types/node@22.15.23)(typescript@5.8.3) + version: 2.7.3(@types/node@22.15.29)(typescript@5.8.3) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -156,10 +156,10 @@ importers: version: 5.8.3 vite: specifier: ^6.1.0 - version: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + version: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) packages/react-components: dependencies: @@ -185,8 +185,8 @@ importers: specifier: ^3.5.13 version: 3.5.13 braintree-web: - specifier: ^3.120.0 - version: 3.120.0 + specifier: ^3.120.2 + version: 3.120.2 frames-react: specifier: ^1.2.2 version: 1.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3) @@ -225,8 +225,8 @@ importers: specifier: ^4.17.17 version: 4.17.17 '@types/node': - specifier: ^22.15.23 - version: 22.15.23 + specifier: ^22.15.29 + version: 22.15.29 '@types/prop-types': specifier: ^15.7.14 version: 15.7.14 @@ -240,11 +240,11 @@ importers: specifier: ^1.8.8 version: 1.8.8 '@vitejs/plugin-react': - specifier: ^4.5.0 - version: 4.5.0(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + specifier: ^4.5.1 + version: 4.5.1(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) '@vitest/coverage-v8': - specifier: ^3.1.4 - version: 3.1.4(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0)) + specifier: ^3.2.1 + version: 3.2.1(vitest@3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0)) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -252,8 +252,8 @@ importers: specifier: ^1.4.0 version: 1.4.0 msw: - specifier: ^2.8.5 - version: 2.8.5(@types/node@22.15.23)(typescript@5.8.3) + specifier: ^2.9.0 + version: 2.9.0(@types/node@22.15.29)(typescript@5.8.3) react: specifier: ^18.3.1 version: 18.3.1 @@ -274,13 +274,13 @@ importers: version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + version: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) vitest: - specifier: ^3.1.4 - version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) + specifier: ^3.2.1 + version: 3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) packages: @@ -2513,6 +2513,9 @@ packages: '@types/braintree-web@3.96.17': resolution: {integrity: sha512-l+ujTICdA34gxov4AAsJLONNvYKbMyOYBnDU8syBhosCp/3IW2bJuZQEmUuOrliYeMmFm20ltQO9VHsRb8066g==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -2525,6 +2528,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/detect-port@1.3.5': resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==} @@ -2630,8 +2636,8 @@ packages: '@types/node@18.19.80': resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==} - '@types/node@22.15.23': - resolution: {integrity: sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==} + '@types/node@22.15.29': + resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2705,26 +2711,26 @@ packages: peerDependencies: vite: '>=4.5.2' - '@vitejs/plugin-react@4.5.0': - resolution: {integrity: sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==} + '@vitejs/plugin-react@4.5.1': + resolution: {integrity: sha512-uPZBqSI0YD4lpkIru6M35sIfylLGTyhGHvDZbNLuMA73lMlwJKz5xweH7FajfcCAc2HnINciejA9qTz0dr0M7A==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: '>=4.5.2' - '@vitest/coverage-v8@3.1.4': - resolution: {integrity: sha512-G4p6OtioySL+hPV7Y6JHlhpsODbJzt1ndwHAFkyk6vVjpK03PFsKnauZIzcd0PrK4zAbc5lc+jeZ+eNGiMA+iw==} + '@vitest/coverage-v8@3.2.1': + resolution: {integrity: sha512-6dy0uF/0BE3jpUW9bFzg0V2S4F7XVaZHL/7qma1XANvHPQGoJuc3wtx911zSoAgUnpfvcLVK1vancNJ95d+uxQ==} peerDependencies: - '@vitest/browser': 3.1.4 - vitest: 3.1.4 + '@vitest/browser': 3.2.1 + vitest: 3.2.1 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.1.4': - resolution: {integrity: sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==} + '@vitest/expect@3.2.1': + resolution: {integrity: sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==} - '@vitest/mocker@3.1.4': - resolution: {integrity: sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==} + '@vitest/mocker@3.2.1': + resolution: {integrity: sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==} peerDependencies: msw: ^2.4.9 vite: '>=5.1.7' @@ -2734,20 +2740,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.1.4': - resolution: {integrity: sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==} + '@vitest/pretty-format@3.2.1': + resolution: {integrity: sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==} - '@vitest/runner@3.1.4': - resolution: {integrity: sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==} + '@vitest/runner@3.2.1': + resolution: {integrity: sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==} - '@vitest/snapshot@3.1.4': - resolution: {integrity: sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==} + '@vitest/snapshot@3.2.1': + resolution: {integrity: sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==} - '@vitest/spy@3.1.4': - resolution: {integrity: sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==} + '@vitest/spy@3.2.1': + resolution: {integrity: sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==} - '@vitest/utils@3.1.4': - resolution: {integrity: sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==} + '@vitest/utils@3.2.1': + resolution: {integrity: sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2982,6 +2988,9 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + ast-v8-to-istanbul@0.3.3: + resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==} + async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} @@ -3078,8 +3087,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - braintree-web@3.120.0: - resolution: {integrity: sha512-iAQVpMllthfLdRXRl5gpsiKfNkhHw6EEfkNxwrdoikhs2iXRx7OQFY3VbJpUQUQjAmSV4ORsLwAwhaGw5qA88Q==} + braintree-web@3.120.2: + resolution: {integrity: sha512-GdA495PforvIDABd2OSRp1tXWiY2C/1GoD7bSV0yNHvzYbFL4JEWHcZay2/r1QKfcaTsPiP3EQ6YBKu2dW4j9g==} browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} @@ -3445,6 +3454,15 @@ packages: supports-color: optional: true + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} @@ -3672,9 +3690,6 @@ packages: es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -4543,6 +4558,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -5086,8 +5104,8 @@ packages: typescript: optional: true - msw@2.8.5: - resolution: {integrity: sha512-uSp82wwBjOBV+VIt4rtUgwrbNFCobZICSd2iexS4IMIwFxDexSojiwnrZF3TK6yxxUt1PBHZdsfOwuI9JzWphA==} + msw@2.9.0: + resolution: {integrity: sha512-fNyrJ11YNbe2zl64EwtxM5OFkInFPAw5vipOljMsf9lY2ep9B2BslqQrS8EC9pB9961K61FqTUi0wsdqk6hwow==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -6321,16 +6339,16 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinypool@1.1.0: + resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} tldts-core@6.1.84: @@ -6638,8 +6656,8 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vite-node@3.1.4: - resolution: {integrity: sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==} + vite-node@3.2.1: + resolution: {integrity: sha512-V4EyKQPxquurNJPtQJRZo8hKOoKNBRIhxcDbQFPFig0JdoWcUhwRgK8yoCXXrfYVPKS6XwirGHPszLnR8FbjCA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -6731,16 +6749,16 @@ packages: yaml: optional: true - vitest@3.1.4: - resolution: {integrity: sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==} + vitest@3.2.1: + resolution: {integrity: sha512-VZ40MBnlE1/V5uTgdqY3DmjUgZtIzsYq758JGlyQrv5syIsaYcabkfPkEuWML49Ph0D/SoqpVFd0dyVTr551oA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.4 - '@vitest/ui': 3.1.4 + '@vitest/browser': 3.2.1 + '@vitest/ui': 3.2.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -7987,17 +8005,17 @@ snapshots: '@hutson/parse-repository-url@3.0.2': {} - '@inquirer/confirm@5.1.8(@types/node@22.15.23)': + '@inquirer/confirm@5.1.8(@types/node@22.15.29)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.15.23) - '@inquirer/type': 3.0.5(@types/node@22.15.23) + '@inquirer/core': 10.1.9(@types/node@22.15.29) + '@inquirer/type': 3.0.5(@types/node@22.15.29) optionalDependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 - '@inquirer/core@10.1.9(@types/node@22.15.23)': + '@inquirer/core@10.1.9(@types/node@22.15.29)': dependencies: '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.15.23) + '@inquirer/type': 3.0.5(@types/node@22.15.29) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -8005,13 +8023,13 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@inquirer/figures@1.0.11': {} - '@inquirer/type@3.0.5(@types/node@22.15.23)': + '@inquirer/type@3.0.5(@types/node@22.15.29)': optionalDependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@isaacs/cliui@8.0.2': dependencies: @@ -8062,7 +8080,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -8071,17 +8089,17 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.8.3) - vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.3 @@ -9169,7 +9187,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 @@ -9187,7 +9205,7 @@ snapshots: fs-extra: 11.3.0 magic-string: 0.30.17 rollup: 3.29.5 - vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -9535,18 +9553,18 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.35.0) - '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) '@storybook/react': 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@vitejs/plugin-react': 3.1.0(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) + '@vitejs/plugin-react': 3.1.0(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.1 react-dom: 18.3.1(react@18.3.1) - vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -9741,27 +9759,33 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/braintree-web@3.96.17': dependencies: '@types/googlepay': 0.7.6 '@types/paypal-checkout-components': 4.0.8 + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/cookie@0.6.0': {} '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} + '@types/detect-port@1.3.5': {} '@types/doctrine@0.0.3': {} @@ -9790,7 +9814,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -9807,13 +9831,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/googlepay@0.7.6': {} '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/http-errors@2.0.4': {} @@ -9857,14 +9881,14 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 form-data: 4.0.2 '@types/node@18.19.80': dependencies: undici-types: 5.26.5 - '@types/node@22.15.23': + '@types/node@22.15.29': dependencies: undici-types: 6.21.0 @@ -9900,12 +9924,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/send': 0.17.4 '@types/statuses@2.0.5': {} @@ -9926,29 +9950,29 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitejs/plugin-react@3.1.0(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@3.1.0(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.5.0(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@4.5.1(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) @@ -9956,15 +9980,16 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.9 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.1.4(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0))': + '@vitest/coverage-v8@3.2.1(vitest@3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - debug: 4.4.0 + ast-v8-to-istanbul: 0.3.3 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -9974,48 +9999,49 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) + vitest: 3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.1.4': + '@vitest/expect@3.2.1': dependencies: - '@vitest/spy': 3.1.4 - '@vitest/utils': 3.1.4 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.1 + '@vitest/utils': 3.2.1 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.4(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0))': + '@vitest/mocker@3.2.1(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.1.4 + '@vitest/spy': 3.2.1 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.8.5(@types/node@22.15.23)(typescript@5.8.3) - vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + msw: 2.9.0(@types/node@22.15.29)(typescript@5.8.3) + vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) - '@vitest/pretty-format@3.1.4': + '@vitest/pretty-format@3.2.1': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.4': + '@vitest/runner@3.2.1': dependencies: - '@vitest/utils': 3.1.4 + '@vitest/utils': 3.2.1 pathe: 2.0.3 - '@vitest/snapshot@3.1.4': + '@vitest/snapshot@3.2.1': dependencies: - '@vitest/pretty-format': 3.1.4 + '@vitest/pretty-format': 3.2.1 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.4': + '@vitest/spy@3.2.1': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.3 - '@vitest/utils@3.1.4': + '@vitest/utils@3.2.1': dependencies: - '@vitest/pretty-format': 3.1.4 + '@vitest/pretty-format': 3.2.1 loupe: 3.1.3 tinyrainbow: 2.0.0 @@ -10252,6 +10278,12 @@ snapshots: dependencies: tslib: 2.8.1 + ast-v8-to-istanbul@0.3.3: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + estree-walker: 3.0.3 + js-tokens: 9.0.1 + async-limiter@1.0.1: {} async@3.2.6: {} @@ -10378,7 +10410,7 @@ snapshots: dependencies: fill-range: 7.1.1 - braintree-web@3.120.0: + braintree-web@3.120.2: dependencies: '@braintree/asset-loader': 2.0.2 '@braintree/browser-detection': 2.0.2 @@ -10763,6 +10795,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.1: + dependencies: + ms: 2.1.3 + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 @@ -10980,8 +11016,6 @@ snapshots: es-module-lexer@0.9.3: {} - es-module-lexer@1.6.0: {} - es-module-lexer@1.7.0: {} es-object-atoms@1.1.1: @@ -11887,7 +11921,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -11923,7 +11957,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.15.23 + '@types/node': 22.15.29 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11938,14 +11972,14 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 22.15.23 + '@types/node': 22.15.29 jest-regex-util@29.6.3: {} jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.23 + '@types/node': 22.15.29 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11953,13 +11987,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -11968,6 +12002,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -12769,12 +12805,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.3(@types/node@22.15.23)(typescript@5.8.3): + msw@2.7.3(@types/node@22.15.29)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.8(@types/node@22.15.23) + '@inquirer/confirm': 5.1.8(@types/node@22.15.29) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -12794,12 +12830,12 @@ snapshots: transitivePeerDependencies: - '@types/node' - msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3): + msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.8(@types/node@22.15.23) + '@inquirer/confirm': 5.1.8(@types/node@22.15.29) '@mswjs/interceptors': 0.38.7 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -14174,11 +14210,11 @@ snapshots: fdir: 6.4.5(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.0.2: {} + tinypool@1.1.0: {} tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.3: {} tldts-core@6.1.84: {} @@ -14453,13 +14489,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@3.1.4(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0): + vite-node@3.2.1(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -14474,40 +14510,40 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.8.3) optionalDependencies: - vite: 6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.8.3) optionalDependencies: - vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@6.2.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0): + vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.1 postcss: 8.5.3 rollup: 4.35.0 optionalDependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 fsevents: 2.3.3 terser: 5.39.0 yaml: 2.7.0 - vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0): + vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.1 fdir: 6.4.5(picomatch@4.0.2) @@ -14516,37 +14552,39 @@ snapshots: rollup: 4.35.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 fsevents: 2.3.3 terser: 5.39.0 yaml: 2.7.0 - vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.23)(jsdom@26.1.0)(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0): + vitest@3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.1.4 - '@vitest/mocker': 3.1.4(msw@2.8.5(@types/node@22.15.23)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0)) - '@vitest/pretty-format': 3.1.4 - '@vitest/runner': 3.1.4 - '@vitest/snapshot': 3.1.4 - '@vitest/spy': 3.1.4 - '@vitest/utils': 3.1.4 + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.1 + '@vitest/mocker': 3.2.1(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + '@vitest/pretty-format': 3.2.1 + '@vitest/runner': 3.2.1 + '@vitest/snapshot': 3.2.1 + '@vitest/spy': 3.2.1 + '@vitest/utils': 3.2.1 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 + picomatch: 4.0.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 - tinypool: 1.0.2 + tinypool: 1.1.0 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) - vite-node: 3.1.4(@types/node@22.15.23)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite-node: 3.2.1(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.23 + '@types/node': 22.15.29 jsdom: 26.1.0 transitivePeerDependencies: - jiti @@ -14600,7 +14638,7 @@ snapshots: browserslist: 4.24.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.1 - es-module-lexer: 1.6.0 + es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 From bc1bc5be105ee38fda7b581ff6a21a80aa911c83 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 4 Jun 2025 12:12:26 +0200 Subject: [PATCH 022/292] v4.24.0-beta.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 0de53e4f..18ba4053 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.23.4", + "version": "4.24.0-beta.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 0412bd1c..27b4cc42 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.23.4", + "version": "4.24.0-beta.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 750a5ee6b165d139ef2963dc2b8fb80e568353f4 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 5 Jun 2025 11:52:39 +0200 Subject: [PATCH 023/292] Reset Adyen stored payments when the order has a subscription --- .../src/components/payment_source/AdyenPayment.tsx | 8 ++++++++ .../components/payment_source/CheckoutComPayment.tsx | 12 ++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/react-components/src/components/payment_source/AdyenPayment.tsx b/packages/react-components/src/components/payment_source/AdyenPayment.tsx index 3eae33ce..5502f14d 100644 --- a/packages/react-components/src/components/payment_source/AdyenPayment.tsx +++ b/packages/react-components/src/components/payment_source/AdyenPayment.tsx @@ -477,7 +477,15 @@ export function AdyenPayment({ // @ts-expect-error no type paymentSource?.payment_methods?.storedPaymentMethods != null ?? false if (order && hasSubscriptions(order)) { + /** + * If the order has subscriptions, we don't show stored payment methods + */ showStoredPaymentMethods = false + /** + * Need to reset stored payment methods + * to avoid showing them when the order has subscriptions + */ + paymentMethodsResponse.storedPaymentMethods = [] } const options = { locale: order?.language_code ?? locale, diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 6e3a76d7..0fabfb02 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -209,12 +209,12 @@ export function CheckoutComPayment({ // console.log("paymentSource", { paymentSource }) // }, } satisfies CheckoutWebComponent) - // const flowComponent = checkout.create("flow") - const flowComponent = checkout.create("card") - if (await flowComponent.isAvailable()) { - flowComponent.mount(document.getElementById("flow-container")) - } - // flowComponent.mount(document.getElementById("flow-container")) + const flowComponent = checkout.create("flow") + // const flowComponent = checkout.create("card") + // if (await flowComponent.isAvailable()) { + // flowComponent.mount(document.getElementById("flow-container")) + // } + flowComponent.mount(document.getElementById("flow-container")) } loadFlow() } From d416cd5837b459f1176995ea48472ceb16de9b86 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 5 Jun 2025 11:53:03 +0200 Subject: [PATCH 024/292] v4.24.0-beta.1 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 18ba4053..cfa06e78 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.0-beta.0", + "version": "4.24.0-beta.1", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 27b4cc42..064fea9a 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.0-beta.0", + "version": "4.24.0-beta.1", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 624852fec21e660584059b217511437f0ffd6f53 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 5 Jun 2025 17:07:15 +0200 Subject: [PATCH 025/292] Add subscriptionPaymentMethods prop to filter available payment methods when there is a subscription order --- .../payment_source/AdyenPayment.tsx | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/react-components/src/components/payment_source/AdyenPayment.tsx b/packages/react-components/src/components/payment_source/AdyenPayment.tsx index 5502f14d..0069f22e 100644 --- a/packages/react-components/src/components/payment_source/AdyenPayment.tsx +++ b/packages/react-components/src/components/payment_source/AdyenPayment.tsx @@ -37,10 +37,26 @@ interface PaymentMethodsStyle { paypal?: PayPalConfiguration["style"] } +type PaymentMethodType = + | "scheme" + | "giftcard" + | "paypal" + | "applepay" + | "googlepay" + | (string & {}) + /** * Configuration options for the Adyen payment component. */ export interface AdyenPaymentConfig { + /** + * Payment methods to be used for subscriptions. + * This is an array of payment method types that are supported for subscription payments. + * For example, it can include "scheme" for card payments. + * @default all available payment methods + * @example ["scheme"] + */ + subscriptionPaymentMethods?: PaymentMethodType[] /** * Optional CSS class name for the card container. */ @@ -115,6 +131,7 @@ export function AdyenPayment({ giftcardErrorComponent, onReady, onSelect, + subscriptionPaymentMethods, } = { ...defaultConfig, ...config, @@ -486,6 +503,18 @@ export function AdyenPayment({ * to avoid showing them when the order has subscriptions */ paymentMethodsResponse.storedPaymentMethods = [] + /** + * Remove scheme payment methods + * because they are not supported in subscriptions + */ + paymentMethodsResponse.paymentMethods = + subscriptionPaymentMethods != null && + subscriptionPaymentMethods.length > 0 + ? paymentMethodsResponse.paymentMethods.filter( + (pm: { type: "scheme" }) => + subscriptionPaymentMethods.includes(pm.type), + ) + : paymentMethodsResponse.paymentMethods } const options = { locale: order?.language_code ?? locale, From a0e8ab63ca30b523ddb5f353b8e591785ac8c294 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 5 Jun 2025 17:12:02 +0200 Subject: [PATCH 026/292] v4.24.0-beta.2 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index cfa06e78..b1bafd69 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.0-beta.1", + "version": "4.24.0-beta.2", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 064fea9a..ea54a22c 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.0-beta.1", + "version": "4.24.0-beta.2", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From ffc1ae24af3150ca1ac5a3b8554e23309ca1ee27 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 6 Jun 2025 11:18:20 +0200 Subject: [PATCH 027/292] Fix types --- .../src/components/payment_source/AdyenPayment.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-components/src/components/payment_source/AdyenPayment.tsx b/packages/react-components/src/components/payment_source/AdyenPayment.tsx index 0069f22e..8cc9af3c 100644 --- a/packages/react-components/src/components/payment_source/AdyenPayment.tsx +++ b/packages/react-components/src/components/payment_source/AdyenPayment.tsx @@ -471,7 +471,7 @@ export function AdyenPayment({ } } - // biome-ignore lint/correctness/useExhaustiveDependencies: Infite loop + // biome-ignore lint/correctness/useExhaustiveDependencies: Infinite loop useEffect(() => { const paymentMethodsResponse = { // @ts-expect-error no type @@ -511,7 +511,7 @@ export function AdyenPayment({ subscriptionPaymentMethods != null && subscriptionPaymentMethods.length > 0 ? paymentMethodsResponse.paymentMethods.filter( - (pm: { type: "scheme" }) => + (pm: { type: PaymentMethodType }) => subscriptionPaymentMethods.includes(pm.type), ) : paymentMethodsResponse.paymentMethods From bdc41332006d8ab7388b70751fd690473e0b0096 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 6 Jun 2025 15:36:08 +0200 Subject: [PATCH 028/292] v4.24.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index b1bafd69..c05a3a78 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.0-beta.2", + "version": "4.24.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index ea54a22c..a65af028 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.0-beta.2", + "version": "4.24.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 6a734f5e7043ee79e9574f219858f7f6901b3904 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 6 Jun 2025 11:07:12 +0200 Subject: [PATCH 029/292] Show all payment methods available --- .../payment_source/CheckoutComPayment.tsx | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 0fabfb02..d1333e93 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -192,28 +192,24 @@ export function CheckoutComPayment({ onError: (component, error) => { console.error("onError", { error }, "Component", component.type) }, - // onPaymentCompleted: async (component, paymentResponse) => { - // console.log("onPaymentCompleted -----", { - // paymentResponse, - // component, - // ps, - // }) - // const paymentSource = await setPaymentSource({ - // paymentSourceId: ps.id, - // paymentResource: "checkout_com_payments", - // attributes: { - // token: paymentResponse.id, - // _authorize: true, - // }, - // }) - // console.log("paymentSource", { paymentSource }) - // }, + onPaymentCompleted: async (component, paymentResponse) => { + console.log("onPaymentCompleted -----", { + paymentResponse, + component, + ps, + }) + // const paymentSource = await setPaymentSource({ + // paymentSourceId: ps.id, + // paymentResource: "checkout_com_payments", + // attributes: { + // token: paymentResponse.id, + // _authorize: true, + // }, + // }) + // console.log("paymentSource", { paymentSource }) + }, } satisfies CheckoutWebComponent) const flowComponent = checkout.create("flow") - // const flowComponent = checkout.create("card") - // if (await flowComponent.isAvailable()) { - // flowComponent.mount(document.getElementById("flow-container")) - // } flowComponent.mount(document.getElementById("flow-container")) } loadFlow() From 21df01ada5ce6d0e194d0bd7d3ed9991fe5abd90 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 12 Jun 2025 11:19:58 +0200 Subject: [PATCH 030/292] Fix avoid place order in draft, and express payments by CKO --- .../components/orders/PlaceOrderButton.tsx | 40 ++++++++++++++++++- .../payment_source/CheckoutComPayment.tsx | 33 +++++++-------- .../payment_source/StripePayment.tsx | 8 ++++ .../src/reducers/PlaceOrderReducer.ts | 6 ++- 4 files changed, 68 insertions(+), 19 deletions(-) diff --git a/packages/react-components/src/components/orders/PlaceOrderButton.tsx b/packages/react-components/src/components/orders/PlaceOrderButton.tsx index edb57cff..867eb542 100644 --- a/packages/react-components/src/components/orders/PlaceOrderButton.tsx +++ b/packages/react-components/src/components/orders/PlaceOrderButton.tsx @@ -332,13 +332,51 @@ export function PlaceOrderButton(props: Props): JSX.Element { }) } } - }, [options?.checkoutCom, paymentType, order?.payment_source?.id]) + if ( + paymentType === "checkout_com_payments" && + order?.status && + status && + ["pending"].includes(order?.status) && + ["placing"].includes(status) && + autoPlaceOrder + ) { + /** + * Place order with Checkout.com using express payments + */ + const paymentSourceStatus = + // @ts-expect-error no type + order?.payment_source?.payment_response?.status.toLowerCase() + if (["captured", "authorized"].includes(paymentSourceStatus)) { + setPlaceOrder?.({ + paymentSource, + }).then((placed) => { + if (placed?.placed) { + onClick?.(placed) + setPlaceOrderStatus?.({ status: "placing" }) + } else { + setPlaceOrderStatus?.({ status: "standby" }) + } + }) + } + } + }, [options?.checkoutCom, paymentType, order?.payment_source?.id, status]) // biome-ignore lint/correctness/useExhaustiveDependencies: Need to test useEffect(() => { if (ref?.current != null && setButtonRef != null) { setButtonRef(ref) } }, [ref]) + useEffect(() => { + switch (status) { + case "disabled": + case "placing": + setNotPermitted(true) + break + default: + setNotPermitted(false) + break + } + }, [status]) const handleClick = async ( e?: MouseEvent, ): Promise => { diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index d1333e93..8293d205 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -8,6 +8,7 @@ import { jwt } from "#utils/jwt" import CommerceLayerContext from "#context/CommerceLayerContext" import PaymentMethodContext from "#context/PaymentMethodContext" import { setCustomerOrderParam } from "#utils/localStorage" +import PlaceOrderContext from "#context/PlaceOrderContext" const scriptUrl = "https://checkout-web-components.checkout.com/index.js" @@ -110,7 +111,7 @@ export function CheckoutComPayment({ const { setPaymentRef, setPaymentSource } = useContext(PaymentMethodContext) const { accessToken } = useContext(CommerceLayerContext) const { order } = useContext(OrderContext) - // const { setPlaceOrder } = useContext(PlaceOrderContext) + const { setPlaceOrderStatus } = useContext(PlaceOrderContext) const { containerClassName, templateCustomerSaveToWallet, @@ -192,21 +193,21 @@ export function CheckoutComPayment({ onError: (component, error) => { console.error("onError", { error }, "Component", component.type) }, - onPaymentCompleted: async (component, paymentResponse) => { - console.log("onPaymentCompleted -----", { - paymentResponse, - component, - ps, - }) - // const paymentSource = await setPaymentSource({ - // paymentSourceId: ps.id, - // paymentResource: "checkout_com_payments", - // attributes: { - // token: paymentResponse.id, - // _authorize: true, - // }, - // }) - // console.log("paymentSource", { paymentSource }) + onPaymentCompleted: async (_component, paymentResponse) => { + if (paymentResponse.status.toLowerCase() === "approved") { + const paymentSource = await setPaymentSource({ + paymentSourceId: ps.id, + paymentResource: "checkout_com_payments", + attributes: { + token: paymentResponse.id, + _authorize: true, + }, + }) + setPlaceOrderStatus?.({ + status: "placing", + }) + console.log("Payment source set", paymentSource) + } }, } satisfies CheckoutWebComponent) const flowComponent = checkout.create("flow") diff --git a/packages/react-components/src/components/payment_source/StripePayment.tsx b/packages/react-components/src/components/payment_source/StripePayment.tsx index 33621a5d..8609ad79 100644 --- a/packages/react-components/src/components/payment_source/StripePayment.tsx +++ b/packages/react-components/src/components/payment_source/StripePayment.tsx @@ -17,6 +17,7 @@ import { setCustomerOrderParam } from "#utils/localStorage" import OrderContext from "#context/OrderContext" import { StripeExpressPayment } from "./StripeExpressPayment" import useCommerceLayer from "#hooks/useCommerceLayer" +import PlaceOrderContext from "#context/PlaceOrderContext" export interface StripeConfig { containerClassName?: string @@ -68,6 +69,7 @@ function StripePaymentForm({ useContext(PaymentMethodContext) const { order, setOrderErrors } = useContext(OrderContext) const { sdkClient } = useCommerceLayer() + const { setPlaceOrderStatus } = useContext(PlaceOrderContext) const elements = useElements() // biome-ignore lint/correctness/useExhaustiveDependencies: Avoid rerendering the form useEffect(() => { @@ -166,6 +168,9 @@ function StripePaymentForm({ message: "Draft order cannot be placed", }, ]) + setPlaceOrderStatus?.({ + status: "disabled", + }) return } } @@ -231,6 +236,9 @@ export function StripePayment({ if (res != null) { setStripe(res) setIsLoaded(true) + } else { + console.error("Stripe failed to load") + setIsLoaded(false) } } getStripe() diff --git a/packages/react-components/src/reducers/PlaceOrderReducer.ts b/packages/react-components/src/reducers/PlaceOrderReducer.ts index 7ca66323..cf0d3acf 100644 --- a/packages/react-components/src/reducers/PlaceOrderReducer.ts +++ b/packages/react-components/src/reducers/PlaceOrderReducer.ts @@ -44,6 +44,8 @@ export interface PlaceOrderOptions { } } +type PlaceOrderStatus = "placing" | "standby" | "disabled" + export interface PlaceOrderActionPayload { errors: BaseError[] isPermitted: boolean @@ -53,7 +55,7 @@ export interface PlaceOrderActionPayload { paymentSource: PaymentSourceType options?: PlaceOrderOptions placeOrderButtonRef?: RefObject - status: "placing" | "standby" + status: PlaceOrderStatus } export function setButtonRef( @@ -327,7 +329,7 @@ export function setPlaceOrderStatus({ status, dispatch, }: { - status: "placing" | "standby" + status: PlaceOrderStatus dispatch?: Dispatch }): void { if (dispatch != null) { From 10f8c23bbd55343568a91c2e869ac80905aa9fc8 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 12 Jun 2025 11:22:25 +0200 Subject: [PATCH 031/292] v4.24.1-beta.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index c05a3a78..8c581ba8 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.0", + "version": "4.24.1-beta.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index a65af028..80d441a9 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.0", + "version": "4.24.1-beta.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From d82b4e1f3c0ae264b6787a9a1947310723788392 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 16 Jun 2025 10:41:45 +0200 Subject: [PATCH 032/292] Fix loading card info --- .../gift_cards/GiftCardOrCouponSubmit.tsx | 38 +++++++-- .../PaymentMethodsContainer.tsx | 81 ++++++++++--------- 2 files changed, 71 insertions(+), 48 deletions(-) diff --git a/packages/react-components/src/components/gift_cards/GiftCardOrCouponSubmit.tsx b/packages/react-components/src/components/gift_cards/GiftCardOrCouponSubmit.tsx index 150ae5ce..575ccedb 100644 --- a/packages/react-components/src/components/gift_cards/GiftCardOrCouponSubmit.tsx +++ b/packages/react-components/src/components/gift_cards/GiftCardOrCouponSubmit.tsx @@ -1,24 +1,46 @@ -import type { ReactNode, JSX } from 'react'; -import Parent from '#components/utils/Parent' -import type { ChildrenFunction } from '#typings/index' +import type { ReactNode, JSX } from "react" +import Parent from "#components/utils/Parent" +import type { ChildrenFunction } from "#typings/index" +// import { useState, useEffect, useContext } from "react" +// import OrderContext from "#context/OrderContext" -interface ChildrenProps extends Omit {} +interface ChildrenProps extends Omit {} -interface Props extends Omit { +interface Props extends Omit { children?: ChildrenFunction label?: string | ReactNode } export function GiftCardOrCouponSubmit(props: Props): JSX.Element { - const { children, label = 'Submit', ...p } = props + const { children, label = "Submit", ...p } = props + // const [disabled, setDisabled] = useState(false) + // const { order } = useContext(OrderContext) + // useEffect(() => { + // console.log("GiftCardOrCouponSubmit: useEffect triggered", { order }) + // if (order?.payment_source?.id != null) { + // /** + // * If the order has a payment source ID, it means that the user has already + // * entered their payment information and the user cannot add a gift card or coupon + // * code at this point. + // */ + // setDisabled(true) + // console.log( + // "GiftCardOrCouponSubmit: The order has a payment source ID, disabling the button.", + // ) + // } + // return () => { + // setDisabled(false) + // } + // }, [order?.payment_source?.id]) + // p.disabled = disabled const parentProps = { ...p, - label + label, } return children ? ( {children} ) : ( - ) diff --git a/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx b/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx index a65a5f27..5ce02443 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx @@ -1,29 +1,29 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ import PaymentMethodContext, { - defaultPaymentMethodContext -} from '#context/PaymentMethodContext' + defaultPaymentMethodContext, +} from "#context/PaymentMethodContext" import { type ReactNode, useContext, useEffect, useReducer, useMemo, - type JSX -} from 'react' + type JSX, +} from "react" import paymentMethodReducer, { paymentMethodInitialState, getPaymentMethods, type PaymentMethodConfig, setPaymentMethodConfig, type PaymentRef, - setPaymentRef -} from '#reducers/PaymentMethodReducer' -import OrderContext from '#context/OrderContext' -import CommerceLayerContext from '#context/CommerceLayerContext' -import type { BaseError } from '#typings/errors' -import useCustomContext from '#utils/hooks/useCustomContext' -import { isEmpty } from '#utils/isEmpty' -import { setCustomerOrderParam } from '#utils/localStorage' + setPaymentRef, +} from "#reducers/PaymentMethodReducer" +import OrderContext from "#context/OrderContext" +import CommerceLayerContext from "#context/CommerceLayerContext" +import type { BaseError } from "#typings/errors" +import useCustomContext from "#utils/hooks/useCustomContext" +import { isEmpty } from "#utils/isEmpty" +import { setCustomerOrderParam } from "#utils/localStorage" interface Props { children: ReactNode @@ -33,7 +33,7 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { const { children, config } = props const [state, dispatch] = useReducer( paymentMethodReducer, - paymentMethodInitialState + paymentMethodInitialState, ) const { order, @@ -42,27 +42,27 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { include, addResourceToInclude, updateOrder, - includeLoaded + includeLoaded, } = useCustomContext({ context: OrderContext, - contextComponentName: 'OrderContainer', - currentComponentName: 'PaymentMethodsContainer', - key: 'order' + contextComponentName: "OrderContainer", + currentComponentName: "PaymentMethodsContainer", + key: "order", }) const credentials = useContext(CommerceLayerContext) async function getPayMethods(): Promise { order && (await getPaymentMethods({ order, dispatch })) } useEffect(() => { - if (!include?.includes('available_payment_methods')) { + if (!include?.includes("available_payment_methods")) { addResourceToInclude({ newResource: [ - 'available_payment_methods', - 'payment_source', - 'payment_method', - 'line_items.line_item_options.sku_option', - 'line_items.item' - ] + "available_payment_methods", + "payment_source", + "payment_method", + "line_items.line_item_options.sku_option", + "line_items.item", + ], }) } else if (!includeLoaded?.available_payment_methods) { addResourceToInclude({ @@ -70,9 +70,9 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { available_payment_methods: true, payment_source: true, payment_method: true, - 'line_items.line_item_options.sku_option': true, - 'line_items.item': true - } + "line_items.line_item_options.sku_option": true, + "line_items.item": true, + }, }) } if (config && isEmpty(state.config)) @@ -82,27 +82,28 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { } if (order?.payment_source) { dispatch({ - type: 'setPaymentSource', + type: "setPaymentSource", payload: { - paymentSource: order?.payment_source - } + paymentSource: order?.payment_source, + }, }) } if (order?.payment_source === null) { // Reset save customer payment source to wallet param if the payment source is null - setCustomerOrderParam('_save_payment_source_to_customer_wallet', 'false') + setCustomerOrderParam("_save_payment_source_to_customer_wallet", "false") dispatch({ - type: 'setPaymentSource', + type: "setPaymentSource", payload: { - paymentSource: undefined - } + paymentSource: undefined, + }, }) } }, [ order, + order?.payment_source, credentials, include?.length, - Object.keys(includeLoaded ?? []).length + Object.keys(includeLoaded ?? []).length, ]) const contextValue = useMemo(() => { return { @@ -123,7 +124,7 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { updateOrder, order, dispatch, - setOrderErrors + setOrderErrors, }), setPaymentSource: async (args: any) => await defaultPaymentMethodContext.setPaymentSource({ @@ -133,13 +134,13 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { dispatch, getOrder, updateOrder, - order + order, }), updatePaymentSource: async (args: any) => { await defaultPaymentMethodContext.updatePaymentSource({ ...args, config: credentials, - dispatch + dispatch, }) }, destroyPaymentSource: async (args: any) => { @@ -148,9 +149,9 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { dispatch, config: credentials, updateOrder, - orderId: order?.id + orderId: order?.id, }) - } + }, } }, [state]) return ( From 4e520686a1f88db588725b182dd818bee39b974e Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 16 Jun 2025 10:50:51 +0200 Subject: [PATCH 033/292] v4.24.1-beta.1 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 8c581ba8..2b19dcb6 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.1-beta.0", + "version": "4.24.1-beta.1", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 80d441a9..ff55e350 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.1-beta.0", + "version": "4.24.1-beta.1", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 9707803681eb1475b19b57a8554c59dfd2180aff Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 16 Jun 2025 16:59:42 +0200 Subject: [PATCH 034/292] Fix loading card info --- .../payment_methods/PaymentMethodsContainer.tsx | 17 ++++++++--------- .../payment_source/CheckoutComPayment.tsx | 1 - 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx b/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx index 5ce02443..abd255ad 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx @@ -80,14 +80,6 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { if (credentials && order && !state.paymentMethods) { getPayMethods() } - if (order?.payment_source) { - dispatch({ - type: "setPaymentSource", - payload: { - paymentSource: order?.payment_source, - }, - }) - } if (order?.payment_source === null) { // Reset save customer payment source to wallet param if the payment source is null setCustomerOrderParam("_save_payment_source_to_customer_wallet", "false") @@ -98,9 +90,16 @@ export function PaymentMethodsContainer(props: Props): JSX.Element { }, }) } + if ( + order?.id && + order?.payment_source == null && + !["draft", "pending"].includes(order?.status) && + !state.paymentMethods + ) { + getOrder(order.id) + } }, [ order, - order?.payment_source, credentials, include?.length, Object.keys(includeLoaded ?? []).length, diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 8293d205..44fe110e 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -206,7 +206,6 @@ export function CheckoutComPayment({ setPlaceOrderStatus?.({ status: "placing", }) - console.log("Payment source set", paymentSource) } }, } satisfies CheckoutWebComponent) From 3c3aa74c40c47d1b156d0d84baeb6a7a539e8e01 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 16 Jun 2025 17:01:35 +0200 Subject: [PATCH 035/292] v4.24.1-beta.2 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 2b19dcb6..8eb4f80f 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.1-beta.1", + "version": "4.24.1-beta.2", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index ff55e350..7b1bb529 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.1-beta.1", + "version": "4.24.1-beta.2", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 3f6a4f0bc3d5e7ab314f2b2450c4a2f9fece4e8b Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 16 Jun 2025 17:06:11 +0200 Subject: [PATCH 036/292] Fix unused variable --- .../src/components/payment_source/CheckoutComPayment.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx index 44fe110e..7f0dd3a1 100644 --- a/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx +++ b/packages/react-components/src/components/payment_source/CheckoutComPayment.tsx @@ -195,7 +195,7 @@ export function CheckoutComPayment({ }, onPaymentCompleted: async (_component, paymentResponse) => { if (paymentResponse.status.toLowerCase() === "approved") { - const paymentSource = await setPaymentSource({ + await setPaymentSource({ paymentSourceId: ps.id, paymentResource: "checkout_com_payments", attributes: { From 93ae307399d4699a906887f6b6c0206adcfea696 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 16 Jun 2025 17:06:32 +0200 Subject: [PATCH 037/292] v4.24.1-beta.3 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 8eb4f80f..dee9e11b 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.1-beta.2", + "version": "4.24.1-beta.3", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 7b1bb529..ecd5f0f9 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.1-beta.2", + "version": "4.24.1-beta.3", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 3d0eea592991899e245d641faa94d6684dacf496 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 20 Jun 2025 15:50:20 +0200 Subject: [PATCH 038/292] Fix autoselect payment method with CKO. Resolve #645 --- .../src/components/payment_methods/PaymentMethod.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx index 0881b7d0..3780553c 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx @@ -19,6 +19,7 @@ import type { DefaultChildrenType } from "#typings/globals" import OrderContext from "#context/OrderContext" import CustomerContext from "#context/CustomerContext" import { + getCkoAttributes, getExternalPaymentAttributes, getPaypalAttributes, } from "#utils/getPaymentAttributes" @@ -163,6 +164,12 @@ export function PaymentMethod({ config, ) } + if ( + config != null && + paymentResource === "checkout_com_payments" + ) { + attributes = getCkoAttributes(paymentResource, config) + } const ps = await setPaymentSource({ paymentResource, order, From 5e8dbd07a2105be19cc058a97ef65f9ae244dbda Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 20 Jun 2025 15:50:58 +0200 Subject: [PATCH 039/292] Update deps --- package.json | 10 +- pnpm-lock.yaml | 1166 ++++++++++++++++++++++++------------------------ 2 files changed, 597 insertions(+), 579 deletions(-) diff --git a/package.json b/package.json index 1f2d1a73..85a1cc17 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "dep:minor": "pnpm dep:major -t minor -i" }, "devDependencies": { - "@biomejs/biome": "1.9.4", + "@biomejs/biome": "2.0.0", "husky": "^9.1.7", "lerna": "^8.2.2", "typescript": "^5.8.3" @@ -41,7 +41,13 @@ "ws@>=8.0.0 <8.17.1": ">=8.17.1", "micromatch@<4.0.8": ">=4.0.8", "rollup@>=4.0.0 <4.22.4": ">=4.22.4", - "cross-spawn@>=7.0.0 <7.0.5": ">=7.0.5" + "cross-spawn@>=7.0.0 <7.0.5": ">=7.0.5", + "esbuild@<=0.24.2": ">=0.25.0", + "vite@>=6.2.0 <6.2.6": ">=6.2.6", + "vite@>=6.2.0 <=6.2.6": ">=6.2.7", + "tar-fs@>=2.0.0 <2.1.3": ">=2.1.3", + "brace-expansion@>=1.0.0 <=1.1.11": ">=1.1.12", + "brace-expansion@>=2.0.0 <=2.0.1": ">=2.0.2" }, "onlyBuiltDependencies": [ "@biomejs/biome", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b23c23d5..8f5220fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,14 +20,20 @@ overrides: micromatch@<4.0.8: '>=4.0.8' rollup@>=4.0.0 <4.22.4: '>=4.22.4' cross-spawn@>=7.0.0 <7.0.5: '>=7.0.5' + esbuild@<=0.24.2: '>=0.25.0' + vite@>=6.2.0 <6.2.6: '>=6.2.6' + vite@>=6.2.0 <=6.2.6: '>=6.2.7' + tar-fs@>=2.0.0 <2.1.3: '>=2.1.3' + brace-expansion@>=1.0.0 <=1.1.11: '>=1.1.12' + brace-expansion@>=2.0.0 <=2.0.1: '>=2.0.2' importers: .: devDependencies: '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 + specifier: 2.0.0 + version: 2.0.0 husky: specifier: ^9.1.7 version: 9.1.7 @@ -108,7 +114,7 @@ importers: version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@storybook/react-vite': specifier: ^7.6.17 - version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + version: 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -123,10 +129,10 @@ importers: version: 18.3.18 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + version: 4.3.4(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) babel-loader: specifier: ^9.2.1 - version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.18.20)) + version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.1)) js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -135,7 +141,7 @@ importers: version: 4.0.0 msw: specifier: ^2.7.0 - version: 2.7.3(@types/node@22.15.29)(typescript@5.8.3) + version: 2.7.3(@types/node@24.0.3)(typescript@5.8.3) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -155,23 +161,23 @@ importers: specifier: ^5.7.3 version: 5.8.3 vite: - specifier: ^6.1.0 - version: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + specifier: '>=6.2.7' + version: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) packages/react-components: dependencies: '@adyen/adyen-web': - specifier: ^6.15.0 - version: 6.15.0 + specifier: ^6.17.0 + version: 6.17.0 '@commercelayer/organization-config': specifier: ^2.3.0 version: 2.3.0 '@commercelayer/sdk': - specifier: ^6.42.0 - version: 6.42.0 + specifier: ^6.44.0 + version: 6.44.0 '@stripe/react-stripe-js': specifier: ^3.7.0 version: 3.7.0(@stripe/stripe-js@7.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -185,8 +191,8 @@ importers: specifier: ^3.5.13 version: 3.5.13 braintree-web: - specifier: ^3.120.2 - version: 3.120.2 + specifier: ^3.123.0 + version: 3.123.0 frames-react: specifier: ^1.2.2 version: 1.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3) @@ -210,8 +216,8 @@ importers: specifier: ^9.8.0 version: 9.8.0 '@playwright/test': - specifier: ^1.52.0 - version: 1.52.0 + specifier: ^1.53.1 + version: 1.53.1 '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -222,14 +228,14 @@ importers: specifier: ^3.96.17 version: 3.96.17 '@types/lodash': - specifier: ^4.17.17 - version: 4.17.17 + specifier: ^4.17.18 + version: 4.17.18 '@types/node': - specifier: ^22.15.29 - version: 22.15.29 + specifier: ^24.0.3 + version: 24.0.3 '@types/prop-types': - specifier: ^15.7.14 - version: 15.7.14 + specifier: ^15.7.15 + version: 15.7.15 '@types/react': specifier: ^18.3.1 version: 18.3.18 @@ -240,11 +246,11 @@ importers: specifier: ^1.8.8 version: 1.8.8 '@vitejs/plugin-react': - specifier: ^4.5.1 - version: 4.5.1(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + specifier: ^4.5.2 + version: 4.5.2(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) '@vitest/coverage-v8': - specifier: ^3.2.1 - version: 3.2.1(vitest@3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0)) + specifier: ^3.2.4 + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jsdom@26.1.0)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0)) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -252,8 +258,8 @@ importers: specifier: ^1.4.0 version: 1.4.0 msw: - specifier: ^2.9.0 - version: 2.9.0(@types/node@22.15.29)(typescript@5.8.3) + specifier: ^2.10.2 + version: 2.10.2(@types/node@24.0.3)(typescript@5.8.3) react: specifier: ^18.3.1 version: 18.3.1 @@ -274,18 +280,18 @@ importers: version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + version: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) vitest: - specifier: ^3.2.1 - version: 3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) + specifier: ^3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jsdom@26.1.0)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) packages: - '@adyen/adyen-web@6.15.0': - resolution: {integrity: sha512-Ormyln86jo365jIHEDyb1xZETLxqg/XD1/sYf0Kb1H+8XCzVURKYVhdBTxpc4l9B3gcHq43tiNhzwf9sL4nc6g==} + '@adyen/adyen-web@6.17.0': + resolution: {integrity: sha512-8w7OmfD0OnwDY87EBm21nSkFGd4k27olhOV05cpgUd74Jze6Z2K7CnM5++5340pkzhj0/duLqYP7E6eN7RXzrQ==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -302,18 +308,34 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.8': resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.27.5': + resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.26.10': resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} engines: {node: '>=6.9.0'} + '@babel/core@7.27.4': + resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.26.10': resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} engines: {node: '>=6.9.0'} + '@babel/generator@7.27.5': + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} @@ -322,6 +344,10 @@ packages: resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.26.9': resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} engines: {node: '>=6.9.0'} @@ -347,12 +373,22 @@ packages: resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.25.9': resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} @@ -361,6 +397,10 @@ packages: resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.25.9': resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} @@ -381,14 +421,26 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.25.9': resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} @@ -397,11 +449,20 @@ packages: resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.26.10': resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.27.5': + resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} @@ -714,12 +775,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.25.9': resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-regenerator@7.25.9': resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} engines: {node: '>=6.9.0'} @@ -835,14 +908,26 @@ packages: resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.10': resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.4': + resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.10': resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.27.6': + resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + engines: {node: '>=6.9.0'} + '@base2/pretty-print-object@1.0.1': resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -850,55 +935,55 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + '@biomejs/biome@2.0.0': + resolution: {integrity: sha512-BlUoXEOI/UQTDEj/pVfnkMo8SrZw3oOWBDrXYFT43V7HTkIUDkBRY53IC5Jx1QkZbaB+0ai1wJIfYwp9+qaJTQ==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + '@biomejs/cli-darwin-arm64@2.0.0': + resolution: {integrity: sha512-QvqWYtFFhhxdf8jMAdJzXW+Frc7X8XsnHQLY+TBM1fnT1TfeV/v9vsFI5L2J7GH6qN1+QEEJ19jHibCY2Ypplw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + '@biomejs/cli-darwin-x64@2.0.0': + resolution: {integrity: sha512-5JFhls1EfmuIH4QGFPlNpxJQFC6ic3X1ltcoLN+eSRRIPr6H/lUS1ttuD0Fj7rPgPhZqopK/jfH8UVj/1hIsQw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + '@biomejs/cli-linux-arm64-musl@2.0.0': + resolution: {integrity: sha512-Bxsz8ki8+b3PytMnS5SgrGV+mbAWwIxI3ydChb/d1rURlJTMdxTTq5LTebUnlsUWAX6OvJuFeiVq9Gjn1YbCyA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + '@biomejs/cli-linux-arm64@2.0.0': + resolution: {integrity: sha512-BAH4QVi06TzAbVchXdJPsL0Z/P87jOfes15rI+p3EX9/EGTfIjaQ9lBVlHunxcmoptaA5y1Hdb9UYojIhmnjIw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + '@biomejs/cli-linux-x64-musl@2.0.0': + resolution: {integrity: sha512-tiQ0ABxMJb9I6GlfNp0ulrTiQSFacJRJO8245FFwE3ty3bfsfxlU/miblzDIi+qNrgGsLq5wIZcVYGp4c+HXZA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + '@biomejs/cli-linux-x64@2.0.0': + resolution: {integrity: sha512-09PcOGYTtkopWRm6mZ/B6Mr6UHdkniUgIG/jLBv+2J8Z61ezRE+xQmpi3yNgUrFIAU4lPA9atg7mhvE/5Bo7Wg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + '@biomejs/cli-win32-arm64@2.0.0': + resolution: {integrity: sha512-vrTtuGu91xNTEQ5ZcMJBZuDlqr32DWU1r14UfePIGndF//s2WUAmer4FmgoPgruo76rprk37e8S2A2c0psXdxw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + '@biomejs/cli-win32-x64@2.0.0': + resolution: {integrity: sha512-2USVQ0hklNsph/KIR72ZdeptyXNnQ3JdzPn3NbjI4Sna34CnxeiYAaZcZzXPDl5PYNFBivV4xmvT3Z3rTmyDBg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -906,8 +991,8 @@ packages: '@braintree/asset-loader@2.0.0': resolution: {integrity: sha512-7Zs3/g3lPTfkdtWr7cKh3tk1pDruXR++TXwGKkx7BPuTjjLNFul2JSfI+ScHzNU4u/gZNPNQagsSTlYxIhBgMA==} - '@braintree/asset-loader@2.0.2': - resolution: {integrity: sha512-0ArGSdgEpg9nTdZsi5zvcB/rHW0A+Jo9WOA4ArAO/UB1fbDm4qimX0P3e1QydqvdDkQs0jZgR7Uke1WL81RIKA==} + '@braintree/asset-loader@2.0.3': + resolution: {integrity: sha512-uREap1j30wKRlC0mK99nNPMpEp77NtB6XixpDfFJPZHmkrmw7IB4skKe+26LZBK1H6oSainFhAyKoP7x3eyOKA==} '@braintree/browser-detection@1.17.2': resolution: {integrity: sha512-DdEX09uYs6kHwGt4cbONlxlta/0hfmrDUncP6EtfZxFVywNF9LeRUyon+2LihJTbqgSnGqz9ZL450hkqBd6oSw==} @@ -958,8 +1043,8 @@ packages: resolution: {integrity: sha512-fv6GrTFWkQJC4yb86Fix560+S/lKLegTEFpQNTsnNpE8JLkzF63B1dyCWpbGcOtsbCK37I/CXsQf6eof1R15qA==} engines: {node: '>=20'} - '@commercelayer/sdk@6.42.0': - resolution: {integrity: sha512-tZD1+dGT8SjKKMw6LVgzqZSIon1AsX5fdiiQpZi8zT/LAjtpkOpwz8aVnL0p7sqSlBNq55VVeDqYBwNB++DehA==} + '@commercelayer/sdk@6.44.0': + resolution: {integrity: sha512-bhQNg89olVVIZa1d01B0QmG4IoFZMuXxIWUfhlX5nHskYuk3sjHGsKenhqnt3bYqzQiBFAFoI2GsY9NV4UsKxg==} engines: {node: '>=20'} '@csstools/color-helpers@5.0.2': @@ -1014,192 +1099,96 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.1': resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.1': resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.1': resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.1': resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.1': resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.1': resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.1': resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.1': resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.1': resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.1': resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.1': resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.1': resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.1': resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.1': resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.1': resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.1': resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} engines: {node: '>=18'} @@ -1212,12 +1201,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.1': resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} engines: {node: '>=18'} @@ -1230,60 +1213,30 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.1': resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.1': resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.1': resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.1': resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.1': resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} engines: {node: '>=18'} @@ -1430,8 +1383,8 @@ packages: resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} engines: {node: '>=18'} - '@mswjs/interceptors@0.38.7': - resolution: {integrity: sha512-Jkb27iSn7JPdkqlTqKfhncFfnEZsIJVYxsFbUSWEkxdIPdsyngrhoDBk0/BGD2FQcRH99vlRrkHpNTyKqI+0/w==} + '@mswjs/interceptors@0.39.2': + resolution: {integrity: sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==} engines: {node: '>=18'} '@napi-rs/wasm-runtime@0.2.4': @@ -1646,8 +1599,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.52.0': - resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} + '@playwright/test@1.53.1': + resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==} engines: {node: '>=18'} hasBin: true @@ -2060,8 +2013,8 @@ packages: '@radix-ui/rect@1.0.1': resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} - '@rolldown/pluginutils@1.0.0-beta.9': - resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==} + '@rolldown/pluginutils@1.0.0-beta.11': + resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==} '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} @@ -2603,8 +2556,8 @@ packages: '@types/lodash@4.17.16': resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} - '@types/lodash@4.17.17': - resolution: {integrity: sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==} + '@types/lodash@4.17.18': + resolution: {integrity: sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==} '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -2636,8 +2589,8 @@ packages: '@types/node@18.19.80': resolution: {integrity: sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==} - '@types/node@22.15.29': - resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} + '@types/node@24.0.3': + resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2651,6 +2604,9 @@ packages: '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/qs@6.9.18': resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} @@ -2711,26 +2667,26 @@ packages: peerDependencies: vite: '>=4.5.2' - '@vitejs/plugin-react@4.5.1': - resolution: {integrity: sha512-uPZBqSI0YD4lpkIru6M35sIfylLGTyhGHvDZbNLuMA73lMlwJKz5xweH7FajfcCAc2HnINciejA9qTz0dr0M7A==} + '@vitejs/plugin-react@4.5.2': + resolution: {integrity: sha512-QNVT3/Lxx99nMQWJWF7K4N6apUEuT0KlZA3mx/mVaoGj3smm/8rc8ezz15J1pcbcjDK0V15rpHetVfya08r76Q==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: '>=4.5.2' - '@vitest/coverage-v8@3.2.1': - resolution: {integrity: sha512-6dy0uF/0BE3jpUW9bFzg0V2S4F7XVaZHL/7qma1XANvHPQGoJuc3wtx911zSoAgUnpfvcLVK1vancNJ95d+uxQ==} + '@vitest/coverage-v8@3.2.4': + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} peerDependencies: - '@vitest/browser': 3.2.1 - vitest: 3.2.1 + '@vitest/browser': 3.2.4 + vitest: 3.2.4 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.2.1': - resolution: {integrity: sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@3.2.1': - resolution: {integrity: sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 vite: '>=5.1.7' @@ -2740,20 +2696,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.2.1': - resolution: {integrity: sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@3.2.1': - resolution: {integrity: sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@3.2.1': - resolution: {integrity: sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@3.2.1': - resolution: {integrity: sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@3.2.1': - resolution: {integrity: sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2810,7 +2766,7 @@ packages: resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} engines: {node: '>=14.15.0'} peerDependencies: - esbuild: '>=0.10.0' + esbuild: '>=0.25.0' '@yarnpkg/fslib@2.10.3': resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} @@ -3007,6 +2963,9 @@ packages: axios@1.8.3: resolution: {integrity: sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + babel-core@7.0.0-bridge.0: resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: @@ -3044,6 +3003,40 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@3.0.1: + resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} + engines: {node: '>= 16'} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.1.5: + resolution: {integrity: sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.1: + resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3077,18 +3070,19 @@ packages: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@4.0.1: + resolution: {integrity: sha512-YClrbvTCXGe70pU2JiEiPLYXO9gQkyxYeKpJIQHVS/gOs6EWMQP2RYBwjFLNT322Ji8TOC3IMPfsYCedNpzKfA==} + engines: {node: '>= 18'} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - braintree-web@3.120.2: - resolution: {integrity: sha512-GdA495PforvIDABd2OSRp1tXWiY2C/1GoD7bSV0yNHvzYbFL4JEWHcZay2/r1QKfcaTsPiP3EQ6YBKu2dW4j9g==} + braintree-web@3.123.0: + resolution: {integrity: sha512-uuPgr/47w/bkjhVKxUNraXRuOLv1nbjQlJbprCQFWIoSTKGdut+6YRAAVpLldHeg2FMzpZ7dSDxUhrBQvJnoAQ==} browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} @@ -3188,9 +3182,6 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -3314,9 +3305,6 @@ packages: resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} engines: {node: '>= 0.8.0'} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} @@ -3707,12 +3695,7 @@ packages: esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: - esbuild: '>=0.12 <1' - - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true + esbuild: '>=0.25.0' esbuild@0.25.1: resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} @@ -3814,6 +3797,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -4739,6 +4725,9 @@ packages: loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -5065,9 +5054,6 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -5094,8 +5080,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.7.3: - resolution: {integrity: sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==} + msw@2.10.2: + resolution: {integrity: sha512-RCKM6IZseZQCWcSWlutdf590M8nVfRHG1ImwzOtwz8IYxgT4zhUO0rfTcTvDGiaFE0Rhcc+h43lcF3Jc9gFtwQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -5104,8 +5090,8 @@ packages: typescript: optional: true - msw@2.9.0: - resolution: {integrity: sha512-fNyrJ11YNbe2zl64EwtxM5OFkInFPAw5vipOljMsf9lY2ep9B2BslqQrS8EC9pB9961K61FqTUi0wsdqk6hwow==} + msw@2.7.3: + resolution: {integrity: sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -5534,13 +5520,13 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.52.0: - resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} + playwright-core@1.53.1: + resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==} engines: {node: '>=18'} hasBin: true - playwright@1.52.0: - resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} + playwright@1.53.1: + resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==} engines: {node: '>=18'} hasBin: true @@ -6181,6 +6167,9 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -6230,6 +6219,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + strong-log-transformer@2.1.0: resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} engines: {node: '>=4'} @@ -6257,13 +6249,16 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar-fs@2.1.2: - resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-fs@3.0.10: + resolution: {integrity: sha512-C1SwlQGNLe/jPNqapK8epDsXME7CAJR5RL3GcE6KWx1d9OUByzoHVcbu1VPI8tevg9H8Alae0AApHHFGzrD5zA==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -6316,6 +6311,9 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -6339,8 +6337,8 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.0: - resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: @@ -6499,8 +6497,8 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -6656,8 +6654,8 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vite-node@3.2.1: - resolution: {integrity: sha512-V4EyKQPxquurNJPtQJRZo8hKOoKNBRIhxcDbQFPFig0JdoWcUhwRgK8yoCXXrfYVPKS6XwirGHPszLnR8FbjCA==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -6669,46 +6667,6 @@ packages: vite: optional: true - vite@6.2.5: - resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@6.3.5: resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -6749,16 +6707,16 @@ packages: yaml: optional: true - vitest@3.2.1: - resolution: {integrity: sha512-VZ40MBnlE1/V5uTgdqY3DmjUgZtIzsYq758JGlyQrv5syIsaYcabkfPkEuWML49Ph0D/SoqpVFd0dyVTr551oA==} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.1 - '@vitest/ui': 3.2.1 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -6985,7 +6943,7 @@ packages: snapshots: - '@adyen/adyen-web@6.15.0': + '@adyen/adyen-web@6.17.0': dependencies: '@types/applepayjs': 14.0.9 '@types/googlepay': 0.7.6 @@ -7015,8 +6973,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.27.5': {} + '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 @@ -7037,6 +7003,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.27.4': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 + convert-source-map: 2.0.0 + debug: 4.4.1 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.26.10': dependencies: '@babel/parser': 7.26.10 @@ -7045,6 +7031,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.27.5': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.10 @@ -7057,6 +7051,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -7102,6 +7104,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -7111,12 +7120,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.25.9': dependencies: '@babel/types': 7.26.10 '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -7144,10 +7164,16 @@ snapshots: '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-wrap-function@7.25.9': dependencies: '@babel/template': 7.26.9 @@ -7161,10 +7187,19 @@ snapshots: '@babel/template': 7.26.9 '@babel/types': 7.26.10 + '@babel/helpers@7.27.6': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 + '@babel/parser@7.26.10': dependencies: '@babel/types': 7.26.10 + '@babel/parser@7.27.5': + dependencies: + '@babel/types': 7.27.6 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -7497,11 +7532,21 @@ snapshots: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -7700,6 +7745,12 @@ snapshots: '@babel/parser': 7.26.10 '@babel/types': 7.26.10 + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + '@babel/traverse@7.26.10': dependencies: '@babel/code-frame': 7.26.2 @@ -7712,53 +7763,70 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.27.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 + debug: 4.4.1 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.10': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.27.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@base2/pretty-print-object@1.0.1': {} '@bcoe/v8-coverage@1.0.2': {} - '@biomejs/biome@1.9.4': + '@biomejs/biome@2.0.0': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 - - '@biomejs/cli-darwin-arm64@1.9.4': + '@biomejs/cli-darwin-arm64': 2.0.0 + '@biomejs/cli-darwin-x64': 2.0.0 + '@biomejs/cli-linux-arm64': 2.0.0 + '@biomejs/cli-linux-arm64-musl': 2.0.0 + '@biomejs/cli-linux-x64': 2.0.0 + '@biomejs/cli-linux-x64-musl': 2.0.0 + '@biomejs/cli-win32-arm64': 2.0.0 + '@biomejs/cli-win32-x64': 2.0.0 + + '@biomejs/cli-darwin-arm64@2.0.0': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@biomejs/cli-darwin-x64@2.0.0': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@biomejs/cli-linux-arm64-musl@2.0.0': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@biomejs/cli-linux-arm64@2.0.0': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@biomejs/cli-linux-x64-musl@2.0.0': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@biomejs/cli-linux-x64@2.0.0': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@biomejs/cli-win32-arm64@2.0.0': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@biomejs/cli-win32-x64@2.0.0': optional: true '@braintree/asset-loader@2.0.0': {} - '@braintree/asset-loader@2.0.2': {} + '@braintree/asset-loader@2.0.3': {} '@braintree/browser-detection@1.17.2': {} @@ -7800,7 +7868,7 @@ snapshots: '@commercelayer/sdk@6.38.0': {} - '@commercelayer/sdk@6.42.0': {} + '@commercelayer/sdk@6.44.0': {} '@csstools/color-helpers@5.0.2': {} @@ -7844,141 +7912,75 @@ snapshots: '@esbuild/aix-ppc64@0.25.1': optional: true - '@esbuild/android-arm64@0.18.20': - optional: true - '@esbuild/android-arm64@0.25.1': optional: true - '@esbuild/android-arm@0.18.20': - optional: true - '@esbuild/android-arm@0.25.1': optional: true - '@esbuild/android-x64@0.18.20': - optional: true - '@esbuild/android-x64@0.25.1': optional: true - '@esbuild/darwin-arm64@0.18.20': - optional: true - '@esbuild/darwin-arm64@0.25.1': optional: true - '@esbuild/darwin-x64@0.18.20': - optional: true - '@esbuild/darwin-x64@0.25.1': optional: true - '@esbuild/freebsd-arm64@0.18.20': - optional: true - '@esbuild/freebsd-arm64@0.25.1': optional: true - '@esbuild/freebsd-x64@0.18.20': - optional: true - '@esbuild/freebsd-x64@0.25.1': optional: true - '@esbuild/linux-arm64@0.18.20': - optional: true - '@esbuild/linux-arm64@0.25.1': optional: true - '@esbuild/linux-arm@0.18.20': - optional: true - '@esbuild/linux-arm@0.25.1': optional: true - '@esbuild/linux-ia32@0.18.20': - optional: true - '@esbuild/linux-ia32@0.25.1': optional: true - '@esbuild/linux-loong64@0.18.20': - optional: true - '@esbuild/linux-loong64@0.25.1': optional: true - '@esbuild/linux-mips64el@0.18.20': - optional: true - '@esbuild/linux-mips64el@0.25.1': optional: true - '@esbuild/linux-ppc64@0.18.20': - optional: true - '@esbuild/linux-ppc64@0.25.1': optional: true - '@esbuild/linux-riscv64@0.18.20': - optional: true - '@esbuild/linux-riscv64@0.25.1': optional: true - '@esbuild/linux-s390x@0.18.20': - optional: true - '@esbuild/linux-s390x@0.25.1': optional: true - '@esbuild/linux-x64@0.18.20': - optional: true - '@esbuild/linux-x64@0.25.1': optional: true '@esbuild/netbsd-arm64@0.25.1': optional: true - '@esbuild/netbsd-x64@0.18.20': - optional: true - '@esbuild/netbsd-x64@0.25.1': optional: true '@esbuild/openbsd-arm64@0.25.1': optional: true - '@esbuild/openbsd-x64@0.18.20': - optional: true - '@esbuild/openbsd-x64@0.25.1': optional: true - '@esbuild/sunos-x64@0.18.20': - optional: true - '@esbuild/sunos-x64@0.25.1': optional: true - '@esbuild/win32-arm64@0.18.20': - optional: true - '@esbuild/win32-arm64@0.25.1': optional: true - '@esbuild/win32-ia32@0.18.20': - optional: true - '@esbuild/win32-ia32@0.25.1': optional: true - '@esbuild/win32-x64@0.18.20': - optional: true - '@esbuild/win32-x64@0.25.1': optional: true @@ -8005,17 +8007,17 @@ snapshots: '@hutson/parse-repository-url@3.0.2': {} - '@inquirer/confirm@5.1.8(@types/node@22.15.29)': + '@inquirer/confirm@5.1.8(@types/node@24.0.3)': dependencies: - '@inquirer/core': 10.1.9(@types/node@22.15.29) - '@inquirer/type': 3.0.5(@types/node@22.15.29) + '@inquirer/core': 10.1.9(@types/node@24.0.3) + '@inquirer/type': 3.0.5(@types/node@24.0.3) optionalDependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 - '@inquirer/core@10.1.9(@types/node@22.15.29)': + '@inquirer/core@10.1.9(@types/node@24.0.3)': dependencies: '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.5(@types/node@22.15.29) + '@inquirer/type': 3.0.5(@types/node@24.0.3) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -8023,13 +8025,13 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@inquirer/figures@1.0.11': {} - '@inquirer/type@3.0.5(@types/node@22.15.29)': + '@inquirer/type@3.0.5(@types/node@24.0.3)': optionalDependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@isaacs/cliui@8.0.2': dependencies: @@ -8080,7 +8082,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -8089,17 +8091,17 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.8.3) - vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.3 @@ -8230,7 +8232,7 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@mswjs/interceptors@0.38.7': + '@mswjs/interceptors@0.39.2': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -8249,7 +8251,9 @@ snapshots: dependencies: gunzip-maybe: 1.4.2 pump: 3.0.2 - tar-fs: 2.1.2 + tar-fs: 3.0.10 + transitivePeerDependencies: + - bare-buffer '@nodelib/fs.scandir@2.1.5': dependencies: @@ -8518,9 +8522,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.52.0': + '@playwright/test@1.53.1': dependencies: - playwright: 1.52.0 + playwright: 1.53.1 '@radix-ui/number@1.0.1': dependencies: @@ -8884,7 +8888,7 @@ snapshots: dependencies: '@babel/runtime': 7.26.10 - '@rolldown/pluginutils@1.0.0-beta.9': {} + '@rolldown/pluginutils@1.0.0-beta.11': {} '@rollup/pluginutils@4.2.1': dependencies: @@ -9173,10 +9177,10 @@ snapshots: '@storybook/node-logger': 7.6.20 '@types/ejs': 3.1.5 '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.20) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.25.1) browser-assert: 1.2.1 ejs: 3.1.10 - esbuild: 0.18.20 + esbuild: 0.25.1 esbuild-plugin-alias: 0.2.1 express: 4.21.2 find-cache-dir: 3.3.2 @@ -9187,7 +9191,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/builder-vite@7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@storybook/channels': 7.6.20 '@storybook/client-logger': 7.6.20 @@ -9205,7 +9209,7 @@ snapshots: fs-extra: 11.3.0 magic-string: 0.30.17 rollup: 3.29.5 - vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -9273,6 +9277,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 transitivePeerDependencies: + - bare-buffer - bufferutil - encoding - supports-color @@ -9343,8 +9348,8 @@ snapshots: '@types/node-fetch': 2.6.12 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 - esbuild: 0.18.20 - esbuild-register: 3.6.0(esbuild@0.18.20) + esbuild: 0.25.1 + esbuild-register: 3.6.0(esbuild@0.25.1) file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 @@ -9553,18 +9558,18 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': + '@storybook/react-vite@7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.35.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.35.0) - '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + '@storybook/builder-vite': 7.6.20(encoding@0.1.13)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) '@storybook/react': 7.6.20(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@vitejs/plugin-react': 3.1.0(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) + '@vitejs/plugin-react': 3.1.0(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.1 react-dom: 18.3.1(react@18.3.1) - vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -9759,7 +9764,7 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/braintree-web@3.96.17': dependencies: @@ -9772,13 +9777,13 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/cookie@0.6.0': {} '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/debug@4.1.12': dependencies: @@ -9814,7 +9819,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -9831,13 +9836,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/googlepay@0.7.6': {} '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/http-errors@2.0.4': {} @@ -9859,7 +9864,7 @@ snapshots: '@types/lodash@4.17.16': {} - '@types/lodash@4.17.17': {} + '@types/lodash@4.17.18': {} '@types/mdast@3.0.15': dependencies: @@ -9881,16 +9886,16 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 form-data: 4.0.2 '@types/node@18.19.80': dependencies: undici-types: 5.26.5 - '@types/node@22.15.29': + '@types/node@24.0.3': dependencies: - undici-types: 6.21.0 + undici-types: 7.8.0 '@types/normalize-package-data@2.4.4': {} @@ -9900,6 +9905,8 @@ snapshots: '@types/prop-types@15.7.14': {} + '@types/prop-types@15.7.15': {} + '@types/qs@6.9.18': {} '@types/range-parser@1.2.7': {} @@ -9924,12 +9931,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.15.29 + '@types/node': 24.0.3 '@types/send': 0.17.4 '@types/statuses@2.0.5': {} @@ -9950,41 +9957,41 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitejs/plugin-react@3.1.0(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@3.1.0(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.10 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.5.1(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': + '@vitejs/plugin-react@4.5.2(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) - '@rolldown/pluginutils': 1.0.0-beta.9 + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.4) + '@rolldown/pluginutils': 1.0.0-beta.11 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.1(vitest@3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jsdom@26.1.0)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -9999,50 +10006,51 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jsdom@26.1.0)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.2.1': + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.2 - '@vitest/spy': 3.2.1 - '@vitest/utils': 3.2.1 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.1(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0))': + '@vitest/mocker@3.2.4(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.2.1 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.9.0(@types/node@22.15.29)(typescript@5.8.3) - vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + msw: 2.10.2(@types/node@24.0.3)(typescript@5.8.3) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) - '@vitest/pretty-format@3.2.1': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.2.1': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 3.2.1 + '@vitest/utils': 3.2.4 pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@3.2.1': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 3.2.1 + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.2.1': + '@vitest/spy@3.2.4': dependencies: tinyspy: 4.0.3 - '@vitest/utils@3.2.1': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.2.1 - loupe: 3.1.3 + '@vitest/pretty-format': 3.2.4 + loupe: 3.1.4 tinyrainbow: 2.0.0 '@webassemblyjs/ast@1.14.1': @@ -10125,9 +10133,9 @@ snapshots: '@xtuc/long@4.2.2': {} - '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20)': + '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.25.1)': dependencies: - esbuild: 0.18.20 + esbuild: 0.25.1 tslib: 2.8.1 '@yarnpkg/fslib@2.10.3': @@ -10302,16 +10310,18 @@ snapshots: transitivePeerDependencies: - debug + b4a@1.6.7: {} + babel-core@7.0.0-bridge.0(@babel/core@7.26.10): dependencies: '@babel/core': 7.26.10 - babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.18.20)): + babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.1)): dependencies: '@babel/core': 7.26.10 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.98.0(esbuild@0.18.20) + webpack: 5.98.0(esbuild@0.25.1) babel-plugin-istanbul@6.1.1: dependencies: @@ -10351,6 +10361,33 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@3.0.1: {} + + bare-events@2.5.4: + optional: true + + bare-fs@4.1.5: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + optional: true + + bare-os@3.6.1: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.1 + optional: true + + bare-stream@2.6.5(bare-events@2.5.4): + dependencies: + streamx: 2.22.1 + optionalDependencies: + bare-events: 2.5.4 + optional: true + base64-js@1.5.1: {} before-after-hook@2.2.3: {} @@ -10397,22 +10434,21 @@ snapshots: dependencies: big-integer: 1.6.52 - brace-expansion@1.1.11: + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@4.0.1: dependencies: - balanced-match: 1.0.2 + balanced-match: 3.0.1 braces@3.0.3: dependencies: fill-range: 7.1.1 - braintree-web@3.120.2: + braintree-web@3.123.0: dependencies: - '@braintree/asset-loader': 2.0.2 + '@braintree/asset-loader': 2.0.3 '@braintree/browser-detection': 2.0.2 '@braintree/event-emitter': 0.4.1 '@braintree/extended-promise': 1.0.0 @@ -10546,8 +10582,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chownr@1.1.4: {} - chownr@2.0.0: {} chrome-trace-event@1.0.4: {} @@ -10656,8 +10690,6 @@ snapshots: transitivePeerDependencies: - supports-color - concat-map@0.0.1: {} - concat-stream@1.6.2: dependencies: buffer-from: 1.1.2 @@ -10896,7 +10928,7 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -11031,38 +11063,13 @@ snapshots: esbuild-plugin-alias@0.2.1: {} - esbuild-register@3.6.0(esbuild@0.18.20): + esbuild-register@3.6.0(esbuild@0.25.1): dependencies: - debug: 4.4.0 - esbuild: 0.18.20 + debug: 4.4.1 + esbuild: 0.25.1 transitivePeerDependencies: - supports-color - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - esbuild@0.25.1: optionalDependencies: '@esbuild/aix-ppc64': 0.25.1 @@ -11219,6 +11226,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -11628,7 +11637,7 @@ snapshots: https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -11957,7 +11966,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.15.29 + '@types/node': 24.0.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11972,14 +11981,14 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 22.15.29 + '@types/node': 24.0.3 jest-regex-util@29.6.3: {} jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.29 + '@types/node': 24.0.3 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11987,13 +11996,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -12289,6 +12298,8 @@ snapshots: loupe@3.1.3: {} + loupe@3.1.4: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -12661,7 +12672,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0 + debug: 4.4.1 decode-named-character-reference: 1.1.0 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -12703,27 +12714,27 @@ snapshots: minimatch@3.0.5: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 2.0.1 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 4.0.1 minimatch@5.1.6: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 4.0.1 minimatch@8.0.4: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 4.0.1 minimatch@9.0.3: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 4.0.1 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 4.0.1 minimist-options@4.1.0: dependencies: @@ -12737,7 +12748,7 @@ snapshots: dependencies: commander: 11.1.0 dts-minify: 0.3.3 - esbuild: 0.18.20 + esbuild: 0.25.1 glob: 10.4.5 pretty-bytes: 6.1.1 progress-barjs: 2.2.1 @@ -12782,8 +12793,6 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - mkdirp-classic@0.5.3: {} - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -12805,13 +12814,13 @@ snapshots: ms@2.1.3: {} - msw@2.7.3(@types/node@22.15.29)(typescript@5.8.3): + msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.8(@types/node@22.15.29) - '@mswjs/interceptors': 0.37.6 + '@inquirer/confirm': 5.1.8(@types/node@24.0.3) + '@mswjs/interceptors': 0.39.2 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 @@ -12830,13 +12839,13 @@ snapshots: transitivePeerDependencies: - '@types/node' - msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3): + msw@2.7.3(@types/node@24.0.3)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.8(@types/node@22.15.29) - '@mswjs/interceptors': 0.38.7 + '@inquirer/confirm': 5.1.8(@types/node@24.0.3) + '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 @@ -13322,11 +13331,11 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - playwright-core@1.52.0: {} + playwright-core@1.53.1: {} - playwright@1.52.0: + playwright@1.53.1: dependencies: - playwright-core: 1.52.0 + playwright-core: 1.53.1 optionalDependencies: fsevents: 2.3.2 @@ -13969,7 +13978,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 socks: 2.8.4 transitivePeerDependencies: - supports-color @@ -14041,6 +14050,7 @@ snapshots: dependencies: '@storybook/cli': 7.6.20(encoding@0.1.13) transitivePeerDependencies: + - bare-buffer - bufferutil - encoding - supports-color @@ -14048,6 +14058,13 @@ snapshots: stream-shift@1.0.3: {} + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + strict-event-emitter@0.5.1: {} string-width@4.2.3: @@ -14094,6 +14111,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + strong-log-transformer@2.1.0: dependencies: duplexer: 0.1.2 @@ -14116,12 +14137,15 @@ snapshots: tapable@2.2.1: {} - tar-fs@2.1.2: + tar-fs@3.0.10: dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 pump: 3.0.2 - tar-stream: 2.2.0 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.1.5 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer tar-stream@2.2.0: dependencies: @@ -14131,6 +14155,12 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.1 + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -14160,16 +14190,16 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser-webpack-plugin@5.3.14(esbuild@0.18.20)(webpack@5.98.0(esbuild@0.18.20)): + terser-webpack-plugin@5.3.14(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.39.0 - webpack: 5.98.0(esbuild@0.18.20) + webpack: 5.98.0(esbuild@0.25.1) optionalDependencies: - esbuild: 0.18.20 + esbuild: 0.25.1 terser@5.39.0: dependencies: @@ -14190,6 +14220,10 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + text-extensions@1.9.0: {} through2@2.0.5: @@ -14210,7 +14244,7 @@ snapshots: fdir: 6.4.5(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.1.0: {} + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} @@ -14290,7 +14324,7 @@ snapshots: tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 - debug: 4.4.0 + debug: 4.4.1 make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color @@ -14329,7 +14363,7 @@ snapshots: undici-types@5.26.5: {} - undici-types@6.21.0: {} + undici-types@7.8.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -14489,13 +14523,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@3.2.1(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0): + vite-node@3.2.4(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -14510,40 +14544,18 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)): - dependencies: - debug: 4.4.0 - globrex: 0.1.2 - tsconfck: 3.1.5(typescript@5.8.3) - optionalDependencies: - vite: 6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) - transitivePeerDependencies: - - supports-color - - typescript - - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.5(typescript@5.8.3) optionalDependencies: - vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@6.2.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0): - dependencies: - esbuild: 0.25.1 - postcss: 8.5.3 - rollup: 4.35.0 - optionalDependencies: - '@types/node': 22.15.29 - fsevents: 2.3.3 - terser: 5.39.0 - yaml: 2.7.0 - - vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0): + vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0): dependencies: esbuild: 0.25.1 fdir: 6.4.5(picomatch@4.0.2) @@ -14552,21 +14564,21 @@ snapshots: rollup: 4.35.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.3 fsevents: 2.3.3 terser: 5.39.0 yaml: 2.7.0 - vitest@3.2.1(@types/debug@4.1.12)(@types/node@22.15.29)(jsdom@26.1.0)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jsdom@26.1.0)(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(terser@5.39.0)(yaml@2.7.0): dependencies: '@types/chai': 5.2.2 - '@vitest/expect': 3.2.1 - '@vitest/mocker': 3.2.1(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0)) - '@vitest/pretty-format': 3.2.1 - '@vitest/runner': 3.2.1 - '@vitest/snapshot': 3.2.1 - '@vitest/spy': 3.2.1 - '@vitest/utils': 3.2.1 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(msw@2.10.2(@types/node@24.0.3)(typescript@5.8.3))(vite@6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 debug: 4.4.1 expect-type: 1.2.1 @@ -14577,14 +14589,14 @@ snapshots: tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 - tinypool: 1.1.0 + tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) - vite-node: 3.2.1(@types/node@22.15.29)(terser@5.39.0)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) + vite-node: 3.2.4(@types/node@24.0.3)(terser@5.39.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.29 + '@types/node': 24.0.3 jsdom: 26.1.0 transitivePeerDependencies: - jiti @@ -14627,7 +14639,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.98.0(esbuild@0.18.20): + webpack@5.98.0(esbuild@0.25.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -14649,7 +14661,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.14(esbuild@0.18.20)(webpack@5.98.0(esbuild@0.18.20)) + terser-webpack-plugin: 5.3.14(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: From 9fdc13857c14034719065186eb268eb00357fb16 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 20 Jun 2025 15:51:14 +0200 Subject: [PATCH 040/292] Fix avoid place order in draft --- packages/react-components/package.json | 22 +++++++------- .../payment_source/StripePayment.tsx | 30 +++++++++++++++++-- .../src/reducers/PaymentMethodReducer.ts | 7 +++++ 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/packages/react-components/package.json b/packages/react-components/package.json index ecd5f0f9..c7cd3fb7 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -199,14 +199,14 @@ }, "homepage": "https://github.com/commercelayer/commercelayer-react-components#readme", "dependencies": { - "@adyen/adyen-web": "^6.15.0", + "@adyen/adyen-web": "^6.17.0", "@commercelayer/organization-config": "^2.3.0", - "@commercelayer/sdk": "^6.42.0", + "@commercelayer/sdk": "^6.44.0", "@stripe/react-stripe-js": "^3.7.0", "@stripe/stripe-js": "^7.3.1", "@tanstack/react-table": "^8.21.3", "@types/iframe-resizer": "^3.5.13", - "braintree-web": "^3.120.2", + "braintree-web": "^3.123.0", "frames-react": "^1.2.2", "iframe-resizer": "^4.3.6", "jwt-decode": "^4.0.0", @@ -216,21 +216,21 @@ "devDependencies": { "@commercelayer/js-auth": "^6.7.2", "@faker-js/faker": "^9.8.0", - "@playwright/test": "^1.52.0", + "@playwright/test": "^1.53.1", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.3.0", "@types/braintree-web": "^3.96.17", - "@types/lodash": "^4.17.17", - "@types/node": "^22.15.29", - "@types/prop-types": "^15.7.14", + "@types/lodash": "^4.17.18", + "@types/node": "^24.0.3", + "@types/prop-types": "^15.7.15", "@types/react": "^18.3.1", "@types/react-test-renderer": "^18.3.1", "@types/react-window": "^1.8.8", - "@vitejs/plugin-react": "^4.5.1", - "@vitest/coverage-v8": "^3.2.1", + "@vitejs/plugin-react": "^4.5.2", + "@vitest/coverage-v8": "^3.2.4", "jsdom": "^26.1.0", "minimize-js": "^1.4.0", - "msw": "^2.9.0", + "msw": "^2.10.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-test-renderer": "^18.3.1", @@ -239,7 +239,7 @@ "typescript": "^5.8.3", "vite": "^6.3.5", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.2.1" + "vitest": "^3.2.4" }, "peerDependencies": { "react": ">=18.0.0" diff --git a/packages/react-components/src/components/payment_source/StripePayment.tsx b/packages/react-components/src/components/payment_source/StripePayment.tsx index 8609ad79..062626df 100644 --- a/packages/react-components/src/components/payment_source/StripePayment.tsx +++ b/packages/react-components/src/components/payment_source/StripePayment.tsx @@ -93,7 +93,29 @@ function StripePaymentForm({ elements, }: OnSubmitArgs): Promise => { if (!stripe) return false - + const sdk = sdkClient() + if (sdk == null) return false + if (order == null) return false + const { status } = await sdk.orders.retrieve(order?.id, { + fields: ["status"], + }) + const isDraftOrder = status === "draft" + if (isDraftOrder) { + /** + * Draft order cannot be placed + */ + setOrderErrors([ + { + code: "VALIDATION_ERROR", + resource: "orders", + message: "Draft order cannot be placed", + }, + ]) + setPlaceOrderStatus?.({ + status: "disabled", + }) + return false + } const savePaymentSourceToCustomerWallet: string = // @ts-expect-error no type event?.elements?.save_payment_source_to_customer_wallet?.checked @@ -148,8 +170,12 @@ function StripePaymentForm({ } async function handleChange(event: StripePaymentElementChangeEvent) { + console.debug("StripePaymentElement onChange event", { event }) // Handle change events from the PaymentElement - if (event.complete) { + if ( + event.complete && + ["applepay", "googlepay"].includes(event.value.type) + ) { const sdk = sdkClient() if (sdk == null) return if (order == null) return diff --git a/packages/react-components/src/reducers/PaymentMethodReducer.ts b/packages/react-components/src/reducers/PaymentMethodReducer.ts index 2792bb18..a08e633f 100644 --- a/packages/react-components/src/reducers/PaymentMethodReducer.ts +++ b/packages/react-components/src/reducers/PaymentMethodReducer.ts @@ -355,6 +355,7 @@ export async function setPaymentSource({ resource: "payment_methods", field: paymentResource, }) + console.error("Set payment source:", errors) if (errors != null && errors?.length > 0) { const [error] = errors if (error?.status === "401" && getOrder != null && order != null) { @@ -370,6 +371,12 @@ export async function setPaymentSource({ dispatch, }) } + } else { + setErrors({ + currentErrors, + newErrors: errors, + dispatch, + }) } } else { setErrors({ From 7e07b50c472dc4b978c8c52d264e466ff9872f3a Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 20 Jun 2025 15:51:39 +0200 Subject: [PATCH 041/292] v4.24.1-beta.4 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index dee9e11b..123144f4 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.1-beta.3", + "version": "4.24.1-beta.4", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index c7cd3fb7..0529fbc6 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.1-beta.3", + "version": "4.24.1-beta.4", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From e38e93e396f54546d4a395f5e9443823de50816a Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 20 Jun 2025 15:53:34 +0200 Subject: [PATCH 042/292] Update biome configuration --- biome.json | 68 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/biome.json b/biome.json index 64996857..a3a2ea9c 100644 --- a/biome.json +++ b/biome.json @@ -1,31 +1,41 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "ignore": [] - }, - "formatter": { - "enabled": true, - "indentStyle": "space" - }, - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double", - "semicolons":"asNeeded" - } - } + "$schema": "https://biomejs.dev/schemas/2.0.0/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "includes": ["**"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space" + }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "noParameterAssign": "error", + "useAsConstAssertion": "error", + "useDefaultParameterLast": "error", + "useEnumInitializers": "error", + "useSelfClosingElements": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double", + "semicolons": "asNeeded" + } + } } From ed175ee73971f82e105ee7e02e364b180942c40e Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 20 Jun 2025 17:29:11 +0200 Subject: [PATCH 043/292] v4.24.1 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 123144f4..2c4f674d 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.1-beta.4", + "version": "4.24.1", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 0529fbc6..604b0840 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.1-beta.4", + "version": "4.24.1", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From f5a4b648925b9f1feb000d8d94e74be1c389399f Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 23 Jun 2025 11:43:03 +0200 Subject: [PATCH 044/292] Add new prop `showLoader` in `PaymentMethod` component --- .../payment_methods/PaymentMethod.tsx | 50 +++++++++++++------ .../PaymentMethodsContainer.tsx | 25 ++++++---- 2 files changed, 49 insertions(+), 26 deletions(-) diff --git a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx index 3780553c..51d78272 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx @@ -1,31 +1,31 @@ +import type { + Order, + PaymentMethod as PaymentMethodType, +} from "@commercelayer/sdk" import { - useState, - useEffect, + type JSX, type MouseEvent, useContext, - type JSX, + useEffect, + useState, } from "react" -import PaymentMethodContext from "#context/PaymentMethodContext" +import CustomerContext from "#context/CustomerContext" +import OrderContext from "#context/OrderContext" import PaymentMethodChildrenContext from "#context/PaymentMethodChildrenContext" -import type { LoaderType } from "#typings" -import getLoaderComponent from "#utils/getLoaderComponent" -import type { - Order, - PaymentMethod as PaymentMethodType, -} from "@commercelayer/sdk" +import PaymentMethodContext from "#context/PaymentMethodContext" +import PlaceOrderContext from "#context/PlaceOrderContext" import type { PaymentResource } from "#reducers/PaymentMethodReducer" -import useCustomContext from "#utils/hooks/useCustomContext" +import type { LoaderType } from "#typings" import type { DefaultChildrenType } from "#typings/globals" -import OrderContext from "#context/OrderContext" -import CustomerContext from "#context/CustomerContext" +import { getAvailableExpressPayments } from "#utils/expressPaymentHelper" +import getLoaderComponent from "#utils/getLoaderComponent" import { getCkoAttributes, getExternalPaymentAttributes, getPaypalAttributes, } from "#utils/getPaymentAttributes" +import useCustomContext from "#utils/hooks/useCustomContext" import { isEmpty } from "#utils/isEmpty" -import { getAvailableExpressPayments } from "#utils/expressPaymentHelper" -import PlaceOrderContext from "#context/PlaceOrderContext" import { sortPaymentMethods } from "#utils/payment-methods/sortPaymentMethods" export interface PaymentMethodOnClickParams { @@ -48,6 +48,11 @@ type Props = { * Customize the loader component */ loader?: LoaderType + /** + * Show loader while fetching payment methods + * @default undefined + */ + showLoader?: boolean /** * Auto select the payment method when there is only one available */ @@ -82,6 +87,7 @@ export function PaymentMethod({ clickableContainer, autoSelectSinglePaymentMethod, expressPayments, + showLoader, hide, onClick, sortBy, @@ -98,6 +104,7 @@ export function PaymentMethod({ paymentSource, setPaymentSource, config, + errors, } = useCustomContext({ context: PaymentMethodContext, contextComponentName: "PaymentMethodsContainer", @@ -219,7 +226,18 @@ export function PaymentMethod({ setPaymentSelected("") } }, [paymentMethods, currentPaymentMethodId]) - + useEffect(() => { + console.log("showLoader", { showLoader }) + // If showLoader is undefined, we don't change the loading + if (showLoader !== undefined) { + if (showLoader && errors?.length === 0) { + console.log("showLoader is true") + setLoading(true) + } else { + setLoading(false) + } + } + }, [showLoader, errors?.length]) const sortedPaymentMethods = paymentMethods != null && sortBy != null ? sortPaymentMethods(paymentMethods, sortBy) diff --git a/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx b/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx index abd255ad..dfa41f1c 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethodsContainer.tsx @@ -1,32 +1,37 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -import PaymentMethodContext, { - defaultPaymentMethodContext, -} from "#context/PaymentMethodContext" import { + type JSX, type ReactNode, useContext, useEffect, - useReducer, useMemo, - type JSX, + useReducer, } from "react" +import CommerceLayerContext from "#context/CommerceLayerContext" +import OrderContext from "#context/OrderContext" +import PaymentMethodContext, { + defaultPaymentMethodContext, +} from "#context/PaymentMethodContext" import paymentMethodReducer, { - paymentMethodInitialState, getPaymentMethods, type PaymentMethodConfig, - setPaymentMethodConfig, type PaymentRef, + paymentMethodInitialState, + setPaymentMethodConfig, setPaymentRef, } from "#reducers/PaymentMethodReducer" -import OrderContext from "#context/OrderContext" -import CommerceLayerContext from "#context/CommerceLayerContext" import type { BaseError } from "#typings/errors" import useCustomContext from "#utils/hooks/useCustomContext" import { isEmpty } from "#utils/isEmpty" import { setCustomerOrderParam } from "#utils/localStorage" interface Props { + /** + * The children components to render inside the PaymentMethodsContainer. + */ children: ReactNode + /** + * Optional configuration for payment methods. + */ config?: PaymentMethodConfig } export function PaymentMethodsContainer(props: Props): JSX.Element { From 6bd85e39900b92a81492ae0c27c2b32d4ac02f9c Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Mon, 23 Jun 2025 11:44:05 +0200 Subject: [PATCH 045/292] v4.25.0-beta.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 2c4f674d..09df5b36 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.24.1", + "version": "4.25.0-beta.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 604b0840..b60b9604 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.24.1", + "version": "4.25.0-beta.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 406ce59cd51731cb4a9730f40fc9bee9132033c8 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Tue, 24 Jun 2025 17:31:12 +0200 Subject: [PATCH 046/292] Fix `showLoader` flow --- .../payment_methods/PaymentMethod.tsx | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx index 51d78272..ef321dea 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx @@ -132,7 +132,11 @@ export function PaymentMethod({ if (ps && paymentMethod && onClick != null) { onClick({ payment: paymentMethod, order, paymentSource: ps }) setTimeout(() => { - setLoading(false) + if (showLoader) { + setLoading(showLoader) + } else { + setLoading(false) + } }, 200) } setLoadingPlaceOrder({ loading: false }) @@ -186,7 +190,11 @@ export function PaymentMethod({ setPaymentSourceCreated(true) onClick({ payment: paymentMethod, order, paymentSource: ps }) setTimeout(() => { - setLoading(false) + if (showLoader) { + setLoading(showLoader) + } else { + setLoading(false) + } }, 200) } if (getCustomerPaymentSources) { @@ -199,7 +207,11 @@ export function PaymentMethod({ } } else { setTimeout(() => { - setLoading(false) + if (showLoader) { + setLoading(showLoader) + } else { + setLoading(false) + } }, 200) } } @@ -213,11 +225,19 @@ export function PaymentMethod({ if (isSingle && autoSelectSinglePaymentMethod) { if (paymentSource) { setTimeout(() => { - setLoading(false) + if (showLoader) { + setLoading(showLoader) + } else { + setLoading(false) + } }, 200) } } else { - setLoading(false) + if (showLoader) { + setLoading(showLoader) + } else { + setLoading(false) + } } } if (currentPaymentMethodId) setPaymentSelected(currentPaymentMethodId) From cceff3c99b2952930b51f5ef4aed0cd029feb8a0 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Tue, 24 Jun 2025 17:32:20 +0200 Subject: [PATCH 047/292] v4.25.0-beta.1 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 09df5b36..41869fa8 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.25.0-beta.0", + "version": "4.25.0-beta.1", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index b60b9604..ee3e0534 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.25.0-beta.0", + "version": "4.25.0-beta.1", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 0aa1294edd2c0981568a14268210fa66df55faf7 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 25 Jun 2025 12:29:27 +0200 Subject: [PATCH 048/292] Remove unused code --- .../src/components/payment_gateways/StripeGateway.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/react-components/src/components/payment_gateways/StripeGateway.tsx b/packages/react-components/src/components/payment_gateways/StripeGateway.tsx index e9eb72d7..f3b9b69f 100644 --- a/packages/react-components/src/components/payment_gateways/StripeGateway.tsx +++ b/packages/react-components/src/components/payment_gateways/StripeGateway.tsx @@ -1,3 +1,6 @@ +import type { StripeElementLocale } from "@stripe/stripe-js" +import isEmpty from "lodash/isEmpty" +import { type JSX, useContext } from "react" import type { GatewayBaseType } from "#components/payment_gateways/PaymentGateway" import StripePayment from "#components/payment_source/StripePayment" import CustomerContext from "#context/CustomerContext" @@ -10,9 +13,6 @@ import { type PaymentResource, } from "#reducers/PaymentMethodReducer" import getCardDetails from "#utils/getCardDetails" -import type { StripeElementLocale } from "@stripe/stripe-js" -import isEmpty from "lodash/isEmpty" -import { useContext, type JSX } from "react" import PaymentCardsTemplate from "../utils/PaymentCardsTemplate" type Props = GatewayBaseType @@ -25,8 +25,6 @@ export function StripeGateway(props: Props): JSX.Element | null { children, templateCustomerCards, show, - loading, - loaderComponent, templateCustomerSaveToWallet, ...p } = props From 241af63ed4620c5feac4fcfc08b32f552339fb6a Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Wed, 25 Jun 2025 14:36:11 +0200 Subject: [PATCH 049/292] v4.25.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 41869fa8..66a943b3 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.25.0-beta.1", + "version": "4.25.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index ee3e0534..ede0d6d9 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.25.0-beta.1", + "version": "4.25.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From 33f61bafeb27b6946768f02656b1de50d0118c9e Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 26 Jun 2025 19:08:07 +0200 Subject: [PATCH 050/292] Fix draft order and showLoader flow --- .../components/orders/PlaceOrderButton.tsx | 37 ++++++----- .../payment_methods/PaymentMethod.tsx | 33 ++++++---- .../payment_source/StripePayment.tsx | 62 ++++++++++--------- 3 files changed, 74 insertions(+), 58 deletions(-) diff --git a/packages/react-components/src/components/orders/PlaceOrderButton.tsx b/packages/react-components/src/components/orders/PlaceOrderButton.tsx index 867eb542..4b0bf506 100644 --- a/packages/react-components/src/components/orders/PlaceOrderButton.tsx +++ b/packages/react-components/src/components/orders/PlaceOrderButton.tsx @@ -1,23 +1,23 @@ +import type { Order } from "@commercelayer/sdk" +import isFunction from "lodash/isFunction" import { + type JSX, + type MouseEvent, type ReactNode, useContext, useEffect, useRef, useState, - type MouseEvent, - type JSX, } from "react" -import Parent from "../utils/Parent" -import type { ChildrenFunction } from "#typings/index" -import PlaceOrderContext from "#context/PlaceOrderContext" -import isFunction from "lodash/isFunction" -import PaymentMethodContext from "#context/PaymentMethodContext" import OrderContext from "#context/OrderContext" -import getCardDetails from "#utils/getCardDetails" +import PaymentMethodContext from "#context/PaymentMethodContext" +import PlaceOrderContext from "#context/PlaceOrderContext" +import useCommerceLayer from "#hooks/useCommerceLayer" import type { BaseError } from "#typings/errors" -import type { Order } from "@commercelayer/sdk" +import type { ChildrenFunction } from "#typings/index" +import getCardDetails from "#utils/getCardDetails" import { checkPaymentIntent } from "#utils/stripe/retrievePaymentIntent" -import useCommerceLayer from "#hooks/useCommerceLayer" +import Parent from "../utils/Parent" interface ChildrenProps extends Omit { /** @@ -291,7 +291,6 @@ export function PlaceOrderButton(props: Props): JSX.Element { }) } }, [order, order?.payment_status, order?.status, paymentType, onClick]) - // biome-ignore lint/correctness/useExhaustiveDependencies: Need to test useEffect(() => { // Checkout.com redirect flow if ( @@ -303,8 +302,8 @@ export function PlaceOrderButton(props: Props): JSX.Element { ) { // @ts-expect-error no type const paymentResponse = order?.payment_source?.payment_response - const paymentStatus = paymentResponse?.status?.toLowerCase() - if (paymentStatus === "pending") { + const paymentStatus = paymentResponse?.status + if (paymentStatus && paymentStatus.toLowerCase() === "pending") { setPaymentSource({ paymentSourceId: paymentSource?.id, paymentResource: "checkout_com_payments", @@ -314,7 +313,7 @@ export function PlaceOrderButton(props: Props): JSX.Element { }).then((res) => { // @ts-expect-error no type const paymentStatus: string = res?.payment_response?.status - if (paymentStatus.toLowerCase() === "authorized") { + if (paymentStatus && paymentStatus.toLowerCase() === "authorized") { handleClick() } else { if (options?.checkoutCom) { @@ -345,8 +344,11 @@ export function PlaceOrderButton(props: Props): JSX.Element { */ const paymentSourceStatus = // @ts-expect-error no type - order?.payment_source?.payment_response?.status.toLowerCase() - if (["captured", "authorized"].includes(paymentSourceStatus)) { + order?.payment_source?.payment_response?.status + if ( + paymentSourceStatus && + ["captured", "authorized"].includes(paymentSourceStatus.toLowerCase()) + ) { setPlaceOrder?.({ paymentSource, }).then((placed) => { @@ -360,7 +362,6 @@ export function PlaceOrderButton(props: Props): JSX.Element { } } }, [options?.checkoutCom, paymentType, order?.payment_source?.id, status]) - // biome-ignore lint/correctness/useExhaustiveDependencies: Need to test useEffect(() => { if (ref?.current != null && setButtonRef != null) { setButtonRef(ref) @@ -477,6 +478,8 @@ export function PlaceOrderButton(props: Props): JSX.Element { currentPaymentMethodRef?.current?.onsubmit && options?.checkoutCom?.session_id && // @ts-expect-error no type + checkPaymentSource?.payment_response?.status && + // @ts-expect-error no type checkPaymentSource?.payment_response?.status?.toLowerCase() === "declined" ) { /** diff --git a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx index ef321dea..456d5cdf 100644 --- a/packages/react-components/src/components/payment_methods/PaymentMethod.tsx +++ b/packages/react-components/src/components/payment_methods/PaymentMethod.tsx @@ -114,6 +114,9 @@ export function PaymentMethod({ const { order } = useContext(OrderContext) const { getCustomerPaymentSources } = useContext(CustomerContext) const { status } = useContext(PlaceOrderContext) + console.log("PaymentMethod", { + errors, + }) useEffect(() => { if (paymentMethods != null && !isEmpty(paymentMethods) && expressPayments) { const [paymentMethod] = getAvailableExpressPayments(paymentMethods) @@ -132,7 +135,7 @@ export function PaymentMethod({ if (ps && paymentMethod && onClick != null) { onClick({ payment: paymentMethod, order, paymentSource: ps }) setTimeout(() => { - if (showLoader) { + if (showLoader && errors?.length === 0) { setLoading(showLoader) } else { setLoading(false) @@ -144,7 +147,7 @@ export function PaymentMethod({ selectExpressPayment() } } - }, [!isEmpty(paymentMethods), expressPayments]) + }, [!isEmpty(paymentMethods), expressPayments, errors?.length]) useEffect(() => { if ( paymentMethods != null && @@ -190,7 +193,7 @@ export function PaymentMethod({ setPaymentSourceCreated(true) onClick({ payment: paymentMethod, order, paymentSource: ps }) setTimeout(() => { - if (showLoader) { + if (showLoader && errors?.length === 0) { setLoading(showLoader) } else { setLoading(false) @@ -207,7 +210,7 @@ export function PaymentMethod({ } } else { setTimeout(() => { - if (showLoader) { + if (showLoader && errors?.length === 0) { setLoading(showLoader) } else { setLoading(false) @@ -218,14 +221,14 @@ export function PaymentMethod({ autoSelect() } } - }, [!isEmpty(paymentMethods), order?.payment_source != null]) + }, [!isEmpty(paymentMethods), order?.payment_source != null, errors?.length]) useEffect(() => { if (paymentMethods) { const isSingle = paymentMethods.length === 1 if (isSingle && autoSelectSinglePaymentMethod) { if (paymentSource) { setTimeout(() => { - if (showLoader) { + if (showLoader && errors?.length === 0) { setLoading(showLoader) } else { setLoading(false) @@ -233,7 +236,7 @@ export function PaymentMethod({ }, 200) } } else { - if (showLoader) { + if (showLoader && errors?.length === 0) { setLoading(showLoader) } else { setLoading(false) @@ -245,19 +248,23 @@ export function PaymentMethod({ setLoading(true) setPaymentSelected("") } - }, [paymentMethods, currentPaymentMethodId]) + }, [paymentMethods, currentPaymentMethodId, errors?.length]) useEffect(() => { - console.log("showLoader", { showLoader }) + // @ts-expect-error no type + const status = order?.payment_source?.payment_response?.status // If showLoader is undefined, we don't change the loading if (showLoader !== undefined) { - if (showLoader && errors?.length === 0) { - console.log("showLoader is true") - setLoading(true) + if (showLoader && status) { + if (status.toLowerCase() === "declined") { + setLoading(false) + } else { + setLoading(true) + } } else { setLoading(false) } } - }, [showLoader, errors?.length]) + }, [showLoader, order?.payment_source]) const sortedPaymentMethods = paymentMethods != null && sortBy != null ? sortPaymentMethods(paymentMethods, sortBy) diff --git a/packages/react-components/src/components/payment_source/StripePayment.tsx b/packages/react-components/src/components/payment_source/StripePayment.tsx index 062626df..7cee18e4 100644 --- a/packages/react-components/src/components/payment_source/StripePayment.tsx +++ b/packages/react-components/src/components/payment_source/StripePayment.tsx @@ -1,5 +1,3 @@ -import { useContext, useEffect, useRef, useState, type JSX } from "react" -import PaymentMethodContext from "#context/PaymentMethodContext" import { Elements, PaymentElement, useElements } from "@stripe/react-stripe-js" import type { Stripe, @@ -10,14 +8,16 @@ import type { StripePaymentElementChangeEvent, StripePaymentElementOptions, } from "@stripe/stripe-js" -import type { PaymentMethodConfig } from "#reducers/PaymentMethodReducer" -import type { PaymentSourceProps } from "./PaymentSource" +import { type JSX, useContext, useEffect, useRef, useState } from "react" import Parent from "#components/utils/Parent" -import { setCustomerOrderParam } from "#utils/localStorage" import OrderContext from "#context/OrderContext" -import { StripeExpressPayment } from "./StripeExpressPayment" -import useCommerceLayer from "#hooks/useCommerceLayer" +import PaymentMethodContext from "#context/PaymentMethodContext" import PlaceOrderContext from "#context/PlaceOrderContext" +import useCommerceLayer from "#hooks/useCommerceLayer" +import type { PaymentMethodConfig } from "#reducers/PaymentMethodReducer" +import { setCustomerOrderParam } from "#utils/localStorage" +import type { PaymentSourceProps } from "./PaymentSource" +import { StripeExpressPayment } from "./StripeExpressPayment" export interface StripeConfig { containerClassName?: string @@ -59,6 +59,8 @@ const defaultAppearance: StripeElementsOptions["appearance"] = { }, } +let selectedPaymentMethodType: string | null = null + function StripePaymentForm({ options = defaultOptions, templateCustomerSaveToWallet, @@ -71,7 +73,6 @@ function StripePaymentForm({ const { sdkClient } = useCommerceLayer() const { setPlaceOrderStatus } = useContext(PlaceOrderContext) const elements = useElements() - // biome-ignore lint/correctness/useExhaustiveDependencies: Avoid rerendering the form useEffect(() => { if (ref.current && stripe && elements) { ref.current.onsubmit = async () => { @@ -96,25 +97,30 @@ function StripePaymentForm({ const sdk = sdkClient() if (sdk == null) return false if (order == null) return false - const { status } = await sdk.orders.retrieve(order?.id, { - fields: ["status"], - }) - const isDraftOrder = status === "draft" - if (isDraftOrder) { - /** - * Draft order cannot be placed - */ - setOrderErrors([ - { - code: "VALIDATION_ERROR", - resource: "orders", - message: "Draft order cannot be placed", - }, - ]) - setPlaceOrderStatus?.({ - status: "disabled", + if ( + selectedPaymentMethodType && + !["apple_pay", "google_pay"].includes(selectedPaymentMethodType) + ) { + const { status } = await sdk.orders.retrieve(order?.id, { + fields: ["status"], }) - return false + const isDraftOrder = status === "draft" + if (isDraftOrder) { + /** + * Draft order cannot be placed + */ + setOrderErrors([ + { + code: "VALIDATION_ERROR", + resource: "orders", + message: "Draft order cannot be placed", + }, + ]) + setPlaceOrderStatus?.({ + status: "disabled", + }) + return false + } } const savePaymentSourceToCustomerWallet: string = // @ts-expect-error no type @@ -171,10 +177,11 @@ function StripePaymentForm({ async function handleChange(event: StripePaymentElementChangeEvent) { console.debug("StripePaymentElement onChange event", { event }) + selectedPaymentMethodType = event.value.type // Handle change events from the PaymentElement if ( event.complete && - ["applepay", "googlepay"].includes(event.value.type) + ["apple_pay", "google_pay"].includes(event.value.type) ) { const sdk = sdkClient() if (sdk == null) return @@ -249,7 +256,6 @@ export function StripePayment({ appearance, ...divProps } = p - // biome-ignore lint/correctness/useExhaustiveDependencies: Avoid refreshing the stripe object useEffect(() => { if (show && publishableKey) { import("@stripe/stripe-js").then(({ loadStripe }) => { From de058576fc65190c97d98b416635e70806bcae33 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Thu, 26 Jun 2025 19:10:38 +0200 Subject: [PATCH 051/292] v4.25.1-beta.0 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 66a943b3..01efd8ea 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.25.0", + "version": "4.25.1-beta.0", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index ede0d6d9..a0c4fabd 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.25.0", + "version": "4.25.1-beta.0", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From ec0ea2ff12f40a4f58c916a0050390452a4a1188 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 27 Jun 2025 16:16:38 +0200 Subject: [PATCH 052/292] v4.25.1 --- lerna.json | 2 +- packages/react-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 01efd8ea..4583bd0f 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, "npmClient": "pnpm", - "version": "4.25.1-beta.0", + "version": "4.25.1", "command": { "version": { "preid": "beta" diff --git a/packages/react-components/package.json b/packages/react-components/package.json index a0c4fabd..6818840e 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/react-components", - "version": "4.25.1-beta.0", + "version": "4.25.1", "description": "The Official Commerce Layer React Components", "main": "lib/cjs/index.js", "module": "lib/esm/index.js", From f47d0ba0e5b56874d0d248fb548058f07caecd84 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Fri, 11 Jul 2025 12:19:01 +0200 Subject: [PATCH 053/292] Fix post requests when a customer edit an address --- .../src/components/addresses/Address.tsx | 64 +++--- .../src/components/addresses/AddressField.tsx | 38 ++-- .../addresses/SaveAddressesButton.tsx | 72 +++---- .../payment_methods/PaymentMethod.tsx | 3 - .../src/reducers/AddressReducer.ts | 185 ++++++++++-------- .../src/reducers/PlaceOrderReducer.ts | 14 +- .../src/utils/addressesManager.ts | 95 +++++---- 7 files changed, 252 insertions(+), 219 deletions(-) diff --git a/packages/react-components/src/components/addresses/Address.tsx b/packages/react-components/src/components/addresses/Address.tsx index 62ae2be1..071f0205 100644 --- a/packages/react-components/src/components/addresses/Address.tsx +++ b/packages/react-components/src/components/addresses/Address.tsx @@ -1,21 +1,21 @@ -import { useContext, useState, useEffect, type JSX } from 'react'; -import AddressChildrenContext from '#context/AddressChildrenContext' -import CustomerContext from '#context/CustomerContext' -import BillingAddressContext from '#context/BillingAddressContext' -import ShippingAddressContext from '#context/ShippingAddressContext' -import type { Address as AddressType } from '@commercelayer/sdk' -import isEmpty from 'lodash/isEmpty' -import AddressContext from '#context/AddressContext' -import OrderContext from '#context/OrderContext' +import type { Address as AddressType } from "@commercelayer/sdk" +import isEmpty from "lodash/isEmpty" +import { type JSX, useContext, useEffect, useState } from "react" import AddressCardsTemplate, { type AddressCardsTemplateChildren, type CustomerAddress, - type HandleSelect -} from '#components/utils/AddressCardsTemplate' -import type { DefaultChildrenType } from '#typings/globals' + type HandleSelect, +} from "#components/utils/AddressCardsTemplate" +import AddressChildrenContext from "#context/AddressChildrenContext" +import AddressContext from "#context/AddressContext" +import BillingAddressContext from "#context/BillingAddressContext" +import CustomerContext from "#context/CustomerContext" +import OrderContext from "#context/OrderContext" +import ShippingAddressContext from "#context/ShippingAddressContext" +import type { DefaultChildrenType } from "#typings/globals" interface Props - extends Omit { + extends Omit { children: DefaultChildrenType | AddressCardsTemplateChildren selectedClassName?: string disabledClassName?: string @@ -45,8 +45,8 @@ export function Address(props: Props): JSX.Element { const { children, className, - selectedClassName = '', - disabledClassName = '', + selectedClassName = "", + disabledClassName = "", onSelect, addresses = [], deselect = false, @@ -54,10 +54,10 @@ export function Address(props: Props): JSX.Element { } = props const { addresses: addressesContext } = useContext(CustomerContext) const { setBillingAddress, billingCustomerAddressId } = useContext( - BillingAddressContext + BillingAddressContext, ) const { setShippingAddress, shippingCustomerAddressId } = useContext( - ShippingAddressContext + ShippingAddressContext, ) const { shipToDifferentAddress, billingAddressId, shippingAddressId } = useContext(AddressContext) @@ -82,7 +82,7 @@ export function Address(props: Props): JSX.Element { address.reference != null ) { setBillingAddress(address.id, { - customerAddressId: address.reference + customerAddressId: address.reference, }) } if (shippingCustomerAddressId) { @@ -96,15 +96,15 @@ export function Address(props: Props): JSX.Element { address.reference != null ) { setShippingAddress(address.id, { - customerAddressId: address.reference + customerAddressId: address.reference, }) } }) } if (deselect) { const disabledSaveButton = async (): Promise => { - setBillingAddress && (await setBillingAddress('')) - setShippingAddress && (await setShippingAddress('')) + setBillingAddress && (await setBillingAddress("")) + setShippingAddress && (await setShippingAddress("")) } disabledSaveButton() } @@ -113,14 +113,14 @@ export function Address(props: Props): JSX.Element { billingCustomerAddressId, shippingCustomerAddressId, addressesContext, - shipToDifferentAddress + shipToDifferentAddress, ]) const handleSelect: HandleSelect = async ( k, addressId, customerAddressId, disabled, - address + address, ) => { !disabled && setSelected(k) setBillingAddress && @@ -132,7 +132,7 @@ export function Address(props: Props): JSX.Element { } const countryLock = order?.shipping_country_code_lock const components = - typeof children === 'function' + typeof children === "function" ? [] : items .filter((address) => { @@ -147,19 +147,19 @@ export function Address(props: Props): JSX.Element { }) .map((address, k) => { const addressProps = { - address + address, } const disabled = (setShippingAddress && countryLock && countryLock !== address.country_code) || false - const selectedClass = deselect ? '' : selectedClassName + const selectedClass = deselect ? "" : selectedClassName const addressSelectedClass = - selected === k ? `${className || ''} ${selectedClass}` : className - const customerAddressId: string = address?.reference || '' + selected === k ? `${className || ""} ${selectedClass}` : className + const customerAddressId: string = address?.reference || "" const finalClassName = disabled - ? `${className || ''} ${disabledClassName}` + ? `${className || ""} ${disabledClassName}` : addressSelectedClass return ( @@ -171,7 +171,7 @@ export function Address(props: Props): JSX.Element { address.id, customerAddressId, disabled, - address + address, ) }} data-disabled={disabled} @@ -187,9 +187,9 @@ export function Address(props: Props): JSX.Element { selected, handleSelect, countryLock, - ...props + ...props, } - return typeof children === 'function' ? ( + return typeof children === "function" ? ( {children} ) : ( <>{components} diff --git a/packages/react-components/src/components/addresses/AddressField.tsx b/packages/react-components/src/components/addresses/AddressField.tsx index 7bd30ede..3c75dd4a 100644 --- a/packages/react-components/src/components/addresses/AddressField.tsx +++ b/packages/react-components/src/components/addresses/AddressField.tsx @@ -1,12 +1,12 @@ -import { useContext, type ReactNode, type JSX } from 'react'; -import AddressChildrenContext from '#context/AddressChildrenContext' -import Parent from '#components/utils/Parent' -import type { AddressFieldView } from '#reducers/AddressReducer' -import type { Address } from '@commercelayer/sdk' -import CustomerContext from '#context/CustomerContext' -import type { ChildrenFunction } from '#typings/index' +import type { Address } from "@commercelayer/sdk" +import { type JSX, type ReactNode, useContext } from "react" +import Parent from "#components/utils/Parent" +import AddressChildrenContext from "#context/AddressChildrenContext" +import CustomerContext from "#context/CustomerContext" +import type { AddressFieldView } from "#reducers/AddressReducer" +import type { ChildrenFunction } from "#typings/index" -interface ChildrenProps extends Omit { +interface ChildrenProps extends Omit { address: Address } @@ -14,7 +14,7 @@ type ChildrenProp = ChildrenFunction type Props = | { - type?: 'field' + type?: "field" label?: never onClick?: never children?: ChildrenProp @@ -22,7 +22,7 @@ type Props = className?: string } | { - type?: 'edit' + type?: "edit" label: string | ReactNode onClick: (address: Address) => void children?: ChildrenProp @@ -30,7 +30,7 @@ type Props = className?: string } | { - type?: 'delete' + type?: "delete" label: string onClick: () => void children?: ChildrenProp @@ -38,7 +38,7 @@ type Props = className?: string } | { - type?: 'edit' | 'field' | 'delete' + type?: "edit" | "field" | "delete" label?: never onClick?: never children: ChildrenProp @@ -69,30 +69,30 @@ type Props = * */ export function AddressField(props: Props): JSX.Element { - const { name, type = 'field', label, onClick, ...p } = props + const { name, type = "field", label, onClick, ...p } = props const { address } = useContext(AddressChildrenContext) - const text = name && address ? address?.[name] : '' + const text = name && address ? address?.[name] : "" const { deleteCustomerAddress } = useContext(CustomerContext) const handleClick = (e: React.MouseEvent): void => { e.stopPropagation() e.preventDefault() - if (type === 'delete' && deleteCustomerAddress && address?.reference) { + if (type === "delete" && deleteCustomerAddress && address?.reference) { deleteCustomerAddress({ customerAddressId: address?.reference }) } address && onClick && onClick(address) } const parentProps = { address, - ...props + ...props, } return props.children ? ( {props.children} - ) : type === 'field' ? ( -

+ ) : type === "field" ? ( +

{text}

) : ( - + {label} ) diff --git a/packages/react-components/src/components/addresses/SaveAddressesButton.tsx b/packages/react-components/src/components/addresses/SaveAddressesButton.tsx index 8bc672ec..71dc8360 100644 --- a/packages/react-components/src/components/addresses/SaveAddressesButton.tsx +++ b/packages/react-components/src/components/addresses/SaveAddressesButton.tsx @@ -1,28 +1,28 @@ -import { type ReactNode, useContext, useState, type JSX } from 'react'; -import Parent from '#components/utils/Parent' -import type { ChildrenFunction } from '#typings/index' -import AddressContext from '#context/AddressContext' +import type { Order } from "@commercelayer/sdk" +import isFunction from "lodash/isFunction" +import { type JSX, type ReactNode, useContext, useState } from "react" +import Parent from "#components/utils/Parent" +import AddressContext from "#context/AddressContext" +import CustomerContext from "#context/CustomerContext" +import OrderContext from "#context/OrderContext" +import type { TCustomerAddress } from "#reducers/CustomerReducer" +import type { ChildrenFunction } from "#typings/index" import { + addressesController, countryLockController, - addressesController -} from '#utils/addressesManager' -import OrderContext from '#context/OrderContext' -import CustomerContext from '#context/CustomerContext' -import isFunction from 'lodash/isFunction' -import type { TCustomerAddress } from '#reducers/CustomerReducer' -import type { Order } from '@commercelayer/sdk' -import { validateValue } from '#utils/validateFormFields' -import { formCleaner } from '#utils/formCleaner' +} from "#utils/addressesManager" +import { formCleaner } from "#utils/formCleaner" +import { validateValue } from "#utils/validateFormFields" interface TOnClick { success: boolean order?: Order } -interface ChildrenProps extends Omit {} +interface ChildrenProps extends Omit {} interface Props - extends Omit { + extends Omit { children?: ChildrenFunction label?: string | ReactNode onClick?: (params: TOnClick) => void @@ -33,7 +33,7 @@ interface Props export function SaveAddressesButton(props: Props): JSX.Element { const { children, - label = 'Continue to delivery', + label = "Continue to delivery", resource, disabled = false, addressId, @@ -49,26 +49,26 @@ export function SaveAddressesButton(props: Props): JSX.Element { saveAddresses, billingAddressId, shippingAddressId, - invertAddresses + invertAddresses, } = useContext(AddressContext) const { order } = useContext(OrderContext) const { customerEmail: email, addresses, isGuest, - createCustomerAddress + createCustomerAddress, } = useContext(CustomerContext) const [forceDisable, setForceDisable] = useState(disabled) let customerEmail = !!( - !!(isGuest === true || typeof isGuest === 'undefined') && + !!(isGuest === true || typeof isGuest === "undefined") && !order?.customer_email ) - if (email != null && email !== '') { + if (email != null && email !== "") { const isValidEmail = validateValue( email, - 'customer_email', - 'email', - 'orders' + "customer_email", + "email", + "orders", ) customerEmail = Object.keys(isValidEmail).length > 0 } @@ -77,10 +77,10 @@ export function SaveAddressesButton(props: Props): JSX.Element { return { ...acc, // @ts-expect-error type mismatch - [key.replace(`shipping_address_`, '')]: shippingAddress[key].value + [key.replace("shipping_address_", "")]: shippingAddress[key].value, } }, - {} + {}, ) const { billingDisable, shippingDisable } = addressesController({ invertAddresses, @@ -91,7 +91,7 @@ export function SaveAddressesButton(props: Props): JSX.Element { shippingAddressId, billingAddressId, errors, - requiredMetadataFields + requiredMetadataFields, }) const countryLockDisable = countryLockController({ countryCodeLock: order?.shipping_country_code_lock, @@ -101,7 +101,7 @@ export function SaveAddressesButton(props: Props): JSX.Element { billing_address: billingAddress, shipping_address: shippingAddress, shippingAddressId, - lineItems: order?.line_items + lineItems: order?.line_items, }) // NOTE: This is a temporary fix to avoid the button to be disabled when the user is editing an address const invertAddressesDisable = @@ -119,7 +119,7 @@ export function SaveAddressesButton(props: Props): JSX.Element { success: boolean order?: Order } = { - success: false + success: false, } setForceDisable(true) // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check @@ -132,16 +132,16 @@ export function SaveAddressesButton(props: Props): JSX.Element { customerEmail: email, customerAddress: { resource: invertAddresses - ? 'shipping_address' - : 'billing_address', - id: addressId - } + ? "shipping_address" + : "billing_address", + id: addressId, + }, }) break } case order != null && saveAddresses != null: { response = await saveAddresses({ - customerEmail: email + customerEmail: email, }) break } @@ -152,7 +152,7 @@ export function SaveAddressesButton(props: Props): JSX.Element { if (addressId) address.id = addressId createCustomerAddress(address as TCustomerAddress) response = { - success: true + success: true, } break } @@ -167,13 +167,13 @@ export function SaveAddressesButton(props: Props): JSX.Element { label, resource, handleClick, - disabled: disable + disabled: disable, } return children ? ( {children} ) : (