feat: added RateLimit Handler

This commit is contained in:
원더 2021-01-24 13:53:38 +09:00
parent 603b50e9e4
commit 64f7d82aae

23
utils/RateLimitHandler.ts Normal file
View File

@ -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<void>
}