@stripe-sdk/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +700 -0
- package/dist/client/index.d.mts +198 -0
- package/dist/client/index.d.ts +198 -0
- package/dist/client/index.js +517 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/index.mjs +506 -0
- package/dist/client/index.mjs.map +1 -0
- package/dist/index-D8rM_YD4.d.mts +375 -0
- package/dist/index-D8rM_YD4.d.ts +375 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1800 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1708 -0
- package/dist/index.mjs.map +1 -0
- package/dist/next/index.d.mts +65 -0
- package/dist/next/index.d.ts +65 -0
- package/dist/next/index.js +450 -0
- package/dist/next/index.js.map +1 -0
- package/dist/next/index.mjs +443 -0
- package/dist/next/index.mjs.map +1 -0
- package/dist/server/index.d.mts +115 -0
- package/dist/server/index.d.ts +115 -0
- package/dist/server/index.js +1290 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +1208 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/webhooks/index.d.mts +2 -0
- package/dist/server/webhooks/index.d.ts +2 -0
- package/dist/server/webhooks/index.js +156 -0
- package/dist/server/webhooks/index.js.map +1 -0
- package/dist/server/webhooks/index.mjs +152 -0
- package/dist/server/webhooks/index.mjs.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/stripe-client.ts","../src/utils/errors.ts","../src/server/payments/index.ts","../src/server/customers/index.ts","../src/server/subscriptions/index.ts","../src/server/products/index.ts","../src/server/invoices/index.ts","../src/server/refunds/index.ts","../src/server/connect/index.ts","../src/server/coupons/index.ts","../src/server/webhooks/index.ts","../src/client/providers/StripeProvider.tsx","../src/client/hooks/usePayment.ts","../src/client/hooks/useSetupIntent.ts","../src/client/hooks/useCheckout.ts","../src/client/components/CheckoutForm.tsx","../src/client/components/SetupForm.tsx","../src/client/components/PricingTable.tsx","../src/client/components/SubscriptionManager.tsx"],"names":["Stripe","subscription","createContext","useContext","useMemo","loadStripe","jsx","Elements","useStripe","useElements","useState","useCallback","jsxs","LinkAuthenticationElement","PaymentElement","defaultFormatPrice"],"mappings":"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","file":"index.js","sourcesContent":["import Stripe from 'stripe';\nimport type { StripeSDKConfig } from '../types';\n\nlet stripeInstance: Stripe | null = null;\nlet currentConfig: StripeSDKConfig | null = null;\n\nexport function initStripe(config: StripeSDKConfig): Stripe {\n currentConfig = config;\n stripeInstance = new Stripe(config.secretKey, {\n apiVersion: config.apiVersion ?? '2025-01-27.acacia' as Stripe.LatestApiVersion,\n appInfo: config.appInfo ?? {\n name: '@stripe-sdk/core',\n version: '1.0.0',\n },\n });\n return stripeInstance;\n}\n\nexport function getStripe(): Stripe {\n if (!stripeInstance) {\n throw new Error(\n '[@stripe-sdk/core] Stripe not initialized. Call initStripe({ secretKey, publishableKey }) first.'\n );\n }\n return stripeInstance;\n}\n\nexport function getConfig(): StripeSDKConfig {\n if (!currentConfig) {\n throw new Error(\n '[@stripe-sdk/core] Stripe not initialized. Call initStripe({ secretKey, publishableKey }) first.'\n );\n }\n return currentConfig;\n}\n","import type Stripe from 'stripe';\nimport type { SDKResult } from '../types';\n\nexport function handleStripeError<T>(error: unknown): SDKResult<T> {\n if ((error as Stripe.errors.StripeError)?.type) {\n const stripeError = error as Stripe.errors.StripeError;\n return {\n data: null,\n error: {\n message: stripeError.message,\n type: stripeError.type,\n code: stripeError.code,\n statusCode: stripeError.statusCode,\n },\n };\n }\n\n return {\n data: null,\n error: {\n message: error instanceof Error ? error.message : 'An unknown error occurred',\n type: 'sdk_error',\n },\n };\n}\n\nexport function success<T>(data: T): SDKResult<T> {\n return { data, error: null };\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreatePaymentIntentInput,\n ConfirmPaymentInput,\n CreateCheckoutSessionInput,\n CreatePaymentLinkInput,\n CreateSetupIntentInput,\n PaginationInput,\n SDKResult,\n} from '../../types';\n\n// ─── Payment Intents ─────────────────────────────────────────────────\n\nexport async function createPaymentIntent(\n input: CreatePaymentIntentInput\n): Promise<SDKResult<Stripe.PaymentIntent>> {\n try {\n const stripe = getStripe();\n const paymentIntent = await stripe.paymentIntents.create({\n amount: input.amount,\n currency: input.currency,\n customer: input.customerId,\n payment_method: input.paymentMethodId,\n metadata: input.metadata,\n description: input.description,\n receipt_email: input.receiptEmail,\n setup_future_usage: input.setupFutureUsage,\n automatic_payment_methods:\n input.automaticPaymentMethods === false || input.paymentMethodId\n ? undefined\n : { enabled: true },\n return_url: input.returnUrl,\n });\n return success(paymentIntent);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrievePaymentIntent(\n paymentIntentId: string\n): Promise<SDKResult<Stripe.PaymentIntent>> {\n try {\n const stripe = getStripe();\n const paymentIntent = await stripe.paymentIntents.retrieve(paymentIntentId);\n return success(paymentIntent);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function confirmPaymentIntent(\n input: ConfirmPaymentInput\n): Promise<SDKResult<Stripe.PaymentIntent>> {\n try {\n const stripe = getStripe();\n const paymentIntent = await stripe.paymentIntents.confirm(input.paymentIntentId, {\n payment_method: input.paymentMethodId,\n return_url: input.returnUrl,\n });\n return success(paymentIntent);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function cancelPaymentIntent(\n paymentIntentId: string\n): Promise<SDKResult<Stripe.PaymentIntent>> {\n try {\n const stripe = getStripe();\n const paymentIntent = await stripe.paymentIntents.cancel(paymentIntentId);\n return success(paymentIntent);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listPaymentIntents(\n input?: PaginationInput & { customerId?: string }\n): Promise<SDKResult<Stripe.ApiList<Stripe.PaymentIntent>>> {\n try {\n const stripe = getStripe();\n const paymentIntents = await stripe.paymentIntents.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n customer: input?.customerId,\n });\n return success(paymentIntents);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Checkout Sessions ───────────────────────────────────────────────\n\nexport async function createCheckoutSession(\n input: CreateCheckoutSessionInput\n): Promise<SDKResult<Stripe.Checkout.Session>> {\n try {\n const stripe = getStripe();\n const session = await stripe.checkout.sessions.create({\n mode: input.mode,\n line_items: input.lineItems.map((item) => ({\n price: item.priceId,\n quantity: item.quantity,\n })),\n success_url: input.successUrl,\n cancel_url: input.cancelUrl,\n customer: input.customerId,\n customer_email: input.customerEmail,\n metadata: input.metadata,\n allow_promotion_codes: input.allowPromotionCodes,\n shipping_address_collection: input.shippingAddressCollection\n ? { allowed_countries: input.shippingAddressCollection.allowedCountries as Stripe.Checkout.SessionCreateParams.ShippingAddressCollection.AllowedCountry[] }\n : undefined,\n billing_address_collection: input.billingAddressCollection,\n subscription_data: input.trialPeriodDays\n ? { trial_period_days: input.trialPeriodDays }\n : undefined,\n tax_id_collection: input.taxIdCollection ? { enabled: true } : undefined,\n automatic_tax: input.automaticTax ? { enabled: true } : undefined,\n locale: input.locale as Stripe.Checkout.SessionCreateParams.Locale,\n });\n return success(session);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveCheckoutSession(\n sessionId: string\n): Promise<SDKResult<Stripe.Checkout.Session>> {\n try {\n const stripe = getStripe();\n const session = await stripe.checkout.sessions.retrieve(sessionId, {\n expand: ['line_items', 'payment_intent', 'subscription'],\n });\n return success(session);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listCheckoutSessions(\n input?: PaginationInput\n): Promise<SDKResult<Stripe.ApiList<Stripe.Checkout.Session>>> {\n try {\n const stripe = getStripe();\n const sessions = await stripe.checkout.sessions.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n });\n return success(sessions);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Payment Links ───────────────────────────────────────────────────\n\nexport async function createPaymentLink(\n input: CreatePaymentLinkInput\n): Promise<SDKResult<Stripe.PaymentLink>> {\n try {\n const stripe = getStripe();\n const paymentLink = await stripe.paymentLinks.create({\n line_items: input.lineItems.map((item) => ({\n price: item.priceId,\n quantity: item.quantity,\n adjustable_quantity: item.adjustableQuantity\n ? {\n enabled: item.adjustableQuantity.enabled,\n minimum: item.adjustableQuantity.minimum,\n maximum: item.adjustableQuantity.maximum,\n }\n : undefined,\n })),\n metadata: input.metadata,\n after_completion: input.afterCompletion\n ? {\n type: input.afterCompletion.type,\n redirect: input.afterCompletion.redirectUrl\n ? { url: input.afterCompletion.redirectUrl }\n : undefined,\n }\n : undefined,\n allow_promotion_codes: input.allowPromotionCodes,\n automatic_tax: input.automaticTax ? { enabled: true } : undefined,\n billing_address_collection: input.billingAddressCollection,\n shipping_address_collection: input.shippingAddressCollection\n ? { allowed_countries: input.shippingAddressCollection.allowedCountries as Stripe.PaymentLinkCreateParams.ShippingAddressCollection.AllowedCountry[] }\n : undefined,\n });\n return success(paymentLink);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrievePaymentLink(\n paymentLinkId: string\n): Promise<SDKResult<Stripe.PaymentLink>> {\n try {\n const stripe = getStripe();\n const paymentLink = await stripe.paymentLinks.retrieve(paymentLinkId);\n return success(paymentLink);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Setup Intents ───────────────────────────────────────────────────\n\nexport async function createSetupIntent(\n input: CreateSetupIntentInput\n): Promise<SDKResult<Stripe.SetupIntent>> {\n try {\n const stripe = getStripe();\n const setupIntent = await stripe.setupIntents.create({\n customer: input.customerId,\n payment_method_types: input.paymentMethodTypes,\n usage: input.usage,\n metadata: input.metadata,\n });\n return success(setupIntent);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveSetupIntent(\n setupIntentId: string\n): Promise<SDKResult<Stripe.SetupIntent>> {\n try {\n const stripe = getStripe();\n const setupIntent = await stripe.setupIntents.retrieve(setupIntentId);\n return success(setupIntent);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Payment Methods ─────────────────────────────────────────────────\n\nexport async function listPaymentMethods(\n customerId: string,\n type?: Stripe.PaymentMethodListParams.Type\n): Promise<SDKResult<Stripe.ApiList<Stripe.PaymentMethod>>> {\n try {\n const stripe = getStripe();\n const paymentMethods = await stripe.paymentMethods.list({\n customer: customerId,\n type: type ?? 'card',\n });\n return success(paymentMethods);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function attachPaymentMethod(\n paymentMethodId: string,\n customerId: string\n): Promise<SDKResult<Stripe.PaymentMethod>> {\n try {\n const stripe = getStripe();\n const paymentMethod = await stripe.paymentMethods.attach(paymentMethodId, {\n customer: customerId,\n });\n return success(paymentMethod);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function detachPaymentMethod(\n paymentMethodId: string\n): Promise<SDKResult<Stripe.PaymentMethod>> {\n try {\n const stripe = getStripe();\n const paymentMethod = await stripe.paymentMethods.detach(paymentMethodId);\n return success(paymentMethod);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreateCustomerInput,\n UpdateCustomerInput,\n ListCustomersInput,\n CreatePortalSessionInput,\n SDKResult,\n} from '../../types';\n\nexport async function createCustomer(\n input: CreateCustomerInput\n): Promise<SDKResult<Stripe.Customer>> {\n try {\n const stripe = getStripe();\n const customer = await stripe.customers.create({\n email: input.email,\n name: input.name,\n phone: input.phone,\n description: input.description,\n metadata: input.metadata,\n payment_method: input.paymentMethodId,\n invoice_settings: input.paymentMethodId\n ? { default_payment_method: input.paymentMethodId }\n : undefined,\n address: input.address\n ? {\n line1: input.address.line1,\n line2: input.address.line2,\n city: input.address.city,\n state: input.address.state,\n postal_code: input.address.postalCode,\n country: input.address.country,\n }\n : undefined,\n });\n return success(customer);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveCustomer(\n customerId: string\n): Promise<SDKResult<Stripe.Customer>> {\n try {\n const stripe = getStripe();\n const customer = await stripe.customers.retrieve(customerId, {\n expand: ['subscriptions', 'sources'],\n });\n if (customer.deleted) {\n return {\n data: null,\n error: { message: 'Customer has been deleted', type: 'invalid_request_error' },\n };\n }\n return success(customer as Stripe.Customer);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function updateCustomer(\n input: UpdateCustomerInput\n): Promise<SDKResult<Stripe.Customer>> {\n try {\n const stripe = getStripe();\n const customer = await stripe.customers.update(input.customerId, {\n email: input.email,\n name: input.name,\n phone: input.phone,\n description: input.description,\n metadata: input.metadata,\n invoice_settings: input.defaultPaymentMethodId\n ? { default_payment_method: input.defaultPaymentMethodId }\n : undefined,\n address: input.address\n ? {\n line1: input.address.line1,\n line2: input.address.line2,\n city: input.address.city,\n state: input.address.state,\n postal_code: input.address.postalCode,\n country: input.address.country,\n }\n : undefined,\n });\n return success(customer);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function deleteCustomer(\n customerId: string\n): Promise<SDKResult<Stripe.DeletedCustomer>> {\n try {\n const stripe = getStripe();\n const deleted = await stripe.customers.del(customerId);\n return success(deleted);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listCustomers(\n input?: ListCustomersInput\n): Promise<SDKResult<Stripe.ApiList<Stripe.Customer>>> {\n try {\n const stripe = getStripe();\n const customers = await stripe.customers.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n email: input?.email,\n });\n return success(customers);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function searchCustomers(\n query: string,\n limit?: number\n): Promise<SDKResult<Stripe.ApiSearchResult<Stripe.Customer>>> {\n try {\n const stripe = getStripe();\n const customers = await stripe.customers.search({\n query,\n limit: limit ?? 10,\n });\n return success(customers);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function createPortalSession(\n input: CreatePortalSessionInput\n): Promise<SDKResult<Stripe.BillingPortal.Session>> {\n try {\n const stripe = getStripe();\n const session = await stripe.billingPortal.sessions.create({\n customer: input.customerId,\n return_url: input.returnUrl,\n configuration: input.configuration,\n });\n return success(session);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreateSubscriptionInput,\n UpdateSubscriptionInput,\n CancelSubscriptionInput,\n PaginationInput,\n SDKResult,\n} from '../../types';\n\nexport async function createSubscription(\n input: CreateSubscriptionInput\n): Promise<SDKResult<Stripe.Subscription>> {\n try {\n const stripe = getStripe();\n\n const items = input.items\n ? input.items.map((item) => ({ price: item.priceId, quantity: item.quantity }))\n : [{ price: input.priceId, quantity: input.quantity ?? 1 }];\n\n const subscription = await stripe.subscriptions.create({\n customer: input.customerId,\n items,\n metadata: input.metadata,\n trial_period_days: input.trialPeriodDays,\n coupon: input.couponId,\n promotion_code: input.promotionCodeId,\n payment_behavior: input.paymentBehavior ?? 'default_incomplete',\n cancel_at_period_end: input.cancelAtPeriodEnd,\n billing_cycle_anchor: input.billingCycleAnchor,\n proration_behavior: input.prorationBehavior,\n expand: ['latest_invoice.payment_intent'],\n });\n return success(subscription);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveSubscription(\n subscriptionId: string\n): Promise<SDKResult<Stripe.Subscription>> {\n try {\n const stripe = getStripe();\n const subscription = await stripe.subscriptions.retrieve(subscriptionId, {\n expand: ['latest_invoice.payment_intent', 'default_payment_method'],\n });\n return success(subscription);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function updateSubscription(\n input: UpdateSubscriptionInput\n): Promise<SDKResult<Stripe.Subscription>> {\n try {\n const stripe = getStripe();\n\n const params: Stripe.SubscriptionUpdateParams = {\n metadata: input.metadata,\n cancel_at_period_end: input.cancelAtPeriodEnd,\n proration_behavior: input.prorationBehavior,\n coupon: input.couponId,\n };\n\n if (input.items) {\n params.items = input.items.map((item) => ({\n id: item.id,\n price: item.priceId,\n quantity: item.quantity,\n }));\n }\n\n const subscription = await stripe.subscriptions.update(input.subscriptionId, params);\n return success(subscription);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function cancelSubscription(\n input: CancelSubscriptionInput\n): Promise<SDKResult<Stripe.Subscription>> {\n try {\n const stripe = getStripe();\n\n if (input.cancelAtPeriodEnd) {\n const subscription = await stripe.subscriptions.update(input.subscriptionId, {\n cancel_at_period_end: true,\n cancellation_details: input.cancellationDetails\n ? {\n comment: input.cancellationDetails.comment,\n feedback: input.cancellationDetails.feedback,\n }\n : undefined,\n });\n return success(subscription);\n }\n\n const subscription = await stripe.subscriptions.cancel(input.subscriptionId, {\n cancellation_details: input.cancellationDetails\n ? {\n comment: input.cancellationDetails.comment,\n feedback: input.cancellationDetails.feedback,\n }\n : undefined,\n });\n return success(subscription);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function resumeSubscription(\n subscriptionId: string\n): Promise<SDKResult<Stripe.Subscription>> {\n try {\n const stripe = getStripe();\n const subscription = await stripe.subscriptions.update(subscriptionId, {\n cancel_at_period_end: false,\n });\n return success(subscription);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listSubscriptions(\n input?: PaginationInput & { customerId?: string; status?: Stripe.SubscriptionListParams.Status }\n): Promise<SDKResult<Stripe.ApiList<Stripe.Subscription>>> {\n try {\n const stripe = getStripe();\n const subscriptions = await stripe.subscriptions.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n customer: input?.customerId,\n status: input?.status,\n });\n return success(subscriptions);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreateProductInput,\n UpdateProductInput,\n CreatePriceInput,\n PaginationInput,\n SDKResult,\n} from '../../types';\n\n// ─── Products ────────────────────────────────────────────────────────\n\nexport async function createProduct(\n input: CreateProductInput\n): Promise<SDKResult<Stripe.Product>> {\n try {\n const stripe = getStripe();\n const product = await stripe.products.create({\n name: input.name,\n description: input.description,\n images: input.images,\n metadata: input.metadata,\n active: input.active,\n default_price_data: input.defaultPriceData\n ? {\n unit_amount: input.defaultPriceData.unitAmount,\n currency: input.defaultPriceData.currency,\n recurring: input.defaultPriceData.recurring\n ? {\n interval: input.defaultPriceData.recurring.interval,\n interval_count: input.defaultPriceData.recurring.intervalCount,\n }\n : undefined,\n }\n : undefined,\n });\n return success(product);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveProduct(\n productId: string\n): Promise<SDKResult<Stripe.Product>> {\n try {\n const stripe = getStripe();\n const product = await stripe.products.retrieve(productId);\n return success(product);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function updateProduct(\n input: UpdateProductInput\n): Promise<SDKResult<Stripe.Product>> {\n try {\n const stripe = getStripe();\n const product = await stripe.products.update(input.productId, {\n name: input.name,\n description: input.description,\n images: input.images,\n metadata: input.metadata,\n active: input.active,\n });\n return success(product);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function archiveProduct(\n productId: string\n): Promise<SDKResult<Stripe.Product>> {\n try {\n const stripe = getStripe();\n const product = await stripe.products.update(productId, { active: false });\n return success(product);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listProducts(\n input?: PaginationInput & { active?: boolean }\n): Promise<SDKResult<Stripe.ApiList<Stripe.Product>>> {\n try {\n const stripe = getStripe();\n const products = await stripe.products.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n active: input?.active,\n });\n return success(products);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Prices ──────────────────────────────────────────────────────────\n\nexport async function createPrice(\n input: CreatePriceInput\n): Promise<SDKResult<Stripe.Price>> {\n try {\n const stripe = getStripe();\n\n const params: Stripe.PriceCreateParams = {\n product: input.productId,\n currency: input.currency,\n metadata: input.metadata,\n active: input.active,\n nickname: input.nickname,\n lookup_key: input.lookupKey,\n billing_scheme: input.billingScheme,\n recurring: input.recurring\n ? {\n interval: input.recurring.interval,\n interval_count: input.recurring.intervalCount,\n }\n : undefined,\n };\n\n if (input.billingScheme === 'tiered' && input.tiers) {\n if (!input.tiersMode) {\n throw new Error('tiersMode is required when billingScheme is \"tiered\"');\n }\n params.tiers = input.tiers.map((tier) => ({\n up_to: tier.upTo,\n unit_amount: tier.unitAmount,\n flat_amount: tier.flatAmount,\n }));\n params.tiers_mode = input.tiersMode;\n } else {\n params.unit_amount = input.unitAmount;\n }\n\n const price = await stripe.prices.create(params);\n return success(price);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrievePrice(\n priceId: string\n): Promise<SDKResult<Stripe.Price>> {\n try {\n const stripe = getStripe();\n const price = await stripe.prices.retrieve(priceId);\n return success(price);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listPrices(\n input?: PaginationInput & { productId?: string; active?: boolean; type?: 'one_time' | 'recurring' }\n): Promise<SDKResult<Stripe.ApiList<Stripe.Price>>> {\n try {\n const stripe = getStripe();\n const prices = await stripe.prices.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n product: input?.productId,\n active: input?.active,\n type: input?.type,\n });\n return success(prices);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function archivePrice(\n priceId: string\n): Promise<SDKResult<Stripe.Price>> {\n try {\n const stripe = getStripe();\n const price = await stripe.prices.update(priceId, { active: false });\n return success(price);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreateInvoiceInput,\n CreateInvoiceItemInput,\n PaginationInput,\n SDKResult,\n} from '../../types';\n\nexport async function createInvoice(\n input: CreateInvoiceInput\n): Promise<SDKResult<Stripe.Invoice>> {\n try {\n const stripe = getStripe();\n const invoice = await stripe.invoices.create({\n customer: input.customerId,\n collection_method: input.collectionMethod ?? 'charge_automatically',\n days_until_due: input.daysUntilDue,\n metadata: input.metadata,\n description: input.description,\n auto_advance: input.autoAdvance,\n });\n return success(invoice);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveInvoice(\n invoiceId: string\n): Promise<SDKResult<Stripe.Invoice>> {\n try {\n const stripe = getStripe();\n const invoice = await stripe.invoices.retrieve(invoiceId);\n return success(invoice);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function finalizeInvoice(\n invoiceId: string\n): Promise<SDKResult<Stripe.Invoice>> {\n try {\n const stripe = getStripe();\n const invoice = await stripe.invoices.finalizeInvoice(invoiceId);\n return success(invoice);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function sendInvoice(\n invoiceId: string\n): Promise<SDKResult<Stripe.Invoice>> {\n try {\n const stripe = getStripe();\n const invoice = await stripe.invoices.sendInvoice(invoiceId);\n return success(invoice);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function payInvoice(\n invoiceId: string\n): Promise<SDKResult<Stripe.Invoice>> {\n try {\n const stripe = getStripe();\n const invoice = await stripe.invoices.pay(invoiceId);\n return success(invoice);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function voidInvoice(\n invoiceId: string\n): Promise<SDKResult<Stripe.Invoice>> {\n try {\n const stripe = getStripe();\n const invoice = await stripe.invoices.voidInvoice(invoiceId);\n return success(invoice);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listInvoices(\n input?: PaginationInput & { customerId?: string; status?: 'draft' | 'open' | 'paid' | 'uncollectible' | 'void' }\n): Promise<SDKResult<Stripe.ApiList<Stripe.Invoice>>> {\n try {\n const stripe = getStripe();\n const invoices = await stripe.invoices.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n customer: input?.customerId,\n status: input?.status as Stripe.InvoiceListParams.Status,\n });\n return success(invoices);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function getUpcomingInvoice(\n customerId: string,\n subscriptionId?: string\n): Promise<SDKResult<Stripe.UpcomingInvoice>> {\n try {\n const stripe = getStripe();\n const invoice = await stripe.invoices.retrieveUpcoming({\n customer: customerId,\n subscription: subscriptionId,\n });\n return success(invoice);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Invoice Items ───────────────────────────────────────────────────\n\nexport async function createInvoiceItem(\n input: CreateInvoiceItemInput\n): Promise<SDKResult<Stripe.InvoiceItem>> {\n try {\n const stripe = getStripe();\n const invoiceItem = await stripe.invoiceItems.create({\n customer: input.customerId,\n invoice: input.invoiceId,\n price: input.priceId,\n amount: input.amount,\n currency: input.currency,\n description: input.description,\n quantity: input.quantity,\n metadata: input.metadata,\n });\n return success(invoiceItem);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreateRefundInput,\n UpdateDisputeInput,\n PaginationInput,\n SDKResult,\n} from '../../types';\n\n// ─── Refunds ─────────────────────────────────────────────────────────\n\nexport async function createRefund(\n input: CreateRefundInput\n): Promise<SDKResult<Stripe.Refund>> {\n try {\n const stripe = getStripe();\n const refund = await stripe.refunds.create({\n payment_intent: input.paymentIntentId,\n charge: input.chargeId,\n amount: input.amount,\n reason: input.reason,\n metadata: input.metadata,\n });\n return success(refund);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveRefund(\n refundId: string\n): Promise<SDKResult<Stripe.Refund>> {\n try {\n const stripe = getStripe();\n const refund = await stripe.refunds.retrieve(refundId);\n return success(refund);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listRefunds(\n input?: PaginationInput & { paymentIntentId?: string; chargeId?: string }\n): Promise<SDKResult<Stripe.ApiList<Stripe.Refund>>> {\n try {\n const stripe = getStripe();\n const refunds = await stripe.refunds.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n payment_intent: input?.paymentIntentId,\n charge: input?.chargeId,\n });\n return success(refunds);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Disputes ────────────────────────────────────────────────────────\n\nexport async function retrieveDispute(\n disputeId: string\n): Promise<SDKResult<Stripe.Dispute>> {\n try {\n const stripe = getStripe();\n const dispute = await stripe.disputes.retrieve(disputeId);\n return success(dispute);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function updateDispute(\n input: UpdateDisputeInput\n): Promise<SDKResult<Stripe.Dispute>> {\n try {\n const stripe = getStripe();\n const dispute = await stripe.disputes.update(input.disputeId, {\n evidence: input.evidence\n ? {\n customer_name: input.evidence.customerName,\n customer_email_address: input.evidence.customerEmailAddress,\n customer_communication: input.evidence.customerCommunication,\n product_description: input.evidence.productDescription,\n shipping_documentation: input.evidence.shippingDocumentation,\n service_documentation: input.evidence.serviceDocumentation,\n uncategorized_text: input.evidence.uncategorizedText,\n }\n : undefined,\n metadata: input.metadata,\n submit: input.submit,\n });\n return success(dispute);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function closeDispute(\n disputeId: string\n): Promise<SDKResult<Stripe.Dispute>> {\n try {\n const stripe = getStripe();\n const dispute = await stripe.disputes.close(disputeId);\n return success(dispute);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listDisputes(\n input?: PaginationInput\n): Promise<SDKResult<Stripe.ApiList<Stripe.Dispute>>> {\n try {\n const stripe = getStripe();\n const disputes = await stripe.disputes.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n });\n return success(disputes);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreateConnectAccountInput,\n CreateAccountLinkInput,\n CreateTransferInput,\n PaginationInput,\n SDKResult,\n} from '../../types';\n\n// ─── Connected Accounts ──────────────────────────────────────────────\n\nexport async function createConnectAccount(\n input: CreateConnectAccountInput\n): Promise<SDKResult<Stripe.Account>> {\n try {\n const stripe = getStripe();\n const account = await stripe.accounts.create({\n type: input.type,\n country: input.country,\n email: input.email,\n capabilities: input.capabilities,\n business_type: input.businessType,\n metadata: input.metadata,\n });\n return success(account);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveConnectAccount(\n accountId: string\n): Promise<SDKResult<Stripe.Account>> {\n try {\n const stripe = getStripe();\n const account = await stripe.accounts.retrieve(accountId);\n return success(account);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function deleteConnectAccount(\n accountId: string\n): Promise<SDKResult<Stripe.DeletedAccount>> {\n try {\n const stripe = getStripe();\n const deleted = await stripe.accounts.del(accountId);\n return success(deleted);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listConnectAccounts(\n input?: PaginationInput\n): Promise<SDKResult<Stripe.ApiList<Stripe.Account>>> {\n try {\n const stripe = getStripe();\n const accounts = await stripe.accounts.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n });\n return success(accounts);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Account Links (Onboarding) ─────────────────────────────────────\n\nexport async function createAccountLink(\n input: CreateAccountLinkInput\n): Promise<SDKResult<Stripe.AccountLink>> {\n try {\n const stripe = getStripe();\n const accountLink = await stripe.accountLinks.create({\n account: input.accountId,\n refresh_url: input.refreshUrl,\n return_url: input.returnUrl,\n type: input.type,\n });\n return success(accountLink);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Transfers ───────────────────────────────────────────────────────\n\nexport async function createTransfer(\n input: CreateTransferInput\n): Promise<SDKResult<Stripe.Transfer>> {\n try {\n const stripe = getStripe();\n const transfer = await stripe.transfers.create({\n amount: input.amount,\n currency: input.currency,\n destination: input.destinationAccountId,\n description: input.description,\n metadata: input.metadata,\n source_transaction: input.sourceTransaction,\n });\n return success(transfer);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listTransfers(\n input?: PaginationInput & { destinationAccountId?: string }\n): Promise<SDKResult<Stripe.ApiList<Stripe.Transfer>>> {\n try {\n const stripe = getStripe();\n const transfers = await stripe.transfers.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n destination: input?.destinationAccountId,\n });\n return success(transfers);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Payouts ─────────────────────────────────────────────────────────\n\nexport async function createPayout(\n amount: number,\n currency: string,\n metadata?: Record<string, string>\n): Promise<SDKResult<Stripe.Payout>> {\n try {\n const stripe = getStripe();\n const payout = await stripe.payouts.create({\n amount,\n currency,\n metadata,\n });\n return success(payout);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listPayouts(\n input?: PaginationInput & { status?: 'paid' | 'pending' | 'in_transit' | 'canceled' | 'failed' }\n): Promise<SDKResult<Stripe.ApiList<Stripe.Payout>>> {\n try {\n const stripe = getStripe();\n const payouts = await stripe.payouts.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n status: input?.status,\n });\n return success(payouts);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Balance ─────────────────────────────────────────────────────────\n\nexport async function getBalance(): Promise<SDKResult<Stripe.Balance>> {\n try {\n const stripe = getStripe();\n const balance = await stripe.balance.retrieve();\n return success(balance);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listBalanceTransactions(\n input?: PaginationInput & { type?: 'charge' | 'refund' | 'adjustment' | 'application_fee' | 'transfer' | 'payout' | 'stripe_fee' }\n): Promise<SDKResult<Stripe.ApiList<Stripe.BalanceTransaction>>> {\n try {\n const stripe = getStripe();\n const transactions = await stripe.balanceTransactions.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n type: input?.type,\n });\n return success(transactions);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe } from '../stripe-client';\nimport { handleStripeError, success } from '../../utils/errors';\nimport type {\n CreateCouponInput,\n CreatePromotionCodeInput,\n PaginationInput,\n SDKResult,\n} from '../../types';\n\n// ─── Coupons ─────────────────────────────────────────────────────────\n\nexport async function createCoupon(\n input: CreateCouponInput\n): Promise<SDKResult<Stripe.Coupon>> {\n try {\n const stripe = getStripe();\n const coupon = await stripe.coupons.create({\n percent_off: input.percentOff,\n amount_off: input.amountOff,\n currency: input.currency,\n duration: input.duration,\n duration_in_months: input.durationInMonths,\n max_redemptions: input.maxRedemptions,\n redeem_by: input.redeemBy,\n name: input.name,\n metadata: input.metadata,\n });\n return success(coupon);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrieveCoupon(\n couponId: string\n): Promise<SDKResult<Stripe.Coupon>> {\n try {\n const stripe = getStripe();\n const coupon = await stripe.coupons.retrieve(couponId);\n return success(coupon);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function deleteCoupon(\n couponId: string\n): Promise<SDKResult<Stripe.DeletedCoupon>> {\n try {\n const stripe = getStripe();\n const deleted = await stripe.coupons.del(couponId);\n return success(deleted);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listCoupons(\n input?: PaginationInput\n): Promise<SDKResult<Stripe.ApiList<Stripe.Coupon>>> {\n try {\n const stripe = getStripe();\n const coupons = await stripe.coupons.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n });\n return success(coupons);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\n// ─── Promotion Codes ─────────────────────────────────────────────────\n\nexport async function createPromotionCode(\n input: CreatePromotionCodeInput\n): Promise<SDKResult<Stripe.PromotionCode>> {\n try {\n const stripe = getStripe();\n const promotionCode = await stripe.promotionCodes.create({\n coupon: input.couponId,\n code: input.code,\n active: input.active,\n max_redemptions: input.maxRedemptions,\n expires_at: input.expiresAt,\n metadata: input.metadata,\n restrictions: input.restrictions\n ? {\n first_time_transaction: input.restrictions.firstTimeTransaction,\n minimum_amount: input.restrictions.minimumAmount,\n minimum_amount_currency: input.restrictions.minimumAmountCurrency,\n }\n : undefined,\n });\n return success(promotionCode);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function retrievePromotionCode(\n promotionCodeId: string\n): Promise<SDKResult<Stripe.PromotionCode>> {\n try {\n const stripe = getStripe();\n const promotionCode = await stripe.promotionCodes.retrieve(promotionCodeId);\n return success(promotionCode);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n\nexport async function listPromotionCodes(\n input?: PaginationInput & { couponId?: string; active?: boolean; code?: string }\n): Promise<SDKResult<Stripe.ApiList<Stripe.PromotionCode>>> {\n try {\n const stripe = getStripe();\n const promotionCodes = await stripe.promotionCodes.list({\n limit: input?.limit ?? 10,\n starting_after: input?.startingAfter,\n ending_before: input?.endingBefore,\n coupon: input?.couponId,\n active: input?.active,\n code: input?.code,\n });\n return success(promotionCodes);\n } catch (error) {\n return handleStripeError(error);\n }\n}\n","import type Stripe from 'stripe';\nimport { getStripe, getConfig } from '../stripe-client';\nimport type { WebhookHandlerMap, WebhookHandler } from '../../types';\n\nconst MAX_BODY_SIZE = 1024 * 1024; // 1 MB\n\nexport interface WebhookConfig {\n secret?: string;\n handlers: WebhookHandlerMap;\n onError?: (error: Error, event?: Stripe.Event) => void | Promise<void>;\n onUnhandledEvent?: (event: Stripe.Event) => void | Promise<void>;\n}\n\nexport function createWebhookHandler(config: WebhookConfig) {\n const webhookSecret = config.secret ?? getConfig().webhookSecret;\n\n if (!webhookSecret) {\n throw new Error(\n '[@stripe-sdk/core] Webhook secret is required. Pass it via config.secret or initStripe({ webhookSecret }).'\n );\n }\n\n return async function handleWebhook(\n body: string | Buffer,\n signature: string\n ): Promise<{ received: true; type: string }> {\n const stripe = getStripe();\n\n let event: Stripe.Event;\n try {\n event = stripe.webhooks.constructEvent(body, signature, webhookSecret);\n } catch (err) {\n const verificationError = err instanceof Error ? err : new Error('Webhook signature verification failed');\n if (config.onError) {\n await config.onError(verificationError);\n }\n throw verificationError;\n }\n\n const handler: WebhookHandler | undefined = config.handlers[event.type];\n\n if (handler) {\n try {\n await handler(event);\n } catch (error) {\n if (config.onError) {\n await config.onError(error instanceof Error ? error : new Error(String(error)), event);\n } else {\n throw error;\n }\n }\n } else if (config.onUnhandledEvent) {\n await config.onUnhandledEvent(event);\n }\n\n return { received: true, type: event.type };\n };\n}\n\n/**\n * Helper for Next.js App Router webhook route\n *\n * Usage in app/api/webhooks/stripe/route.ts:\n *\n * ```ts\n * import { createNextWebhookHandler } from '@stripe-sdk/core/webhooks';\n *\n * export const POST = createNextWebhookHandler({\n * handlers: {\n * 'payment_intent.succeeded': async (event) => { ... },\n * 'customer.subscription.created': async (event) => { ... },\n * },\n * });\n * ```\n */\nexport function createNextWebhookHandler(config: WebhookConfig) {\n const handler = createWebhookHandler(config);\n\n return async function POST(request: Request): Promise<Response> {\n try {\n const contentLength = request.headers.get('content-length');\n if (contentLength && parseInt(contentLength, 10) > MAX_BODY_SIZE) {\n return new Response(JSON.stringify({ error: 'Webhook body too large' }), {\n status: 413,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n const body = await request.text();\n const signature = request.headers.get('stripe-signature');\n\n if (!signature) {\n return new Response(JSON.stringify({ error: 'Missing stripe-signature header' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n const result = await handler(body, signature);\n\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Webhook handler failed';\n\n return new Response(JSON.stringify({ error: message }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n };\n}\n\n/**\n * Helper for Next.js Pages Router webhook route\n *\n * Usage in pages/api/webhooks/stripe.ts:\n *\n * ```ts\n * import { createPagesWebhookHandler } from '@stripe-sdk/core/webhooks';\n *\n * export const config = { api: { bodyParser: false } };\n *\n * export default createPagesWebhookHandler({\n * handlers: {\n * 'payment_intent.succeeded': async (event) => { ... },\n * },\n * });\n * ```\n */\nexport function createPagesWebhookHandler(webhookConfig: WebhookConfig) {\n const handler = createWebhookHandler(webhookConfig);\n\n return async function webhookRoute(\n req: { method?: string; headers: Record<string, string | string[] | undefined>; body?: unknown; on?: (event: string, cb: (...args: unknown[]) => void) => void },\n res: { status: (code: number) => { json: (data: unknown) => void; end: () => void } }\n ): Promise<void> {\n if (req.method !== 'POST') {\n res.status(405).end();\n return;\n }\n\n try {\n const body = await getRawBody(req);\n const signature = req.headers['stripe-signature'] as string;\n\n if (!signature) {\n res.status(400).json({ error: 'Missing stripe-signature header' });\n return;\n }\n\n const result = await handler(body, signature);\n res.status(200).json(result);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Webhook handler failed';\n res.status(400).json({ error: message });\n }\n };\n}\n\nfunction getRawBody(req: { on?: (event: string, cb: (...args: unknown[]) => void) => void; body?: unknown }): Promise<string> {\n return new Promise((resolve, reject) => {\n if (typeof req.body === 'string') {\n if (req.body.length > MAX_BODY_SIZE) {\n reject(new Error('Webhook body too large'));\n return;\n }\n resolve(req.body);\n return;\n }\n if (Buffer.isBuffer(req.body)) {\n if (req.body.length > MAX_BODY_SIZE) {\n reject(new Error('Webhook body too large'));\n return;\n }\n resolve(req.body.toString('utf8'));\n return;\n }\n if (!req.on) {\n reject(new Error('Cannot read raw body from request'));\n return;\n }\n const chunks: Buffer[] = [];\n let totalLength = 0;\n req.on('data', (chunk: unknown) => {\n const buf = Buffer.from(chunk as Uint8Array);\n totalLength += buf.length;\n if (totalLength > MAX_BODY_SIZE) {\n reject(new Error('Webhook body too large'));\n return;\n }\n chunks.push(buf);\n });\n req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n req.on('error', reject);\n });\n}\n","'use client';\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport { loadStripe } from '@stripe/stripe-js';\nimport { Elements } from '@stripe/react-stripe-js';\nimport type { Stripe, StripeElementsOptions } from '@stripe/stripe-js';\nimport type { ReactNode } from 'react';\n\ninterface StripeContextValue {\n publishableKey: string;\n}\n\nconst StripeContext = createContext<StripeContextValue | null>(null);\n\nexport function useStripeConfig(): StripeContextValue {\n const context = useContext(StripeContext);\n if (!context) {\n throw new Error('useStripeConfig must be used within a <StripeProvider>');\n }\n return context;\n}\n\nexport interface StripeProviderProps {\n publishableKey: string;\n children: ReactNode;\n options?: StripeElementsOptions;\n locale?: string;\n}\n\nexport function StripeProvider({\n publishableKey,\n children,\n options,\n locale,\n}: StripeProviderProps) {\n const stripePromise = useMemo(\n () => loadStripe(publishableKey, locale ? { locale: locale as 'auto' } : undefined),\n [publishableKey, locale]\n );\n\n return (\n <StripeContext.Provider value={{ publishableKey }}>\n <Elements stripe={stripePromise} options={options}>\n {children}\n </Elements>\n </StripeContext.Provider>\n );\n}\n\n/**\n * Provider for embedding Stripe Elements with a client secret.\n * Use this to wrap payment forms after creating a PaymentIntent or SetupIntent.\n */\nexport interface StripeElementsProviderProps {\n publishableKey: string;\n clientSecret: string;\n children: ReactNode;\n appearance?: StripeElementsOptions['appearance'];\n locale?: string;\n loader?: 'auto' | 'always' | 'never';\n}\n\nexport function StripeElementsProvider({\n publishableKey,\n clientSecret,\n children,\n appearance,\n locale,\n loader = 'auto',\n}: StripeElementsProviderProps) {\n const stripePromise = useMemo(\n () => loadStripe(publishableKey, locale ? { locale: locale as 'auto' } : undefined),\n [publishableKey, locale]\n );\n\n const options: StripeElementsOptions = useMemo(\n () => ({\n clientSecret,\n appearance,\n loader,\n }),\n [clientSecret, appearance, loader]\n );\n\n return (\n <StripeContext.Provider value={{ publishableKey }}>\n <Elements stripe={stripePromise} options={options}>\n {children}\n </Elements>\n </StripeContext.Provider>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useStripe, useElements } from '@stripe/react-stripe-js';\n\ninterface PaymentState {\n isProcessing: boolean;\n isSuccess: boolean;\n error: string | null;\n paymentIntentId: string | null;\n}\n\ninterface UsePaymentOptions {\n onSuccess?: (paymentIntentId: string) => void;\n onError?: (error: string) => void;\n returnUrl?: string;\n}\n\nexport function usePayment(options?: UsePaymentOptions) {\n const stripe = useStripe();\n const elements = useElements();\n\n const [state, setState] = useState<PaymentState>({\n isProcessing: false,\n isSuccess: false,\n error: null,\n paymentIntentId: null,\n });\n\n const processPayment = useCallback(async (\n overrides?: { returnUrl?: string }\n ) => {\n if (!stripe || !elements) {\n setState((s) => ({ ...s, error: 'Stripe not loaded yet' }));\n return { success: false, error: 'Stripe not loaded yet' };\n }\n\n setState({ isProcessing: true, isSuccess: false, error: null, paymentIntentId: null });\n\n const { error, paymentIntent } = await stripe.confirmPayment({\n elements,\n confirmParams: {\n return_url: overrides?.returnUrl ?? options?.returnUrl ?? (typeof window !== 'undefined' ? window.location.href : ''),\n },\n redirect: 'if_required',\n });\n\n if (error) {\n const message = error.message ?? 'Payment failed';\n setState({ isProcessing: false, isSuccess: false, error: message, paymentIntentId: null });\n options?.onError?.(message);\n return { success: false, error: message };\n }\n\n if (paymentIntent?.status === 'succeeded') {\n setState({ isProcessing: false, isSuccess: true, error: null, paymentIntentId: paymentIntent.id });\n options?.onSuccess?.(paymentIntent.id);\n return { success: true, paymentIntentId: paymentIntent.id };\n }\n\n setState({ isProcessing: false, isSuccess: false, error: null, paymentIntentId: paymentIntent?.id ?? null });\n return { success: false, status: paymentIntent?.status };\n }, [stripe, elements, options]);\n\n const reset = useCallback(() => {\n setState({ isProcessing: false, isSuccess: false, error: null, paymentIntentId: null });\n }, []);\n\n return {\n ...state,\n processPayment,\n reset,\n isReady: !!stripe && !!elements,\n };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useStripe, useElements } from '@stripe/react-stripe-js';\n\ninterface SetupState {\n isProcessing: boolean;\n isSuccess: boolean;\n error: string | null;\n setupIntentId: string | null;\n paymentMethodId: string | null;\n}\n\ninterface UseSetupIntentOptions {\n onSuccess?: (setupIntentId: string, paymentMethodId: string) => void;\n onError?: (error: string) => void;\n returnUrl?: string;\n}\n\nexport function useSetupIntent(options?: UseSetupIntentOptions) {\n const stripe = useStripe();\n const elements = useElements();\n\n const [state, setState] = useState<SetupState>({\n isProcessing: false,\n isSuccess: false,\n error: null,\n setupIntentId: null,\n paymentMethodId: null,\n });\n\n const confirmSetup = useCallback(async (\n overrides?: { returnUrl?: string }\n ) => {\n if (!stripe || !elements) {\n setState((s) => ({ ...s, error: 'Stripe not loaded yet' }));\n return { success: false, error: 'Stripe not loaded yet' };\n }\n\n setState({ isProcessing: true, isSuccess: false, error: null, setupIntentId: null, paymentMethodId: null });\n\n const { error, setupIntent } = await stripe.confirmSetup({\n elements,\n confirmParams: {\n return_url: overrides?.returnUrl ?? options?.returnUrl ?? (typeof window !== 'undefined' ? window.location.href : ''),\n },\n redirect: 'if_required',\n });\n\n if (error) {\n const message = error.message ?? 'Setup failed';\n setState({ isProcessing: false, isSuccess: false, error: message, setupIntentId: null, paymentMethodId: null });\n options?.onError?.(message);\n return { success: false, error: message };\n }\n\n if (setupIntent?.status === 'succeeded') {\n const pmId = typeof setupIntent.payment_method === 'string'\n ? setupIntent.payment_method\n : setupIntent.payment_method?.id ?? null;\n setState({ isProcessing: false, isSuccess: true, error: null, setupIntentId: setupIntent.id, paymentMethodId: pmId });\n if (pmId) options?.onSuccess?.(setupIntent.id, pmId);\n return { success: true, setupIntentId: setupIntent.id, paymentMethodId: pmId };\n }\n\n setState({ isProcessing: false, isSuccess: false, error: null, setupIntentId: setupIntent?.id ?? null, paymentMethodId: null });\n return { success: false, status: setupIntent?.status };\n }, [stripe, elements, options]);\n\n const reset = useCallback(() => {\n setState({ isProcessing: false, isSuccess: false, error: null, setupIntentId: null, paymentMethodId: null });\n }, []);\n\n return {\n ...state,\n confirmSetup,\n reset,\n isReady: !!stripe && !!elements,\n };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { loadStripe } from '@stripe/stripe-js';\n\ninterface CheckoutState {\n isLoading: boolean;\n error: string | null;\n}\n\ninterface UseCheckoutOptions {\n publishableKey: string;\n onError?: (error: string) => void;\n}\n\nexport function useCheckout(options: UseCheckoutOptions) {\n const [state, setState] = useState<CheckoutState>({\n isLoading: false,\n error: null,\n });\n\n /**\n * Redirect to a Stripe Checkout session.\n * Pass the sessionId returned from your server (createCheckoutSession).\n */\n const redirectToCheckout = useCallback(async (sessionId: string) => {\n setState({ isLoading: true, error: null });\n\n try {\n const stripe = await loadStripe(options.publishableKey);\n if (!stripe) {\n throw new Error('Failed to load Stripe');\n }\n\n const { error } = await stripe.redirectToCheckout({ sessionId });\n\n if (error) {\n const message = error.message ?? 'Redirect to checkout failed';\n setState({ isLoading: false, error: message });\n options.onError?.(message);\n return { success: false, error: message };\n }\n\n return { success: true };\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n setState({ isLoading: false, error: message });\n options.onError?.(message);\n return { success: false, error: message };\n }\n }, [options]);\n\n /**\n * Open a Stripe Customer Portal session.\n * Pass the portal URL returned from your server (createPortalSession).\n */\n const redirectToPortal = useCallback((portalUrl: string) => {\n window.location.href = portalUrl;\n }, []);\n\n return {\n ...state,\n redirectToCheckout,\n redirectToPortal,\n };\n}\n","'use client';\n\nimport React from 'react';\nimport { PaymentElement, LinkAuthenticationElement } from '@stripe/react-stripe-js';\nimport { usePayment } from '../hooks/usePayment';\nimport type { ReactNode, FormEvent } from 'react';\n\nexport interface CheckoutFormProps {\n onSuccess?: (paymentIntentId: string) => void;\n onError?: (error: string) => void;\n returnUrl?: string;\n submitLabel?: string;\n showEmail?: boolean;\n className?: string;\n buttonClassName?: string;\n errorClassName?: string;\n children?: ReactNode;\n layout?: 'tabs' | 'accordion' | 'auto';\n}\n\nexport function CheckoutForm({\n onSuccess,\n onError,\n returnUrl,\n submitLabel = 'Pay now',\n showEmail = false,\n className,\n buttonClassName,\n errorClassName,\n children,\n layout = 'tabs',\n}: CheckoutFormProps) {\n const { processPayment, isProcessing, isSuccess, error, isReady } = usePayment({\n onSuccess,\n onError,\n returnUrl,\n });\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n await processPayment();\n };\n\n if (isSuccess) {\n return (\n <div className={className}>\n {children ?? <p>Payment successful!</p>}\n </div>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} className={className}>\n {showEmail && <LinkAuthenticationElement />}\n <PaymentElement options={{ layout }} />\n {error && <p className={errorClassName} role=\"alert\">{error}</p>}\n <button\n type=\"submit\"\n disabled={!isReady || isProcessing}\n className={buttonClassName}\n >\n {isProcessing ? 'Processing...' : submitLabel}\n </button>\n </form>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { PaymentElement } from '@stripe/react-stripe-js';\nimport { useSetupIntent } from '../hooks/useSetupIntent';\nimport type { ReactNode, FormEvent } from 'react';\n\nexport interface SetupFormProps {\n onSuccess?: (setupIntentId: string, paymentMethodId: string) => void;\n onError?: (error: string) => void;\n returnUrl?: string;\n submitLabel?: string;\n className?: string;\n buttonClassName?: string;\n errorClassName?: string;\n successContent?: ReactNode;\n layout?: 'tabs' | 'accordion' | 'auto';\n}\n\nexport function SetupForm({\n onSuccess,\n onError,\n returnUrl,\n submitLabel = 'Save payment method',\n className,\n buttonClassName,\n errorClassName,\n successContent,\n layout = 'tabs',\n}: SetupFormProps) {\n const { confirmSetup, isProcessing, isSuccess, error, isReady } = useSetupIntent({\n onSuccess,\n onError,\n returnUrl,\n });\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n await confirmSetup();\n };\n\n if (isSuccess) {\n return (\n <div className={className}>\n {successContent ?? <p>Payment method saved!</p>}\n </div>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} className={className}>\n <PaymentElement options={{ layout }} />\n {error && <p className={errorClassName} role=\"alert\">{error}</p>}\n <button\n type=\"submit\"\n disabled={!isReady || isProcessing}\n className={buttonClassName}\n >\n {isProcessing ? 'Saving...' : submitLabel}\n </button>\n </form>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\n\nexport interface PricingPlan {\n id: string;\n name: string;\n description?: string;\n priceId: string;\n amount: number;\n currency: string;\n interval?: 'month' | 'year' | 'week' | 'day';\n features: string[];\n highlighted?: boolean;\n badge?: string;\n trialDays?: number;\n}\n\nexport interface PricingTableProps {\n plans: PricingPlan[];\n onSelectPlan: (plan: PricingPlan) => void;\n isLoading?: boolean;\n currentPlanId?: string;\n buttonLabel?: string;\n currentPlanLabel?: string;\n className?: string;\n planClassName?: string;\n highlightedClassName?: string;\n buttonClassName?: string;\n formatPrice?: (amount: number, currency: string) => string;\n renderFeature?: (feature: string) => ReactNode;\n}\n\nfunction defaultFormatPrice(amount: number, currency: string): string {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n }).format(amount / 100);\n}\n\nexport function PricingTable({\n plans,\n onSelectPlan,\n isLoading,\n currentPlanId,\n buttonLabel = 'Get started',\n currentPlanLabel = 'Current plan',\n className,\n planClassName,\n highlightedClassName,\n buttonClassName,\n formatPrice = defaultFormatPrice,\n renderFeature,\n}: PricingTableProps) {\n const defaultStyles: Record<string, CSSProperties> = {\n container: {\n display: 'grid',\n gridTemplateColumns: `repeat(${Math.min(plans.length, 4)}, 1fr)`,\n gap: '1.5rem',\n maxWidth: '1200px',\n margin: '0 auto',\n },\n plan: {\n border: '1px solid #e5e7eb',\n borderRadius: '0.75rem',\n padding: '2rem',\n display: 'flex',\n flexDirection: 'column',\n },\n highlighted: {\n border: '2px solid #6366f1',\n boxShadow: '0 4px 14px rgba(99,102,241,0.15)',\n },\n badge: {\n background: '#6366f1',\n color: '#fff',\n padding: '0.25rem 0.75rem',\n borderRadius: '9999px',\n fontSize: '0.75rem',\n fontWeight: 600,\n alignSelf: 'flex-start',\n marginBottom: '0.5rem',\n },\n name: { fontSize: '1.25rem', fontWeight: 700, margin: '0 0 0.25rem' },\n description: { color: '#6b7280', fontSize: '0.875rem', margin: '0 0 1rem' },\n price: { fontSize: '2.5rem', fontWeight: 800, margin: '0' },\n interval: { color: '#6b7280', fontSize: '0.875rem', fontWeight: 400 },\n features: { listStyle: 'none', padding: 0, margin: '1.5rem 0', flex: 1 },\n feature: { padding: '0.375rem 0', fontSize: '0.875rem' },\n button: {\n padding: '0.75rem 1.5rem',\n borderRadius: '0.5rem',\n border: 'none',\n fontWeight: 600,\n cursor: 'pointer',\n fontSize: '0.875rem',\n background: '#6366f1',\n color: '#fff',\n width: '100%',\n },\n currentButton: {\n background: '#e5e7eb',\n color: '#374151',\n cursor: 'default',\n },\n };\n\n return (\n <div className={className} style={!className ? defaultStyles.container : undefined}>\n {plans.map((plan) => {\n const isCurrent = plan.id === currentPlanId;\n return (\n <div\n key={plan.id}\n className={plan.highlighted ? highlightedClassName : planClassName}\n style={\n !planClassName\n ? { ...defaultStyles.plan, ...(plan.highlighted ? defaultStyles.highlighted : {}) }\n : undefined\n }\n >\n {plan.badge && (\n <span style={!highlightedClassName ? defaultStyles.badge : undefined}>\n {plan.badge}\n </span>\n )}\n <h3 style={defaultStyles.name}>{plan.name}</h3>\n {plan.description && <p style={defaultStyles.description}>{plan.description}</p>}\n <p style={defaultStyles.price}>\n {formatPrice(plan.amount, plan.currency)}\n {plan.interval && (\n <span style={defaultStyles.interval}> / {plan.interval}</span>\n )}\n </p>\n {plan.trialDays && (\n <p style={{ ...defaultStyles.description, marginTop: '0.5rem' }}>\n {plan.trialDays}-day free trial\n </p>\n )}\n <ul style={defaultStyles.features}>\n {plan.features.map((feature, i) => (\n <li key={i} style={defaultStyles.feature}>\n {renderFeature ? renderFeature(feature) : `✓ ${feature}`}\n </li>\n ))}\n </ul>\n <button\n onClick={() => !isCurrent && onSelectPlan(plan)}\n disabled={isLoading || isCurrent}\n className={buttonClassName}\n style={\n !buttonClassName\n ? { ...defaultStyles.button, ...(isCurrent ? defaultStyles.currentButton : {}) }\n : undefined\n }\n >\n {isCurrent ? currentPlanLabel : buttonLabel}\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\n\nexport interface SubscriptionInfo {\n id: string;\n status: string;\n planName: string;\n amount: number;\n currency: string;\n interval: string;\n currentPeriodEnd: string | Date;\n cancelAtPeriodEnd: boolean;\n trialEnd?: string | Date | null;\n}\n\nexport interface SubscriptionManagerProps {\n subscription: SubscriptionInfo;\n onCancel: (subscriptionId: string) => Promise<void>;\n onResume?: (subscriptionId: string) => Promise<void>;\n onChangePlan?: (subscriptionId: string) => void;\n onManageBilling?: () => void;\n className?: string;\n formatPrice?: (amount: number, currency: string) => string;\n cancelLabel?: string;\n resumeLabel?: string;\n changePlanLabel?: string;\n manageBillingLabel?: string;\n children?: ReactNode;\n}\n\nfunction defaultFormatPrice(amount: number, currency: string): string {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n }).format(amount / 100);\n}\n\nconst statusColors: Record<string, string> = {\n active: '#10b981',\n trialing: '#6366f1',\n past_due: '#f59e0b',\n canceled: '#ef4444',\n incomplete: '#f59e0b',\n unpaid: '#ef4444',\n paused: '#6b7280',\n};\n\nexport function SubscriptionManager({\n subscription,\n onCancel,\n onResume,\n onChangePlan,\n onManageBilling,\n className,\n formatPrice = defaultFormatPrice,\n cancelLabel = 'Cancel subscription',\n resumeLabel = 'Resume subscription',\n changePlanLabel = 'Change plan',\n manageBillingLabel = 'Manage billing',\n}: SubscriptionManagerProps) {\n const [isLoading, setIsLoading] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n\n const endDate = new Date(subscription.currentPeriodEnd).toLocaleDateString();\n const trialEndDate = subscription.trialEnd\n ? new Date(subscription.trialEnd).toLocaleDateString()\n : null;\n\n const handleCancel = async () => {\n setIsLoading(true);\n try {\n await onCancel(subscription.id);\n } finally {\n setIsLoading(false);\n setShowConfirm(false);\n }\n };\n\n const handleResume = async () => {\n if (!onResume) return;\n setIsLoading(true);\n try {\n await onResume(subscription.id);\n } finally {\n setIsLoading(false);\n }\n };\n\n const styles: Record<string, CSSProperties> = {\n container: { border: '1px solid #e5e7eb', borderRadius: '0.75rem', padding: '1.5rem' },\n header: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '1rem' },\n planName: { fontSize: '1.25rem', fontWeight: 700, margin: 0 },\n status: {\n padding: '0.25rem 0.75rem',\n borderRadius: '9999px',\n fontSize: '0.75rem',\n fontWeight: 600,\n color: '#fff',\n background: statusColors[subscription.status] ?? '#6b7280',\n },\n price: { fontSize: '1.5rem', fontWeight: 700, margin: '0 0 0.5rem' },\n detail: { color: '#6b7280', fontSize: '0.875rem', margin: '0.25rem 0' },\n actions: { display: 'flex', gap: '0.75rem', marginTop: '1.5rem', flexWrap: 'wrap' as const },\n button: {\n padding: '0.5rem 1rem',\n borderRadius: '0.375rem',\n border: '1px solid #d1d5db',\n background: '#fff',\n cursor: 'pointer',\n fontSize: '0.875rem',\n fontWeight: 500,\n },\n dangerButton: {\n padding: '0.5rem 1rem',\n borderRadius: '0.375rem',\n border: '1px solid #fca5a5',\n background: '#fef2f2',\n color: '#dc2626',\n cursor: 'pointer',\n fontSize: '0.875rem',\n fontWeight: 500,\n },\n confirm: {\n background: '#fef2f2',\n border: '1px solid #fca5a5',\n borderRadius: '0.5rem',\n padding: '1rem',\n marginTop: '1rem',\n },\n };\n\n return (\n <div className={className} style={!className ? styles.container : undefined}>\n <div style={styles.header}>\n <h3 style={styles.planName}>{subscription.planName}</h3>\n <span style={styles.status}>{subscription.status}</span>\n </div>\n\n <p style={styles.price}>\n {formatPrice(subscription.amount, subscription.currency)}\n <span style={{ fontSize: '0.875rem', fontWeight: 400, color: '#6b7280' }}>\n {' '}/ {subscription.interval}\n </span>\n </p>\n\n {trialEndDate && subscription.status === 'trialing' && (\n <p style={styles.detail}>Trial ends on {trialEndDate}</p>\n )}\n\n {subscription.cancelAtPeriodEnd ? (\n <p style={{ ...styles.detail, color: '#dc2626' }}>\n Cancels on {endDate}\n </p>\n ) : (\n <p style={styles.detail}>Renews on {endDate}</p>\n )}\n\n <div style={styles.actions}>\n {onChangePlan && subscription.status === 'active' && (\n <button onClick={() => onChangePlan(subscription.id)} style={styles.button}>\n {changePlanLabel}\n </button>\n )}\n\n {onManageBilling && (\n <button onClick={onManageBilling} style={styles.button}>\n {manageBillingLabel}\n </button>\n )}\n\n {subscription.cancelAtPeriodEnd && onResume ? (\n <button onClick={handleResume} disabled={isLoading} style={styles.button}>\n {isLoading ? 'Loading...' : resumeLabel}\n </button>\n ) : (\n subscription.status === 'active' && (\n <button onClick={() => setShowConfirm(true)} style={styles.dangerButton}>\n {cancelLabel}\n </button>\n )\n )}\n </div>\n\n {showConfirm && (\n <div style={styles.confirm}>\n <p style={{ margin: '0 0 0.75rem', fontWeight: 500 }}>\n Are you sure you want to cancel?\n </p>\n <p style={{ ...styles.detail, marginBottom: '0.75rem' }}>\n You will still have access until {endDate}.\n </p>\n <div style={{ display: 'flex', gap: '0.5rem' }}>\n <button onClick={handleCancel} disabled={isLoading} style={styles.dangerButton}>\n {isLoading ? 'Cancelling...' : 'Confirm cancellation'}\n </button>\n <button onClick={() => setShowConfirm(false)} style={styles.button}>\n Keep subscription\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|