|
| 1 | +import { env } from "~/env.server"; |
| 2 | +import { authenticateAuthorizationHeader } from "./apiAuth.server"; |
| 3 | +import { authorizationRateLimitMiddleware } from "./authorizationRateLimitMiddleware.server"; |
| 4 | +import { Duration } from "./rateLimiter.server"; |
| 5 | + |
| 6 | +export const engineRateLimiter = authorizationRateLimitMiddleware({ |
| 7 | + redis: { |
| 8 | + port: env.RATE_LIMIT_REDIS_PORT, |
| 9 | + host: env.RATE_LIMIT_REDIS_HOST, |
| 10 | + username: env.RATE_LIMIT_REDIS_USERNAME, |
| 11 | + password: env.RATE_LIMIT_REDIS_PASSWORD, |
| 12 | + tlsDisabled: env.RATE_LIMIT_REDIS_TLS_DISABLED === "true", |
| 13 | + clusterMode: env.RATE_LIMIT_REDIS_CLUSTER_MODE_ENABLED === "1", |
| 14 | + }, |
| 15 | + keyPrefix: "engine", |
| 16 | + defaultLimiter: { |
| 17 | + type: "tokenBucket", |
| 18 | + refillRate: env.RUN_ENGINE_RATE_LIMIT_REFILL_RATE, |
| 19 | + interval: env.RUN_ENGINE_RATE_LIMIT_REFILL_INTERVAL as Duration, |
| 20 | + maxTokens: env.RUN_ENGINE_RATE_LIMIT_MAX, |
| 21 | + }, |
| 22 | + limiterCache: { |
| 23 | + fresh: 60_000 * 10, // Data is fresh for 10 minutes |
| 24 | + stale: 60_000 * 20, // Date is stale after 20 minutes |
| 25 | + }, |
| 26 | + pathMatchers: [/^\/engine/], |
| 27 | + // Allow /api/v1/tasks/:id/callback/:secret |
| 28 | + pathWhiteList: [], |
| 29 | + log: { |
| 30 | + rejections: env.RUN_ENGINE_RATE_LIMIT_REJECTION_LOGS_ENABLED === "1", |
| 31 | + requests: env.RUN_ENGINE_RATE_LIMIT_REQUEST_LOGS_ENABLED === "1", |
| 32 | + limiter: env.RUN_ENGINE_RATE_LIMIT_LIMITER_LOGS_ENABLED === "1", |
| 33 | + }, |
| 34 | +}); |
0 commit comments