export type ProductVariant = 'bundle' | 'digital' | 'espresso' | 'espressopod' | 'podcast' | 'insider_digital' | 'play' | 'insider_print'; export type PeriodUnit = 'week' | 'month' | 'year'; export type Period = { duration: number; unit: PeriodUnit; }; export type Tax = { inclusive: boolean; }; export type Price = { purchase: number; pre_discount?: number; currency_code: string; discounted: boolean; tax?: Tax; }; export type Product = { type: string; variant: ProductVariant; offer_type: string; }; export type TrialPeriod = { duration: number; unit: PeriodUnit; }; export type RenewalInterval = { duration: number; unit: PeriodUnit; }; export type SubscriptionOptions = { free_trial: boolean; trial_period?: TrialPeriod; renewal_interval: RenewalInterval; renewal_price?: number; auto_renewal: boolean; variable_term: boolean; display_name: string; introductory?: boolean; sale_offer?: boolean; bau_price?: string; min_term_contract?: boolean; min_term_contract_length?: string; }; export type Restrictions = { countries?: string[]; }; export type UnstructuredContent = { features_html?: string; custom_display_price?: string; }; export type StructuredContent = { custom_subscription_display_name?: string; discount_percentages?: string[]; custom_detailed_display_price?: string; }; export type Content = { unstructured?: UnstructuredContent; structured?: StructuredContent; }; export type MetaData = { can_checkout?: boolean; product_path?: string; }; export type Offer = { sku_id: string; price: Price; display_name: string; product: Product; subscription_options: SubscriptionOptions; restrictions?: Restrictions; content?: Content; meta_data?: MetaData; };