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