diff options
| author | Maze Winther <mazewinther@gmail.com> | 2025-08-02 17:33:23 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2025-08-02 17:33:23 +0200 |
| commit | 5e2b07e518629a0fefa95ca5f99b60b7dab6bf7c (patch) | |
| tree | 183886eebefb359e0086d040bf39a792c8a0c993 /packages/auth/src/server.ts | |
| parent | c8980de41a64922eb27e3b43be1ba1dcfe5a274c (diff) | |
| download | opencut-5e2b07e518629a0fefa95ca5f99b60b7dab6bf7c.tar.gz | |
feat: better auth rate limiting
Diffstat (limited to 'packages/auth/src/server.ts')
| -rw-r--r-- | packages/auth/src/server.ts | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/packages/auth/src/server.ts b/packages/auth/src/server.ts index 02d147e0..84b91b39 100644 --- a/packages/auth/src/server.ts +++ b/packages/auth/src/server.ts @@ -1,9 +1,20 @@ -import { betterAuth } from "better-auth"; +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 } = keys(); +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, { @@ -19,6 +30,18 @@ export const auth = betterAuth({ 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"], |
