19 lines
456 B
TypeScript
19 lines
456 B
TypeScript
import { defineMiddleware } from "astro/middleware"
|
|
import RateLimiter from '../libs/RateLimiter'
|
|
|
|
// `context` and `next` are automatically typed
|
|
export default defineMiddleware(async ({ request, locals }, next) => {
|
|
if (!request.url.includes('api')) {
|
|
return next()
|
|
}
|
|
|
|
const limit = RateLimiter.getInstance().consume(locals.authKey as string)
|
|
|
|
if ('status' in limit) {
|
|
return limit
|
|
}
|
|
locals.responseBuilder.addHeaders(limit)
|
|
|
|
return next()
|
|
})
|