@grace-js/grace
Version:
An opinionated API framework
39 lines • 1.18 kB
JavaScript
export function createBeforeRoute() {
return (handler) => {
return handler;
};
}
export function createAfterRoute() {
return (handler) => {
return handler;
};
}
export 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);
};
}
//# sourceMappingURL=middleware.js.map