diff --git a/package-lock.json b/package-lock.json index f433169..37f5178 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "cron": "^1.8.2", "express": "^4.17.1", "express-promise-router": "^4.1.1", - "express-rate-limit": "^5.5.1", + "express-rate-limit": "^6.3.0", "lodash": "^4.17.21", "pg": "^8.7.1", "redis": "^3.1.2", @@ -25,7 +25,6 @@ "@types/better-sqlite3": "^7.4.1", "@types/cron": "^1.7.3", "@types/express": "^4.17.13", - "@types/express-rate-limit": "^5.1.3", "@types/lodash": "^4.14.178", "@types/mocha": "^9.0.0", "@types/node": "^16.11.11", @@ -293,15 +292,6 @@ "@types/serve-static": "*" } }, - "node_modules/@types/express-rate-limit": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@types/express-rate-limit/-/express-rate-limit-5.1.3.tgz", - "integrity": "sha512-H+TYy3K53uPU2TqPGFYaiWc2xJV6+bIFkDd/Ma2/h67Pa6ARk9kWE0p/K9OH1Okm0et9Sfm66fmXoAxsH2PHXg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, "node_modules/@types/express-serve-static-core": { "version": "4.17.26", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", @@ -1889,9 +1879,15 @@ } }, "node_modules/express-rate-limit": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.5.1.tgz", - "integrity": "sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.3.0.tgz", + "integrity": "sha512-932Io1VGKjM3ppi7xW9sb1J5nVkEJSUiOtHw2oE+JyHks1e+AXuOBSXbJKM0mcXwEnW1TibJibQ455Ow1YFjfg==", + "engines": { + "node": ">= 12.9.0" + }, + "peerDependencies": { + "express": "^4" + } }, "node_modules/express/node_modules/debug": { "version": "2.6.9", @@ -5319,15 +5315,6 @@ "@types/serve-static": "*" } }, - "@types/express-rate-limit": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@types/express-rate-limit/-/express-rate-limit-5.1.3.tgz", - "integrity": "sha512-H+TYy3K53uPU2TqPGFYaiWc2xJV6+bIFkDd/Ma2/h67Pa6ARk9kWE0p/K9OH1Okm0et9Sfm66fmXoAxsH2PHXg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, "@types/express-serve-static-core": { "version": "4.17.26", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", @@ -6557,9 +6544,10 @@ } }, "express-rate-limit": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.5.1.tgz", - "integrity": "sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.3.0.tgz", + "integrity": "sha512-932Io1VGKjM3ppi7xW9sb1J5nVkEJSUiOtHw2oE+JyHks1e+AXuOBSXbJKM0mcXwEnW1TibJibQ455Ow1YFjfg==", + "requires": {} }, "fast-deep-equal": { "version": "3.1.3", diff --git a/package.json b/package.json index efee6ac..d727b11 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "cron": "^1.8.2", "express": "^4.17.1", "express-promise-router": "^4.1.1", - "express-rate-limit": "^5.5.1", + "express-rate-limit": "^6.3.0", "lodash": "^4.17.21", "pg": "^8.7.1", "redis": "^3.1.2", @@ -33,7 +33,6 @@ "@types/better-sqlite3": "^7.4.1", "@types/cron": "^1.7.3", "@types/express": "^4.17.13", - "@types/express-rate-limit": "^5.1.3", "@types/lodash": "^4.14.178", "@types/mocha": "^9.0.0", "@types/node": "^16.11.11", diff --git a/src/middleware/requestRateLimit.ts b/src/middleware/requestRateLimit.ts index 71f8bd9..63b65c9 100644 --- a/src/middleware/requestRateLimit.ts +++ b/src/middleware/requestRateLimit.ts @@ -1,19 +1,20 @@ import { getIP } from "../utils/getIP"; import { getHash } from "../utils/getHash"; import { getHashCache } from "../utils/getHashCache"; -import rateLimit from "express-rate-limit"; +import rateLimit, { RateLimitRequestHandler } from "express-rate-limit"; import { RateLimitConfig } from "../types/config.model"; import { Request } from "express"; import { isUserVIP } from "../utils/isUserVIP"; import { UserID } from "../types/user.model"; -export function rateLimitMiddleware(limitConfig: RateLimitConfig, getUserID?: (req: Request) => UserID): rateLimit.RateLimit { +export function rateLimitMiddleware(limitConfig: RateLimitConfig, getUserID?: (req: Request) => UserID): RateLimitRequestHandler { return rateLimit({ windowMs: limitConfig.windowMs, max: limitConfig.max, message: limitConfig.message, statusCode: limitConfig.statusCode, - headers: false, + legacyHeaders: false, + standardHeaders: false, keyGenerator: (req) => { return getHash(getIP(req), 1); },