* feat: install rate-limiter-flexible and ioredis * feat: setup redis client * feat: add withRateLimit wrapper * feat: wrap trpc endpoint in withRateLimit * feat: wrap withRateLimit on remaining routes * feat: exclude webhook route from rate limiting * chore: update compose files and readme * refactor: move into api/db packages
32 lines
542 B
TypeScript
32 lines
542 B
TypeScript
import Redis from "ioredis";
|
|
|
|
let redisClient: Redis | null = null;
|
|
|
|
export function getRedisClient(): Redis | null {
|
|
if (redisClient) {
|
|
return redisClient;
|
|
}
|
|
|
|
const redisUrl = process.env.REDIS_URL;
|
|
|
|
if (!redisUrl) {
|
|
return null;
|
|
}
|
|
|
|
redisClient = new Redis(redisUrl, {
|
|
maxRetriesPerRequest: 3,
|
|
enableReadyCheck: true,
|
|
lazyConnect: true,
|
|
});
|
|
|
|
return redisClient;
|
|
}
|
|
|
|
export async function closeRedisClient(): Promise<void> {
|
|
if (redisClient) {
|
|
await redisClient.quit();
|
|
redisClient = null;
|
|
}
|
|
}
|
|
|