Get or Create a Stripe Customer
customers.ts
/**
* Gets the exsiting Stripe customer or creates a new record
*/
export async function getOrCreateCustomer(userId: string, params?: Stripe.CustomerCreateParams) {
const userSnapshot = await db.collection('users').doc(userId).get();
const { stripeCustomerId, email } = userSnapshot.data();
// If missing customerID, create it
if (!stripeCustomerId) {
// CREATE new customer
const customer = await stripe.customers.create({
email,
metadata: {
firebaseUID: userId
},
...params
});
await userSnapshot.ref.update({ stripeCustomerId: customer.id });
return customer;
} else {
return await stripe.customers.retrieve(stripeCustomerId) as Stripe.Customer;
}
}