UNPKG

svelte-guardian

Version:

Batteries included authentication for SvelteKit applications.

105 lines (104 loc) 3.3 kB
import nodemailer from 'nodemailer'; export type EmailType = 'magicLink' | 'otp' | 'passwordReset' | 'twoFactor' | 'custom'; export interface EmailOptions { to: string; subject: string; type: EmailType; otp?: string; theme?: string; url?: string; customContent?: string; } export type EmailProviderType = 'resend' | 'aws-ses' | 'nodemailer' | 'smtp' | 'mailgun' | 'sendgrid'; interface BaseEmailProviderConfig { type: EmailProviderType; from?: string; } export interface ResendProviderConfig extends BaseEmailProviderConfig { type: 'resend'; apiKey: string; } export interface AWSSESProviderConfig extends BaseEmailProviderConfig { type: 'aws-ses'; accessKeyId: string; secretAccessKey: string; region?: string; } export interface SimpleSmtpConfig extends BaseEmailProviderConfig { type: 'smtp'; host: string; port: number; auth: { user: string; pass: string; }; secure?: boolean; } export interface AdvancedNodemailerConfig extends BaseEmailProviderConfig { type: 'nodemailer'; transport: nodemailer.TransportOptions; } export interface MailgunProviderConfig extends BaseEmailProviderConfig { type: 'mailgun'; apiKey: string; domain: string; } export interface SendgridProviderConfig extends BaseEmailProviderConfig { type: 'sendgrid'; apiKey: string; } export type EmailProviderConfig = ResendProviderConfig | AWSSESProviderConfig | SimpleSmtpConfig | NodemailerServiceConfig | AdvancedNodemailerConfig | MailgunProviderConfig | SendgridProviderConfig; export interface EmailProvider { send(options: EmailOptions): Promise<void>; } export type EmailProviderFactory = (config: EmailProviderConfig) => EmailProvider; export type ConfigForProviderType<T extends EmailProviderType> = Extract<EmailProviderConfig, { type: T; }>; export declare const ALL_SERVICES: readonly ["gmail", "outlook", "yahoo", "zoho", "office365", "aol", "protonmail"]; type ServicesTuple = typeof ALL_SERVICES; type EmailService = ServicesTuple[number]; export interface SmtpServerConfig { host: string; port: number; secure: boolean; } export declare const EMAIL_SERVICE_CONFIGS: Record<EmailService, SmtpServerConfig>; export type AuthMethod = 'password' | 'app-password' | 'oauth2'; interface BaseAuthConfig { method: AuthMethod; } export interface PasswordAuthConfig extends BaseAuthConfig { method: 'password'; user: string; pass: string; } export interface AppPasswordAuthConfig extends BaseAuthConfig { method: 'app-password'; user: string; appPass: string; } export interface OAuth2AuthConfig extends BaseAuthConfig { method: 'oauth2'; user: string; clientId: string; clientSecret: string; refreshToken: string; accessToken?: string; expires?: number; } export type EmailAuthConfig = PasswordAuthConfig | AppPasswordAuthConfig | OAuth2AuthConfig; export interface NodemailerServiceConfig extends BaseEmailProviderConfig { type: 'nodemailer'; service: EmailService; auth: EmailAuthConfig; smtp?: Partial<SmtpServerConfig>; options?: { pool?: boolean; maxConnections?: number; maxMessages?: number; rateDelta?: number; rateLimit?: number; }; } export {};