b8b1b9a6d0
* fix: rate limit auth * fix: replace lru-cache w memory-cache * remove comments * fix: yarn.lock * fix: remove changes yarn lock * fix: add missing EOL empty liune * fix: move rate limiter so it kicks the last, limit to 10 tries per minute * fix: move limiter w rest of code * test: trying fix onboardong * fix: undo changes in globalSetup.ts * test: fix disable login for onboarding * fix: use username instead of email for token check * fix: tests * fix: don't run on test * fix: add missing comma * fix: remove uniqueTokenPerInterval * fix: add errorcode to packages lib auth * Update packages/lib/rateLimit.ts fix: improve readability Co-authored-by: Omar López <zomars@me.com> * Update packages/lib/rateLimit.ts fix: no unnecessary any Co-authored-by: Omar López <zomars@me.com> * Update packages/lib/rateLimit.ts fix: improve readability Co-authored-by: Omar López <zomars@me.com> * fix: rename interval -> intervalInMs * fix: check user.email not username which could be empty * fix: rateLimit update all naming Co-authored-by: Agusti Fernandez Pardo <git@agusti.me> Co-authored-by: Omar López <zomars@me.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com>
28 lines
777 B
TypeScript
28 lines
777 B
TypeScript
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
import cache from "memory-cache";
|
|
|
|
import { ErrorCode } from "./auth";
|
|
|
|
const rateLimit = (options: { intervalInMs: number }) => {
|
|
return {
|
|
check: (requestLimit: number, uniqueIdentifier: string) => {
|
|
const count = cache.get(uniqueIdentifier) || [0];
|
|
if (count[0] === 0) {
|
|
cache.put(uniqueIdentifier, count, options.intervalInMs);
|
|
}
|
|
count[0] += 1;
|
|
|
|
const currentUsage = count[0];
|
|
const isRateLimited = currentUsage >= requestLimit;
|
|
|
|
if (isRateLimited) {
|
|
throw new Error(ErrorCode.RateLimitExceeded);
|
|
}
|
|
|
|
return { isRateLimited, requestLimit, remaining: isRateLimited ? 0 : requestLimit - currentUsage };
|
|
},
|
|
};
|
|
};
|
|
|
|
export default rateLimit;
|