UNPKG

@grace-js/grace

Version:

An opinionated API framework

39 lines 1.18 kB
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