import { betterAuth, type RateLimit } from "better-auth"; import { drizzleAdapter } from "better-auth/adapters/drizzle"; import { Redis } from "@upstash/redis"; import { db } from "@/lib/db"; import { webEnv } from "@opencut/env/web"; const redis = new Redis({ url: webEnv.UPSTASH_REDIS_REST_URL, token: webEnv.UPSTASH_REDIS_REST_TOKEN, }); export const auth = betterAuth({ database: drizzleAdapter(db, { provider: "pg", usePlural: true, }), secret: webEnv.BETTER_AUTH_SECRET, user: { deleteUser: { enabled: true, }, }, emailAndPassword: { enabled: true, }, rateLimit: { storage: "secondary-storage", customStorage: { get: async (key) => { const value = await redis.get(key); return value as RateLimit | undefined; }, set: async (key, value) => { await redis.set(key, value); }, }, }, baseURL: webEnv.NEXT_PUBLIC_SITE_URL, appName: "OpenCut", trustedOrigins: [webEnv.NEXT_PUBLIC_SITE_URL], }); export type Auth = typeof auth;