2024-04-15 17:01:47 -04:00
|
|
|
import { RateLimiterRedis } from "rate-limiter-flexible";
|
2025-04-10 18:49:23 +02:00
|
|
|
import { RateLimiterMode } from "../types";
|
2024-07-16 22:41:13 -04:00
|
|
|
import Redis from "ioredis";
|
2025-04-10 18:49:23 +02:00
|
|
|
import type { AuthCreditUsageChunk } from "../controllers/v1/types";
|
2024-04-20 14:02:22 -07:00
|
|
|
|
2024-07-16 22:41:13 -04:00
|
|
|
export const redisRateLimitClient = new Redis(
|
2024-12-11 19:51:08 -03:00
|
|
|
process.env.REDIS_RATE_LIMIT_URL!,
|
2024-12-11 19:46:11 -03:00
|
|
|
);
|
2024-04-15 17:01:47 -04:00
|
|
|
|
2024-06-06 11:23:10 -07:00
|
|
|
const createRateLimiter = (keyPrefix, points) =>
|
|
|
|
|
new RateLimiterRedis({
|
2024-07-16 22:41:13 -04:00
|
|
|
storeClient: redisRateLimitClient,
|
2024-06-06 11:23:10 -07:00
|
|
|
keyPrefix,
|
|
|
|
|
points,
|
2024-12-11 19:51:08 -03:00
|
|
|
duration: 60, // Duration in seconds
|
2024-06-06 11:23:10 -07:00
|
|
|
});
|
2024-04-15 17:01:47 -04:00
|
|
|
|
2024-05-08 15:14:39 -07:00
|
|
|
export const testSuiteRateLimiter = new RateLimiterRedis({
|
2024-07-16 22:41:13 -04:00
|
|
|
storeClient: redisRateLimitClient,
|
2024-05-14 14:26:42 -07:00
|
|
|
keyPrefix: "test-suite",
|
2024-05-19 12:23:34 -07:00
|
|
|
points: 10000,
|
2024-12-11 19:51:08 -03:00
|
|
|
duration: 60, // Duration in seconds
|
2024-05-08 15:14:39 -07:00
|
|
|
});
|
2024-04-15 17:01:47 -04:00
|
|
|
|
2025-04-10 18:49:23 +02:00
|
|
|
const fallbackRateLimits: AuthCreditUsageChunk["rate_limits"] = {
|
|
|
|
|
crawl: 15,
|
|
|
|
|
scrape: 100,
|
|
|
|
|
search: 100,
|
|
|
|
|
map: 100,
|
|
|
|
|
extract: 100,
|
|
|
|
|
preview: 25,
|
|
|
|
|
extractStatus: 25000,
|
|
|
|
|
crawlStatus: 25000,
|
2025-04-15 00:19:45 -07:00
|
|
|
extractAgentPreview: 1,
|
|
|
|
|
scrapeAgentPreview: 5,
|
2025-04-10 18:49:23 +02:00
|
|
|
};
|
2024-10-01 16:04:39 -03:00
|
|
|
|
|
|
|
|
export function getRateLimiter(
|
|
|
|
|
mode: RateLimiterMode,
|
2025-04-10 18:49:23 +02:00
|
|
|
rate_limits: AuthCreditUsageChunk["rate_limits"] | null,
|
2024-12-11 19:46:11 -03:00
|
|
|
): RateLimiterRedis {
|
|
|
|
|
return createRateLimiter(
|
2025-04-10 18:49:23 +02:00
|
|
|
`${mode}`,
|
2025-04-15 00:19:45 -07:00
|
|
|
(rate_limits?.[mode] ?? fallbackRateLimits?.[mode] ?? 500),
|
2024-12-11 19:46:11 -03:00
|
|
|
);
|
2024-04-15 17:01:47 -04:00
|
|
|
}
|