{"version":3,"file":"membership-activate-account-min.js","mappings":"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","sources":["webpack://waves/webpack/bootstrap","webpack://waves/webpack/runtime/compat get default export","webpack://waves/webpack/runtime/define property getters","webpack://waves/webpack/runtime/hasOwnProperty shorthand","webpack://waves/external var \"React\"","webpack://waves/./src/DAL/data-provider.ts","webpack://waves/./src/projects/products/enums/product-department-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/last-payment-option-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/payment-tabs-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/credit-card-service-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/credit-card-tab.ts","webpack://waves/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://waves/./src/domain/validation/validation.ts","webpack://waves/./src/domain/math-provider.ts","webpack://waves/./node_modules/jwt-decode/build/jwt-decode.esm.js","webpack://waves/./src/projects/membership/enums/external-service-enum.ts","webpack://waves/./src/domain/common.ts","webpack://waves/./src/domain/validation/server-errors/validation-errors.tsx","webpack://waves/./src/ui/svg/common/refresh.tsx","webpack://waves/./src/domain/captcha/simple-captcha.tsx","webpack://waves/./src/ui/svg/common/waves-logo.tsx","webpack://waves/./src/ui/svg/common/preloader.tsx","webpack://waves/./src/projects/membership/logout/logout-screen.tsx","webpack://waves/./src/ui/svg/common/eye.tsx","webpack://waves/./src/ui/svg/svg-provider.ts","webpack://waves/./src/ui/forms/fields/text-field.tsx","webpack://waves/./src/ui/forms/fields/captcha-china-field.tsx","webpack://waves/./src/ui/forms/form-logo.tsx","webpack://waves/./src/ui/forms/form-terms.tsx","webpack://waves/./src/ui/forms/form-border.tsx","webpack://waves/./src/ui/forms/form-preloader.tsx","webpack://waves/./src/domain/facebook/facebook-types.ts","webpack://waves/./src/domain/external-login/external-login-types.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/cart-steps.ts","webpack://waves/./src/projects/membership/dal/data-provider.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/domain/shopping-cart-provider.ts","webpack://waves/./src/domain/google/google-login-provider.ts","webpack://waves/./src/domain/facebook/facebook-login-provider.ts","webpack://waves/./src/domain/hidden-data-provider.ts","webpack://waves/./src/domain/captcha/recaptcha-provider.ts","webpack://waves/./src/domain/captcha/recaptcha3-terms.tsx","webpack://waves/./src/projects/membership/activate-account/app/app.tsx","webpack://waves/external var \"ReactDOM\"","webpack://waves/./src/projects/membership/activate-account/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = React;","import { IResponse } from '../interfaces/common-interfaces';\r\n\r\nexport const DEFAULT_ERROR = 'An error has occurred.';\r\n\r\n/**\r\n * encode and format the data\r\n */\r\nexport const encodeData = (data: any) => {\r\n\r\n const params = [];\r\n\r\n for(let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n params.push(key + '=' + window.encodeURIComponent(data[key]));\r\n }\r\n }\r\n\r\n return params.join('&');\r\n};\r\n\r\n/**\r\n * Returns true if access is denied.\r\n */\r\nconst ifShouldDenyOnReadOnly = async (response: Response|null) => {\r\n if(response?.status !== 999) return false;\r\n window.location.href = '/maintenance';\r\n\r\n /*\r\n let isLoggedIn = false;\r\n\r\n try{\r\n // {\"message\":\"Waves.com is undergoing maintenance.\",\"isLoggedIn\":false}\r\n const text = await response.text();\r\n const parsed = JSON.parse(text);\r\n isLoggedIn = parsed.isLoggedIn;\r\n if(isLoggedIn){\r\n window.location.href = '/maintenance';\r\n }\r\n }\r\n catch(ex){\r\n console.log(ex);\r\n }*/\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * get request\r\n */\r\nexport const get = async (url: string, data: any = null) : Promise => {\r\n\r\n if(data){\r\n\r\n const qs = encodeData(data);\r\n url += `?${qs}`;\r\n }\r\n\r\n const headers = new Headers();\r\n headers.append('pragma', 'no-cache');\r\n headers.append('cache-control', 'no-cache');\r\n headers.append('Content-Type', 'application/json');\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers,\r\n credentials: 'same-origin' //'include', 'omit'\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\n/**\r\n * post request\r\n */\r\nexport const post = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\nexport const del = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\nexport const put = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\n/**\r\n * upload file\r\n */\r\nexport const upload = async (url: string, data: FormData, headers?: any) => {\r\n\r\n let response: Response | null = null;\r\n const config: RequestInit = {\r\n method: 'POST',\r\n body: data\r\n };\r\n\r\n if(headers){\r\n config.headers = headers;\r\n }\r\n\r\n try{\r\n response = await fetch(url, config);\r\n }\r\n catch(ex){\r\n console.log('Error:', ex);\r\n }\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response?.json(),\r\n statusCode: response?.status\r\n }\r\n};\r\n\r\nexport const download = (fileName: string, blob: Blob) => {\r\n const url = window.URL.createObjectURL(blob);\r\n const $a = document.createElement('a');\r\n $a.style.display = 'none';\r\n $a.href = url;\r\n // the filename you want\r\n $a.download = fileName;\r\n document.body.appendChild($a);\r\n $a.click();\r\n window.URL.revokeObjectURL(url);\r\n};\r\n\r\nexport const getDownload = async (fileName: string, url: string, data: any = null) => {\r\n\r\n if(data){\r\n\r\n const qs = encodeData(data);\r\n url += `?${qs}`;\r\n }\r\n\r\n const headers = new Headers();\r\n headers.append('pragma', 'no-cache');\r\n headers.append('cache-control', 'no-cache');\r\n headers.append('Content-Type', 'application/json');\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers,\r\n credentials: 'same-origin' //'include', 'omit'\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n const blob = await response.blob();\r\n download(fileName, blob);\r\n};\r\n\r\nexport const postDownload = async (fileName: string, url: string, data: any = null) => {\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n const blob = await response.blob();\r\n download(fileName, blob);\r\n};\r\n\r\n\r\n","export enum ProductDepartmentEnum {\r\n Bundles = 1,\r\n Plugins = 2,\r\n General = 5,\r\n Books = 6,\r\n InactiveItems = 7,\r\n LiveSound = 8,\r\n Hardware = 9,\r\n Software = 10,\r\n Subscription = 12,\r\n Consumer = 13,\r\n RentToOwnDynamic = 14,\r\n RentToOwnStatic = 15,\r\n Merch = 16,\r\n WavesUpdatePlan = 17,\r\n Upgrades = 18,\r\n Courses = 19,\r\n SubscriptionDynamic = 20,\r\n Gifts = 21,\r\n CoursesWithSoftware = 22,\r\n SubscriptionNonRecurring = 23,\r\n Mastering = 24,\r\n}","/**\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-3278\r\n * ap = alipay, pp = paypal, cc = credit card, null = no previous purchase\r\n */\r\nexport enum LastPaymentOption {\r\n NONE = '',\r\n CreditCard = 'cc',\r\n PayPal = 'pp',\r\n AliPay = 'ap',\r\n}","export enum PaymentTabsEnum {\r\n CreditCard = 1,\r\n PayPal = 2,\r\n AliPay = 3,\r\n}","export enum CreditCardServiceEnum {\r\n None = 0,\r\n FirstData = 1,\r\n Pinnacle = 2,\r\n Stripe = 3\r\n}","export enum CreditCardTabTabsEnum {\r\n NewCreditCard = 1,\r\n SavedCreditCards = 2,\r\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import { IValidationRules } from './interfaces';\r\nimport { ClipboardEvent, Dispatch } from 'react';\r\nimport { IFormControl } from '../../ui/forms/interfaces';\r\nimport { getDecimalPlaces, isNumber } from '../math-provider';\r\n\r\n/**\r\n * Validation\r\n * ----------\r\n const userNameControl = createControl('userName', '', {\r\n required: true // required also can be a function\r\n requiredMessage: '...', // optional\r\n\r\n regex: string,\r\n regexMessage: '...', // optional\r\n\r\n email: true,\r\n emailMessage: '...', // optional\r\n\r\n name: true,\r\n nameMessage: '...', // optional\r\n\r\n password: true,\r\n passwordMessage: '...', // optional\r\n\r\n minlength: number, // minlength also can be a function\r\n minlengthMessage: '...', // optional\r\n\r\n maxlength: number, // maxlength also can be a function\r\n maxlengthMessage: '...', // optional\r\n\r\n minValue: number,\r\n minValueMessage: '...', // optional\r\n\r\n maxValue: number,\r\n maxValueMessage: '...', // optional\r\n\r\n length: number,\r\n lengthMessage: '...', // optional\r\n\r\n phone: true,\r\n phoneMessage: '...', // optional\r\n\r\n int: true,\r\n intMessage: '...', // optional\r\n\r\n number: true,\r\n numberMessage: '...', // optional\r\n\r\n general: (control) => false,\r\n generalMessage: '...',\r\n\r\n decimalPlaces: 2,\r\n decimalPlacesMessage: '...', // optional\r\n });\r\n const [userName, setUserName] = useState(userNameControl);\r\n */\r\n\r\nconst defaultMessages = {\r\n requiredMessage: 'This field is required.',\r\n regexMessage: 'This field is wrong.',\r\n emailMessage: 'Please enter a valid email address. Use letters (a-z), numbers, and the following characters: + - _ @ . only',\r\n nameMessage: 'Please use letters (a-z), numbers, spaces, and the following characters: - _ . ,\\' / # \" only.',\r\n passwordMessage: 'Please enter a mix of at least 8 characters, including at least one of each group: a-z, A-Z, 0-9, special characters (e.g. ! @ #).',\r\n minlengthMessage: 'Please enter at least $1 character$2.',\r\n maxlengthMessage: 'Please enter at most $1 character$2.',\r\n lengthMessage: 'Please enter $1 character$2.',\r\n phoneMessage: 'Invalid phone number.',\r\n intMessage: 'Please enter a valid number.',\r\n dateMessage: 'Please enter a valid date.',\r\n numberMessage: 'Please enter a valid number.',\r\n generalMessage: 'An error has occurred.',\r\n atLeastOneDigitMessage: 'At least one letter or digit is required.',\r\n handleMessage: 'Please use letters letters (a-z), numbers, and the following characters: - _ . only.',\r\n decimalPlacesMessage: 'Number of decimal places should be no more than $1.',\r\n maxValueMessage: 'The maximum value cannot exceed $1',\r\n minValueMessage: 'The minimum value cannot be less than $1',\r\n};\r\n\r\nexport const emailRegex = '^([a-zA-Z0-9_\\\\.\\\\-\\\\+]+)@([a-zA-Z0-9_\\\\-\\\\+\\\\.]+)((\\\\.([a-zA-Z0-9_\\\\-\\\\+]){2,20})+)$';\r\n\r\n/**\r\n * create form control\r\n */\r\nexport const createControl = (id: string, initialValue: any, rules: IValidationRules) : IFormControl => {\r\n return {\r\n id,\r\n value: initialValue,\r\n touched: false,\r\n isValid: true,\r\n error: '',\r\n rules: rules || []\r\n }\r\n};\r\n\r\n/**\r\n * validate form control\r\n */\r\nexport const validateControl = (control: IFormControl) : IFormControl => {\r\n\r\n const updatedControl : IFormControl = {\r\n ...control,\r\n isValid: true,\r\n error: '',\r\n };\r\n \r\n const rules = control.rules;\r\n\r\n // required ---------------------\r\n if(updatedControl.isValid && rules.required){\r\n if(typeof rules.required === 'function'){\r\n updatedControl.isValid = updatedControl.isValid && rules.required(updatedControl);\r\n }\r\n else{\r\n const _value = (typeof updatedControl.value === 'string') ? (updatedControl.value || '').trim() : updatedControl.value;\r\n updatedControl.isValid = updatedControl.isValid && !!_value;\r\n }\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.requiredMessage || defaultMessages.requiredMessage;\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // handle ---------------------\r\n if(updatedControl.isValid && rules.handle){\r\n\r\n const handleRegex = '^[a-zA-Z0-9-_\\\\.]+$';\r\n const re = new RegExp(handleRegex);\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.toString().trim() === '' || re.test(updatedControl.value));\r\n\r\n if(!updatedControl.isValid){\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.handleMessage || defaultMessages.handleMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // minlength -------------------------\r\n if(updatedControl.isValid && rules.minlength){\r\n\r\n const minlength = typeof rules.minlength === 'function' ? rules.minlength() : rules.minlength;\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.length <= 0 || updatedControl.value.length >= minlength);\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.minlengthMessage || defaultMessages.minlengthMessage;\r\n updatedControl.error = updatedControl.error.replace('$1', minlength.toString());\r\n updatedControl.error = updatedControl.error.replace('$2', minlength === 1 ? '' : 's');\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // maxlength ---------------------\r\n if(updatedControl.isValid && rules.maxlength){\r\n\r\n const maxlength = typeof rules.maxlength === 'function' ? rules.maxlength() : rules.maxlength;\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.length <= maxlength);\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.maxlengthMessage || defaultMessages.maxlengthMessage;\r\n updatedControl.error = updatedControl.error.replace('$1', maxlength.toString());\r\n updatedControl.error = updatedControl.error.replace('$2', maxlength === 1 ? '' : 's');\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // length ---------------------\r\n if(updatedControl.isValid && rules.length){\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.length === rules.length);\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.lengthMessage || defaultMessages.lengthMessage;\r\n updatedControl.error = updatedControl.error.replace('$1', rules.length.toString());\r\n updatedControl.error = updatedControl.error.replace('$2', rules.length === 1 ? '' : 's');\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // decimalPlaces ---------------------\r\n if(updatedControl.isValid && rules.decimalPlaces !== undefined && Number.isInteger(rules.decimalPlaces)){\r\n\r\n updatedControl.isValid = updatedControl.isValid && (getDecimalPlaces(Number(updatedControl.value)) <= rules.decimalPlaces);\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.decimalPlacesMessage || defaultMessages.decimalPlacesMessage;\r\n updatedControl.error = updatedControl.error.replace('$1', rules.decimalPlaces.toString());\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // email ---------------------\r\n if(updatedControl.isValid && rules.email){\r\n const re = new RegExp(emailRegex);\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.trim() === '' || re.test(updatedControl.value));\r\n\r\n if(updatedControl.isValid){\r\n updatedControl.isValid = updatedControl.value.indexOf('..') === -1;\r\n }\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.emailMessage || defaultMessages.emailMessage;\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // name ---------------------\r\n if(updatedControl.isValid && rules.name){\r\n\r\n const nameRegex = '^[a-zA-Z0-9-_\\\\.\\\\,\\\\/#\\'\\\\\" ]+$';\r\n const re = new RegExp(nameRegex);\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.trim() === '' || re.test(updatedControl.value));\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.nameMessage || defaultMessages.nameMessage;\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // password ---------------------\r\n if(updatedControl.isValid && rules.password){\r\n\r\n let isValid = true;\r\n\r\n if(updatedControl.value.length < 8){\r\n isValid = false;\r\n }\r\n else{\r\n const regexes = [/[0-9]+/, /[a-z]+/, /[A-Z]+/, /[^A-Za-z0-9]+/];\r\n\r\n for (let r = 0; r < regexes.length; r++){\r\n\r\n if ((updatedControl.value.match(regexes[r]) || []).length <= 0){\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.trim() === '' || isValid);\r\n\r\n if(!updatedControl.isValid){\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.passwordMessage || defaultMessages.passwordMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // regex ---------------------\r\n if(updatedControl.isValid && rules.regex){\r\n\r\n const re = new RegExp(rules.regex);\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.trim() === '' || re.test(updatedControl.value));\r\n\r\n if(!updatedControl.isValid){\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.regexMessage || defaultMessages.regexMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // phone ---------------------\r\n if(updatedControl.isValid && rules.phone){\r\n\r\n const intRegex = /^[0-9]{5,12}$/;\r\n const onlyZerosRegex = /^0+$/;\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.toString().trim() === '' || (intRegex.test(updatedControl.value) && !onlyZerosRegex.test(updatedControl.value)));\r\n\r\n if(!updatedControl.isValid){\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.phoneMessage || defaultMessages.phoneMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // number ---------------------\r\n if(updatedControl.isValid && rules.number){\r\n\r\n const isNumeric = !isNaN(parseFloat(updatedControl.value)) && isFinite(updatedControl.value);\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.toString().trim() === '' || isNumeric);\r\n\r\n if(!updatedControl.isValid){\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.numberMessage || defaultMessages.numberMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // int ---------------------\r\n if(updatedControl.isValid && rules.int){\r\n\r\n const intRegex = '^[0-9]+$';\r\n const re = new RegExp(intRegex);\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.toString().trim() === '' || re.test(updatedControl.value));\r\n\r\n if(!updatedControl.isValid){\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.intMessage || defaultMessages.intMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // minDate - min date value ---------------------\r\n if(updatedControl.isValid && rules.minDate){\r\n //if the field is required and the filed is empty or null --> valid\r\n const validEmpty = (updatedControl.value === null || updatedControl.value.length === 0) && !rules.required;\r\n\r\n if(validEmpty){\r\n updatedControl.isValid = true;\r\n }else{\r\n const min = new Date(rules.minDate);\r\n updatedControl.isValid = min < new Date(updatedControl.value);\r\n }\r\n\r\n if(!updatedControl.isValid){\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.minDateMessage || defaultMessages.dateMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // maxDate - max date value ---------------------\r\n if(updatedControl.isValid && rules.maxDate){\r\n //if the field is required and the filed is empty or null --> valid\r\n const validEmpty = (updatedControl.value === null || updatedControl.value.length === 0) && !rules.required;\r\n\r\n if(validEmpty){\r\n updatedControl.isValid = true;\r\n }else{\r\n const max = new Date(rules.maxDate);\r\n updatedControl.isValid = max > new Date(updatedControl.value);\r\n }\r\n\r\n\r\n if(!updatedControl.isValid){\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.maxDateMessage || defaultMessages.dateMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n\r\n // maxValue ---------------------\r\n if(updatedControl.isValid && rules.maxValue){\r\n\r\n const maxValue = typeof rules.maxValue === 'function' ? rules.maxValue() : rules.maxValue;\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value <= maxValue);\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.maxValueMessage || defaultMessages.maxValueMessage;\r\n updatedControl.error = updatedControl.error.replace('$1', maxValue.toString());\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // minValue ---------------------\r\n if(updatedControl.isValid && isNumber(rules.minValue)){\r\n\r\n const minValue = typeof rules.minValue === 'function' ? rules.minValue() : (rules.minValue ?? 0);\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value >= minValue);\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.minValueMessage || defaultMessages.minValueMessage;\r\n updatedControl.error = updatedControl.error.replace('$1', minValue.toString());\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // general ---------------------\r\n if(updatedControl.isValid && rules.general){\r\n\r\n if(typeof rules.general === 'function'){\r\n updatedControl.isValid = updatedControl.isValid && rules.general(updatedControl);\r\n }\r\n\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.generalMessage || defaultMessages.generalMessage;\r\n return updatedControl;\r\n }\r\n }\r\n\r\n // atLeastOneDigit ---------------------\r\n if(updatedControl.isValid && rules.atLeastOneDigit){\r\n\r\n const atLeastOneDigitRegex = '.*[A-Za-z0-9].*';\r\n const re = new RegExp(atLeastOneDigitRegex);\r\n\r\n updatedControl.isValid = updatedControl.isValid && (updatedControl.value.toString().trim() === '' || re.test(updatedControl.value));\r\n\r\n if(!updatedControl.isValid){\r\n if(!updatedControl.isValid){\r\n updatedControl.error = rules.atLeastOneDigitMessage || defaultMessages.atLeastOneDigitMessage;\r\n return updatedControl;\r\n }\r\n\r\n return updatedControl;\r\n }\r\n }\r\n\r\n return updatedControl;\r\n};\r\n\r\n/**\r\n * validate form\r\n */\r\nexport const validateForm = (params: ([IFormControl, Dispatch])[], errorControlsListHolder: IFormControl[] = []) => {\r\n\r\n let isValid = true;\r\n\r\n for(let i=0; i= 2){\r\n const setControl = param[1] as Dispatch;\r\n if(typeof setControl === 'function'){\r\n setControl(control);\r\n }\r\n }\r\n\r\n if(!control.isValid){\r\n // console.log('Non valid control', control)\r\n isValid = false;\r\n errorControlsListHolder.push(control);\r\n }\r\n }\r\n\r\n return isValid;\r\n};\r\n\r\n/**\r\n * update form control\r\n */\r\nexport const updateControl = (control: IFormControl, updatedValue: any, validate = false, reset = false) : IFormControl => {\r\n\r\n let updatedControl: IFormControl = {\r\n ...control,\r\n touched: true,\r\n value: updatedValue\r\n };\r\n\r\n if(reset) {\r\n updatedControl.touched = false;\r\n updatedControl.isValid = true;\r\n updatedControl.error = '';\r\n }\r\n\r\n if(validate) {\r\n // perform control validation, update the relevant properties\r\n updatedControl = validateControl(updatedControl);\r\n }\r\n\r\n return updatedControl;\r\n};\r\n\r\n/**\r\n * scroll to the first error\r\n */\r\nexport const scrollToFirstErrorControl = (errorControls: IFormControl[]) => {\r\n\r\n if(!errorControls || errorControls.length <= 0) return;\r\n\r\n const firstErrorControl = errorControls[0];\r\n const $control = document.getElementById(firstErrorControl.id);\r\n\r\n if(!$control) return;\r\n\r\n $control.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n inline: 'nearest'\r\n });\r\n\r\n $control.focus();\r\n};\r\n\r\n// eslint-disable-next-line\r\nconst invisibleCharactersRegex = /[\\0-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\r\n\r\n/**\r\n * remove invisible characters;\r\n * used on paste events in forms\r\n */\r\nexport const removeInvisibleChars = (text: string) => {\r\n return text.replace(invisibleCharactersRegex, '');\r\n};\r\n\r\n/**\r\n * remove invisible characters;\r\n * used on paste events in forms\r\n */\r\nexport const removeInvisibleCharsOnPaste = (evt: ClipboardEvent) => {\r\n evt.preventDefault();\r\n\r\n const $target = evt.target as HTMLInputElement;\r\n const currentFieldValue = $target ? ($target.value ?? '') : '';\r\n\r\n // get clipboard data if exists --------\r\n // @ts-ignore\r\n const clipboardData = evt.clipboardData || window.clipboardData;\r\n if(!clipboardData) return currentFieldValue;\r\n\r\n const data = evt.clipboardData.getData('text');\r\n if(!data) return '';\r\n\r\n const pasteText = removeInvisibleChars(data.trim());\r\n\r\n // handle partial and whole selections ----------\r\n const start = currentFieldValue.substring(0, $target.selectionStart ?? 0);\r\n const end = currentFieldValue.substring($target.selectionEnd ?? currentFieldValue.length, currentFieldValue.length);\r\n return start + pasteText + end;\r\n};\r\n\r\n/* let paste = (event.clipboardData || window.clipboardData).getData('text');\r\n paste = paste.toUpperCase();\r\n const selection = window.getSelection();\r\n if (!selection.rangeCount) return;\r\n selection.deleteFromDocument();\r\n selection.getRangeAt(0).insertNode(document.createTextNode(paste));\r\n selection.collapseToEnd();*/","export const round2DecimalPlaces = (num: number) => {\r\n return Math.round((num + Number.EPSILON) * 100) / 100;\r\n};\r\n\r\n/**\r\n * get number of digits after decimal\r\n */\r\nexport const getDecimalPlaces = function(num: number){\r\n\r\n const match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\r\n if (!match) { return 0; }\r\n return Math.max(\r\n 0,\r\n // Number of digits right of decimal point.\r\n (match[1] ? match[1].length : 0)\r\n // Adjust for scientific notation.\r\n - (match[2] ? +match[2] : 0));\r\n};\r\n\r\n// eslint-disable-next-line\r\nexport const isNumber = (value: any) => {\r\n return !isNaN(parseFloat(value)) && isFinite(value);\r\n};\r\n\r\nexport const mod = (n: number, m: number) => {\r\n return ((n % m) + m) % m;\r\n};","function e(e){this.message=e}e.prototype=new Error,e.prototype.name=\"InvalidCharacterError\";var r=\"undefined\"!=typeof window&&window.atob&&window.atob.bind(window)||function(r){var t=String(r).replace(/=+$/,\"\");if(t.length%4==1)throw new e(\"'atob' failed: The string to be decoded is not correctly encoded.\");for(var n,o,a=0,i=0,c=\"\";o=t.charAt(i++);~o&&(n=a%4?64*n+o:o,a++%4)?c+=String.fromCharCode(255&n>>(-2*a&6)):0)o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(o);return c};function t(e){var t=e.replace(/-/g,\"+\").replace(/_/g,\"/\");switch(t.length%4){case 0:break;case 2:t+=\"==\";break;case 3:t+=\"=\";break;default:throw\"Illegal base64url string!\"}try{return function(e){return decodeURIComponent(r(e).replace(/(.)/g,(function(e,r){var t=r.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t=\"0\"+t),\"%\"+t})))}(t)}catch(e){return r(t)}}function n(e){this.message=e}function o(e,r){if(\"string\"!=typeof e)throw new n(\"Invalid token specified\");var o=!0===(r=r||{}).header?0:1;try{return JSON.parse(t(e.split(\".\")[o]))}catch(e){throw new n(\"Invalid token specified: \"+e.message)}}n.prototype=new Error,n.prototype.name=\"InvalidTokenError\";export default o;export{n as InvalidTokenError};\n//# sourceMappingURL=jwt-decode.esm.js.map\n","export enum ExternalLoginServiceEnum\r\n{\r\n Google = 1,\r\n Facebook = 2,\r\n}","/**\r\n * get JSON from HTML element on the page\r\n */\r\nimport React, {useEffect, useState} from \"react\";\r\n\r\n\r\nexport const getJSONFromHtml = ($el: HTMLElement|null) => {\r\n if(!$el || !$el.textContent) return null;\r\n\r\n let json = null;\r\n\r\n try{\r\n json = JSON.parse($el.textContent);\r\n }\r\n catch(ex){}\r\n\r\n return json;\r\n};\r\n\r\n/**\r\n * get setting fromHTML\r\n *
...
\r\n */\r\nexport const getSettingFromHtml = (id: string) => {\r\n const $div = document.querySelector(`#${ id }`);\r\n if(!$div || !$div.textContent) return '';\r\n return $div.textContent.trim();\r\n};\r\n\r\n/**\r\n * helper: get GUID\r\n */\r\nconst guidHelper = () => {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n};\r\n\r\n/**\r\n * get GUID\r\n */\r\nexport const guid = () => {\r\n return guidHelper() + guidHelper() + '-' + guidHelper() + '-' + guidHelper() + '-' + guidHelper() + '-' + guidHelper() + guidHelper() + guidHelper();\r\n};\r\n\r\n/**\r\n * timeout in milliseconds\r\n */\r\nexport const timeout = (ms: number) => {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n};\r\n\r\n/**\r\n * get page node GUID from meta tag printed in HTML\r\n *
67633544-c1c1-4096-a3cc-880a96fe4713
\r\n */\r\nexport const getPageNodeGUID = () => {\r\n const $div = document.querySelector('#nodeguid');\r\n if(!$div || !$div.textContent) return '';\r\n return $div.textContent.trim();\r\n};\r\n\r\n/**\r\n * get img CDN domain\r\n */\r\nexport const getImgCDNDomain = () => {\r\n const $box = document.getElementById('img-cdn-domain');\r\n const domain = $box?.textContent || '';\r\n return domain.trim().toLowerCase();\r\n};\r\n\r\ndeclare const window: any;\r\nexport const isMobile = () => {\r\n let check = false;\r\n\r\n // eslint-disable-next-line\r\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})( navigator.userAgent||navigator.vendor||window.opera);\r\n return check;\r\n};\r\nexport const isTablet_NOTWORK = () => {\r\n const userAgent = navigator.userAgent.toLowerCase();\r\n const isTablet = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(userAgent);\r\n return isTablet;\r\n};\r\nexport const isTablet = () => {\r\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n if (isTouchDevice && !isMobile()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\nexport const stopAllYouTubeVideos = () => {\r\n // eslint-disable-next-line\r\n document.querySelectorAll('iframe').forEach(v => { v.src = v.src;});\r\n const cnt = document.querySelectorAll('iframe')?.length;\r\n if(cnt > 0){\r\n window.setTimeout(() => {\r\n window.history.go(cnt-1);\r\n }, 200);\r\n }\r\n //window.history.go(-1);\r\n}\r\n\r\n\r\nexport const getHashByPrefix = (toFind:string, indexToFind:number = 0) => {\r\n let result = \"\";\r\n const _hash = window.location.hash.substring(1);\r\n if(!_hash || _hash === '')\r\n return result;\r\n var a = decodeURIComponent(_hash).split(\"|\"),\r\n i;\r\n\r\n for (i = 0; i < a.length; i++) {\r\n\r\n if(i < indexToFind)\r\n continue;\r\n\r\n if(a[i].startsWith(toFind) || toFind === ''){\r\n result = a[i];\r\n return result;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const getParents = (elem: any) => {\r\n\r\n // Set up a parent array\r\n var parents = [];\r\n\r\n // Push each parent element to the array\r\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\r\n parents.push(elem);\r\n }\r\n\r\n // Return our parent array\r\n return parents;\r\n\r\n};\r\nexport const isChildOfElementById = (elem: any, parentId: string) => {\r\n\r\n let res = false;\r\n // Push each parent element to the array\r\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\r\n if(elem.id && elem.id === parentId)\r\n res = true;\r\n }\r\n\r\n // Return our parent array\r\n return res;\r\n\r\n};\r\n//Hook for dynamic window size\r\nexport const useWindowSize = () => {\r\n\r\n // Initialize state with undefined width/height so server and client renders match\r\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\r\n const [windowSize, setWindowSize] = useState({\r\n width: undefined,\r\n height: undefined,\r\n });\r\n useEffect(() => {\r\n // Handler to call on window resize\r\n function handleResize() {\r\n // Set window width/height to state\r\n setWindowSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n });\r\n }\r\n // Add event listener\r\n window.addEventListener(\"resize\", handleResize);\r\n // Call handler right away so state gets updated with initial window size\r\n handleResize();\r\n // Remove event listener on cleanup\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []); // Empty array ensures that effect is only run on mount\r\n\r\n return windowSize;\r\n\r\n};\r\n//Hook for detect if HTML element is overflow\r\nexport const useIsOverflow = (ref : any) => {\r\n const [isOverflow, setIsOverflow] = React.useState(false);\r\n\r\n React.useLayoutEffect(() => {\r\n const { current } = ref;\r\n\r\n const trigger = () => {\r\n const hasOverflow = current.scrollWidth > current.clientWidth;\r\n\r\n setIsOverflow(hasOverflow);\r\n\r\n //if (callback) callback(hasOverflow);\r\n };\r\n\r\n if (current) {\r\n trigger();\r\n }\r\n }, [ ref]);\r\n\r\n return isOverflow;\r\n};\r\n\r\nexport const openWindowPopup = (url: string, title: string, width: number, height: number) => {\r\n const left = (window.screen.width / 2) - (width / 2);\r\n const top = (window.screen.height / 2) - (height / 2);\r\n return window.open(\r\n url,\r\n title,\r\n `toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=${ width }, height=${ height }, top=${ top }, left=${ left }`\r\n );\r\n};","import React from 'react';\r\n\r\nexport interface ValidationErrorsProps {\r\n errors: string[],\r\n defaultError?: string,\r\n qa?: string,\r\n}\r\n\r\n/**\r\n * Validation Errors\r\n */\r\nexport const ValidationErrors = (props: ValidationErrorsProps) => {\r\n\r\n const hasErrors = props.errors && props.errors.length > 0;\r\n const defaultError = props.defaultError ?? 'An error has occurred.';\r\n return (\r\n <>\r\n { !hasErrors &&
{ defaultError }
}\r\n\r\n {\r\n hasErrors && (\r\n
\r\n {\r\n props.errors.map((error, i) => {\r\n return \r\n })\r\n }\r\n
\r\n )\r\n }\r\n \r\n )\r\n};\r\n\r\nexport default ValidationErrors;","import React from 'react';\r\nimport { IIconProps } from '../interfaces';\r\n\r\nconst RefreshIcon = (props: IIconProps) => {\r\n return (\r\n \r\n { props.title && { props.title } }\r\n \r\n \r\n\r\n )\r\n};\r\n\r\nexport default RefreshIcon;\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport RefreshIcon from '../../ui/svg/common/refresh';\r\n\r\n/* Usage:\r\n-------------\r\nconst [simpleCaptchaCode, setSimpleCaptchaCode] = useState('');\r\nconst [simpleCaptchaAttempts, setSimpleCaptchaAttempts] = useState(0);\r\n\r\n\r\n\r\nOR version with validation\r\n------------------------------------------------------------------\r\nconst simpleCaptchaControl = createControl('simpleCaptcha', '', {\r\n required: true\r\n});\r\n\r\nconst [simpleCaptchaCode, setSimpleCaptchaCode] = useState(simpleCaptchaControl);\r\nconst [simpleCaptchaAttempts, setSimpleCaptchaAttempts] = useState(0);\r\n\r\n
\r\n {\r\n setSimpleCaptchaCode((updateControl(simpleCaptchaCode, value)));\r\n }}\r\n />\r\n
\r\n\r\n
\r\n {\r\n !simpleCaptchaCode.isValid &&
{ simpleCaptchaCode.error }
\r\n }\r\n
\r\n*/\r\n\r\nexport interface SimpleCaptchaProps{\r\n index?: number,\r\n setSimpleCaptchaCode: Function,\r\n simpleCaptchaCode: string,\r\n simpleCaptchaAttempts: number,\r\n}\r\n\r\n/**\r\n * Client side validation error\r\n */\r\nexport const getSimpleCaptchaValidationError = () => {\r\n return 'Please enter the security code.';\r\n};\r\n\r\n/**\r\n * to reset China captcha, it should be re-rendered with a new timestamp\r\n */\r\nconst getChinaCaptchaTimestamp = () => {\r\n return (new Date()).getTime();\r\n};\r\n\r\n/**\r\n * generate captcha image source\r\n */\r\nconst getSrc = (timestamp: number, index?: number) => {\r\n return `/api/simplecaptcha/render?index=${ index ?? 0 }&t=${ timestamp }`;\r\n};\r\n\r\n/**\r\n * Simple captcha - used for China\r\n */\r\nconst SimpleCaptcha: React.FC = (props) => {\r\n\r\n const [src, setSrc] = useState(getSrc(getChinaCaptchaTimestamp(), props.index));\r\n const { simpleCaptchaAttempts } = props;\r\n\r\n /**\r\n * refresh the captcha\r\n */\r\n const refresh = useCallback(() => {\r\n\r\n // rerender the image\r\n setSrc(getSrc(getChinaCaptchaTimestamp(), props.index));\r\n }, [props.index]);\r\n\r\n /**\r\n * re-render recaptcha on fail / ok\r\n */\r\n useEffect(() => {\r\n if(simpleCaptchaAttempts > 0) {\r\n refresh();\r\n }\r\n }, [simpleCaptchaAttempts, refresh]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n

Type the characters above:

\r\n\r\n {\r\n props.setSimpleCaptchaCode(evt.target.value);\r\n }}\r\n />\r\n
\r\n )\r\n};\r\n\r\nexport default SimpleCaptcha;","import React from 'react';\r\nimport { IIconProps } from '../interfaces';\r\n\r\nconst WavesLogo = (props: IIconProps) => {\r\n\r\n const { width, height, classes } = props;\r\n\r\n return (\r\n \r\n Waves Audio\r\n \r\n )\r\n};\r\n\r\nexport default WavesLogo;\r\n","import React from 'react';\r\nimport { IIconProps } from '../interfaces';\r\n\r\nconst Preloader = (props : IIconProps) => {\r\n return (\r\n \r\n Loading...\r\n \r\n \r\n )\r\n};\r\n\r\nexport default Preloader;\r\n","import { useState } from 'react';\r\nimport WavesLogo from '../../../ui/svg/common/waves-logo';\r\nimport Preloader from '../../../ui/svg/common/preloader';\r\nimport { logout } from '../dal/data-provider';\r\n\r\ninterface ILogoutScreen {\r\n text? : string ,\r\n}\r\n\r\n/**\r\n * logout screen\r\n * used in login, create account, and other membership pages\r\n * when the user is already logged in\r\n */\r\nconst LogoutScreen = (props: ILogoutScreen) => {\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n /**\r\n * perform logout\r\n */\r\n const performLogout = async () => {\r\n\r\n setIsLoading(true);\r\n\r\n try{\r\n await logout();\r\n }\r\n catch (ex){\r\n console.log('Logout error:', ex);\r\n }\r\n\r\n window.location.reload();\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n { props.text ? props.text : \"You're already logged in. If you need to log in with a different account, please sign out first.\" }\r\n
\r\n\r\n {\r\n isLoading &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {\r\n !isLoading &&\r\n {\r\n await performLogout();\r\n }}\r\n >Sign Out\r\n }\r\n
\r\n
\r\n \r\n )\r\n};\r\n\r\nexport default LogoutScreen;","import React from 'react';\r\nimport { getSVGHeight } from '../svg-provider';\r\nimport { IIconProps } from '../interfaces';\r\n\r\nconst EyeIcon = (props: IIconProps) => {\r\n\r\n let height = props.height;\r\n\r\n // if height property is not defined, and width & height should be defined in px ->\r\n // calculate the height dynamically, keeping the aspect ratio using the viewport\r\n if(height === undefined && props.width.endsWith('px')){\r\n height = getSVGHeight(props.width, 19, 12);\r\n }\r\n\r\n return (\r\n \r\n { props.title && { props.title } }\r\n \r\n \r\n\r\n )\r\n};\r\n\r\nexport default EyeIcon;\r\n","/**\r\n * get image height based on width and viewport\r\n */\r\nexport const getSVGHeight = (width: string, viewPortWidth: number, viewPortHeight: number) => {\r\n const widthNum = Number(width.replace('px', ''));\r\n return`${ widthNum * viewPortHeight / viewPortWidth }px`;\r\n};","import {\r\n ChangeEventHandler,\r\n ClipboardEventHandler, FocusEventHandler,\r\n KeyboardEventHandler, MouseEvent,\r\n MouseEventHandler, ReactNode, useEffect, useRef, useState\r\n} from 'react';\r\nimport { IFormControl } from '../interfaces';\r\nimport EyeIcon from '../../svg/common/eye';\r\n\r\ninterface IFormTextField {\r\n id: string,\r\n label: string,\r\n control: IFormControl,\r\n maxLength?: number,\r\n focus?: boolean,\r\n disabled?:boolean,\r\n type?: string, // text or password\r\n\r\n // event handlers\r\n onBlur?: FocusEventHandler,\r\n onChange?: ChangeEventHandler,\r\n onClick?: MouseEventHandler,\r\n onKeyUp?: KeyboardEventHandler,\r\n onPaste?: ClipboardEventHandler,\r\n\r\n // html content\r\n comment?: ReactNode,\r\n\r\n // styles\r\n rootClasses?: string,\r\n textBoxClasses?: string,\r\n\r\n // QA data attribute\r\n qa?: string,\r\n qaError?: string,\r\n}\r\n\r\n/**\r\n * Text field.\r\n */\r\nconst FormTextField = (props: IFormTextField) => {\r\n\r\n // can be used for focus on page load\r\n const controlRef = useRef(null);\r\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n\r\n if(!props.focus) return;\r\n\r\n // on page load -> focus on the field\r\n if(!controlRef || !controlRef.current) return;\r\n controlRef.current.focus();\r\n }, [props.focus]);\r\n\r\n /**\r\n * handle password eye click\r\n */\r\n const handlePasswordToggle = (evt: MouseEvent) => {\r\n setIsPasswordVisible(val => !val);\r\n };\r\n\r\n /**\r\n * define control type logic\r\n */\r\n const getControlType = (type: string|undefined) => {\r\n\r\n // default type is text\r\n if(!type) return 'text';\r\n\r\n // user clicked on the 'eye' inside the password field\r\n if(type === 'password' && isPasswordVisible) return 'text';\r\n\r\n return type;\r\n };\r\n\r\n return (\r\n
\r\n
\r\n\r\n 0) ? 'not-empty': '' } ${ props.type === 'password' ? 'pr-8' : '' }`}\r\n type={ getControlType(props.type) }\r\n maxLength={ props.maxLength }\r\n value={ props.control.value }\r\n onBlur={ props.onBlur }\r\n onChange={ props.onChange }\r\n onClick={ props.onClick }\r\n onKeyUp={ props.onKeyUp }\r\n onPaste={ props.onPaste }\r\n ref={ controlRef }\r\n disabled={ props.disabled }\r\n data-qa={ props.qa }\r\n />\r\n\r\n \r\n\r\n {\r\n props.type === 'password' && (\r\n \r\n \r\n \r\n )\r\n }\r\n
\r\n\r\n { props.control.isValid && props.comment }\r\n\r\n {\r\n !props.control.isValid &&\r\n { props.control.error }
\r\n }\r\n \r\n )\r\n};\r\n\r\nexport default FormTextField;","import SimpleCaptcha from '../../../domain/captcha/simple-captcha';\r\nimport { updateControl } from '../../../domain/validation/validation';\r\nimport { IFormControl } from '../interfaces';\r\n\r\ninterface IChinaCaptchaField {\r\n control: IFormControl,\r\n setSimpleCaptchaCode: Function,\r\n simpleCaptchaAttempts: number,\r\n}\r\n\r\n/**\r\n * China captcha field.\r\n */\r\nconst ChinaCaptchaField = (props: IChinaCaptchaField) => {\r\n return (\r\n <>\r\n
\r\n {\r\n props.setSimpleCaptchaCode((updateControl(props.control, value)));\r\n }}\r\n simpleCaptchaAttempts={ props.simpleCaptchaAttempts }\r\n />\r\n
\r\n\r\n
\r\n {\r\n !props.control.isValid &&
{ props.control.error }
\r\n }\r\n
\r\n \r\n )\r\n};\r\n\r\nexport default ChinaCaptchaField;","import WavesLogo from '../svg/common/waves-logo';\r\n\r\n/**\r\n * Common forms logo.\r\n */\r\nconst FormLogo = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n};\r\n\r\nexport default FormLogo;","interface IFormTerms {\r\n classes?: string,\r\n}\r\n\r\n/**\r\n * Common form terms & privacy links.\r\n */\r\nconst FormTerms = (props: IFormTerms) => {\r\n return (\r\n
\r\n Privacy\r\n Terms\r\n
\r\n )\r\n};\r\n\r\nexport default FormTerms;","import FormLogo from './form-logo';\r\nimport FormTerms from './form-terms';\r\nimport { ReactNode } from 'react';\r\n\r\ninterface IFormBorder {\r\n children: ReactNode\r\n}\r\n\r\n/**\r\n * Common form border and alignment.\r\n */\r\nconst FormBorder = (props: IFormBorder) => {\r\n return (\r\n
\r\n \r\n\r\n
\r\n \r\n\r\n { props.children }\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n )\r\n};\r\n\r\nexport default FormBorder;","import Preloader from '../svg/common/preloader';\r\n\r\nconst FormPreloader = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n};\r\n\r\nexport default FormPreloader;","/**\r\n * Allows to TypeScript recognize Facebook namespace\r\n */\r\ndeclare global {\r\n interface Window {\r\n fbq: any;\r\n facebookProductPagesViewContent: any;\r\n fbAsyncInit: Function;\r\n }\r\n}\r\n\r\nexport {}\r\n\r\nexport enum EFacebookStatus {\r\n Error = -1,\r\n LoggedIn = 0,\r\n}\r\n\r\nexport interface IFacebookResponse {\r\n status: EFacebookStatus,\r\n accessToken: string,\r\n userID: string,\r\n}\r\n\r\nexport interface IFacebookUser {\r\n name: string;\r\n email: string;\r\n}\r\n","\r\nexport interface IExternalLoginResult {\r\n isValid: boolean;\r\n isLogin: boolean;\r\n status: ExternalLoginResultStatusCode;\r\n}\r\n\r\nexport enum ExternalLoginResultStatusCode {\r\n GeneralError = -99,\r\n InsertError = -5,\r\n WavesAppValidationFailed = -4,\r\n DisabledUser = -3,\r\n EmailIsNotValid = -2,\r\n FacebookValidationFailed = -1,\r\n OK = 0,\r\n}","export enum CartSteps {\r\n First = 1,\r\n Second = 2,\r\n Third = 3,\r\n}","import { get, post } from '../../../DAL/data-provider';\r\nimport { IServerValidation } from '../../../domain/validation/interfaces';\r\nimport { CreateAccountReferrer } from '../enums/create-account-referrer';\r\nimport { ILocalDataRequest } from '../../shopping-cart/cart-bridger-pay/interfaces';\r\nimport { IsAuthReferrer } from '../enums/is-auth-referrer';\r\nimport { SELECTED_PAYMENT_TAB_STORAGE_KEY } from '../../shopping-cart/cart-bridger-pay/domain/shopping-cart-provider';\r\nimport { ExternalLoginServiceEnum } from '../enums/external-service-enum';\r\nimport { googleSignOut } from '../../../domain/google/google-login-provider';\r\nimport { facebookLogOut } from '../../../domain/facebook/facebook-login-provider';\r\nimport { getSettingFromHtml } from '../../../domain/common';\r\n\r\nexport enum ILoginReferrer {\r\n LoginPage = 0,\r\n CartPage = 1,\r\n MainExternalLogin = 5,\r\n CartExternalLogin = 6,\r\n}\r\n\r\n/**\r\n * perform login\r\n */\r\nexport const login = async (\r\n referrer: ILoginReferrer,\r\n userName: string,\r\n password: string,\r\n isPersistent: boolean,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n localData?: ILocalDataRequest,\r\n wavesAppCode = '',\r\n wavesAppTimeToken = 0,\r\n wavesUserGuid = '',\r\n wavesAppLoginToken = ''\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/login', {\r\n userName,\r\n password,\r\n isPersistent,\r\n captchaCode,\r\n recaptchaVersion,\r\n\r\n referrer,\r\n shipAddressLine: localData?.shipAddressLine,\r\n shipCity: localData?.shipCity,\r\n shipZipCode: localData?.shipZipCode,\r\n shipCountry2LetterCode: localData?.shipCountry2LetterCode,\r\n shipState2LetterCode: localData?.shipState2LetterCode,\r\n shippingCode: localData?.shippingCode,\r\n\r\n taxCountry2LetterCode: localData?.taxCountry2LetterCode,\r\n taxState2LetterCode: localData?.taxState2LetterCode,\r\n taxZipCode: localData?.taxZipCode,\r\n\r\n wavesAppCode,\r\n wavesAppTimeToken,\r\n wavesUserGuid,\r\n wavesAppLoginToken,\r\n });\r\n};\r\n\r\nexport const externalLogin = async (\r\n externalService: ExternalLoginServiceEnum,\r\n accessToken: string,\r\n userID: string,\r\n email: string,\r\n name: string,\r\n referrer: ILoginReferrer,\r\n isPersistent: boolean,\r\n isShoppingCart: boolean,\r\n\r\n localData?: ILocalDataRequest,\r\n wavesAppCode = '',\r\n wavesAppTimeToken = 0,\r\n wavesUserGuid = '',\r\n wavesAppLoginToken = '',\r\n\r\n // message gears -------\r\n pageNodeGUID?: string,\r\n firstUTMSource?: string,\r\n firstUTMMedium?: string,\r\n firstUTMCampaign?: string,\r\n lastUTMSource?: string,\r\n lastUTMMedium?: string,\r\n lastUTMCampaign?: string\r\n) : Promise<{ data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/external-login', {\r\n externalService,\r\n accessToken,\r\n userID,\r\n email,\r\n name,\r\n\r\n isPersistent,\r\n isShoppingCart,\r\n referrer,\r\n\r\n shipAddressLine: localData?.shipAddressLine,\r\n shipCity: localData?.shipCity,\r\n shipZipCode: localData?.shipZipCode,\r\n shipCountry2LetterCode: localData?.shipCountry2LetterCode,\r\n shipState2LetterCode: localData?.shipState2LetterCode,\r\n shippingCode: localData?.shippingCode,\r\n\r\n taxCountry2LetterCode: localData?.taxCountry2LetterCode,\r\n taxState2LetterCode: localData?.taxState2LetterCode,\r\n taxZipCode: localData?.taxZipCode,\r\n\r\n wavesAppCode,\r\n wavesAppTimeToken,\r\n wavesUserGuid,\r\n wavesAppLoginToken,\r\n\r\n pageNodeGUID,\r\n firstUTMSource,\r\n firstUTMMedium,\r\n firstUTMCampaign,\r\n lastUTMSource,\r\n lastUTMMedium,\r\n lastUTMCampaign,\r\n });\r\n};\r\n\r\n/**\r\n * perform create account\r\n */\r\nexport const createAccount = async (\r\n referrer: CreateAccountReferrer,\r\n email: string,\r\n password: string,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n\r\n // message gears -------\r\n pageNodeGUID?: string,\r\n firstUTMSource?: string,\r\n firstUTMMedium?: string,\r\n firstUTMCampaign?: string,\r\n lastUTMSource?: string,\r\n lastUTMMedium?: string,\r\n lastUTMCampaign?: string\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/create-account', {\r\n referrer,\r\n email,\r\n password,\r\n captchaCode,\r\n recaptchaVersion,\r\n pageNodeGUID,\r\n productGUID: getSettingFromHtml('product-guid'),\r\n firstUTMSource,\r\n firstUTMMedium,\r\n firstUTMCampaign,\r\n lastUTMSource,\r\n lastUTMMedium,\r\n lastUTMCampaign,\r\n });\r\n};\r\n\r\nexport const logout = async () => {\r\n try{\r\n window.sessionStorage.removeItem(SELECTED_PAYMENT_TAB_STORAGE_KEY);\r\n }\r\n catch(ex){}\r\n\r\n try{\r\n googleSignOut();\r\n }\r\n catch (ex){}\r\n\r\n try{\r\n facebookLogOut();\r\n }\r\n catch (ex){}\r\n\r\n return post('/api/membership/logout', {});\r\n};\r\n\r\nexport const logoutFromAllDevices = async () => {\r\n try{\r\n window.sessionStorage.removeItem(SELECTED_PAYMENT_TAB_STORAGE_KEY);\r\n }\r\n catch(ex){}\r\n\r\n try{\r\n googleSignOut();\r\n }\r\n catch (ex){}\r\n\r\n try{\r\n facebookLogOut();\r\n }\r\n catch (ex){}\r\n\r\n return post('/api/membership/logout-all-devices', {});\r\n};\r\n\r\n/**\r\n * resend activation email\r\n */\r\nexport const resendActivationEmail = async (captchaCode: string, recaptchaVersion: number) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n return post('/api/membership/resend-activation-email', {\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\n/**\r\n * update email\r\n */\r\nexport const updateEmail = async (\r\n newEmail: string,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/update-email', {\r\n newEmail,\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\n/**\r\n * get email preferences\r\n */\r\nexport const getEmailPreferences = async (recipientGUID?: string) => {\r\n\r\n let url = '/api/messagegears/email-preferences';\r\n\r\n if(recipientGUID){\r\n url = `${ url }?guid=${ recipientGUID }`;\r\n }\r\n\r\n return get(url);\r\n};\r\n\r\n/**\r\n * update email preferences\r\n */\r\nexport const setEmailPreferences = async (recipientGUID: string, newsletterID: number, isSelected: boolean) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n return post('/api/messagegears/set-email-preferences', {\r\n recipientGUID,\r\n newsletterID,\r\n isSelected\r\n });\r\n};\r\n\r\n/**\r\n * unsubscribe from all newsletters\r\n * https://dev13.waves.com/email-preferences?guid=9C12F487-58F3-478A-AC28-9D01F2557A49&unsub=http%3A%2F%2Ftrack.waves-audio.com%2Fuc%2F3%2FeyJhaSI6MjczNjMyNjEsImUiOiJpZGFuQHdhdmVzLmNvbSIsInJpIjoiNCIsInJxIjoiMDItdDIyMDgxLWQyNjE2YTAzZjU4NjQ5OTViMWIzMDIxYzcyZmY2ZDM1IiwicGgiOm51bGwsIm0iOmZhbHNlfQ%2F6L_jR0-bdCQpbPebxD8fOA&utm_campaifgn=unsubscribe\r\n */\r\nexport const unsubscribe = async (unsub: string, recipientGUID: string) => {\r\n return post('/api/messagegears/unsubscribe', {\r\n recipientGUID,\r\n unsub,\r\n });\r\n};\r\n\r\n/**\r\n * check if user is authenticated\r\n */\r\nexport const isAuthenticated = async (referrer: IsAuthReferrer, localData?: ILocalDataRequest) => {\r\n return post('/api/membership/is-authenticated', {\r\n referrer,\r\n\r\n shipAddressLine: localData?.shipAddressLine,\r\n shipCity: localData?.shipCity,\r\n shipZipCode: localData?.shipZipCode,\r\n shipCountry2LetterCode: localData?.shipCountry2LetterCode,\r\n shipState2LetterCode: localData?.shipState2LetterCode,\r\n shippingCode: localData?.shippingCode,\r\n\r\n taxCountry2LetterCode: localData?.taxCountry2LetterCode,\r\n taxState2LetterCode: localData?.taxState2LetterCode,\r\n taxZipCode: localData?.taxZipCode,\r\n\r\n taxID: localData?.taxID,\r\n });\r\n};\r\n\r\n/**\r\n * change password\r\n */\r\nexport const changePassword = async (\r\n currentPassword: string,\r\n newPassword: string,\r\n confirmPassword: string\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/change-password', {\r\n currentPassword,\r\n newPassword,\r\n confirmPassword,\r\n });\r\n};\r\n\r\n/**\r\n * forgot password\r\n */\r\nexport const forgotPassword = async (\r\n userNameOrEmail: string,\r\n isEmail: boolean,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/forgot-password', {\r\n userNameOrEmail,\r\n isEmail,\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\nexport const validateResetPassword = async (isCancel: boolean, hash: string, id: string) => {\r\n return get('/api/membership/reset-password', {\r\n isCancel,\r\n hash,\r\n id,\r\n });\r\n};\r\n\r\nexport const resetPassword = async (\r\n hash: string,\r\n id: string,\r\n password: string,\r\n confirmPassword: string,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/reset-password', {\r\n hash,\r\n id,\r\n password,\r\n confirmPassword,\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\nexport const sendPluginsBIConsent = async () => {\r\n return post('/api/membership/pluginsbi-consent', {});\r\n};\r\n\r\n","import { ICartData, ICartItem } from '../interfaces';\r\nimport { getQueryString } from '../../../../domain/url-provider';\r\nimport { ProductDepartmentEnum } from '../../../products/enums/product-department-enum';\r\nimport { format } from 'date-fns';\r\nimport { LastPaymentOption } from '../enums/last-payment-option-enum';\r\nimport { PaymentTabsEnum } from '../enums/payment-tabs-enum';\r\nimport { CreditCardServiceEnum } from '../enums/credit-card-service-enum';\r\nimport { getFromStorage } from '../../../../DAL/storage-provider';\r\nimport { checkIfPaypalIsVisible } from '../../cart-shared-bridger-pay/domain/bridger-pay-provider';\r\nimport { IOrder } from '../../cart-thank-you/interfaces';\r\n\r\nexport const SELECTED_PAYMENT_TAB_STORAGE_KEY = 'selected-payment-tab-key';\r\nexport const FIELD_DEBOUNCE_DURATION = 500;\r\n\r\n/**\r\n * Remove 'productid' from query string (if exists),\r\n * otherwise, the same product could be added multiple times.\r\n * The main 'productid' logic occurs on server side.\r\n * For in-app, remove all the relevant query strings.\r\n * For cart reconstruction, like /cart?sku477=2&sku355=3, remove all\r\n * keys starting with 'sku'\r\n */\r\nexport const removeQueryStringsOnLoad = () => {\r\n const qs = getQueryString(window.location.search, false);\r\n const url = new URL(window.location.href.toLowerCase());\r\n let changed = false;\r\n\r\n const set = new Set(['productid', 'sessiontoken', 'userguid', 'purchasetoken', 'appcode']);\r\n\r\n for(let key of Object.keys(qs)){\r\n\r\n // URLSearchParams keys are case sensitive !!!\r\n const formattedKey = key.toLowerCase().trim();\r\n\r\n if(set.has(formattedKey) || formattedKey.startsWith('sku')){\r\n url.searchParams.delete(key);\r\n changed = true;\r\n }\r\n }\r\n\r\n if(changed){\r\n window.history.replaceState({}, '', url.toString());\r\n }\r\n};\r\n\r\n/**\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-3288\r\n */\r\nexport const isCartStep3PPCC50AbTest = (cartData: ICartData) => {\r\n\r\n const isNoLastPaymentAndUs =\r\n !cartData.lastPaymentOption &&\r\n !!cartData.maxMindAddress &&\r\n cartData.maxMindAddress.countryCode === 'US';\r\n\r\n if(!isNoLastPaymentAndUs) return false;\r\n\r\n const isZeroPurchase = cartData.priceData.totalPrice < 1 && !checkIsSubscription(cartData);\r\n if(isZeroPurchase) return false;\r\n\r\n if(\r\n cartData.creditCardService === CreditCardServiceEnum.FirstData &&\r\n cartData.priceData.totalPrice <= 21.15) return false;\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-3278\r\n */\r\nexport const getInitialSelectedPaymentTab = (cartData: ICartData) : PaymentTabsEnum => {\r\n\r\n try{\r\n const isSubscription = checkIsSubscription(cartData);\r\n const isPaypalTabVisible = checkIfPaypalIsVisible(isSubscription);\r\n if(!isPaypalTabVisible) {\r\n return PaymentTabsEnum.CreditCard;\r\n }\r\n }\r\n catch (ex) {\r\n console.log(ex);\r\n }\r\n\r\n let restored = getFromStorage('session-storage', SELECTED_PAYMENT_TAB_STORAGE_KEY);\r\n if(restored !== null && (\r\n Number(restored) === PaymentTabsEnum.CreditCard ||\r\n Number(restored) === PaymentTabsEnum.PayPal ||\r\n Number(restored) === PaymentTabsEnum.AliPay\r\n )){\r\n return Number(restored) as PaymentTabsEnum;\r\n }\r\n\r\n if(isCartStep3PPCC50AbTest(cartData)) {\r\n return PaymentTabsEnum.PayPal;\r\n }\r\n\r\n switch (cartData.lastPaymentOption) {\r\n case LastPaymentOption.AliPay: {\r\n return PaymentTabsEnum.AliPay;\r\n }\r\n\r\n case LastPaymentOption.PayPal: {\r\n return PaymentTabsEnum.PayPal;\r\n }\r\n }\r\n\r\n return PaymentTabsEnum.CreditCard;\r\n};\r\n\r\nexport const checkIsSubscription = (cartData: ICartData) => {\r\n const active = cartData.cartItems.filter(cartItem => cartItem.isActive);\r\n\r\n return active.length === 1 &&\r\n (active[0].skuDepartmentID === ProductDepartmentEnum.Subscription ||\r\n active[0].skuDepartmentID === ProductDepartmentEnum.SubscriptionDynamic);\r\n};\r\n\r\nexport const getExpectedLTV = (cartData: IOrder) => {\r\n const found = cartData?.orderItems?.find(cartItem => cartItem.expectedLTV > 0);\r\n return found ? found.expectedLTV : 0;\r\n};\r\n\r\nexport const getWupDate = (cartItem: ICartItem) => {\r\n if(!cartItem.targetWUPEndDate) return '';\r\n\r\n try{\r\n return format(new Date(cartItem.targetWUPEndDate),'MMM dd, yyyy')\r\n }\r\n catch(ex){\r\n console.log(ex, `\"${ cartItem.targetWUPEndDate }\" is wrong.`);\r\n }\r\n\r\n return '';\r\n};\r\n\r\nexport const getProductsCount = (cartItems: ICartItem[]) => {\r\n let count = 0;\r\n for(const item of cartItems) {\r\n if(!item.isActive) continue;\r\n count += item.skuUnits;\r\n }\r\n return count;\r\n};\r\n","import jwt_decode from 'jwt-decode';\r\nimport { getUTMFromStorage } from '../marketing/utm/utm-provider';\r\nimport { externalLogin, ILoginReferrer } from '../../projects/membership/dal/data-provider';\r\nimport { ExternalLoginServiceEnum } from '../../projects/membership/enums/external-service-enum';\r\nimport { getPageNodeGUID } from '../common';\r\nimport { redirectAfterLogin } from '../../projects/membership/login/standard-login/login';\r\nimport { IWavesAppDetection } from '../../projects/membership/login/waves-app-login/interfaces';\r\nimport { ILocalDataRequest } from '../../projects/shopping-cart/cart-bridger-pay/interfaces';\r\nimport { sendRegistrationEvents } from '../marketing/marketing-provider';\r\n\r\nexport const GOOGLE_SIGN_IN_INITIALIZED = 'GOOGLE_SIGN_IN_INITIALIZED';\r\nexport const GOOGLE_SIGNED_IN = 'GOOGLE_SIGNED_IN';\r\nexport const GOOGLE_ERROR = 'GOOGLE_ERROR';\r\n\r\nexport interface IGoogleJwt {\r\n aud: string, // Audience\r\n azp: string, // Authorized party - the party to which the ID Token was issued.\r\n email: string,\r\n email_verified: boolean,\r\n exp: number,\r\n family_name: string, // last name\r\n given_name: string, // first name\r\n name: string, // full name\r\n iat: number, // (Issued At) Claim The \"iat\" (issued at) claim identifies the time at which the JWT was issued.\r\n iss: string, // https://accounts.google.com\r\n jti: string, // (JWT ID) claim is a unique identifier for the JWT. This can be used to prevent JWT token abuse, and to ensure the uniqueness of the JWT. The \"jti\" claim is an optional claim, but it is recommended that it be included in the JWT if it is available.\r\n locale: string, // en-GB\r\n nbf: string, // (Not Before) Claim The \"nbf\" (not before) claim identifies the time before which the JWT MUST NOT be accepted for processing. The processing of the \"nbf\" claim requires that the current date/time MUST be after or equal to the not-before date/time listed in the \"nbf\" claim.\r\n picture: string, // url of user avatar\r\n sub: string, // (Subject) Claim The \"sub\" (subject) claim identifies the principal that is the subject of the JWT.This can be used as user ID.\r\n}\r\n\r\n/**\r\n * https://developers.google.com/identity/gsi/web/reference/js-reference\r\n */\r\nexport const initGoogleForLogin = (isWavesApp: boolean, wavesAppDetectionData?: IWavesAppDetection, isShoppingCart?: boolean, localData?: ILocalDataRequest) => {\r\n\r\n /**\r\n * With Popup mode, you add a custom HTTP header to your requests,\r\n * and then on your server confirm it matches the expected value and origin.\r\n */\r\n const handleCredentialResponse = async (response: google.accounts.id.CredentialResponse) => {\r\n\r\n if(!response) return;\r\n\r\n try{\r\n const decoded = jwt_decode(response.credential) as IGoogleJwt;\r\n\r\n const isPersistent = true;\r\n\r\n const utm = getUTMFromStorage();\r\n\r\n const serverResponse = await externalLogin(\r\n ExternalLoginServiceEnum.Google,\r\n response.credential,\r\n decoded.sub,\r\n decoded.email,\r\n decoded.name,\r\n isShoppingCart ? ILoginReferrer.CartExternalLogin : ILoginReferrer.MainExternalLogin,\r\n isPersistent,\r\n !!isShoppingCart,\r\n localData,\r\n\r\n wavesAppDetectionData?.appCode,\r\n wavesAppDetectionData?.ts || 0,\r\n wavesAppDetectionData?.uuid,\r\n wavesAppDetectionData?.qs,\r\n\r\n // message gears -------\r\n getPageNodeGUID(),\r\n utm ? utm.firstSource : '',\r\n utm ? utm.firstMedium : '',\r\n utm ? utm.firstCampaign : '',\r\n utm ? utm.lastSource : '',\r\n utm ? utm.lastMedium : '',\r\n utm ? utm.lastCampaign : '',\r\n );\r\n\r\n if(\r\n !serverResponse ||\r\n serverResponse.statusCode !== 200 ||\r\n !serverResponse.data.isValid){\r\n document.body.dispatchEvent(new CustomEvent(GOOGLE_ERROR, {\r\n detail: serverResponse\r\n }));\r\n return;\r\n }\r\n\r\n // All is well -----------------\r\n\r\n const isExistingUser = serverResponse?.data?.relatedData?.isExistingUser ?? false;\r\n\r\n if(!isExistingUser) {\r\n await sendRegistrationEvents();\r\n }\r\n\r\n if(isWavesApp || isShoppingCart) {\r\n document.body.dispatchEvent(new CustomEvent(GOOGLE_SIGNED_IN, {\r\n detail: serverResponse,\r\n }))\r\n }\r\n else{\r\n redirectAfterLogin();\r\n }\r\n }\r\n catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n\r\n window.onload = () => {\r\n\r\n // The google.accounts.id.initialize method should be called only once,\r\n // even if you use both One Tap and button in the same web page.\r\n google.accounts.id.initialize({\r\n client_id: '429317021265-opt92t3o43q0rh84g6mans6bs4747lrk.apps.googleusercontent.com',\r\n callback: handleCredentialResponse,\r\n });\r\n\r\n if(!isShoppingCart) {\r\n document.body.dispatchEvent(new CustomEvent(GOOGLE_SIGN_IN_INITIALIZED));\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * https://developers.google.com/identity/gsi/web/reference/js-reference#google.accounts.id.disableAutoSelect\r\n * When the user signs out of your website, you need to call the method google.accounts.id.disableAutoSelect\r\n * to record the status in cookies. This prevents a UX dead loop.\r\n */\r\nexport const googleSignOut = () => {\r\n if(!window.google || !window.google.accounts || !window.google.accounts.id) return;\r\n window.google.accounts.id.disableAutoSelect();\r\n};\r\n","/**\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-3399\r\n * https://developers.facebook.com/docs/facebook-login/web\r\n */\r\n\r\n/** ------------------------------- APIs ---------------------------------------------- **/\r\n\r\nimport { EFacebookStatus, IFacebookResponse, IFacebookUser } from './facebook-types';\r\n\r\n/**\r\n * Check Login Status of a Person\r\n * -------------------------------\r\n * The first step when your webpage loads is determining\r\n * if a person is already logged into your webpage with Facebook Login.\r\n * A call to FB.getLoginStatus starts a call to Facebook to get the login status.\r\n * Facebook then calls your callback function with the results.\r\n */\r\nexport const checkFacebookLoginStatus = () : Promise => {\r\n return new Promise((resolve, _reject) => {\r\n window.FB.getLoginStatus((response) => {\r\n resolve(response);\r\n }, true);\r\n });\r\n\r\n /*\r\n Response example:\r\n -----------------\r\n {\r\n status: 'connected',\r\n authResponse: {\r\n accessToken: '{access-token}',\r\n expiresIn:'{unix-timestamp}',\r\n reauthorize_required_in:'{seconds-until-token-expires}',\r\n signedRequest:'{signed-parameter}',\r\n userID:'{user-id}'\r\n }\r\n }\r\n */\r\n};\r\n\r\n/**\r\n * Log In with the Javascript SDK Login Dialog\r\n */\r\nexport const facebookLogin = () : Promise => {\r\n return new Promise((resolve, _reject) => {\r\n FB.login((response) => {\r\n resolve(response);\r\n }, {\r\n // https://developers.facebook.com/docs/permissions\r\n scope: 'public_profile,email'\r\n });\r\n });\r\n};\r\n\r\n/**\r\n * Log a Person Out.\r\n * This function call may also log the person out of Facebook.\r\n * Additionally, logging out of your webpage does not revoking permissions\r\n * the person granted your webpage during login.\r\n */\r\nexport const facebookLogOut = () : Promise => {\r\n try{\r\n if(window.localStorage) {\r\n for(let i = window.localStorage.length - 1; i>=0; i--) {\r\n const key = window.localStorage.key(i) || '';\r\n if(key.startsWith('fblst_')) {\r\n window.localStorage.removeItem(key);\r\n }\r\n }\r\n }\r\n }\r\n catch (ex){}\r\n\r\n try{\r\n if(window.sessionStorage) {\r\n for(let i = window.sessionStorage.length - 1; i>=0; i--) {\r\n const key = window.sessionStorage.key(i) || '';\r\n if(key.startsWith('fbssls_')) {\r\n window.sessionStorage.removeItem(key);\r\n }\r\n }\r\n }\r\n }\r\n catch (ex){}\r\n\r\n return new Promise((resolve, _reject) => {\r\n window?.FB?.logout((response) => {\r\n resolve(response);\r\n });\r\n });\r\n};\r\n\r\nexport const getUserData = () : Promise => {\r\n return new Promise((resolve, _reject) => {\r\n FB.api('/me', {\r\n fields: 'email,name'\r\n }, (response) => {\r\n resolve(response as IFacebookUser);\r\n });\r\n });\r\n};\r\n\r\nexport const initFacebookForLogin = () => {\r\n window.fbAsyncInit = ()=> {\r\n\r\n // https://developers.facebook.com/docs/javascript/reference/FB.init/v18.0\r\n FB.init({\r\n appId : '546402627632636',\r\n cookie : true, // Enable cookies to allow the server to access the session.\r\n xfbml : true, // Parse social plugins on this webpage.\r\n version : 'v18.0', // Use this Graph API version for this call.\r\n status : false,\r\n });\r\n };\r\n\r\n (function(d, s, id){\r\n var js, fjs = d.getElementsByTagName(s)[0];\r\n if (d.getElementById(id)) {return;}\r\n js = d.createElement(s); js.id = id;\r\n // @ts-ignore\r\n js.src = 'https://connect.facebook.net/en_US/sdk.js';\r\n // @ts-ignore\r\n fjs.parentNode.insertBefore(js, fjs);\r\n }(document, 'script', 'facebook-jssdk'));\r\n};\r\n\r\n/** ------------------------------- Flows ---------------------------------------------- **/\r\n\r\n\r\nexport const facebookSingInOrSignUpFlow = async () : Promise => {\r\n try{\r\n const statusResponse = await checkFacebookLoginStatus();\r\n\r\n //console.log('statusResponse', statusResponse)\r\n\r\n if(statusResponse.status === 'connected' && !!statusResponse.authResponse) {\r\n\r\n return {\r\n status: EFacebookStatus.LoggedIn,\r\n accessToken: statusResponse.authResponse.accessToken,\r\n userID: statusResponse.authResponse.userID,\r\n };\r\n }\r\n\r\n const loginResponse = await facebookLogin();\r\n\r\n //console.log('loginResponse', loginResponse)\r\n if(loginResponse.status !== 'connected' || !loginResponse.authResponse){\r\n return {\r\n status: EFacebookStatus.Error,\r\n accessToken: '',\r\n userID: '',\r\n };\r\n }\r\n\r\n return {\r\n status: EFacebookStatus.LoggedIn,\r\n accessToken: loginResponse.authResponse.accessToken,\r\n userID: loginResponse.authResponse.userID,\r\n };\r\n }\r\n catch (ex){\r\n console.error(ex);\r\n return null;\r\n }\r\n};\r\n","/**\r\n * get boolean value from the hidden div\r\n */\r\nexport const getHiddenDataBoolean = (id: string) => {\r\n const $el = document.getElementById(id);\r\n if(!$el) return false;\r\n\r\n return $el.innerText.trim().toLowerCase() === 'true';\r\n};\r\n\r\n/**\r\n * get string value from the hidden div\r\n */\r\nexport const getHiddenDataString = (id: string) => {\r\n const $el = document.getElementById(id);\r\n if(!$el || !$el.innerText) return '';\r\n\r\n return $el.innerText.trim();\r\n};\r\n\r\n/**\r\n * get numeric value from the hidden div\r\n */\r\nexport const getHiddenDataNumber = (id: string) => {\r\n const $el = document.getElementById(id);\r\n if(!$el || !$el.innerText) return 0;\r\n\r\n return Number($el.innerText.trim()) || 0;\r\n};\r\n\r\n\r\n/**\r\n * is user authenticated\r\n */\r\nexport const getIsAuthenticated = () => {\r\n return getHiddenDataBoolean('is-user-authenticated');\r\n};\r\n\r\n/**\r\n * get waves user email printed in the hidden DIV\r\n */\r\nexport const getWavesUserEmail = () => {\r\n const $el = document.getElementById('waves-user-email');\r\n if(!$el || !$el.textContent) return '';\r\n return $el.textContent.trim();\r\n};\r\n\r\n/**\r\n * is china\r\n */\r\nexport const getIsChina = () => {\r\n return getHiddenDataBoolean('is-china');\r\n};\r\n\r\n/**\r\n * is Kentico environment\r\n */\r\nexport const getEnvironment = () => {\r\n return getHiddenDataString('kentico-environment');\r\n};","import { getEnvironment, getHiddenDataString } from '../hidden-data-provider';\r\n\r\n// this error is printed when google recaptcha script is not added to the master page,\r\n// site key is wrong in case of race condition between google and waves scripts\r\nconst NOT_DEFINED_ERR = 'Recaptcha is not defined.';\r\n\r\n// this error is printed when the hidden div with recaptcha key is missing\r\nconst SITE_KEY_ERR = 'Recaptcha site key is not printed in HTML.';\r\n\r\n// ------------------------- Recaptcha v3 --------------------------------------------\r\n\r\n/**\r\n * returns recaptcha site ket by its version\r\n */\r\nexport const getRecaptchaSiteKey = (version = 3) => {\r\n\r\n const env = getEnvironment();\r\n\r\n // recaptcha for automation\r\n // https://wavesaudio.atlassian.net/browse/DSWEB-540\r\n if(\r\n version !== 3 &&\r\n (env === 'dev' || env === 'test') &&\r\n navigator.userAgent &&\r\n navigator.userAgent.trim().startsWith('WavesSelenium')){\r\n return getHiddenDataString('recaptcha2-automation');\r\n }\r\n\r\n // The recaptcha code is taken from the following hidden DIVs:\r\n //
6LeG-IcUAAAAAIb42eguHdUztlZNcrLPhuk81WSM
\r\n //
6LftoDMUAAAAAC9QpaYXNehGHSu__XxRJyFAIgkJ
\r\n return getHiddenDataString(`recaptcha${version}`);\r\n}\r\n\r\n/**\r\n * recaptcha v3 should be executed on each action that should be protected\r\n * the following script should be added to each page:\r\n * \r\n * reCAPTCHA tokens expire after two minutes, make sure to call execute when the user takes the action rather than on page load\r\n * also we should ensure that grecaptcha.ready callback happened\r\n *\r\n * Usage:\r\n * await executeRecaptcha3()\r\n */\r\nexport const executeRecaptcha3 = () => {\r\n\r\n return new Promise((resolve, reject) => {\r\n\r\n if (!window.grecaptcha) {\r\n reject(NOT_DEFINED_ERR);\r\n return;\r\n }\r\n\r\n window.grecaptcha.ready(() => {\r\n window.grecaptcha.execute(getRecaptchaSiteKey(3), {action: 'submit'}).then(token => {\r\n resolve(token);\r\n });\r\n });\r\n });\r\n};\r\n\r\n/**\r\n * get recaptcha token\r\n * @param {number=} version of recaptcha\r\n * @return {string}\r\n */\r\nexport const getRecaptchaToken = async (version = 3) => {\r\n return version === 3 ? await executeRecaptcha3() : window.grecaptcha.getResponse();\r\n};\r\n\r\n// ------------------------- Recaptcha v2 --------------------------------------------\r\n\r\n/**\r\n * render recaptcha V2\r\n * containerID - the ID of an element that will contain recaptcha 2 HTML\r\n */\r\nexport const renderRecaptcha2 = (containerID: string) : Promise => {\r\n\r\n return new Promise((resolve, reject) => {\r\n\r\n if(!window.grecaptcha){\r\n reject(NOT_DEFINED_ERR);\r\n return;\r\n }\r\n\r\n const siteKeyV2 = getRecaptchaSiteKey(2);\r\n\r\n if(!siteKeyV2){\r\n reject(SITE_KEY_ERR);\r\n return;\r\n }\r\n\r\n window.grecaptcha.ready(() => {\r\n\r\n const widgetID = window.grecaptcha.render(containerID, {\r\n 'sitekey': siteKeyV2,\r\n //'badge': 'inline', //bottomright, bottomleft, inline\r\n //'size': 'invisible' //compact, normal, invisible\r\n });\r\n\r\n resolve(widgetID);\r\n });\r\n });\r\n};\r\n\r\n/**\r\n * reset recaptcha V2\r\n */\r\nexport const resetRecaptcha2 = () => {\r\n if(!window.grecaptcha) return;\r\n window.grecaptcha.reset();\r\n};\r\n\r\n\r\n/**\r\n * recaptcha 2 client side error\r\n */\r\nexport const getRecaptcha2Error = () => {\r\n return 'Please select the \"I\\'m not a robot\" checkbox.';\r\n};","/**\r\n * reCAPTCHA badge can be hidden, but reCAPTCHA branding should be included instead\r\n * https://developers.google.com/recaptcha/docs/faq#id-like-to-hide-the-recaptcha-badge.-what-is-allowed\r\n * @return {JSX.Element}\r\n */\r\nconst Recaptcha3Text = () => {\r\n\r\n return (\r\n
\r\n This site is protected by reCAPTCHA and the Google
Privacy Policy and Terms of Service apply.\r\n
\r\n );\r\n};\r\n\r\nexport default Recaptcha3Text;","import { KeyboardEvent, ClipboardEvent, useState, useEffect} from 'react';\r\nimport { resendActivationEmail, updateEmail } from '../../dal/data-provider';\r\nimport { IServerValidation } from '../../../../domain/validation/interfaces';\r\nimport ValidationErrors from '../../../../domain/validation/server-errors/validation-errors';\r\nimport {\r\n createControl,\r\n updateControl,\r\n validateForm,\r\n removeInvisibleCharsOnPaste,\r\n validateControl\r\n} from '../../../../domain/validation/validation';\r\nimport { getIsAuthenticated, getIsChina } from '../../../../domain/hidden-data-provider';\r\nimport LogoutScreen from '../../logout/logout-screen';\r\nimport { timeout } from '../../../../domain/common';\r\nimport { IFormControl } from '../../../../ui/forms/interfaces';\r\nimport FormBorder from '../../../../ui/forms/form-border';\r\nimport FormTextField from '../../../../ui/forms/fields/text-field';\r\nimport FormPreloader from '../../../../ui/forms/form-preloader';\r\nimport { getSimpleCaptchaValidationError } from '../../../../domain/captcha/simple-captcha';\r\nimport {\r\n getRecaptcha2Error,\r\n getRecaptchaToken,\r\n renderRecaptcha2,\r\n resetRecaptcha2\r\n} from '../../../../domain/captcha/recaptcha-provider';\r\nimport ChinaCaptchaField from '../../../../ui/forms/fields/captcha-china-field';\r\nimport Recaptcha3Text from '../../../../domain/captcha/recaptcha3-terms';\r\n\r\nconst TIMEOUT_MS = 3000;\r\n\r\nexport interface IAppData {\r\n userId: number,\r\n email: string,\r\n isCMS: boolean,\r\n}\r\n\r\ninterface IAppProps{\r\n data: IAppData|null,\r\n}\r\n\r\n/**\r\n * Activate Account App\r\n * @constructor\r\n */\r\nconst App = (props: IAppProps) => {\r\n\r\n const isUserAuth = getIsAuthenticated();\r\n const email = props?.data?.email;\r\n\r\n // validation ---------------------------------------\r\n const newEmailNameControl = createControl('new-email', email, {\r\n required: true,\r\n email: true,\r\n });\r\n\r\n const simpleCaptchaControl = createControl('simpleCaptcha', '', {\r\n required: true,\r\n requiredMessage: getSimpleCaptchaValidationError(),\r\n length: 5,\r\n });\r\n\r\n const [isUpdateEmailLoading, setIsUpdateEmailLoading] = useState(false);\r\n const [isResendEmailLoading, setIsResendEmailLoading] = useState(false);\r\n const [updateEmailResponse, setUpdateEmailResponse] = useState();\r\n const [resendEmailResponse, setResendEmailResponse] = useState();\r\n const [newEmail, setNewEmail] = useState(newEmailNameControl);\r\n const [isUpdateEmailFormVisible, setIsUpdateEmailFormVisible] = useState(false);\r\n const [okMessage, setOkMessage] = useState('');\r\n\r\n // simple captcha - used for china\r\n const isChina = getIsChina();\r\n const [simpleCaptchaCode, setSimpleCaptchaCode] = useState(simpleCaptchaControl);\r\n const [simpleCaptchaAttempts, setSimpleCaptchaAttempts] = useState(0);\r\n\r\n // google recaptcha version 2 & 3\r\n const [recaptchaVersion, setRecaptchaVersion] = useState(3);\r\n const [recaptcha2WidgetID, setRecaptcha2WidgetID] = useState(0);\r\n\r\n // captcha: common\r\n const [captchaError, setCaptchaError] = useState('');\r\n\r\n useEffect(() => {\r\n\r\n // if session is empty and doesn't contain registered user details -> redirect to login page\r\n if(props !== null && props.data !== null && props.data.email && !props.data.isCMS) return;\r\n\r\n // redirect to login page\r\n window.location.href = '/login';\r\n }, [props]);\r\n\r\n /**\r\n * if recaptcha 3 returns low score (the limit is defined in kentico settings),\r\n * then recaptcha 2 fallback should be rendered inside
\r\n */\r\n const renderCaptcha2Fallback = () => {\r\n if(!window.grecaptcha) return;\r\n\r\n window.grecaptcha.ready(async () => {\r\n const widgetID = await renderRecaptcha2('recaptcha');\r\n setRecaptcha2WidgetID(widgetID);\r\n });\r\n };\r\n\r\n /**\r\n * ok message\r\n */\r\n const getOkMessage = (email: string) => {\r\n return `An account activation link has been sent to ${ email }`;\r\n };\r\n\r\n /**\r\n * show OK message\r\n */\r\n const showMessage = async (email: string|undefined) => {\r\n if(!email) return;\r\n\r\n setOkMessage(getOkMessage(email!));\r\n await timeout(TIMEOUT_MS);\r\n setOkMessage('');\r\n };\r\n\r\n /**\r\n * resend activation email\r\n */\r\n const performResendActivationEmail = async () => {\r\n\r\n setResendEmailResponse(null);\r\n setUpdateEmailResponse(null);\r\n setOkMessage('');\r\n setCaptchaError('');\r\n\r\n // client side validation\r\n const isValid =\r\n isChina ?\r\n validateForm([\r\n [simpleCaptchaCode, setSimpleCaptchaCode],\r\n ]) : true;\r\n\r\n if(!isValid) return;\r\n\r\n setIsResendEmailLoading(true);\r\n\r\n let response = null;\r\n\r\n try {\r\n const captchaToken = !isChina ? await getRecaptchaToken(recaptchaVersion) : simpleCaptchaCode.value;\r\n\r\n if(!captchaToken){\r\n setCaptchaError(isChina ? getSimpleCaptchaValidationError() : getRecaptcha2Error());\r\n setIsResendEmailLoading(false);\r\n return;\r\n }\r\n\r\n response = await resendActivationEmail(captchaToken, recaptchaVersion);\r\n }\r\n catch(ex){}\r\n\r\n setIsResendEmailLoading(false);\r\n\r\n if(\r\n response &&\r\n response.statusCode === 200 &&\r\n response.data &&\r\n response.data.isValid){\r\n\r\n // all is well ---------------\r\n\r\n // show OK message\r\n showMessage(email);\r\n\r\n return;\r\n }\r\n\r\n // handle errors ---------\r\n setResendEmailResponse(response?.data);\r\n if(isChina){\r\n\r\n // re-render simple captcha\r\n setSimpleCaptchaAttempts(simpleCaptchaAttempts + 1);\r\n }\r\n else{\r\n if(response?.data.relatedData === 'recaptcha-error') {\r\n setRecaptchaVersion(2);\r\n renderCaptcha2Fallback();\r\n }\r\n\r\n if(recaptchaVersion === 2){\r\n resetRecaptcha2();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * update email\r\n */\r\n const performUpdateEmail = async () => {\r\n\r\n setResendEmailResponse(null);\r\n setUpdateEmailResponse(null);\r\n setOkMessage('');\r\n setCaptchaError('');\r\n\r\n // client side validation\r\n const isValid =\r\n isChina ?\r\n validateForm([\r\n [newEmail, setNewEmail],\r\n [simpleCaptchaCode, setSimpleCaptchaCode],\r\n ]) :\r\n validateForm([\r\n [newEmail, setNewEmail],\r\n ]);\r\n\r\n if(!isValid) return;\r\n\r\n setIsUpdateEmailLoading(true);\r\n\r\n let response = null;\r\n\r\n try {\r\n const captchaToken = !isChina ? await getRecaptchaToken(recaptchaVersion) : simpleCaptchaCode.value;\r\n\r\n if(!captchaToken){\r\n setCaptchaError(isChina ? getSimpleCaptchaValidationError() : getRecaptcha2Error());\r\n setIsUpdateEmailLoading(false);\r\n return;\r\n }\r\n\r\n response = await updateEmail(\r\n newEmail.value,\r\n captchaToken,\r\n recaptchaVersion,\r\n );\r\n }\r\n catch(ex){}\r\n\r\n setIsUpdateEmailLoading(false);\r\n\r\n if(\r\n response &&\r\n response.statusCode === 200 &&\r\n response.data &&\r\n response.data.isValid){\r\n\r\n // all is well ---------------\r\n\r\n // show OK message\r\n showMessage(newEmail.value);\r\n\r\n return;\r\n }\r\n\r\n // handle errors ---------\r\n setUpdateEmailResponse(response?.data);\r\n\r\n if(isChina){\r\n\r\n // re-render simple captcha\r\n setSimpleCaptchaAttempts(simpleCaptchaAttempts + 1);\r\n }\r\n else{\r\n if(response?.data.relatedData === 'recaptcha-error') {\r\n setRecaptchaVersion(2);\r\n renderCaptcha2Fallback();\r\n }\r\n\r\n if(recaptchaVersion === 2){\r\n resetRecaptcha2();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * and enter / return keys\r\n */\r\n const handleEnter = async (evt: KeyboardEvent) => {\r\n if(evt.key === 'Enter') {\r\n await performUpdateEmail();\r\n }\r\n };\r\n\r\n /**\r\n * empty errors on click\r\n */\r\n const handleFieldClick = () =>{\r\n setResendEmailResponse(null);\r\n setUpdateEmailResponse(null);\r\n setOkMessage('');\r\n setCaptchaError('');\r\n };\r\n\r\n /**\r\n * on 'update form visibility' button click\r\n */\r\n const handleUpdateEmailVisibleClick = () => {\r\n setIsUpdateEmailFormVisible(isVisible => {\r\n return !isVisible;\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n {\r\n !isUserAuth &&\r\n \r\n
\r\n

Just one more step...

\r\n

To activate your account, click the link in the email we've sent to:

\r\n

{ email }

\r\n\r\n {\r\n /* ------------- google recaptcha version 2 or 3 ------------- */\r\n !isChina &&\r\n
\r\n }\r\n\r\n {\r\n /* ------------- china simple captcha ------------- */\r\n isChina &&\r\n \r\n }\r\n\r\n

Didn't receive the email?

\r\n

Click to resend the activation email

\r\n\r\n {\r\n isResendEmailLoading &&
\r\n \r\n
\r\n }\r\n\r\n {\r\n resendEmailResponse && !resendEmailResponse.isValid && (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n\r\n

Wrong email address?

\r\n

Enter the correct email

\r\n
\r\n\r\n {\r\n isUpdateEmailFormVisible &&\r\n <>\r\n {\r\n const $target = evt.target as HTMLInputElement;\r\n setNewEmail(updateControl(newEmail, $target.value, !newEmail.isValid));\r\n setUpdateEmailResponse(null); // empty server error\r\n setResendEmailResponse(null);\r\n setCaptchaError('');\r\n }}\r\n onBlur={ evt => {\r\n setNewEmail(validateControl(newEmail));\r\n }}\r\n onClick={ handleFieldClick }\r\n onKeyUp={ handleEnter }\r\n onPaste={ (evt: ClipboardEvent) => {\r\n setNewEmail(updateControl(newEmail, removeInvisibleCharsOnPaste(evt)));\r\n }}\r\n />\r\n\r\n
\r\n\r\n { isUpdateEmailLoading && }\r\n\r\n {\r\n !isUpdateEmailLoading &&\r\n {\r\n await performUpdateEmail();\r\n }}\r\n >Update Email\r\n }\r\n
\r\n\r\n {\r\n updateEmailResponse && !updateEmailResponse.isValid && (\r\n
\r\n \r\n
\r\n )\r\n }\r\n \r\n }\r\n\r\n {\r\n okMessage &&\r\n
{ okMessage }
\r\n }\r\n\r\n {\r\n captchaError &&\r\n
{ captchaError }
\r\n }\r\n\r\n {\r\n !isChina && recaptchaVersion === 3 &&\r\n
\r\n \r\n
\r\n }\r\n\r\n \r\n }\r\n\r\n { isUserAuth && }\r\n \r\n\r\n )\r\n};\r\n\r\nexport default App;","const __WEBPACK_NAMESPACE_OBJECT__ = ReactDOM;","import App from './app/app';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport { IAppData } from './app/app';\r\n\r\n/**\r\n * entry point\r\n */\r\nconst init = () => {\r\n const $root = document.getElementById('membership-activate-account-app');\r\n if (!$root) return;\r\n\r\n const $json = document.getElementById('activate-account-json-data');\r\n if(!$json) return;\r\n\r\n let json = null;\r\n\r\n try{\r\n const content = $json.textContent;\r\n json = content == null ? null : JSON.parse(content) as IAppData;\r\n }\r\n catch(ex){}\r\n\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n $root\r\n );\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n init();\r\n});\r\n\r\nexport {};"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","React","post","async","url","data","response","fetch","method","headers","body","JSON","stringify","status","window","location","href","ifShouldDenyOnReadOnly","Error","json","statusCode","ProductDepartmentEnum","LastPaymentOption","PaymentTabsEnum","CreditCardServiceEnum","CreditCardTabTabsEnum","_defineProperty","value","configurable","writable","defaultMessages","createControl","id","initialValue","rules","touched","isValid","error","validateControl","control","updatedControl","required","_value","trim","requiredMessage","handle","re","RegExp","toString","test","handleMessage","minlength","length","minlengthMessage","replace","maxlength","maxlengthMessage","lengthMessage","undefined","decimalPlaces","Number","isInteger","num","match","Math","max","getDecimalPlaces","decimalPlacesMessage","email","indexOf","emailMessage","name","nameMessage","password","regexes","r","passwordMessage","regex","regexMessage","phone","intRegex","onlyZerosRegex","phoneMessage","number","isNumeric","isNaN","parseFloat","isFinite","numberMessage","int","intMessage","minDate","min","Date","minDateMessage","maxDate","maxDateMessage","maxValue","maxValueMessage","minValue","minValueMessage","general","generalMessage","atLeastOneDigit","atLeastOneDigitMessage","validateForm","params","errorControlsListHolder","i","param","setControl","push","updateControl","updatedValue","validate","reset","invisibleCharactersRegex","e","this","message","n","ExternalLoginServiceEnum","atob","bind","props","hasErrors","errors","defaultError","qa","map","dangerouslySetInnerHTML","__html","role","xmlns","viewBox","width","height","title","fill","color","getChinaCaptchaTimestamp","getTime","getSrc","timestamp","index","src","setSrc","useState","simpleCaptchaAttempts","refresh","useCallback","useEffect","className","style","alt","type","onClick","simpleCaptchaCode","onChange","evt","setSimpleCaptchaCode","target","classes","fillRule","isLoading","setIsLoading","maxWidth","text","logout","ex","console","log","reload","performLogout","endsWith","viewPortWidth","viewPortHeight","widthNum","getSVGHeight","controlRef","useRef","isPasswordVisible","setIsPasswordVisible","focus","current","rootClasses","textBoxClasses","maxLength","onBlur","onKeyUp","onPaste","ref","disabled","htmlFor","label","val","comment","qaError","children","EFacebookStatus","ExternalLoginResultStatusCode","CartSteps","ILoginReferrer","sessionStorage","removeItem","google","accounts","disableAutoSelect","localStorage","startsWith","Promise","resolve","_reject","FB","facebookLogOut","getHiddenDataBoolean","$el","document","getElementById","innerText","toLowerCase","getHiddenDataString","NOT_DEFINED_ERR","getRecaptchaSiteKey","version","env","navigator","userAgent","getRecaptchaToken","reject","grecaptcha","ready","execute","action","then","token","getResponse","resetRecaptcha2","rel","isUserAuth","newEmailNameControl","simpleCaptchaControl","isUpdateEmailLoading","setIsUpdateEmailLoading","isResendEmailLoading","setIsResendEmailLoading","updateEmailResponse","setUpdateEmailResponse","resendEmailResponse","setResendEmailResponse","newEmail","setNewEmail","isUpdateEmailFormVisible","setIsUpdateEmailFormVisible","okMessage","setOkMessage","isChina","setSimpleCaptchaAttempts","recaptchaVersion","setRecaptchaVersion","recaptcha2WidgetID","setRecaptcha2WidgetID","captchaError","setCaptchaError","isCMS","renderCaptcha2Fallback","widgetID","siteKeyV2","render","showMessage","getOkMessage","setTimeout","performUpdateEmail","captchaToken","captchaCode","updateEmail","relatedData","resendActivationEmail","isVisible","$target","preventDefault","currentFieldValue","clipboardData","getData","pasteText","substring","selectionStart","selectionEnd","removeInvisibleCharsOnPaste","ReactDOM","addEventListener","$root","$json","content","textContent","parse","init"],"sourceRoot":""}