import { SESv2Client, SendEmailCommand } from "@aws-sdk/client-sesv2"; import { UseSend } from "usesend-js"; const apiKey = process.env.USESEND_API_KEY; const baseUrl = process.env.USESEND_BASE_URL; const awsAccessKey = process.env.AWS_ACCESS_KEY; const awsSecretKey = process.env.AWS_SECRET_KEY; const awsRegion = process.env.AWS_DEFAULT_REGION; export const usesend = apiKey ? new UseSend(apiKey, baseUrl) : null; const sesClient = awsAccessKey && awsSecretKey && awsRegion ? new SESv2Client({ region: awsRegion, credentials: { accessKeyId: awsAccessKey, secretAccessKey: awsSecretKey, }, }) : null; export const FROM_EMAIL = process.env.USESEND_FROM_EMAIL || "info@rockymountainvending.com"; export const TO_EMAIL = process.env.CONTACT_FORM_TO_EMAIL || "info@rockymountainvending.com"; function htmlToText(html: string) { return html .replace(//gi, " ") .replace(//gi, " ") .replace(/<[^>]+>/g, " ") .replace(/ /g, " ") .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/\s+/g, " ") .trim(); } export function isEmailConfigured() { return Boolean(usesend || sesClient); } export async function sendTransactionalEmail({ to, subject, html, replyTo, from, }: { to: string; subject: string; html: string; replyTo?: string; from?: string; }) { const sender = from || FROM_EMAIL; if (usesend) { return usesend.emails.send({ from: sender, to, subject, html, ...(replyTo ? { replyTo } : {}), }); } if (sesClient) { return sesClient.send( new SendEmailCommand({ FromEmailAddress: sender, Destination: { ToAddresses: [to], }, ReplyToAddresses: replyTo ? [replyTo] : undefined, Content: { Simple: { Subject: { Data: subject, }, Body: { Html: { Data: html, }, Text: { Data: htmlToText(html), }, }, }, }, }) ); } throw new Error("No email transport is configured"); }