import { createClient, type GenericCtx } from '@convex-dev/better-auth'; import { convex } from '@convex-dev/better-auth/plugins'; import { betterAuth, type BetterAuthOptions } from 'better-auth/minimal'; import { haveIBeenPwned } from 'better-auth/plugins'; import { components } from './_generated/api'; import { DataModel } from './_generated/dataModel'; import { query } from './_generated/server'; import authConfig from './auth.config'; import authSchema from './betterAuth/schema'; const siteUrl = process.env.SITE_URL!; export const authComponent = createClient( components.betterAuth, { local: { schema: authSchema, }, }, ); export const createAuthOptions = ( ctx: GenericCtx, ): BetterAuthOptions => { return { baseURL: siteUrl, database: authComponent.adapter(ctx), emailAndPassword: { minPasswordLength: 8, maxPasswordLength: 128, autoSignIn: true, enabled: true, requireEmailVerification: false, }, plugins: [convex({ authConfig }), haveIBeenPwned()], }; }; export const createAuth = (ctx: GenericCtx) => { return betterAuth(createAuthOptions(ctx)); }; export const getCurrentUser = query({ args: {}, handler: async (ctx) => { return authComponent.getAuthUser(ctx); }, });