import { emailDataSchema } from "@openstatus/db/src/schema"; import type { Region } from "@openstatus/db/src/schema/constants"; import { EmailClient } from "@openstatus/emails/src/client"; import type { NotificationContext } from "@openstatus/notification-base"; import { regionDict } from "@openstatus/regions"; import { env } from "../env"; export const sendAlert = async ({ monitor, notification, statusCode, message, cronTimestamp, latency, regions, }: NotificationContext) => { // Convert regions array to single region for backwards compatibility const region = regions?.[0] as Region | undefined; const emailClient = new EmailClient({ apiKey: env.RESEND_API_KEY }); const config = emailDataSchema.safeParse(JSON.parse(notification.data)); if (!config.success) return; await emailClient.sendMonitorAlert({ name: monitor.name, type: "alert", to: config.data.email, url: monitor.url, status: statusCode?.toString(), latency: latency ? `${latency}ms` : "N/A", region: region ? regionDict[region].location : "N/A", timestamp: new Date(cronTimestamp).toISOString(), message, }); }; export const sendRecovery = async ({ monitor, notification, statusCode, cronTimestamp, regions, latency, }: NotificationContext) => { // Convert regions array to single region for backwards compatibility const region = regions?.[0] as Region | undefined; const emailClient = new EmailClient({ apiKey: env.RESEND_API_KEY }); const config = emailDataSchema.safeParse(JSON.parse(notification.data)); if (!config.success) return; await emailClient.sendMonitorAlert({ name: monitor.name, type: "recovery", to: config.data.email, url: monitor.url, status: statusCode?.toString(), latency: latency ? `${latency}ms` : "N/A", region: region ? regionDict[region].location : "N/A", timestamp: new Date(cronTimestamp).toISOString(), }); }; export const sendDegraded = async ({ monitor, notification, statusCode, cronTimestamp, regions, latency, }: NotificationContext) => { // Convert regions array to single region for backwards compatibility const region = regions?.[0] as Region | undefined; const emailClient = new EmailClient({ apiKey: env.RESEND_API_KEY }); const config = emailDataSchema.safeParse(JSON.parse(notification.data)); if (!config.success) return; await emailClient.sendMonitorAlert({ name: monitor.name, type: "degraded", to: config.data.email, url: monitor.url, status: statusCode?.toString(), latency: latency ? `${latency}ms` : "N/A", region: region ? regionDict[region].location : "N/A", timestamp: new Date(cronTimestamp).toISOString(), }); };