import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { openAPI } from "better-auth/plugins";
import { ENV } from "@/core/constants/env.js";
import { ipAddressHeaders } from "@/core/utils/net.js";
import { db } from "@/db/index.js";
import * as schema from "@/db/schema.js";
export const auth = betterAuth({
appName: ENV.APP_TITLE,
secret: ENV.BETTER_AUTH_SECRET,
baseURL: ENV.APP_URL,
database: drizzleAdapter(db, {
provider: "pg",
schema: {
user: schema.userTable,
session: schema.sessionTable,
account: schema.accountTable,
verification: schema.verificationTable,
rate_limit: schema.rateLimitTable,
},
}),
trustedOrigins: [ENV.APP_URL],
emailAndPassword: { enabled: true },
rateLimit: {
window: 15, // 15 seconds
max: 150, // 10 req/s
storage: "database",
modelName: "rate_limit",
},
plugins: [
openAPI({
path: "/docs", // at /api/auth/docs
theme: "bluePlanet",
}),
],
advanced: {
ipAddress: {
ipAddressHeaders: Object.values(ipAddressHeaders),
},
},
telemetry: {
enabled: false,
},
});