summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorenkei64 <imenkei64@gmail.com>2025-08-04 18:11:24 +1000
committerGitHub <noreply@github.com>2025-08-04 18:11:24 +1000
commit21b248718b0d1f6e7f32a8bac0cc1277241b7bd5 (patch)
tree70d9c53fc561a9100dd4c7d1cb6d49d45e35b989 /packages
parentbb36b2e439bffcaa7059e3c0578a0fc61c2737ac (diff)
parentd022a78ae2330665e7d763fdc6e831a71f3b9ea1 (diff)
downloadopencut-21b248718b0d1f6e7f32a8bac0cc1277241b7bd5.tar.gz
Merge branch 'staging' into feature/panel-presets
Diffstat (limited to 'packages')
-rw-r--r--packages/auth/src/keys.ts4
-rw-r--r--packages/auth/src/server.ts27
-rw-r--r--packages/db/src/schema.ts8
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();