diff options
| author | enkei64 <imenkei64@gmail.com> | 2025-08-04 18:11:24 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-04 18:11:24 +1000 |
| commit | 21b248718b0d1f6e7f32a8bac0cc1277241b7bd5 (patch) | |
| tree | 70d9c53fc561a9100dd4c7d1cb6d49d45e35b989 /packages | |
| parent | bb36b2e439bffcaa7059e3c0578a0fc61c2737ac (diff) | |
| parent | d022a78ae2330665e7d763fdc6e831a71f3b9ea1 (diff) | |
| download | opencut-21b248718b0d1f6e7f32a8bac0cc1277241b7bd5.tar.gz | |
Merge branch 'staging' into feature/panel-presets
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/auth/src/keys.ts | 4 | ||||
| -rw-r--r-- | packages/auth/src/server.ts | 27 | ||||
| -rw-r--r-- | packages/db/src/schema.ts | 8 |
3 files changed, 29 insertions, 10 deletions
diff --git a/packages/auth/src/keys.ts b/packages/auth/src/keys.ts index 5dfaf0ea..3ac528f4 100644 --- a/packages/auth/src/keys.ts +++ b/packages/auth/src/keys.ts @@ -5,6 +5,8 @@ export const keys = () => createEnv({ server: { BETTER_AUTH_SECRET: z.string(), + UPSTASH_REDIS_REST_URL: z.string().url(), + UPSTASH_REDIS_REST_TOKEN: z.string(), }, client: { NEXT_PUBLIC_BETTER_AUTH_URL: z.string().url(), @@ -12,5 +14,7 @@ export const keys = () => runtimeEnv: { NEXT_PUBLIC_BETTER_AUTH_URL: process.env.NEXT_PUBLIC_BETTER_AUTH_URL, BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET, + UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL, + UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN, }, }); 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"], diff --git a/packages/db/src/schema.ts b/packages/db/src/schema.ts index bb92a14e..c32d6c2a 100644 --- a/packages/db/src/schema.ts +++ b/packages/db/src/schema.ts @@ -57,11 +57,3 @@ export const verifications = pgTable("verifications", { () => /* @__PURE__ */ new Date() ), }).enableRLS(); - -export const waitlist = pgTable("waitlist", { - id: text("id").primaryKey(), - email: text("email").notNull().unique(), - createdAt: timestamp("created_at") - .$defaultFn(() => /* @__PURE__ */ new Date()) - .notNull(), -}).enableRLS(); |
