const DEFAULT_ACCOUNT_EMAIL_TEMPLATES = { verificationSubject: 'Verify your Pulse Signage email address', verificationBody: 'Hello [b][[display_name]][/b]!\n[[action_button]]\nThis [u]link[/u] expires in [i][[expiry_time]][/i].\nConfirm this email address: [[url]]', resetSubject: 'Reset your Pulse Signage password', resetBody: 'Hello [b][[display_name]][/b]!\n[[action_button]]\nThis [u]link[/u] expires in [i][[expiry_time]][/i].\nChoose a new password: [[url]]' }; function formatAccountEmailExpiry(value, unit) { const amount = Number(value); const normalizedAmount = Number.isFinite(amount) && amount > 0 ? Math.round(amount) : 30; const normalizedUnit = unit === 'hours' ? 'hour' : 'minute'; return normalizedAmount + ' ' + normalizedUnit + (normalizedAmount === 1 ? '' : 's'); } function renderAccountEmailTemplate(subject, body, variables) { const values = variables || {}; const replaceVariables = function (value) { return String(value || '').replace(/\[\[([a-z_]+)\]\]/g, function (_match, key) { return Object.prototype.hasOwnProperty.call(values, key) ? String(values[key]) : _match; }); }; const renderedSubject = replaceVariables(subject); const renderedText = replaceVariables(body); const plainText = renderedText.replace(/\[(?:b|i|u)\]([\s\S]*?)\[\/(?:b|i|u)\]/gi, '$1'); const escapedBody = renderedText.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/\[b\]([\s\S]*?)\[\/b\]/gi, '$1').replace(/\[i\]([\s\S]*?)\[\/i\]/gi, '$1').replace(/\[u\]([\s\S]*?)\[\/u\]/gi, '$1'); const actionLabel = String(values.action_label || 'Continue').replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); const actionUrl = values.url ? String(values.url).replace(/&/g, '&').replace(/"/g, '"') : ''; const actionAlignment = values.action_alignment === 'left' || values.action_alignment === 'right' ? values.action_alignment : 'center'; const actionButton = actionUrl ? '' + actionLabel + '' : ''; const actionBlock = actionButton ? '
' + part + '
' : ''; return text + (index < parts.length - 1 ? actionBlock : ''); }).join(''); } return paragraphHtml ? '' + paragraphHtml + '
' : ''; }).join(''); const html = '