22 lines
646 B
TypeScript
22 lines
646 B
TypeScript
import { Ratelimit } from "@upstash/ratelimit";
|
|
import { Redis } from "@upstash/redis";
|
|
import { webEnv } from "@/lib/env/web";
|
|
|
|
const redis = new Redis({
|
|
url: webEnv.UPSTASH_REDIS_REST_URL,
|
|
token: webEnv.UPSTASH_REDIS_REST_TOKEN,
|
|
});
|
|
|
|
export const baseRateLimit = new Ratelimit({
|
|
redis,
|
|
limiter: Ratelimit.slidingWindow(100, "1 m"), // 100 requests per minute
|
|
analytics: true,
|
|
prefix: "rate-limit",
|
|
});
|
|
|
|
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 };
|
|
}
|