const rateLimiters = {
loggedInUser: new RateLimit({
cacheService,
options: { limit: 100, window: 3600 }
}),
anonymousUser: new RateLimit({
cacheService,
options: { limit: 10, window: 60 }
})
}
async (req: MedusaRequest, res: MedusaResponse, next: MedusaNextFunction) => {
const userId = req.auth_context.actor_id
const ip = req.headers['x-forwarded-for'] as string
const { success, remaining } = userId
? await rateLimiters.loggedInUserRateLimit.limit(`user:${userId}`)
: await rateLimiters.anonymousUserRateLimit.limit(ip)
if (!success) {
res.status(429).send('Too many requests, please try again later.')
return
}
// ...
}