init
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user