import { betterAuth } from "better-auth"; import { prismaAdapter } from "better-auth/adapters/prisma"; import { prisma } from "./prisma"; import { testUtils } from "better-auth/plugins"; // Detect database provider from environment const databaseProvider = process.env.DATABASE_PROVIDER || "sqlite"; export const auth = betterAuth({ database: prismaAdapter(prisma, { provider: databaseProvider as "sqlite" | "postgresql", }), emailAndPassword: { enabled: true, autoSignIn: true, // Automatically sign in after registration requireEmailVerification: false, // Don't require email verification for tests minPasswordLength: 8, // Set minimum password length maxPasswordLength: 128, // Set maximum password length }, secret: process.env.BETTER_AUTH_SECRET || process.env.NEXTAUTH_SECRET, baseURL: process.env.BETTER_AUTH_URL || process.env.NEXTAUTH_URL || "http://localhost:3000/api/auth", // Configure trusted origins - parse from environment or use defaults trustedOrigins: (() => { const origins = []; // Add environment-specified origins if (process.env.TRUSTED_ORIGINS) { origins.push(...process.env.TRUSTED_ORIGINS.split(',').map(o => o.trim())); } // Add BETTER_AUTH_URL if set if (process.env.BETTER_AUTH_URL) { origins.push(process.env.BETTER_AUTH_URL); } // Add NEXTAUTH_URL if set if (process.env.NEXTAUTH_URL) { origins.push(process.env.NEXTAUTH_URL); } // Add defaults origins.push( "https://euchre.notsosm.art", "http://euchre.notsosm.art", "http://dhg.lol:51193", "http://localhost:3000", "http://127.0.0.1:3000", "http://0.0.0.0:3000" ); // Remove duplicates and empty strings return [...new Set(origins.filter(o => o))]; })(), session: { cookieCache: { enabled: false, // Disable cookie cache to avoid session cache issues }, }, // Configure rate limiting - disable for test environment // Note: Rate limiting is disabled for all environments to ensure test reliability rateLimit: { enabled: false, }, databaseHooks: { user: { create: { async after(user) { // Generate a unique player name using timestamp and random string const timestamp = Date.now(); const randomId = Math.random().toString(36).substring(2, 8); const baseName = user.name || user.email.split('@')[0]; const uniqueName = `${baseName}-${timestamp}-${randomId}`; // Create a Player record for the new user const newPlayer = await prisma.player.create({ data: { name: uniqueName, normalizedName: uniqueName.toLowerCase(), }, }); // Update the User with the playerId await prisma.user.update({ where: { id: user.id }, data: { playerId: newPlayer.id }, }); }, }, }, }, plugins: [ testUtils() ] });