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 }, secret: process.env.BETTER_AUTH_SECRET, baseURL: process.env.BETTER_AUTH_URL || "http://localhost:3000", trustedOrigins: [ process.env.BETTER_AUTH_URL || "http://localhost:3000", "http://127.0.0.1:3000", "http://0.0.0.0:3000", // Parse comma-separated TRUSTED_ORIGINS environment variable ...(process.env.TRUSTED_ORIGINS ? process.env.TRUSTED_ORIGINS.split(',').map(origin => origin.trim()) : []), ], session: { cookieCache: { enabled: false, // Disable cookie cache to avoid session cache issues }, }, 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() ] });