@visulima/email
Version:
A comprehensive email library with multi-provider support, crypto utilities, and template engines
28 lines (27 loc) • 1.42 kB
TypeScript
import type { EmailOptions, EmailResult, FeatureFlags, MaybePromise, Result } from "../types.d.ts";
/**
* Standard provider interface for email services.
*/
export interface Provider<OptionsT = unknown, InstanceT = unknown, EmailOptionsT extends EmailOptions = EmailOptions> {
endpoint?: string;
features?: FeatureFlags;
getEmail?: (id: string) => MaybePromise<Result<unknown>>;
getInstance?: () => InstanceT;
initialize: (options?: Record<string, unknown>) => MaybePromise<void>;
isAvailable: () => MaybePromise<boolean>;
name?: string;
options?: OptionsT;
sendEmail: (options: EmailOptionsT) => MaybePromise<Result<EmailResult>>;
shutdown?: () => MaybePromise<void>;
validateCredentials?: () => MaybePromise<boolean>;
}
/**
* Type for provider factory function.
*/
export type ProviderFactory<OptionsT = unknown, InstanceT = unknown, EmailOptionsT extends EmailOptions = EmailOptions> = (options?: OptionsT) => Provider<OptionsT, InstanceT, EmailOptionsT>;
/**
* Helper function to define an email provider.
* @param factory The provider factory function.
* @returns The same factory function (for type inference).
*/
export declare const defineProvider: <OptionsT = unknown, InstanceT = unknown, EmailOptionsT extends EmailOptions = EmailOptions>(factory: ProviderFactory<OptionsT, InstanceT, EmailOptionsT>) => ProviderFactory<OptionsT, InstanceT, EmailOptionsT>;