import { betterAuth } from "better-auth"; import Database from "better-sqlite3"; import { sveltekitCookies } from "better-auth/svelte-kit"; import { getRequestEvent } from "$app/server"; import { jwt } from "better-auth/plugins" import { anonymous } from "better-auth/plugins" import { emailOTP } from "better-auth/plugins" import { stripe } from "@better-auth/stripe" import Stripe from "stripe" import { env } from "$env/dynamic/private"; const stripeClient = new Stripe(env.STRIPE_SECRET_KEY, { apiVersion: "2025-02-24.acacia" }) export const auth = betterAuth({ database: new Database(env.BETTER_AUTH_DATABASE_PATH || "./sqlite.db"), emailAndPassword: { enabled: true }, user: { deleteUser: { enabled: true, sendDeleteAccountVerification: async ({ user, url, token }) => { // Send delete account verification email console.log(`Delete verification for ${user.email}: ${url}`); // TODO: Implement email sending with your email provider }, beforeDelete: async (user) => { // Cancel any active subscriptions before deleting console.log(`Preparing to delete user ${user.id}, canceling subscriptions...`); }, afterDelete: async (user) => { // Cleanup after user deletion console.log(`User ${user.id} has been deleted successfully`); } } }, socialProviders: { twitch: { clientId: env.TWITCH_CLIENT_ID, clientSecret: env.TWITCH_CLIENT_SECRET, }, discord: { clientId: env.DISCORD_CLIENT_ID, clientSecret: env.DISCORD_CLIENT_SECRET, }, }, plugins: [ sveltekitCookies(getRequestEvent), jwt(), anonymous(), emailOTP({ otpLength: 6, expiresIn: 300, async sendVerificationOTP({ email, otp, type }) { // TODO: Implement the sendVerificationOTP method to send the OTP to the user's email address console.log(`OTP for ${email}: ${otp} type: ${type}`); }, }), stripe({ stripeClient, stripeWebhookSecret: env.STRIPE_WEBHOOK_SECRET, createCustomerOnSignUp: false, subscription: { enabled: true, plans: [ { name: "premium", priceId: env.STRIPE_PREMIUM_PRICE_ID, annualDiscountPriceId: env.STRIPE_PREMIUM_ANNUAL_PRICE_ID, } ], getCheckoutSessionParams: async ({ user, session, plan, subscription }, request) => { return { params: { automatic_tax: { enabled: true } } }; } }, getCustomerCreateParams: async ({ user, session }, request) => { return { metadata: { user_id: user.id } }; } }) ], })