///
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;
}