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();
},
],
},
],
});