diff --git a/src/modules/stripe/actions/initialize-transaction.ts b/src/modules/stripe/actions/initialize-transaction.ts index 6d7818e..714372b 100644 --- a/src/modules/stripe/actions/initialize-transaction.ts +++ b/src/modules/stripe/actions/initialize-transaction.ts @@ -53,6 +53,14 @@ const saleorDataSchema = z.object({ }), }); +const CardPaymentMethodSchema = z.object({ + paymentMethod: z.literal("card"), + requestThreeDSecure: z + .enum(["any", "automatic", "challenge"]) + .optional() + .default("automatic"), +}); + export const initializeTransaction = actionClient .schema( z.object({ @@ -60,9 +68,9 @@ export const initializeTransaction = actionClient checkoutId: z.string(), paymentGatewayId: z.string(), data: z.object({ - paymentIntent: z.object({ - paymentMethod: z.string(), - }), + paymentIntent: z.discriminatedUnion("paymentMethod", [ + CardPaymentMethodSchema, + ]), }), amount: z.number(), idempotencyKey: z.string(), diff --git a/src/modules/stripe/components/stripe-checkout-form.tsx b/src/modules/stripe/components/stripe-checkout-form.tsx index 2f4f148..80a61d8 100644 --- a/src/modules/stripe/components/stripe-checkout-form.tsx +++ b/src/modules/stripe/components/stripe-checkout-form.tsx @@ -53,7 +53,7 @@ export const StripeCheckoutFormWrapped = (props: { const stripe = useStripe(); const elements = useElements(); const [loading, setLoading] = useState(false); - const [paymentMethod, setPaymentMethod] = useState(null); + const [paymentMethod, setPaymentMethod] = useState<"card" | null>(null); const handleSubmit = async (event: any) => { if (!stripe) { @@ -99,6 +99,7 @@ export const StripeCheckoutFormWrapped = (props: { data: { paymentIntent: { paymentMethod, + // requestThreeDSecure: "any", }, }, }); @@ -165,7 +166,7 @@ export const StripeCheckoutFormWrapped = (props: {
{ - setPaymentMethod(event.value.type); + setPaymentMethod(event.value.type as "card"); }} />