62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
import config from "../config.ts";
|
|
import Stripe from "stripe";
|
|
|
|
const stripe = new Stripe(config.STRIPE_SECRET_KEY, {
|
|
apiVersion: "2020-08-27",
|
|
});
|
|
|
|
export async function getCustomerByEmail(email: string) {
|
|
if (!config.STRIPE_SECRET_KEY) {
|
|
return undefined;
|
|
}
|
|
const customer = await stripe.customers.list({
|
|
email,
|
|
expand: ["data.subscriptions"],
|
|
});
|
|
return customer?.data[0];
|
|
}
|
|
|
|
export async function getIsSubscriberByEmail(email: string | undefined) {
|
|
if (!config.STRIPE_SECRET_KEY) {
|
|
// If Stripe isn't set up assume everyone is a subscriber
|
|
return true;
|
|
}
|
|
if (!email) {
|
|
return false;
|
|
}
|
|
const customer = await getCustomerByEmail(email);
|
|
const isSubscriber = Boolean(
|
|
customer?.subscriptions?.data?.find((sub) => sub?.status === "active"),
|
|
);
|
|
return isSubscriber;
|
|
}
|
|
|
|
export async function createSelfServicePortal(
|
|
customerId: string,
|
|
returnUrl: string,
|
|
) {
|
|
return await stripe.billingPortal.sessions.create({
|
|
customer: customerId,
|
|
return_url: returnUrl,
|
|
});
|
|
}
|
|
|
|
export async function getAllCustomers() {
|
|
const result = [];
|
|
for await (const customer of stripe.customers.list({ limit: 100 })) {
|
|
result.push(customer);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
export async function getAllActiveSubscriptions() {
|
|
const result = [];
|
|
for await (const sub of stripe.subscriptions.list({
|
|
limit: 100,
|
|
status: "active",
|
|
})) {
|
|
result.push(sub);
|
|
}
|
|
return result;
|
|
}
|