import "server-only"; import { getRedisClient } from "@/lib/redis"; import { enforceFixedWindowRateLimit } from "@/lib/share/rate-limit-core"; const FIXED_WINDOW_SCRIPT = ` local count = redis.call("INCR", KEYS[1]) if count == 1 then redis.call("EXPIRE", KEYS[1], ARGV[1]) end return count `; export async function enforceShareRateLimit({ key, limit, windowSeconds, }: { key: string; limit: number; windowSeconds: number; }) { return enforceFixedWindowRateLimit({ key, limit, windowSeconds, increment: async (redisKey, expiresInSeconds) => { const redis = await getRedisClient(); return Number( await redis.send("EVAL", [ FIXED_WINDOW_SCRIPT, "1", redisKey, String(expiresInSeconds), ]), ); }, }); }