UNPKG

@grace-js/grace

Version:

An opinionated API framework

45 lines 1.45 kB
"use strict"; 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