From 64f7d82aaeac54e71b33261bb03545354120fc97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9B=90=EB=8D=94?= Date: Sun, 24 Jan 2021 13:53:38 +0900 Subject: [PATCH] feat: added RateLimit Handler --- utils/RateLimitHandler.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 utils/RateLimitHandler.ts diff --git a/utils/RateLimitHandler.ts b/utils/RateLimitHandler.ts new file mode 100644 index 0000000..662a3b7 --- /dev/null +++ b/utils/RateLimitHandler.ts @@ -0,0 +1,23 @@ +import { NextApiResponse } from 'next' +import ResponseWrapper from './ResponseWrapper' + +export default function RateLimitHandler( + res: NextApiResponse, ratelimit: RateLimit +) { + res.setHeader('x-ratelimit-limit', ratelimit.limit) + res.setHeader('x-ratelimit-remaining', 600 - (ratelimit.used > ratelimit.limit ? ratelimit.limit : ratelimit.used)) + res.setHeader('x-ratelimit-reset', Math.round(ratelimit.reset / 1000)) + if(ratelimit.limit < ratelimit.used) { + if(ratelimit.onLimitExceed) ratelimit.onLimitExceed(res) + else ResponseWrapper(res, { code: 429 }) + return true + } +} + + +interface RateLimit { + used: number + limit: number + reset: number, + onLimitExceed: (res: NextApiResponse)=> void | Promise +} \ No newline at end of file