// ╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═╗ ╔═╗ ╔═╗╔═══════╗╔═╗ ╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗ ╔═══════╗╔═══════╗ // ║ ╔═════╝║ ╔╗ ╔╗ ║║ ╔═══╗ ║╚══╗ ╔══╝║ ║ ║ ║ ║ ║║ ╔═══╗ ║║ ║ ╚══╗ ╔══╝╚╗ ╔══╗ ║║ ╔═══╗ ║╚══╗ ╔══╝║ ╔═══╗ ║║ ╔═══╗ ║║ ╔═════╝ ╚══╗ ╔══╝║ ╔═════╝ // ║ ╚═════╗║ ║║ ║║ ║║ ╚═══╝ ║ ║ ║ ║ ║ ╔═══════╗║ ╚╗ ╔╝ ║║ ╚═══╝ ║║ ║ ║ ║ ║ ║ ║ ║║ ╚═══╝ ║ ║ ║ ║ ║ ║ ║║ ╚═══╝ ║║ ╚═════╗ ║ ║ ║ ╚═════╗ // ║ ╔═════╝║ ║║ ║║ ║║ ╔═══╗ ║ ║ ║ ║ ║ ╚═══════╝╚╗ ║ ║ ╔╝║ ╔═══╗ ║║ ║ ║ ║ ║ ║ ║ ║║ ╔═══╗ ║ ║ ║ ║ ║ ║ ║║ ╔═╗ ╔═╝╚═════╗ ║ ║ ║ ╚═════╗ ║ // ║ ╚═════╗║ ║║ ║║ ║║ ║ ║ ║╔══╝ ╚══╗║ ╚═════╗ ║ ╚═╝ ║ ║ ║ ║ ║║ ╚═════╗╔══╝ ╚══╗╔╝ ╚══╝ ║║ ║ ║ ║ ║ ║ ║ ╚═══╝ ║║ ║ ║ ╚═╗╔═════╝ ║╔═╗ ║ ║ ╔═════╝ ║ // ╚═══════╝╚═╝╚═╝╚═╝╚═╝ ╚═╝╚═══════╝╚═══════╝ ╚═════╝ ╚═╝ ╚═╝╚═══════╝╚═══════╝╚═══════╝╚═╝ ╚═╝ ╚═╝ ╚═══════╝╚═╝ ╚═══╝╚═══════╝╚═╝ ╚═╝ ╚═══════╝ // ╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗ // ╚══╗ ╔══╝║ ╔╗ ╔╗ ║║ ╔═══╗ ║║ ╔═══╗ ║║ ╔═══╗ ║╚══╗ ╔══╝║ ╔═════╝ // ║ ║ ║ ║║ ║║ ║║ ╚═══╝ ║║ ║ ║ ║║ ╚═══╝ ║ ║ ║ ║ ╚═════╗ // ║ ║ ║ ║║ ║║ ║║ ╔═════╝║ ║ ║ ║║ ╔═╗ ╔═╝ ║ ║ ╚═════╗ ║ // ╔══╝ ╚══╗║ ║║ ║║ ║║ ║ ║ ╚═══╝ ║║ ║ ║ ╚═╗ ║ ║ ╔═════╝ ║ // ╚═══════╝╚═╝╚═╝╚═╝╚═╝ ╚═══════╝╚═╝ ╚═══╝ ╚═╝ ╚═══════╝ import * as emailErrors from '../errors/email-errors.js'; import * as utilityEngine from '@xyz.warpmatter.com/utility-engine'; // ╔═══════╗╔═══════╗╔═══════╗╔═╗ ╔═══════╗╔═══════╗╔═══════╗ // ╚╗ ╔══╗ ║║ ╔═════╝║ ╔═════╝║ ║ ║ ╔═══╗ ║║ ╔═══╗ ║║ ╔═════╝ // ║ ║ ║ ║║ ╚═════╗║ ║ ║ ║ ║ ╚═══╝ ║║ ╚═══╝ ║║ ╚═════╗ // ║ ║ ║ ║║ ╔═════╝║ ║ ║ ║ ║ ╔═══╗ ║║ ╔═╗ ╔═╝║ ╔═════╝ // ╔╝ ╚══╝ ║║ ╚═════╗║ ╚═════╗║ ╚═════╗║ ║ ║ ║║ ║ ║ ╚═╗║ ╚═════╗ // ╚═══════╝╚═══════╝╚═══════╝╚═══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═══════╝ const emailAddressRegex = new RegExp('(?:[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\\])'); const domainNameRegex = new RegExp('(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]'); // ╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗ // ║ ╔═══╗ ║╚╗ ╔══╗ ║╚╗ ╔══╗ ║║ ╔═══╗ ║║ ╔═════╝║ ╔═════╝║ ╔═════╝ // ║ ╚═══╝ ║ ║ ║ ║ ║ ║ ║ ║ ║║ ╚═══╝ ║║ ╚═════╗║ ╚═════╗║ ╚═════╗ // ║ ╔═══╗ ║ ║ ║ ║ ║ ║ ║ ║ ║║ ╔═╗ ╔═╝║ ╔═════╝╚═════╗ ║╚═════╗ ║ // ║ ║ ║ ║╔╝ ╚══╝ ║╔╝ ╚══╝ ║║ ║ ║ ╚═╗║ ╚═════╗╔═════╝ ║╔═════╝ ║ // ╚═╝ ╚═╝╚═══════╝╚═══════╝╚═╝ ╚═══╝╚═══════╝╚═══════╝╚═══════╝ export function validateEmailAddresses(values: any[], minimumCount = 1) { if (!areValidEmailAddresses(values, minimumCount)) { emailErrors.throwInvalidEmailAddressError(); } } export function validateEmailAddress(value: any) { if (!isValidEmailAddress(value)) { emailErrors.throwInvalidEmailAddressError(); } } export function areValidEmailAddresses(values: any[], minimumCount = 1): values is string[] { return utilityEngine.isArray(values, minimumCount) && values.every((value) => isValidEmailAddress(value)); } export function isValidEmailAddress(value: any): value is string { return utilityEngine.isFilledString(value) && emailAddressRegex.test(value); } // ╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔════╗╔═╗ // ╚╗ ╔══╗ ║║ ╔═══╗ ║║ ╔╗ ╔╗ ║║ ╔═══╗ ║╚══╗ ╔══╝║ ╔╗ ║║ ║ // ║ ║ ║ ║║ ║ ║ ║║ ║║ ║║ ║║ ╚═══╝ ║ ║ ║ ║ ║║ ║║ ║ // ║ ║ ║ ║║ ║ ║ ║║ ║║ ║║ ║║ ╔═══╗ ║ ║ ║ ║ ║║ ║║ ║ // ╔╝ ╚══╝ ║║ ╚═══╝ ║║ ║║ ║║ ║║ ║ ║ ║╔══╝ ╚══╗║ ║║ ╚╝ ║ // ╚═══════╝╚═══════╝╚═╝╚═╝╚═╝╚═╝ ╚═╝╚═══════╝╚═╝╚════╝ export function validateEmailDomainNames(values: any[]) { if (!areValidEmailDomainNames(values)) { emailErrors.throwInvalidDomainNameError(); } } export function validateEmailDomainName(value: any) { if (!isValidEmailDomainName(value)) { emailErrors.throwInvalidDomainNameError(); } } export function areValidEmailDomainNames(values: any[]): values is string[] { return utilityEngine.isFilledArray(values) && values.every((value) => isValidEmailDomainName(value)); } export function isValidEmailDomainName(value: any): value is string { return utilityEngine.isFilledString(value) && domainNameRegex.test(value); }