51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import { betterAuth, RateLimit } from "better-auth";
|
|
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
|
import { db } from "@opencut/db";
|
|
import { keys } from "./keys";
|
|
import { Redis } from "@upstash/redis";
|
|
|
|
const {
|
|
NEXT_PUBLIC_BETTER_AUTH_URL,
|
|
BETTER_AUTH_SECRET,
|
|
UPSTASH_REDIS_REST_URL,
|
|
UPSTASH_REDIS_REST_TOKEN,
|
|
} = keys();
|
|
|
|
const redis = new Redis({
|
|
url: UPSTASH_REDIS_REST_URL,
|
|
token: UPSTASH_REDIS_REST_TOKEN,
|
|
});
|
|
|
|
export const auth = betterAuth({
|
|
database: drizzleAdapter(db, {
|
|
provider: "pg",
|
|
usePlural: true,
|
|
}),
|
|
secret: BETTER_AUTH_SECRET,
|
|
user: {
|
|
deleteUser: {
|
|
enabled: true,
|
|
},
|
|
},
|
|
emailAndPassword: {
|
|
enabled: true,
|
|
},
|
|
rateLimit: {
|
|
storage: "secondary-storage",
|
|
customStorage: {
|
|
get: async (key) => {
|
|
const value = await redis.get(key);
|
|
return value as RateLimit | undefined;
|
|
},
|
|
set: async (key, value) => {
|
|
await redis.set(key, value);
|
|
},
|
|
},
|
|
},
|
|
baseURL: NEXT_PUBLIC_BETTER_AUTH_URL,
|
|
appName: "OpenCut",
|
|
trustedOrigins: ["http://localhost:3000"],
|
|
});
|
|
|
|
export type Auth = typeof auth;
|