Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/modules/emails/services/EmailService.ts
T

64 lines
1.8 KiB
TypeScript

import { getAppConfiguration } from "~/utils/db/appConfiguration.db.server";
import { createScopedLogger } from "~/utils/logger.server";
import { sendEmailMailjet } from "./MailjetEmailService";
const emailLogger = createScopedLogger("email");
type EmailProvider = "mailjet";
export async function sendEmail({
request,
to,
subject,
body,
alias,
data,
tenantId,
priorityOverride,
}: {
request: Request;
to: string;
subject: string;
body: string;
alias?: string;
data?: {
[key: string]: any;
};
tenantId?: string | null;
priorityOverride?: "critical" | "high" | "normal" | "low";
}) {
const config = await getEmailConfig({ request, throwError: true });
if (!config) {
throw new Error("Email provider not configured");
}
// Intentionally never log `to`, `subject`, `body`, or `data` (PII).
// Only log provider class, presence-of-alias, and a generic flag for template data.
emailLogger.info(
{
provider: config.provider,
hasAlias: typeof alias === "string" && alias.length > 0,
hasTemplateData: Boolean(data),
},
"Sending email",
);
return await sendEmailMailjet({ data: { to, subject, body, alias, data, tenantId, priorityOverride } });
}
export async function getEmailProvider({ request }: { request: Request }) {
const clientConfig = await getEmailConfig({ request });
return clientConfig?.provider;
}
export async function getEmailConfig({ request, throwError = false }: { request: Request; throwError?: boolean }) {
const appConfiguration = await getAppConfiguration({ request });
let provider = appConfiguration.email.provider;
if (provider === "mailjet") {
return appConfiguration.email;
}
emailLogger.error({ provider: provider ?? "<none>" }, "Email provider not configured");
if (throwError) {
throw new Error("Email provider not configured");
}
return null;
}