/** * Stripe Port * * Interface for Stripe payment integration. */ import { SubscriptionPlanType } from '../../value-objects/subscription-plan.vo'; export const STRIPE_PORT = 'STRIPE_PORT'; export interface CreateCheckoutSessionInput { organizationId: string; organizationName: string; email: string; plan: SubscriptionPlanType; billingInterval: 'monthly' | 'yearly'; successUrl: string; cancelUrl: string; customerId?: string; } export interface CreateCheckoutSessionOutput { sessionId: string; sessionUrl: string; } export interface CreatePortalSessionInput { customerId: string; returnUrl: string; } export interface CreatePortalSessionOutput { sessionUrl: string; } export interface StripeSubscriptionData { subscriptionId: string; customerId: string; status: string; planId: string; currentPeriodStart: Date; currentPeriodEnd: Date; cancelAtPeriodEnd: boolean; } export interface StripeCheckoutSessionData { sessionId: string; customerId: string | null; subscriptionId: string | null; status: string; metadata: Record; } export interface StripeWebhookEvent { type: string; data: { object: Record; }; } export interface StripePort { /** * Create a Stripe Checkout session for subscription purchase */ createCheckoutSession( input: CreateCheckoutSessionInput, ): Promise; /** * Create a Stripe Customer Portal session for subscription management */ createPortalSession( input: CreatePortalSessionInput, ): Promise; /** * Retrieve subscription details from Stripe */ getSubscription(subscriptionId: string): Promise; /** * Retrieve checkout session details from Stripe */ getCheckoutSession(sessionId: string): Promise; /** * Cancel a subscription at period end */ cancelSubscriptionAtPeriodEnd(subscriptionId: string): Promise; /** * Cancel a subscription immediately */ cancelSubscriptionImmediately(subscriptionId: string): Promise; /** * Resume a canceled subscription */ resumeSubscription(subscriptionId: string): Promise; /** * Verify and parse a Stripe webhook event */ constructWebhookEvent( payload: string | Buffer, signature: string, ): Promise; /** * Map a Stripe price ID to a subscription plan */ mapPriceIdToPlan(priceId: string): SubscriptionPlanType | null; }