Files
firecrawl/apps/api/src/services/rate-limiter.ts
T

47 lines
1.1 KiB
TypeScript
Raw Normal View History

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
}