UNPKG

alepha

Version:

Easy-to-use modern TypeScript framework for building many kind of applications.

97 lines (96 loc) 2.73 kB
import { $env, $module, z } from "alepha"; import { AlephaEmail, EmailError, EmailProvider } from "alepha/email"; import { $logger } from "alepha/logger"; //#region ../../src/email/brevo/providers/BrevoEmailProvider.ts /** * Environment variables for Brevo configuration. */ const envSchema = z.object({ BREVO_API_KEY: z.text({ description: "Brevo API key for transactional email" }), EMAIL_FROM: z.text({ description: "Default sender email address" }) }); /** * Email provider using Brevo (formerly Sendinblue) transactional email API. * * Sends emails via `POST https://api.brevo.com/v3/smtp/email`. * * Configuration is provided via environment variables: * - `BREVO_API_KEY`: Brevo API key * - `EMAIL_FROM`: Default sender email address * * @example * ```typescript * // .env * // BREVO_API_KEY=xkeysib-xxx * // EMAIL_FROM=noreply@example.com * * // app.ts * import { AlephaEmailBrevo } from "alepha/email/brevo"; * * const app = Alepha.create().with(AlephaEmailBrevo); * ``` */ var BrevoEmailProvider = class { env = $env(envSchema); log = $logger(); async send(options) { const { to, subject, body } = options; this.log.info("Sending email via Brevo", { to, subject }); const recipients = Array.isArray(to) ? to : [to]; try { const response = await fetch("https://api.brevo.com/v3/smtp/email", { method: "POST", headers: { "api-key": this.env.BREVO_API_KEY, "Content-Type": "application/json", Accept: "application/json" }, body: JSON.stringify({ sender: { email: this.env.EMAIL_FROM }, to: recipients.map((email) => ({ email })), subject, htmlContent: body }) }); if (!response.ok) { const text = await response.text(); throw new EmailError(`Brevo API returned ${response.status}: ${text}`); } this.log.info("Email sent successfully via Brevo", { to, subject }); } catch (error) { if (error instanceof EmailError) throw error; const message = `Failed to send email via Brevo: ${error instanceof Error ? error.message : String(error)}`; this.log.error(message, { to, subject }); throw new EmailError(message, error instanceof Error ? error : void 0); } } }; //#endregion //#region ../../src/email/brevo/index.ts /** * Plugin for Alepha Email that provides Brevo transactional email capabilities. * * @see {@link BrevoEmailProvider} * @module alepha.email.brevo */ const AlephaEmailBrevo = $module({ name: "alepha.email.brevo", services: [BrevoEmailProvider], register: (alepha) => alepha.with({ optional: true, provide: EmailProvider, use: BrevoEmailProvider }).with(AlephaEmail) }); //#endregion export { AlephaEmailBrevo, BrevoEmailProvider }; //# sourceMappingURL=index.js.map