saas-subscription-helper
Version:
A helper package for integrating Stripe Payment Links with Supabase in SaaS applications.
68 lines (60 loc) • 2.38 kB
JavaScript
/**
* 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;