{"plugin":{"id":14,"name":"rate-limiter","icon":"🛡️","description":"Apply rate limiting in your project","longDescription":"## A modular, flexible rate limiting plugin\n---\n## Features\n\n- 🚦 **Configurable limits** - Set requests per time window\n- 🛤️ **Route-specific limits** - Different limits for different endpoints\n- 🔑 **Custom key generation** - Rate limit by IP, user ID, API key, etc.\n- 💾 **Pluggable stores** - In-memory (default), Redis, database, etc.\n- 📊 **Standard headers** - `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`\n- ⏭️ **Skip routes** - Exclude health checks, static files, webhooks\n- 🎨 **Custom responses** - Configurable message, status code, or handler","version":"0.1.1","compatibleVersions":"^3.0.0","author":"Justin Halle","ownerId":"c166cdde-5f5c-40e5-a3ff-236652fa88a9","category":"api","tags":["rate-limit"],"published":true,"npmPackage":"frame-master-plugin-rate-limiter","githubUrl":"https://github.com/shpaw415/frame-master-plugin-rate-limiter","docsUrl":"","installation":"bun add frame-master-plugin-rate-limiter","quickStart":"// setup your routes as long it use the frame-master router's hooks\n// exemple: \n[\"/\", \"/protected\"]\n\n// see configuration\nfetch(\"/protected\") // will send too many request response after the rate is triggered\nfetch(\"/protected/some/path\") // will match in the same rate limit as `/protected`","configuration":"import type { FrameMasterConfig } from \"frame-master/server/types\";\nimport rateLimiterPlugin from \"..\";\n\nexport default {\n  HTTPServer: {\n    port: 3000,\n  },\n  plugins: [\n    rateLimiterPlugin({\n      message: \"Too many requests, please try again later.\",\n      routeLimits: [\n        {\n          limit: 5,\n          pattern: \"/protected**\",\n          windowMs: 60 * 1000, // 1 minute\n        },\n      ],\n    }),\n  ],\n} satisfies FrameMasterConfig;","upvote":0,"downvote":0,"createdAt":"2025-12-12T19:21:00.000Z","updatedAt":"2026-01-03T17:13:17.000Z","dependencies":[]}}