feat: add deployment env based rate limiters

This commit is contained in:
Ritesh Ghosh
2025-05-25 22:53:29 +05:30
parent bd597a6fd7
commit f5d74627e8
+25 -7
View File
@@ -1,11 +1,28 @@
import { rateLimiter } from "hono-rate-limiter";
import { getConnInfo } from "@hono/node-server/conninfo";
import { env } from "./env.js";
import { getConnInfo as vercelGetConnInfo } from "hono/vercel";
import { getConnInfo as cfWorkersGetConnInfo } from "hono/cloudflare-workers";
import { getConnInfo as nodejsGetConnInfo } from "@hono/node-server/conninfo";
import type { GetConnInfo } from "hono/conninfo";
import { DeploymentEnv, env } from "./env.js";
let getConnInfo: GetConnInfo;
switch (env.ANIWATCH_API_DEPLOYMENT_ENV) {
case DeploymentEnv.VERCEL:
getConnInfo = vercelGetConnInfo;
break;
case DeploymentEnv.CLOUDFLARE_WORKERS:
getConnInfo = cfWorkersGetConnInfo;
break;
default:
getConnInfo = nodejsGetConnInfo;
break;
}
export const ratelimit = rateLimiter({
windowMs: env.ANIWATCH_API_WINDOW_MS,
limit: env.ANIWATCH_API_MAX_REQS,
standardHeaders: "draft-7",
limit: env.ANIWATCH_API_MAX_REQS,
windowMs: env.ANIWATCH_API_WINDOW_MS,
keyGenerator(c) {
const { remote } = getConnInfo(c);
const key =
@@ -14,9 +31,10 @@ export const ratelimit = rateLimiter({
return key;
},
handler: (c) =>
c.json(
handler(c) {
return c.json(
{ status: 429, message: "Too Many Requests 😵" },
{ status: 429 }
),
);
},
});