// server.ts
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { betterAuth, type BetterAuthOptions } from "better-auth";
import { DbConnection } from "~/database/index.server";
import { dialect } from "~/database/config";
import { config } from "~/auth/config";
import { dialectToProviderMap } from "~/auth/utils";
import type { AuthInstance, EnvConfig } from "~/auth/types";
export class Auth {
private constructor() {}
private static instance: AuthInstance;
private static envOptions: EnvConfig;
static init(opt: EnvConfig) {
this.envOptions = opt;
}
static get() {
if (!this.envOptions) {
throw new Error("Auth must be init");
}
let options = {
database: drizzleAdapter(DbConnection.get(), {
provider: dialectToProviderMap[dialect],
}),
...config,
...this.envOptions,
} satisfies BetterAuthOptions;
this.instance ??= betterAuth(options);
return this.instance;
}
}
// config.ts
import { type BetterAuthOptions } from "better-auth";
import { emailOTP, openAPI } from "better-auth/plugins";
import { ___app_name___ } from "~/env/config";
/** Better Auth base app configuration */
export const config = {
emailAndPassword: { enabled: false },
plugins: [
emailOTP({
async sendVerificationOTP({ email, otp, type }) {
console.log(`${type} ${email}: ${otp}`);
},
}),
openAPI(),
],
advanced: { cookiePrefix: ___app_name___ },
} satisfies BetterAuthOptions;
// server.ts
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { betterAuth, type BetterAuthOptions } from "better-auth";
import { DbConnection } from "~/database/index.server";
import { dialect } from "~/database/config";
import { config } from "~/auth/config";
import { dialectToProviderMap } from "~/auth/utils";
import type { AuthInstance, EnvConfig } from "~/auth/types";
export class Auth {
private constructor() {}
private static instance: AuthInstance;
private static envOptions: EnvConfig;
static init(opt: EnvConfig) {
this.envOptions = opt;
}
static get() {
if (!this.envOptions) {
throw new Error("Auth must be init");
}
let options = {
database: drizzleAdapter(DbConnection.get(), {
provider: dialectToProviderMap[dialect],
}),
...config,
...this.envOptions,
} satisfies BetterAuthOptions;
this.instance ??= betterAuth(options);
return this.instance;
}
}
// config.ts
import { type BetterAuthOptions } from "better-auth";
import { emailOTP, openAPI } from "better-auth/plugins";
import { ___app_name___ } from "~/env/config";
/** Better Auth base app configuration */
export const config = {
emailAndPassword: { enabled: false },
plugins: [
emailOTP({
async sendVerificationOTP({ email, otp, type }) {
console.log(`${type} ${email}: ${otp}`);
},
}),
openAPI(),
],
advanced: { cookiePrefix: ___app_name___ },
} satisfies BetterAuthOptions;