UNPKG

saas-subscription-helper

Version:

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

65 lines (52 loc) 1.96 kB
// Handles cancellations or downgrades. const stripe = require('stripe'); const { fetchUser } = require('../supabase'); async function cancelSubscription(config, email) { if (config.debug) console.log('[DEBUG] Starting subscription cancellation...'); const stripeClient = stripe(config.stripeSecretKey); try { // Get user's current subscription details from Supabase const user = await fetchUser(config, email); if (user === null || user === undefined) { const error = new Error('User not found'); error.code = 'USER_NOT_FOUND'; throw error; } // Get customer's subscriptions from Stripe const customer = await stripeClient.customers.list({ email: email, limit: 1 }); if (!customer.data.length) { const error = new Error('No Stripe customer found for this email'); error.code = 'STRIPE_CUSTOMER_NOT_FOUND'; throw error; } const subscriptions = await stripeClient.subscriptions.list({ customer: customer.data[0].id, limit: 1, status: 'active' }); if (!subscriptions.data.length) { throw new Error('No active subscription found'); } // Cancel the subscription const subscription = await stripeClient.subscriptions.update( subscriptions.data[0].id, { cancel_at_period_end: true } ); if (config.debug) { console.log('[DEBUG] Subscription cancelled successfully'); console.log('[DEBUG] Subscription details:', subscription); } return { success: true, subscription }; } catch (error) { if (config.debug) { console.error('[DEBUG] Error cancelling subscription:', error); } throw error; } } module.exports = cancelSubscription;