UNPKG

svelte-guardian

Version:

Batteries included authentication for SvelteKit applications.

49 lines (48 loc) 1.89 kB
import { RedisRateLimiter } from './redis'; import { UpstashRedisRateLimiter } from './upstash-redis'; import { InMemoryRateLimiter } from './in-memory'; export class RateLimiterFactory { static instance; static create(config) { // Check if rate limiting is disabled if (config.enabled === false) { return { limit: async () => ({ allowed: true, remaining: Number.MAX_SAFE_INTEGER, resetTime: Date.now() }) }; } // Convert requestsPerMinute to existing configuration if (config.requestsPerMinute !== undefined) { config.maxRequests = config.requestsPerMinute; config.windowMs = 60 * 1000; // 1 minute } // Ensure maxRequests is set config.maxRequests = config.maxRequests || 10; config.windowMs = config.windowMs || 60 * 1000; // Use singleton pattern to reuse rate limiter if (this.instance) return this.instance; switch (config.strategy || 'memory') { case 'redis': if (!config.redisConfig) { throw new Error('Redis configuration is required for Redis strategy'); } this.instance = new RedisRateLimiter(config.redisConfig); break; case 'upstash-redis': if (!config.redisConfig) { throw new Error('Redis configuration is required for Uostash Redis strategy'); } this.instance = new UpstashRedisRateLimiter(config.redisConfig.url, config.redisConfig.token); break; case 'memory': default: this.instance = new InMemoryRateLimiter(); break; } return this.instance; } }