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 }