svelte-guardian
Version:
Batteries included authentication for SvelteKit applications.
105 lines (104 loc) • 3.3 kB
TypeScript
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 {};