export const MAIL_SETTINGS_KEY = "mail_settings"; export type MailSettings = { smtp: { host: string; port: number; secure: boolean; username: string; password: string; }; sender: { email: string; name: string; }; recipients: { contact: string; test: string; }; }; export type MailSettingsFormValues = { smtp: { host: string; port: number; secure: boolean; username: string; password: string; hasPassword: boolean; }; sender: { email: string; name: string; }; recipients: { contact: string; test: string; }; }; export function buildDefaultMailSettings(): MailSettings { return { smtp: { host: "", port: 587, secure: false, username: "", password: "", }, sender: { email: "", name: "", }, recipients: { contact: "", test: "", }, }; } function normalizeMailSettings(input: unknown): MailSettings { const value = input && typeof input === "object" ? (input as Record) : {}; const smtp = value.smtp && typeof value.smtp === "object" ? (value.smtp as Record) : {}; const sender = value.sender && typeof value.sender === "object" ? (value.sender as Record) : {}; const recipients = value.recipients && typeof value.recipients === "object" ? (value.recipients as Record) : {}; const defaults = buildDefaultMailSettings(); const parsedPort = typeof smtp.port === "number" ? smtp.port : typeof smtp.port === "string" ? Number.parseInt(smtp.port, 10) : defaults.smtp.port; return { smtp: { host: typeof smtp.host === "string" ? smtp.host.trim() : defaults.smtp.host, port: Number.isFinite(parsedPort) && parsedPort > 0 ? parsedPort : defaults.smtp.port, secure: Boolean(smtp.secure), username: typeof smtp.username === "string" ? smtp.username.trim() : defaults.smtp.username, password: typeof smtp.password === "string" ? smtp.password : defaults.smtp.password, }, sender: { email: typeof sender.email === "string" ? sender.email.trim() : defaults.sender.email, name: typeof sender.name === "string" ? sender.name.trim() : defaults.sender.name, }, recipients: { contact: typeof recipients.contact === "string" ? recipients.contact.trim() : defaults.recipients.contact, test: typeof recipients.test === "string" ? recipients.test.trim() : defaults.recipients.test, }, }; } export function parseMailSettingsValue(rawValue: string | null | undefined): MailSettings { if (!rawValue) { return buildDefaultMailSettings(); } try { return normalizeMailSettings(JSON.parse(rawValue)); } catch { return buildDefaultMailSettings(); } } export function toMailSettingsFormValues(settings: MailSettings): MailSettingsFormValues { return { smtp: { host: settings.smtp.host, port: settings.smtp.port, secure: settings.smtp.secure, username: settings.smtp.username, password: "", hasPassword: Boolean(settings.smtp.password), }, sender: { email: settings.sender.email, name: settings.sender.name, }, recipients: { contact: settings.recipients.contact, test: settings.recipients.test, }, }; }