unemail
Version:
A modern TypeScript email library with zero dependencies, supporting multiple providers including AWS SES, Resend, MailCrab, and HTTP APIs
28 lines (25 loc) • 1.25 kB
text/typescript
import { EmailOptions, FeatureFlags, MaybePromise, Result, EmailResult } from 'unemail/types';
/**
* Standard provider interface for email services
*/
interface Provider<OptionsT = any, InstanceT = any, EmailOptionsT extends EmailOptions = EmailOptions> {
name?: string;
features?: FeatureFlags;
options?: OptionsT;
getInstance?: () => InstanceT;
initialize: (opts?: Record<string, any>) => MaybePromise<void>;
isAvailable: () => MaybePromise<boolean>;
sendEmail: (options: EmailOptionsT) => MaybePromise<Result<EmailResult>>;
validateCredentials?: () => MaybePromise<boolean>;
getEmail?: (id: string) => MaybePromise<Result<any>>;
}
/**
* Type for provider factory function
*/
type ProviderFactory<OptionsT = any, InstanceT = any, EmailOptionsT extends EmailOptions = EmailOptions> = (opts?: OptionsT) => Provider<OptionsT, InstanceT, EmailOptionsT>;
/**
* Helper function to define an email provider
*/
declare function defineProvider<OptionsT = any, InstanceT = any, EmailOptionsT extends EmailOptions = EmailOptions>(factory: ProviderFactory<OptionsT, InstanceT, EmailOptionsT>): ProviderFactory<OptionsT, InstanceT, EmailOptionsT>;
export { defineProvider };
export type { Provider, ProviderFactory };