/// export interface IEmailTemplateMiddleware { processPayload(payload: unknown): Promise; processInput(input: TemplatedEmailInput): Promise>; } export interface IEmailTemplate { processPayload(payload: TPayload): Promise; getTemplateData(payload: TAugmentedPayload): Promise; } export interface IEmailTemplatesCollection { registerTemplate(id: string, template: IEmailTemplate): void; getTemplate(id: string): IEmailTemplate; } export type EmailAttachmentData = { content: string | Buffer; filename: string; type?: string; disposition?: string; contentId?: string; }; export type TemplatedEmailInput = { from?: string; to?: string[]; cc?: string[]; bcc?: string[]; subjectTemplate?: string; templateId: string; languageCode: string; payload: TPayload; attachments?: EmailAttachmentData[]; }; export interface HtmlEmailInput { replyTo?: string; from?: string; to?: string[]; cc?: string[]; bcc?: string[]; subjectTemplate: string; bodyTemplate: string; payload: TPayload; attachments?: EmailAttachmentData[]; } export type EmailSendOptions = { sandboxMode?: boolean; forceDelivery?: boolean; }; export interface IEmailProvider { sendTemplatedEmail(input: TemplatedEmailInput, template: IEmailTemplate, options?: EmailSendOptions): Promise; sendHtmlEmail(input: HtmlEmailInput, options?: EmailSendOptions): Promise; } export interface IEmailLogger { logTemplatedEmail(input: TemplatedEmailInput): Promise; logHtmlEmail(input: HtmlEmailInput): Promise; }