hugging-c-ai / src /lib /services /billing.js
NeoPy's picture
feat: Hugging-c-ai v2 — HF OAuth + multi-provider AI + HF bucket storage + Gradio
60faa09
Raw History Blame Contribute Delete
1.55 kB
import { stripe } from "../stripe";
import config from "../config";
import { UserService } from "./user";
export const BillingService = {
async createCheckoutSession(userId, planId) {
const plan = config.stripe.plans[planId];
if (!plan) throw new Error("Invalid plan selected");
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
line_items: [
{
price_data: {
currency: "usd",
product_data: {
name: `${config.stripe.plans[planId].name}`,
description: `Purchase ${plan.credits} credits to perform AI generations.`,
},
unit_amount: plan.price,
},
quantity: 1,
},
],
mode: "payment",
success_url: `${config.auth.url}/pricing?success=true`,
cancel_url: `${config.auth.url}/pricing?canceled=true`,
metadata: { userId, credits: plan.credits.toString() },
});
return session.url;
},
async handleWebhook(body, signature) {
const event = stripe.webhooks.constructEvent(body, signature, config.stripe.webhookSecret);
if (event.type === "checkout.session.completed") {
const session = event.data.object;
const userId = session.metadata.userId;
const credits = parseInt(session.metadata.credits || "0", 10);
if (userId && credits > 0) {
await UserService.addCredits(userId, credits);
return { success: true, userId, credits };
}
}
return { success: false };
}
};