import { defineMiddlewares } from "@medusajs/medusa";
import { RateLimit } from "@perseidesjs/medusa-plugin-rate-limit";
import { Modules } from "@medusajs/framework/utils";
export default defineMiddlewares({
  routes: [
    {
      matcher: "/store/custom*",
      middlewares: [
        async (
          req: MedusaRequest,
          res: MedusaResponse,
          next: MedusaNextFunction,
        ) => {
          const cacheService = req.scope.resolve(Modules.CACHE);
          const rateLimit = new RateLimit({
            cacheService,
            options: {
              limit: 50, // 50 requests per minute
              window: 60,
            },
          });
          const ip = req.headers["x-forwarded-for"] as string;
          const { success } = await rateLimit.limit(ip);
          if (!success) {
            res
              .status(429)
              .send("Too many requests, please try again later.");
            return;
          }
          next();
        },
      ],
    },
  ],
});