core/utils/RateLimitHandler.ts
2021-01-24 13:53:38 +09:00

23 lines
716 B
TypeScript

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