import * as schema from '@admin/db/schema' import { sendPasswordResetEmail } from '@admin/actions/email' import db from '@admin/db' import { UserRole } from '@admin/types/auth' import { betterAuth } from 'better-auth' import { drizzleAdapter } from 'better-auth/adapters/drizzle' import { toNextJsHandler } from 'better-auth/next-js' import { admin } from 'better-auth/plugins/admin' export { toNextJsHandler } export const auth = betterAuth({ secret: process.env.BETTERSTART_AUTH_SECRET, baseURL: process.env.BETTERSTART_AUTH_URL, basePath: process.env.BETTERSTART_AUTH_BASE_PATH || '/api/admin/auth', database: drizzleAdapter(db, { provider: 'pg', schema: { user: schema.user, session: schema.session, account: schema.account, verification: schema.verification } }), emailAndPassword: { enabled: true, minPasswordLength: 8, revokeSessionsOnPasswordReset: true, sendResetPassword: async ({ user, url }: { user: { email: string; name: string } url: string }) => { await sendPasswordResetEmail({ user, url }) } }, session: { expiresIn: 60 * 60 * 24 * 7, updateAge: 60 * 60 * 24, cookieCache: { enabled: true, maxAge: 15 * 60 } }, plugins: [ admin({ defaultRole: UserRole.MEMBER, adminRoles: [UserRole.ADMIN] }) ], user: { additionalFields: { role: { type: 'string', required: false, defaultValue: 'member', input: false } } } }) export type Session = typeof auth.$Infer.Session export type User = typeof auth.$Infer.Session.user