chatbot-template/lib/ratelimit.ts

28 lines
644 B
TypeScript
Raw Permalink Normal View History

import { isProductionEnvironment } from "@/lib/constants";
import { ChatbotError } from "@/lib/errors";
const MAX_MESSAGES = 30;
const TTL_MS = 60 * 60 * 1000;
const ipCounts = new Map<string, { count: number; resetAt: number }>();
export async function checkIpRateLimit(ip: string | undefined) {
if (!isProductionEnvironment || !ip) {
return;
}
const now = Date.now();
const entry = ipCounts.get(ip);
if (!entry || entry.resetAt < now) {
ipCounts.set(ip, { count: 1, resetAt: now + TTL_MS });
return;
}
entry.count += 1;
if (entry.count > MAX_MESSAGES) {
throw new ChatbotError("rate_limit:chat");
}
}