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