From f5d74627e8b7f844f58a9dc82e3a79ecd911cc8f Mon Sep 17 00:00:00 2001 From: Ritesh Ghosh Date: Sun, 25 May 2025 22:53:29 +0530 Subject: [PATCH] feat: add deployment env based rate limiters --- src/config/ratelimit.ts | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/config/ratelimit.ts b/src/config/ratelimit.ts index 8bfc308..06b6ef4 100644 --- a/src/config/ratelimit.ts +++ b/src/config/ratelimit.ts @@ -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 } - ), + ); + }, });