import * as z from 'zod'; import { CancelSubscriptionParamsSchema, CreateBillingCheckoutSchema, CreateBillingPortalSessionSchema, QueryBillingUsageSchema, ReportBillingUsageSchema, RetrieveCheckoutSessionSchema, UpdateSubscriptionParamsSchema, } from '../schema'; import { UpsertSubscriptionParams } from '../types'; export abstract class BillingStrategyProviderService { abstract createBillingPortalSession( params: z.output, ): Promise<{ url: string; }>; abstract retrieveCheckoutSession( params: z.output, ): Promise<{ checkoutToken: string | null; status: 'complete' | 'expired' | 'open'; isSessionOpen: boolean; customer: { email: string | null; }; }>; abstract createCheckoutSession( params: z.output, ): Promise<{ checkoutToken: string; }>; abstract cancelSubscription( params: z.output, ): Promise<{ success: boolean; }>; abstract reportUsage( params: z.output, ): Promise<{ success: boolean; }>; abstract queryUsage( params: z.output, ): Promise<{ value: number; }>; abstract updateSubscriptionItem( params: z.output, ): Promise<{ success: boolean; }>; abstract getPlanById(planId: string): Promise<{ id: string; name: string; description?: string; interval: string; amount: number; type: 'recurring' | 'one_time'; intervalCount?: number; }>; abstract getSubscription(subscriptionId: string): Promise< UpsertSubscriptionParams & { // we can't always guarantee that the target account id will be present // so we need to make it optional and let the consumer handle it target_account_id: string | undefined; } >; }