svelte-guardian
Version:
Batteries included authentication for SvelteKit applications.
101 lines (100 loc) • 3.06 kB
TypeScript
import type { User } from './user';
import type { LoggerConfig } from '../core/logger';
import type { DatabaseConfig } from './database';
import type { RateLimitingConfig } from '../features/rate-limiting';
import type { EmailProviderConfig } from '../email/types';
export interface ProviderConfig {
enabled?: boolean;
clientId?: string;
clientSecret?: string;
}
export interface EmailVerificationOptions {
method: 'otp' | 'link';
otpLength?: number;
otpExpiration?: number;
tokenExpiration?: number;
enabled?: boolean;
}
export interface PasswordResetOptions {
tokenExpiration?: number;
}
export interface TwoFactorAuthOptions {
method: 'totp' | 'sms' | 'email';
allowBackupCodes?: boolean;
backupCodeCount?: number;
}
export interface SecurityConfig {
level?: 'strict' | 'moderate' | 'relaxed';
maxLoginAttempts?: number;
lockoutDuration?: number;
emailVerification?: EmailVerificationOptions;
passwordReset?: PasswordResetOptions;
twoFactorAuth?: TwoFactorAuthOptions;
emailProvider?: EmailProviderConfig;
rateLimiting: RateLimitingConfig;
routeProtection?: {
protectedRoutes?: {
[route: string]: {
allowedRoles?: string[];
authenticated?: boolean;
redirectPath?: string;
};
};
publicRoutes?: {
[route: string]: {
redirectPath?: string;
};
};
redirectPath?: string;
authenticatedRedirect?: string;
roleKey?: string;
};
passwordPolicy?: {
minLength?: number;
maxLength?: number;
requireUppercase?: boolean | number;
requireLowercase?: boolean | number;
requireNumbers?: boolean | number;
requireSpecialChars?: boolean | number;
specialChars?: string;
};
}
export interface EventHandlers {
onSignIn?: (user: User) => Promise<void>;
onRegistration?: (user: User) => Promise<void>;
onPasswordReset?: (user: User) => Promise<void>;
onEmailVerification?: (user: User) => void;
onTwoFactorSetup?: (user: User) => void;
}
export interface GuardianAuthConfig {
database?: DatabaseConfig;
providers: {
google?: ProviderConfig;
github?: ProviderConfig;
credentials?: ProviderConfig & {
passwordless?: boolean;
additionalUserFields?: string[];
allowRegistration?: boolean;
requireEmailVerification?: boolean;
};
};
security: SecurityConfig;
events?: EventHandlers;
logging?: LoggerConfig;
pages?: {
signIn?: string;
signOut?: string;
error?: string;
verifyRequest?: string;
newUser?: string;
};
advanced?: {
sessionStrategy?: 'jwt' | 'database';
tokenEncryption?: boolean;
rateLimiting?: {
enabled: boolean;
requestsPerMinute?: number;
};
};
}
export declare const DefaultGuardianAuthConfig: GuardianAuthConfig;