Files
OpenCut/apps/web/src/lib/rate-limit.ts
T

22 lines
649 B
TypeScript
Raw Normal View History

2025-07-24 14:41:34 -07:00
import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";
2026-01-31 00:20:04 +01:00
import { webEnv } from "@opencut/env/web";
2025-07-24 14:41:34 -07:00
const redis = new Redis({
2026-01-31 00:20:04 +01:00
url: webEnv.UPSTASH_REDIS_REST_URL,
token: webEnv.UPSTASH_REDIS_REST_TOKEN,
2025-07-24 14:41:34 -07:00
});
2025-08-02 17:28:01 +02:00
export const baseRateLimit = new Ratelimit({
2026-01-31 00:20:04 +01:00
redis,
limiter: Ratelimit.slidingWindow(100, "1 m"), // 100 requests per minute
analytics: true,
prefix: "rate-limit",
2025-07-24 14:41:34 -07:00
});
2026-01-31 00:20:04 +01:00
export async function checkRateLimit({ request }: { request: Request }) {
const ip = request.headers.get("x-forwarded-for") ?? "anonymous";
const { success } = await baseRateLimit.limit(ip);
return { success, limited: !success };
}