From f045f17a2b1e853ac20a2d2e0a960891864f146e Mon Sep 17 00:00:00 2001 From: Advait Paliwal Date: Sat, 14 Feb 2026 15:59:41 -0800 Subject: [PATCH] Add params passthrough to createCheckoutSession createCheckoutSession previously only exposed a fixed set of Stripe Checkout parameters, forcing users to bypass the component and call the Stripe SDK directly for common needs like promotion codes, billing address collection, shipping, custom fields, or multiple line items. Adds an optional `params` field that accepts any Stripe.Checkout.SessionCreateParams and merges them into the session config. The `mode` field is excluded from overrides to prevent inconsistency with the component's internal routing. Co-Authored-By: Claude Opus 4.6 --- src/client/index.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/client/index.ts b/src/client/index.ts index b60bdfb..48a352e 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -151,6 +151,11 @@ export class StripeSubscriptions { /** * Create a Stripe Checkout session for one-time payments or subscriptions. + * + * Use `params` to pass additional Stripe Checkout Session parameters directly + * to the Stripe API (e.g. allow_promotion_codes, billing_address_collection, + * shipping_address_collection, custom_fields, line_items, subscription_data, etc.). + * Values in `params` override any constructed defaults except `mode`. */ async createCheckoutSession( ctx: ActionCtx, @@ -166,6 +171,8 @@ export class StripeSubscriptions { subscriptionMetadata?: Record; /** Metadata to attach to the payment intent (only for mode: "payment") */ paymentIntentMetadata?: Record; + /** Additional Stripe Checkout Session parameters passed through to the API */ + params?: Partial; }, ) { const stripe = new StripeSDK(this.apiKey); @@ -187,21 +194,22 @@ export class StripeSubscriptions { sessionParams.customer = args.customerId; } - // Add subscription metadata for linking userId/orgId if (args.mode === "subscription" && args.subscriptionMetadata) { sessionParams.subscription_data = { metadata: args.subscriptionMetadata, }; } - // Add payment intent metadata for linking userId/orgId if (args.mode === "payment" && args.paymentIntentMetadata) { sessionParams.payment_intent_data = { metadata: args.paymentIntentMetadata, }; } - const session = await stripe.checkout.sessions.create(sessionParams); + const { mode: _mode, ...paramsOverrides } = args.params || {}; + const finalParams = { ...sessionParams, ...paramsOverrides }; + + const session = await stripe.checkout.sessions.create(finalParams); return { sessionId: session.id,