export interface SendEmailInput { to: string; subject: string; text: string; } export interface EmailTransport { send(input: SendEmailInput): Promise; } export function createEmailTransport(config: { provider: string; from: string; apiKey: string; }): EmailTransport { if (config.provider === "example") { return { async send(input) { console.log( JSON.stringify({ service: "email", provider: config.provider, from: config.from, to: input.to, subject: input.subject, text: input.text, }), ); }, }; } return { async send(input) { console.log( JSON.stringify({ service: "email", provider: config.provider, mode: "noop_fallback", from: config.from, to: input.to, subject: input.subject, text: input.text, }), ); }, }; }