{"version":3,"file":"chunks-75330cbe70226a2a/apps_web-tracking_easystore_src_index_js.d426823c968e09ad.js?t=1741497828074","mappings":"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","sources":["webpack://assemble/./apps/common/constants/index.js","webpack://assemble/./apps/common/utils/index.js","webpack://assemble/./apps/web-tracking/easystore/src/Utils.js","webpack://assemble/./apps/web-tracking/easystore/src/index.js"],"sourcesContent":["\nexport const API_VERSION = \"v2\";\nexport const ICON_SET_BOX= \"box\";\nexport const ICON_SET_BLUEPRINT = \"bp\";\nexport const ICON_SET_FONTAWESOME = \"fa\";\n\nexport const DESERIALIZE_TYPE_OBJECT = \"OBJECT\";\nexport const DESERIALIZE_TYPE_ARRAY_OBJECTS = \"ARRAY_OBJECTS\";\nexport const DESERIALIZE_TYPE_CUSTOM = \"CUSTOM\";\n\nexport const COOKIE_EXPIRES_DAYS = 365;\n\nexport const COOKIE_ID = \"ov_cookie_id\";\nexport const COOKIE_CONTACT_ID = \"ov_contact_id\";\n\nexport const COOKIE_REVIEWS_UPVOTED = \"ov_reviews_upvoted\";\nexport const COOKIE_BACKINSTOCK_VISITOR_ID = \"ov_backinstock_visitor_id\";\n\nexport const COOKIE_PROMPT_SESSION_NUM_VIEWED_PAGES = \"ov_prompt_session_num_viewed_pages\";\nexport const COOKIE_PROMPT_SESSION_VISITOR_TYPE = \"ov_prompt_session_visitor_type\";\nexport const COOKIE_PROMPT_SESSION_FIRST_SEEN = \"ov_prompt_session_first_seen\";\nexport const COOKIE_PROMPT_VISITOR_ID = \"ov_prompt_visitor_id\";\nexport const COOKIE_PROMPT_LAST_SEEN = \"ov_prompt_last_seen\";\n\n\n\n","import axios from 'axios';\nimport get from 'lodash/get';\nimport ldIsEmpty from 'lodash/isEmpty';\nimport queryString from 'query-string';\nimport { customAlphabet } from 'nanoid';\nimport dictionary from 'nanoid-dictionary';\nimport * as constants from 'common/constants';\n\n\nexport function isProduction() {\n if (process.env.NODE_ENV === 'production') {\n return true;\n } else {\n return false;\n }\n}\n\nexport function isPreview() {\n if (typeof IS_PREVIEW !== 'undefined' && IS_PREVIEW) return true;\n return false;\n}\n\nexport function isClientProduction() {\n if (isProduction() && !isPreview()) return true;\n return false;\n}\n\nexport function getEcommercePlatform() {\n let ovData = window.OnVoardData;\n if (!ovData) return;\n return ovData.ecommerce_platform;\n}\n\nexport function getPlatformIdentifierForEngagement() {\n let platform = getEcommercePlatform();\n if (platform === 'bigcommerce') return window.OnVoardData.store_hash;\n if (platform === 'easystore') return window.OnVoardData.shop.domain;\n if (platform === 'shopify' && window.OnVoardData) return window.OnVoardData.shop.myshopify_domain;\n if (platform === 'shopline') return window.Shopline.storeId;\n if (platform === 'shopware') return window.OnVoardData.app_shop_id;\n if (platform === 'wix') return window.OnVoardData.account_id;\n if (platform === 'woocommerce') return window.location.hostname;\n return;\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined';\n}\n\n// https://stackoverflow.com/a/26824304/1446284\nexport function isInt(val) {\n var expression = /^[0-9]+$/;\n return expression.test(val);\n}\n\n// https://stackoverflow.com/a/9716488/1446284\nexport function isNumeric(val) {\n return !isNaN(parseFloat(val)) && isFinite(val);\n}\n\nexport function isBoolean(value) {\n return typeof value === 'boolean';\n}\n\nexport function isString(val) {\n return typeof val === 'string';\n}\n\nexport function isFunction(val) {\n return typeof val === 'function';\n}\n\nexport function isArray(val) {\n return Array.isArray(val);\n}\n\nexport function isObject(val) {\n return (!!val) && (val.constructor === Object);\n}\n\nexport function isEmpty(val) {\n return ldIsEmpty(val);\n}\n\nexport function stringContains(string, subString) {\n return string.indexOf(subString) !== -1;\n}\n\n// Use jquery's `inArray` to check if value is in array.\n// Will return boolean instead of value index\nexport function inArray(item, arrayList) {\n if ($.inArray(item, arrayList) !== -1) return true;\n return false;\n}\n\nexport function loopObject(object, callback) {\n for (var k in object) {\n let v = object[k];\n callback(k, v);\n }\n}\n\nexport function getRandomInt(max) {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\nexport function generateHash(length=16) {\n return [...Array(length)].map(() => Math.random().toString(36)[2]).join('');\n}\n\nexport function formatAmount(amount) {\n amount = amount.toString();\n amount = amount.replace(/[^0-9.-]/g, '');\n amount = parseFloat(amount);\n return amount;\n}\n\nexport function isMobileScreen() {\n if (!isBrowser()) return;\n var screenWidth = window.screen.width;\n var screenHeight = window.screen.height;\n return screenWidth >= 768 ? false : true;\n}\n\n// In seconds precision\nexport function getCurrentTimestamp() {\n return Math.floor(Date.now() / 1000);\n}\n\nexport function currentURL() {\n if (!isBrowser()) return;\n return window.location.href;\n}\n\nexport function currentURLWithoutParams() {\n if (!isBrowser()) return;\n return window.location.protocol + '//' + window.location.host + window.location.pathname;\n}\n\nexport function currentDomain() {\n if (!isBrowser()) return;\n return window.location.hostname;\n}\n\nexport function currentURLPath() {\n if (!isBrowser()) return;\n return window.location.pathname;\n}\n\nexport function getScrollPercent() {\n if (!isBrowser()) return;\n const h = document.documentElement;\n const b = document.body;\n const st = 'scrollTop';\n const sh = 'scrollHeight';\n return (h[st]||b[st]) / ((h[sh]||b[sh]) - h.clientHeight) * 100;\n}\n\n\nexport function appendQueryString(url, qs) {\n const parsed = queryString.parseUrl(url);\n qs = {...parsed.query, ...qs};\n\n Object.keys(qs).forEach((key) => (qs[key] === null || qs[key] === \"\") && delete qs[key]);\n let stringified = queryString.stringify(qs);\n if (!stringified) {\n return url;\n } else {\n return url + \"?\" + stringified;\n }\n}\n\n// {url: 'https://foo.bar', query: {foo: 'bar'}}\nexport function parseUrl(url) {\n return queryString.parseUrl(url);\n}\n\n// {foo: 'bar'}\nexport function parseQueryString(val) {\n return queryString.parse(val);\n}\n\nexport function removeQueryString(url) {\n return url.split(\"?\")[0];\n}\n\n// Scroll to top of element. Useful when you are using scrollable elements\nexport function scrollElementTop(el) {\n el.scrollTop = el.scrollHeight;\n\n setTimeout(() => {\n el.scrollTop = 0;\n }, 100);\n}\n\nexport function getCssValueForSelector(selector, propKey) {\n if (!isBrowser()) return;\n const el = document.querySelector(selector);\n if (!el) return;\n\n style = window.getComputedStyle(el);\n return style.getPropertyValue(propKey);\n}\n\nexport function attachUrlChangeEvent() {\n if (window.OV_ATTACHED_URL_CHANGE_EVENT) return null;\n\n let platform = getEcommercePlatform();\n\n // shopline need this to detect\n // https://phpcoder.tech/detect-url-change-in-javascript-without-refresh/\n if (platform === 'shopline') {\n let lastUrl = location.href;\n new MutationObserver(() => {\n const url = location.href;\n if (url !== lastUrl) {\n lastUrl = url;\n window.dispatchEvent(new Event('ovurlchange'));\n }\n }).observe(document, {subtree: true, childList: true});\n\n window.OV_ATTACHED_URL_CHANGE_EVENT = 1;\n return;\n }\n\n // See https://stackoverflow.com/a/52809105/1446284\n history.pushState = (f => function pushState(){\n var ret = f.apply(this, arguments);\n window.dispatchEvent(new Event('pushstate'));\n window.dispatchEvent(new Event('ovurlchange'));\n return ret;\n })(history.pushState);\n\n history.replaceState = (f => function replaceState(){\n var ret = f.apply(this, arguments);\n window.dispatchEvent(new Event('replacestate'));\n window.dispatchEvent(new Event('ovurlchange'));\n return ret;\n })(history.replaceState);\n\n window.addEventListener('popstate', () => {\n window.dispatchEvent(new Event('ovurlchange'))\n });\n\n window.OV_ATTACHED_URL_CHANGE_EVENT = 1;\n}\n\nexport function attachHashChangeEvent() {\n if (window.OV_ATTACHED_HASH_CHANGE_EVENT) return null;\n\n window.addEventListener('hashchange', () => {\n window.dispatchEvent(new Event('ovhashchange'))\n });\n\n window.OV_ATTACHED_HASH_CHANGE_EVENT = 1;\n}\n\n// See https://stackoverflow.com/a/43467144/1446284\nexport function isValidUrl(value) {\n if (!value) return false;\n if (value.startsWith(\"//\")) value = value.replace(\"//\", \"https://\");\n if (!value.startsWith(\"http://\") && !value.startsWith(\"https://\")) {\n value = `http://${value}`\n }\n\n let url;\n try {\n url = new URL(value);\n } catch (_) {\n return false;\n }\n\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n}\n\n// https://gist.github.com/ManUtopiK/469aec75b655d6a4d912aeb3b75af3c9\nexport function cleanGraphQLResponse(input) {\n if (!input) return null\n const output = {}\n const isObject = obj => {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n }\n\n Object.keys(input).forEach(key => {\n if (input[key] && input[key].edges) {\n output[key] = input[key].edges.map(edge =>\n cleanGraphQLResponse(edge.node)\n )\n } else if (isObject(input[key])) {\n output[key] = cleanGraphQLResponse(input[key])\n } else if (key !== '__typename') {\n output[key] = input[key]\n }\n })\n\n return output\n}\n\n\nconst requestAnimFrame = (function() {\n if (window.requestAnimationFrame) return window.requestAnimationFrame;\n return (callback, element) => window.setTimeout(callback, 1000 / 60);\n})();\n\n// See https://gist.github.com/joelambert/1002116\nexport function requestInterval(fn, delay) {\n if(!window.requestAnimationFrame) return window.setInterval(fn, delay);\n\n let start = new Date().getTime();\n let handle = new Object();\n\n function loop() {\n var current = new Date().getTime(),\n delta = current - start;\n\n if(delta >= delay) {\n fn.call();\n start = new Date().getTime();\n }\n\n handle.value = requestAnimFrame(loop);\n };\n\n handle.value = requestAnimFrame(loop);\n return handle;\n}\n\n\n// See https://gist.github.com/joelambert/1002116\nexport function clearRequestInterval(handle) {\n if (window.cancelAnimationFrame) window.cancelAnimationFrame(handle.value);\n clearInterval(handle);\n}\n\nexport function stringifyError(error) {\n try {\n error = JSON.stringify(error);\n } catch {}\n return error;\n}\n\nexport function printErrors(errors) {\n if (isArray(errors)) {\n errors.forEach((error) => {\n console.log(error);\n });\n\n return;\n }\n\n if (isObject(errors)) {\n for (let [key, value] of Object.entries(errors)) {\n console.log(`${key}: ${value}`);\n }\n\n return;\n }\n\n console.log(errors);\n}\n\n\n//===================================================\n// interceptRequests\n//===================================================\n// https://gist.github.com/sergeimuller/a609a9df7d30e2625a177123797471e2\nfunction replaceXHROpen(interceptPaths, callback) {\n let oldXHROpen = window.XMLHttpRequest.prototype.open;\n window.XMLHttpRequest.prototype.open = function(method, url, async, user, password) {\n this.addEventListener('load', function() {\n if (!interceptPaths.some((path) => url.includes(path))) return;\n\n // Can't guarantee response is always json\n callback(this.response, url);\n });\n\n oldXHROpen.apply(this, arguments);\n }\n\n // required because some apps or themes mess jQuery up and causing unexpected issues\n try {\n if (window.jQuery) {\n jQuery(document).ajaxSuccess(function(event, xhr, settings) {\n if (!interceptPaths.some((path) => settings.url.includes(path))) return;\n\n // Can't guarantee response is always json\n callback(xhr.responseText, settings.url);\n });\n }\n } catch(e) {}\n}\n\n// https://stackoverflow.com/a/64961272/1446284\nfunction replaceFetch(interceptPaths, callback) {\n let oldFetch = window.fetch;\n window.fetch = async (...args) => {\n const reqUrl = args[0];\n const response = await oldFetch(...args);\n if (!reqUrl || !interceptPaths.some((path) => reqUrl.includes(path))) return response;\n\n // Can't guarantee response is always json\n response\n .clone()\n .text()\n .then((textResponse) => {\n callback(textResponse, reqUrl);\n })\n .catch((err) => {\n console.error(err);\n })\n\n return response;\n }\n}\n\n\nexport function interceptRequests(interceptPaths, callback) {\n if (getEcommercePlatform() === 'shopline' && window.__AJAX_INTERCEPTOR__) {\n window.__AJAX_INTERCEPTOR__((data) => {\n if (data.method !== 'GET') return;\n if (!interceptPaths.some((path) => data.url.includes(path))) return;\n\n // Can't guarantee response is always json\n callback(data.xhr.responseText, data.url);\n });\n }\n\n replaceXHROpen(interceptPaths, callback);\n replaceFetch(interceptPaths, callback);\n}\n\n\n//===================================================\n// API Utils\n//===================================================\nexport function handleErrorCallback(error, errorCallback) {\n if (error.response) {\n if (error.response.status === 500) {\n errorCallback(\"Server error 500. This error indicates that there are some issues on our end.\");\n return;\n }\n\n if (error.response.data) {\n if (error.response.data.errors && Array.isArray(error.response.data.errors)) {\n errorCallback(error.response.data.errors.join(\"\\n\"));\n return;\n }\n\n errorCallback(error.response.data);\n return;\n }\n }\n\n errorCallback(error.message);\n}\n\nexport function handleRqSuccess(response, successCallback) {\n successCallback(response.data);\n};\n\n\nexport function handleRqError(error, errorCallback) {\n handleErrorCallback(error, errorCallback);\n};\n\n\nexport function getRq(kwargs) {\n const config = {};\n config['method'] = 'get';\n config['url'] = kwargs.url;\n if (kwargs.headers) config['headers'] = kwargs.headers;\n\n axios(config)\n .then((response) => handleRqSuccess(response, kwargs.successCallback))\n .catch((error) => handleRqError(error, kwargs.errorCallback));\n};\n\nexport function postRq(kwargs) {\n const config = {};\n config['method'] = 'post';\n config['url'] = kwargs.url;\n config['data'] = kwargs.data || \"{}\";\n if (kwargs.headers) config['headers'] = kwargs.headers;\n\n axios(config)\n .then((response) => handleRqSuccess(response, kwargs.successCallback))\n .catch((error) => handleRqError(error, kwargs.errorCallback));\n};\n\nexport function buildUrl(path, qs={}) {\n return appendQueryString(`${BASE_API_URL}/${constants.API_VERSION}/${path}`, qs);\n}\n\nexport function uniqueId(prefix='', length=16) {\n const generator = customAlphabet(dictionary.alphanumeric, length);\n let id = generator();\n if (prefix) id = `${prefix}${id}`;\n return id;\n}\n\n// https://github.com/scopsy/await-to-js\nexport function to(promise) {\n return promise.then(data => {\n return [null, data];\n })\n .catch(err => [err]);\n}\n","import * as constants from 'Constants';\nimport * as comUtils from \"common/utils\";\nexport * from \"common/utils\";\n\n\nexport function convertRate(amt, exchangeRate) {\n amt = comUtils.formatAmount(amt);\n let convertedAmt = amt*parseFloat(exchangeRate);\n\n // round to 2 decimal float\n convertedAmt = Number(convertedAmt.toFixed(2));\n\n // round off to nearest 5 cents\n convertedAmt = (Math.round(convertedAmt*20)/20).toFixed(2);\n return convertedAmt;\n}\n","import * as constants from './Constants';\nimport * as utils from './Utils';\n\n\n//====================================\n// Identify\n//====================================\nfunction identify(data) {\n const cart = data.cart;\n const bDetails = cart.billing_address;\n const customer = data.customer;\n\n const contactData = {};\n if (customer) {\n if (customer.email) contactData[\"email\"] = customer.email;\n if (customer.name) contactData[\"name\"] = customer.name;\n if (customer.phone) contactData[\"phone\"] = customer.phone;\n }\n\n if (utils.isEmpty(contactData) && bDetails) {\n if (bDetails.email) contactData[\"email\"] = bDetails.email;\n if (bDetails.first_name && bDetails.last_name) contactData[\"name\"] = `${bDetails.first_name} ${bDetails.last_name}`;\n if (bDetails.phone) contactData[\"phone\"] = bDetails.phone;\n }\n\n if (utils.isEmpty(contactData)) return;\n window.OnVoard('web_tracking', 'identify', contactData);\n}\n\n\n\n//====================================\n// Checkout Started\n//====================================\nfunction getCheckoutStartedData() {\n if (!window.EasyStore || !window.EasyStore.Checkout || !window.EasyStore.Checkout.data) return;\n if (!window.OnVoardData || !window.OnVoardData.shop) return;\n\n const shop = window.OnVoardData.shop;\n let data = window.EasyStore.Checkout.data;\n let checkout = data.checkout;\n if (!checkout.line_items || checkout.line_items.length === 0) return;\n\n let exchangeRate = checkout.currency_rate || checkout.currency.rate;\n exchangeRate = parseFloat(1)/parseFloat(exchangeRate);\n\n var payload = {};\n payload[\"checkout_id\"] = `${checkout.id}`;\n payload[\"token\"] = checkout.token;\n payload[\"currency\"] = shop.currency;\n payload[\"total_price\"] = utils.convertRate(checkout.total_price, exchangeRate);\n payload[\"cart_url\"] = `${window.location.protocol}//${window.location.host}/cart/${checkout.cart_token}/recover?key=${checkout.token}`;\n\n // Note:\n // url and compare_at_price is not provided in cart product.\n const products = []\n checkout.line_items.forEach((item) => {\n products.push({\n \"id\": `${item.product_id}`,\n \"name\": item.product_name,\n \"price\": utils.convertRate(item.price, exchangeRate),\n \"quantity\": item.quantity,\n \"variant_id\": `${item.variant_id}`,\n \"variant_name\": item.variant_name,\n \"sku\": item.sku,\n \"image_url\": utils.isValidUrl(item.image_url) ? item.image_url : null,\n })\n })\n\n payload[\"products\"] = products;\n return payload;\n}\n\nfunction extractEmailFromCheckout() {\n if (!window.EasyStore || !window.EasyStore.Checkout || !window.EasyStore.Checkout.data) return;\n\n let data = window.EasyStore.Checkout.data;\n let checkout = data.checkout;\n let billing = checkout.billing_address;\n let shipping = checkout.shipping_address;\n\n if (billing && billing.email) return billing.email;\n if (shipping && shipping.email) return shipping.email;\n return;\n}\n\nfunction extractNameFromCheckout() {\n if (!window.EasyStore || !window.EasyStore.Checkout || !window.EasyStore.Checkout.data) return;\n\n let data = window.EasyStore.Checkout.data;\n let checkout = data.checkout;\n let billing = checkout.billing_address;\n let shipping = checkout.shipping_address;\n\n if (billing && billing.first_name && billing.last_name) return `${billing.first_name} ${billing.last_name}`;\n if (shipping && shipping.first_name && shipping.last_name) return `${shipping.first_name} ${shipping.last_name}`;\n return;\n}\n\nfunction extractPhoneFromCheckout() {\n if (!window.EasyStore || !window.EasyStore.Checkout || !window.EasyStore.Checkout.data) return;\n\n let data = window.EasyStore.Checkout.data;\n let checkout = data.checkout;\n let billing = checkout.billing_address;\n let shipping = checkout.shipping_address;\n\n if (billing && billing.phone) return billing.phone;\n if (shipping && shipping.phone) return shipping.phone;\n return;\n}\n\nfunction generateCheckoutStartedPayload() {\n let recordData = getCheckoutStartedData();\n if (!recordData) return;\n\n let email = extractEmailFromCheckout();\n if (!email) return;\n\n const webTrackingId = getWebTrackingToken();\n if (!webTrackingId) {\n console.error(\"Missing web tracking token\");\n return;\n }\n\n const payload = {};\n payload['web_tracking_id'] = webTrackingId;\n payload['email'] = email;\n payload['activity'] = 'easystore.checkout_started';\n payload['record_data'] = recordData;\n\n let name = extractNameFromCheckout();\n let phone = extractPhoneFromCheckout();\n\n if (name) payload['name'] = name;\n if (phone) payload['phone'] = phone;\n return payload;\n}\n\nfunction getWebTrackingToken() {\n const el = document.querySelector(\".ov-app-web-tracking\");\n if (!el) return;\n return el.getAttribute('data-token');\n}\n\nfunction trackCheckoutStarted(data) {\n const template = data.template;\n const customer = data.customer;\n\n const eligibleTemplates = [\n \"customer_info\",\n \"checkout_single_page\",\n \"shipping_method\",\n \"checkout_payment\",\n ];\n\n if (!eligibleTemplates.includes(template)) return;\n\n // if user is logged in\n if (customer.email) {\n let recordData = getCheckoutStartedData(data);\n if (!recordData) return;\n window.OnVoard('web_tracking', 'track', 'easystore.checkout_started', recordData);\n return;\n }\n\n // if user is not logged in\n if (!customer || !customer.email) {\n // Fire checkout started. Need sent everything in one-request since we're sending on page unload\n if (!window.OnVoardAddedScripts.easystoreTrackCheckoutStarted) {\n window.OnVoardAddedScripts.easystoreTrackCheckoutStarted = true;\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n const payload = generateCheckoutStartedPayload(data);\n if (!payload) return;\n\n const url = utils.buildUrl(`track-checkout-started`);\n navigator.sendBeacon(url, JSON.stringify(payload));\n }\n });\n }\n }\n}\n\n//====================================\n// Product Viewed\n//====================================\n// Prices shown on product page is based on shop's default currency\nfunction trackProductViewed(data) {\n const template = data.template;\n const shop = data.shop;\n const product = data.product;\n\n const eligibleTemplates = [\n \"product\",\n ];\n\n if (!eligibleTemplates.includes(template)) return;\n if (!product.id) return;\n\n var payload = {};\n payload[\"product_id\"] = product.id;\n payload[\"title\"] = product.title;\n payload[\"name\"] = product.title;\n payload[\"handle\"] = product.handle;\n payload[\"currency\"] = shop.currency;\n payload[\"url\"] = `${window.location.protocol}//${window.location.host}${product.url}`;\n payload[\"image_url\"] = utils.isValidUrl(product.img_url) ? product.img_url : null;\n\n const price = utils.formatAmount(product.price);\n let compareAtPrice = utils.formatAmount(product.compare_at_price);\n payload[\"price\"] = price;\n payload[\"compare_at_price\"] = price && compareAtPrice && compareAtPrice > price ? compareAtPrice : null;\n\n window.OnVoard('web_tracking', 'track', 'easystore.product_viewed', payload);\n}\n\n//====================================\n// Cart Item Added\n//====================================\nfunction generateCartItemAddedPayload() {\n let data = window.OnVoardData;\n const template = data.template;\n const shop = data.shop;\n const product = data.product;\n\n const eligibleTemplates = [\n \"product\",\n ];\n\n if (!eligibleTemplates.includes(template)) return;\n if (!product.id) return;\n\n var payload = {};\n payload[\"product_id\"] = product.id;\n payload[\"title\"] = product.title;\n payload[\"name\"] = product.title;\n payload[\"handle\"] = product.handle;\n payload[\"currency\"] = shop.currency;\n payload[\"url\"] = `${window.location.protocol}//${window.location.host}${product.url}`;\n payload[\"image_url\"] = utils.isValidUrl(product.img_url) ? product.img_url : null;\n\n const price = utils.formatAmount(product.price);\n let compareAtPrice = utils.formatAmount(product.compare_at_price);\n payload[\"price\"] = price;\n payload[\"compare_at_price\"] = price && compareAtPrice && compareAtPrice > price ? compareAtPrice : null;\n return payload\n}\n\n// Prices shown on product page is based on shop's default currency\nfunction trackCartItemAdded(data) {\n const template = data.template;\n const shop = data.shop;\n const product = data.product;\n\n const eligibleTemplates = [\n \"product\",\n ];\n\n if (!eligibleTemplates.includes(template)) return;\n if (!product.id) return;\n\n if (!window.OnVoardAddedScripts.easyStoreTrackCartItemAdded) {\n window.OnVoardAddedScripts.easyStoreTrackCartItemAdded = true;\n\n document.getElementById(\"AddToCart\").addEventListener('click', (evt) => {\n let payload = generateCartItemAddedPayload();\n if (!payload) return;\n window.OnVoard('web_tracking', 'track', 'easystore.cart_item_added', payload);\n });\n\n document.getElementById(\"MobileAddToCart\").addEventListener('click', (evt) => {\n let payload = generateCartItemAddedPayload();\n if (!payload) return;\n window.OnVoard('web_tracking', 'track', 'easystore.cart_item_added', payload);\n });\n }\n}\n\n\nfunction getHandler() {\n const handler = {};\n handler.identify = function(data) {\n identify(data);\n };\n\n handler.trackCheckoutStarted = function(data) {\n trackCheckoutStarted(data);\n };\n\n handler.trackProductViewed = function(data) {\n trackProductViewed(data);\n };\n\n handler.trackCartItemAdded = function(data) {\n trackCartItemAdded(data);\n };\n\n return handler;\n}\n\n\nfunction process(args) {\n const handler = getHandler();\n var params = [].slice.call(args);\n var ns = params.shift();\n var method = params.shift();\n\n // web_tracking_easystore namespace\n if (ns === \"web_tracking_easystore\") {\n if (handler[method]) {\n handler[method].apply(handler, params);\n } else {\n console.log(`web_tracking_easystore does not have a ${method} method`);\n }\n }\n};\n\n\n\nexport function processTracking() {\n // process queued function calls\n const queue = window.OnVoardQueue.webTrackingEasyStore || [];\n for (var i in queue) {\n process(queue[i]);\n }\n\n // setup api endpoint after everything is ready\n window.OnVoardApi.webTrackingEasyStore = function(args) {\n process(args);\n };\n}\n\n\n"],"names":["API_VERSION","ICON_SET_BOX","ICON_SET_BLUEPRINT","ICON_SET_FONTAWESOME","DESERIALIZE_TYPE_OBJECT","DESERIALIZE_TYPE_ARRAY_OBJECTS","DESERIALIZE_TYPE_CUSTOM","COOKIE_EXPIRES_DAYS","COOKIE_ID","COOKIE_CONTACT_ID","COOKIE_REVIEWS_UPVOTED","COOKIE_BACKINSTOCK_VISITOR_ID","COOKIE_PROMPT_SESSION_NUM_VIEWED_PAGES","COOKIE_PROMPT_SESSION_VISITOR_TYPE","COOKIE_PROMPT_SESSION_FIRST_SEEN","COOKIE_PROMPT_VISITOR_ID","COOKIE_PROMPT_LAST_SEEN","isProduction","isPreview","IS_PREVIEW","isClientProduction","getEcommercePlatform","ovData","window","OnVoardData","ecommerce_platform","getPlatformIdentifierForEngagement","platform","store_hash","shop","domain","myshopify_domain","Shopline","storeId","app_shop_id","account_id","location","hostname","isBrowser","isInt","val","test","isNumeric","isNaN","parseFloat","isFinite","isBoolean","value","isString","isFunction","isArray","Array","isObject","constructor","Object","isEmpty","ldIsEmpty","stringContains","string","subString","indexOf","inArray","item","arrayList","$","loopObject","object","callback","k","getRandomInt","max","Math","floor","random","generateHash","length","arguments","undefined","_toConsumableArray","map","toString","join","formatAmount","amount","replace","isMobileScreen","screenWidth","screen","width","height","getCurrentTimestamp","Date","now","currentURL","href","currentURLWithoutParams","protocol","host","pathname","currentDomain","currentURLPath","getScrollPercent","h","document","documentElement","b","body","st","sh","clientHeight","appendQueryString","url","qs","parsed","queryString","_objectSpread","query","keys","forEach","key","stringified","parseUrl","parseQueryString","removeQueryString","split","scrollElementTop","el","scrollTop","scrollHeight","setTimeout","getCssValueForSelector","selector","propKey","querySelector","style","getComputedStyle","getPropertyValue","attachUrlChangeEvent","OV_ATTACHED_URL_CHANGE_EVENT","f","lastUrl","MutationObserver","dispatchEvent","Event","observe","subtree","childList","history","pushState","ret","apply","this","replaceState","addEventListener","attachHashChangeEvent","OV_ATTACHED_HASH_CHANGE_EVENT","isValidUrl","startsWith","concat","URL","_","cleanGraphQLResponse","input","output","obj","edges","edge","node","_typeof","requestAnimFrame","requestAnimationFrame","element","requestInterval","fn","delay","setInterval","start","getTime","handle","loop","call","clearRequestInterval","cancelAnimationFrame","clearInterval","stringifyError","error","JSON","stringify","_unused","printErrors","errors","console","log","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray","interceptRequests","interceptPaths","__AJAX_INTERCEPTOR__","data","method","some","path","includes","xhr","responseText","oldXHROpen","XMLHttpRequest","prototype","open","async","user","password","response","jQuery","ajaxSuccess","event","settings","e","replaceXHROpen","oldFetch","fetch","_asyncToGenerator","_regeneratorRuntime","_callee","reqUrl","_args","_context","prev","next","sent","abrupt","clone","text","then","textResponse","err","stop","replaceFetch","handleErrorCallback","errorCallback","status","message","handleRqSuccess","successCallback","handleRqError","getRq","kwargs","config","headers","axios","postRq","buildUrl","BASE_API_URL","constants","uniqueId","prefix","id","customAlphabet","dictionary","generator","to","promise","convertRate","amt","exchangeRate","convertedAmt","comUtils","Number","toFixed","round","getCheckoutStartedData","EasyStore","Checkout","checkout","line_items","currency_rate","currency","rate","payload","token","utils","total_price","cart_token","products","push","product_id","product_name","price","quantity","variant_id","variant_name","sku","image_url","generateCheckoutStartedPayload","recordData","email","billing","billing_address","shipping","shipping_address","extractEmailFromCheckout","webTrackingId","getAttribute","getWebTrackingToken","name","first_name","last_name","extractNameFromCheckout","phone","extractPhoneFromCheckout","generateCartItemAddedPayload","template","product","title","img_url","compareAtPrice","compare_at_price","getHandler","handler","identify","bDetails","cart","customer","contactData","OnVoard","trackCheckoutStarted","OnVoardAddedScripts","easystoreTrackCheckoutStarted","visibilityState","navigator","sendBeacon","trackProductViewed","trackCartItemAdded","easyStoreTrackCartItemAdded","getElementById","evt","process","args","params","slice","ns","shift","processTracking","queue","OnVoardQueue","webTrackingEasyStore","i","OnVoardApi"],"sourceRoot":""}