import { Heading, Section, Text } from "@react-email/components"; import { BaseButton } from "./BaseButton"; import { BaseEmailWrapper, BaseEmailWrapperProps } from "./BaseEmailWrapper"; interface PkiExpirationAlertTemplateProps extends Omit { alertName: string; alertBeforeDays: number; projectId: string; items: { type: string; friendlyName: string; serialNumber: string; expiryDate: string }[]; } export const PkiExpirationAlertTemplate = ({ alertName, siteUrl, alertBeforeDays, projectId, items }: PkiExpirationAlertTemplateProps) => { const formatDate = (dateStr: string) => { try { return new Date(dateStr).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric" }); } catch { return dateStr; } }; const certificateText = items.length === 1 ? "certificate" : "certificates"; const daysText = alertBeforeDays === 1 ? "1 day" : `${alertBeforeDays} days`; const message = `Alert ${alertName}: You have ${items.length === 1 ? "one" : items.length} ${certificateText} that will expire in ${daysText}.`; return ( Certificate Expiration Notice
Alert {alertName}: You have{" "} {items.length === 1 ? "one" : items.length} {certificateText} that will expire in {daysText}.
Expiring certificates: {items.map((item) => (
{item.friendlyName} Serial: {item.serialNumber} Expires: {formatDate(item.expiryDate)}
))}
View Certificate Alerts
); }; export default PkiExpirationAlertTemplate; PkiExpirationAlertTemplate.PreviewProps = { alertBeforeDays: 7, items: [ { type: "Certificate", friendlyName: "api.production.company.com", serialNumber: "4B:3E:2F:A1:D6:7C:89:45:B2:E8:7F:1A:3D:9C:5E:8B", expiryDate: "2025-11-12" }, { type: "Certificate", friendlyName: "web.company.com", serialNumber: "8A:7F:1C:E4:92:B5:D3:68:F1:A2:7E:9B:4C:6D:5A:3F", expiryDate: "2025-11-10" } ], alertName: "Production SSL Certificate Expiration Alert", projectId: "c3b0ef29-915b-4cb1-8684-65b91b7fe02d", siteUrl: "https://infisical.com" } as PkiExpirationAlertTemplateProps;