UNPKG

saas-subscription-helper

Version:

A helper package for integrating Stripe Payment Links with Supabase in SaaS applications.

68 lines (60 loc) 2.38 kB
/** * Validates the configuration object provided to the SubscriptionHelper class. * @param {Object} config - The configuration object. * @returns {Object} - The validated configuration object. * @throws {Error} - Throws an error if required fields are missing or invalid. */ function validateConfig(config) { const requiredFields = [ 'stripeSecretKey', // Stripe secret key 'stripeWebhookSecret', // Stripe webhook signing secret 'supabaseUrl', // Supabase project URL 'supabaseKey', // Supabase service role key ]; const optionalFields = [ 'syncedStripeFields', // Stripe fields to sync with database 'prorationBehavior', // How to handle proration 'preserveTrialPeriods' // Whether to preserve trial periods during changes ]; // Check required fields for (const field of requiredFields) { if (!config[field]) { throw new Error(`Missing required configuration field: ${field}`); } } // Set defaults for optional fields config.table = config.table || 'users'; config.emailField = config.emailField || 'email'; config.subscriptionField = config.subscriptionField || 'subscription_status'; config.debug = !!config.debug; config.preserveTrialPeriods = config.preserveTrialPeriods !== false; // Default to true config.syncedStripeFields = config.syncedStripeFields || {}; // Validate syncedStripeFields if provided const validStripeFields = [ 'stripe_customer_id', 'default_payment_method', 'payment_last4', 'payment_brand', 'payment_exp_month', 'payment_exp_year', 'current_period_start', 'current_period_end', 'cancel_at_period_end', 'canceled_at', 'trial', 'trial_start', 'trial_end', 'subscription_created_at' ]; // Convert all provided fields to boolean values and validate field names if (config.syncedStripeFields) { for (const field in config.syncedStripeFields) { if (!validStripeFields.includes(field)) { throw new Error(`Invalid Stripe field to sync: ${field}`); } config.syncedStripeFields[field] = !!config.syncedStripeFields[field]; } } return config; } module.exports = validateConfig;