svelte-guardian
Version:
Batteries included authentication for SvelteKit applications.
38 lines (37 loc) • 1.18 kB
TypeScript
import { RedisRateLimiter } from './redis';
import { UpstashRedisRateLimiter } from './upstash-redis';
import { InMemoryRateLimiter } from './in-memory';
import type { RequestEvent } from '@sveltejs/kit';
export type RateLimitStrategy = 'redis' | 'upstash' | 'memory';
export interface RedisConfig {
url?: string;
socket?: {
host?: string;
port?: number;
};
username?: string;
password?: string;
database?: number;
tls?: boolean;
connectionOptions?: {
connectTimeout?: number;
disconnectTimeout?: number;
pingInterval?: number;
maxRetriesPerRequest?: number;
retryStrategy?: (times: number) => number | null;
};
}
export interface RateLimitingConfig {
enabled?: boolean;
requestsPerMinute?: number;
blockDuration?: number;
strategy?: RateLimitStrategy;
windowMs: number;
maxRequests: number;
redisConfig?: RedisConfig;
keyGenerator?: (event: RequestEvent) => string;
}
export declare class RateLimiterFactory {
private static instance;
static create(config: RateLimitingConfig): RedisRateLimiter | UpstashRedisRateLimiter | InMemoryRateLimiter;
}