import { betterAuth } from 'better-auth'; import { drizzleAdapter } from 'better-auth/adapters/drizzle'; import { nextCookies } from 'better-auth/next-js'; import { magicLink } from 'better-auth/plugins'; import { db } from '@/lib/server/db'; import { authSchema } from '@/lib/server/db/schema'; function parseCsvList(value: string | undefined) { return (value ?? '') .split(',') .map((entry) => entry.trim()) .filter((entry) => entry.length > 0); } const trustedOrigins = parseCsvList(process.env.BETTER_AUTH_TRUSTED_ORIGINS); const baseURL = process.env.BETTER_AUTH_BASE_URL?.trim() || process.env.BETTER_AUTH_URL?.trim() || undefined; const secret = process.env.BETTER_AUTH_SECRET?.trim() || undefined; export const auth = betterAuth({ database: drizzleAdapter(db, { provider: 'pg', schema: authSchema }), baseURL, secret, emailAndPassword: { enabled: true }, trustedOrigins: trustedOrigins.length > 0 ? trustedOrigins : undefined, plugins: [ magicLink({ sendMagicLink: async ({ email, url }) => { console.info(`[better-auth] Magic link requested for ${email}: ${url}`); } }), nextCookies() ] });