@grace-js/grace
Version:
An opinionated API framework
45 lines • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.rateLimitRoute = exports.createAfterRoute = exports.createBeforeRoute = void 0;
function createBeforeRoute() {
return (handler) => {
return handler;
};
}
exports.createBeforeRoute = createBeforeRoute;
function createAfterRoute() {
return (handler) => {
return handler;
};
}
exports.createAfterRoute = createAfterRoute;
function rateLimitRoute({ windowMs, max, message, statusCode }) {
const requests = new Map();
return async ({ request, app }) => {
const ip = app.adapter.getRequestIp(request);
if (ip == null) {
console.error('No IP address found in request, rate limiting is not possible');
return;
}
if (!requests.has(ip)) {
requests.set(ip, []);
}
const timestamps = requests.get(ip);
const now = Date.now();
// Remove timestamps older than the current window
while (timestamps.length > 0 && now - timestamps[0] > windowMs) {
timestamps.shift();
}
if (timestamps.length >= max) {
return {
code: statusCode ?? 429,
body: {
message: message ?? 'Too many requests'
}
};
}
timestamps.push(now);
};
}
exports.rateLimitRoute = rateLimitRoute;
//# sourceMappingURL=middleware.js.map