{"version":3,"file":"chunks-75330cbe70226a2a/apps_web-tracking_bigcommerce_src_index_js.ffbd5f42c90f2af1.js?t=1741497828074","mappings":"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","sources":["webpack://assemble/./apps/common/bigcommerce-utils/index.js","webpack://assemble/./apps/common/constants/index.js","webpack://assemble/./apps/common/utils/index.js","webpack://assemble/./apps/web-tracking/bigcommerce/src/index.js"],"sourcesContent":["import * as utils from './Utils';\n\n\nexport function loadStorefrontProductData(callback) {\n if (!window.OnVoardData || !window.OnVoardData.product || !window.OnVoardData.storefront_api_token) return;\n\n if (!window.OnVoardData.storefront) window.OnVoardData.storefront = {};\n if (window.OnVoardData.storefront.product) {\n callback(window.OnVoardData.storefront.product);\n return;\n }\n\n let apiToken = window.OnVoardData.storefront_api_token;\n let variables = {};\n variables['productId'] = parseInt(window.OnVoardData.product.id);\n\n let query = `\n query productById($productId: Int!) {\n site {\n product(entityId: $productId) {\n entityId\n name\n sku\n upc\n type\n availabilityV2 {\n status\n }\n inventory {\n isInStock\n }\n brand {\n name\n }\n defaultImage {\n urlOriginal\n }\n prices {\n ...PricesFields\n }\n variants(first: 250) {\n edges {\n node {\n ...VariantFields\n }\n }\n }\n categories(first: 50) {\n edges {\n node {\n name\n }\n }\n }\n }\n }\n }\n\n fragment VariantFields on Variant {\n entityId\n sku\n upc\n defaultImage {\n urlOriginal\n }\n prices {\n ...PricesFields\n }\n inventory {\n isInStock\n }\n options(first: 50) {\n edges {\n node {\n ...ProductOptionFields\n }\n }\n }\n }\n\n fragment ProductOptionFields on ProductOption {\n entityId\n displayName\n isRequired\n values(first: 50) {\n edges {\n node {\n entityId\n label\n }\n }\n }\n }\n\n fragment PricesFields on Prices {\n price {\n ...MoneyFields\n }\n basePrice {\n ...MoneyFields\n }\n salePrice {\n ...MoneyFields\n }\n retailPrice {\n ...MoneyFields\n }\n saved {\n ...MoneyFields\n }\n priceRange {\n min {\n ...MoneyFields\n }\n max {\n ...MoneyFields\n }\n }\n }\n\n fragment MoneyFields on Money {\n value\n currencyCode\n }\n `;\n\n fetch('/graphql', {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiToken}`\n },\n body: JSON.stringify({\n query: query,\n variables: variables,\n }),\n })\n .then(res => res.json())\n .then(json => {\n let result = utils.cleanGraphQLResponse(json);\n window.OnVoardData.storefront.product = result.data.site.product;\n callback(window.OnVoardData.storefront.product);\n });\n}\n\nexport function convertDefaultRate(amount, amountCur='') {\n if (amountCur && amountCur === window.OnVoardData.currency_selector.default_currency_code) return amount;\n let exchange_rate = window.OnVoardData.exchange_rate;\n if (!exchange_rate) return amount;\n\n amount = parseFloat(amount)/parseFloat(exchange_rate);\n amount = Math.round(amount * 100) / 100; // round to 2 decimal float\n amount = Math.round(amount * 20) / 20; // round off to nearest 5 cents\n return amount;\n}\n\nexport function convertActiveRate(amount, amountCur='') {\n if (amountCur && amountCur === window.OnVoardData.currency_selector.active_currency_code) return amount;\n let exchange_rate = window.OnVoardData.exchange_rate;\n if (!exchange_rate) return amount;\n\n amount = parseFloat(amount)*parseFloat(exchange_rate);\n amount = Math.round(amount * 100) / 100; // round to 2 decimal float\n return amount;\n}\n\nexport function executeWithRates(callback) {\n let currency = window.OnVoardData.currency_selector;\n if (currency.default_currency_code === currency.active_currency_code || window.OnVoardData.exchange_rate) {\n callback();\n return;\n }\n\n // diff rates, need to load rates first\n fetch('/graphql', {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${window.OnVoardData.storefront_api_token}`\n },\n body: JSON.stringify({\n query: `\n query getCurrencyDetails($currencyCode: currencyCode!) {\n site {\n currency(currencyCode: $currencyCode) {\n entityId\n code\n name\n isActive\n exchangeRate\n isTransactional\n display {\n decimalToken\n thousandsToken\n decimalPlaces\n }\n }\n }\n }\n `,\n variables: {\n 'currencyCode': currency.active_currency_code\n },\n }),\n })\n .then(res => res.json())\n .then(json => {\n window.OnVoardData['exchange_rate'] = json.data.site.currency.exchangeRate;\n callback();\n });\n}\n\nexport function extractProductCurrency(product) {\n let withoutTax = product.price.without_tax;\n let withTax = product.price.with_tax;\n if (withoutTax && withoutTax.currency) return withoutTax.currency;\n if (withTax && withTax.currency) return withTax.currency;\n return '';\n}\n\nexport function extractProductPrice(product) {\n let withoutTax = product.price.without_tax;\n let withTax = product.price.with_tax;\n if (withoutTax) return withoutTax.value;\n if (withTax) return withTax.value;\n return 0;\n}\n\nexport function extractProductCompareAtPrice(product) {\n let withoutTax = product.price.non_sale_price_without_tax;\n let withTax = product.price.non_sale_price_with_tax;\n if (withoutTax) return withoutTax.value;\n if (withTax) return withTax.value;\n return 0;\n}\n","\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 axios from 'axios';\nimport * as utils from './Utils';\nimport * as bcUtils from \"common/bigcommerce-utils\";\n\n//====================================\n// Identify\n//====================================\nfunction identify(data) {\n const cart = data.cart;\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)) return;\n window.OnVoard('web_tracking', 'identify', contactData);\n}\n\n\n//====================================\n// Checkout Started\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 pageType = data.page_type;\n const customer = data.customer;\n const isGuest = customer && customer.email ? false : true;\n\n const eligiblePageTypes = [\n \"checkout\",\n ];\n\n if (!eligiblePageTypes.includes(pageType)) return;\n\n const extractCartProduct = (item, currencyCode) => {\n const productData = {};\n productData['id'] = item.productId;\n productData['name'] = item.name;\n productData['sku'] = item.sku;\n productData['url'] = item.url;\n productData['variant_id'] = item.variantId;\n productData['image_url'] = utils.isValidUrl(item.imageUrl) ? item.imageUrl : null;\n productData['quantity'] = item.quantity;\n\n const salePrice = utils.formatAmount(bcUtils.convertDefaultRate(item.salePrice, currencyCode));\n productData['price'] = salePrice;\n return productData;\n };\n\n const handleCheckoutData = (checkoutData) => {\n if (!checkoutData || !checkoutData.grandTotal) return;\n\n const cartData = checkoutData.cart;\n if (!cartData || !cartData.id) return;\n\n const currencyCode = cartData.currency.code;\n var recordData = {};\n recordData[\"cart_id\"] = cartData.id;\n recordData[\"currency\"] = window.OnVoardData.currency_selector.default_currency_code;\n recordData[\"discount_amount\"] = bcUtils.convertDefaultRate(cartData.discountAmount, currencyCode);\n recordData[\"subtotal\"] = bcUtils.convertDefaultRate(checkoutData.subtotal, currencyCode);\n recordData[\"grand_total\"] = bcUtils.convertDefaultRate(checkoutData.grandTotal, currencyCode);\n recordData[\"cart_created_time\"] = cartData.createdTime;\n\n const products = []\n cartData.lineItems.physicalItems.forEach((item) => products.push(extractCartProduct(item, currencyCode)));\n cartData.lineItems.digitalItems.forEach((item) => products.push(extractCartProduct(item, currencyCode)));\n if (products.length === 0) return;\n recordData[\"products\"] = products;\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'] = isGuest ? cartData.email : customer.email;\n payload['activity'] = 'bigcommerce.checkout_started';\n payload['record_data'] = recordData;\n\n if (customer && customer.name) payload['name'] = customer.name;\n if (customer && customer.phone) payload['phone'] = customer.phone;\n\n const url = utils.buildUrl(`track-checkout-started`);\n navigator.sendBeacon(url, JSON.stringify(payload));\n };\n\n const fetchAndTrackCheckout = () => {\n axios.get('/api/storefront/carts?include=lineItems.physicalItems.options,lineItems.digitalItems.options')\n .then(function (response) {\n return response.data;\n }).then(function (cartsData) {\n return cartsData[0].id;\n })\n .catch(function (error) {\n console.log(error);\n }).then(function (cartId) {\n axios.get('/api/storefront/checkouts/' + cartId)\n .then(function (response) {\n return response.data;\n }).then(function (checkoutData) {\n handleCheckoutData(checkoutData);\n }).catch(function (error) {\n console.log(error);\n })\n });\n };\n\n if (isGuest && !window.OnVoardAddedScripts.bigCommerceTrackCheckoutStarted) {\n window.OnVoardAddedScripts.bigCommerceTrackCheckoutStarted = true;\n document.addEventListener('click', (evt) => {\n var target = evt.target;\n if (!target) return;\n\n var elId = target.getAttribute(\"id\");\n var triggerIds = [\n \"checkout-customer-continue\",\n \"checkout-shipping-continue\",\n \"checkout-billing-continue\",\n ];\n\n if (triggerIds.includes(elId)) {\n fetchAndTrackCheckout();\n return;\n }\n\n // convert to lower case and only keep a-z characters\n var elClass = target.getAttribute(\"class\") || '';\n elClass = elClass.toLowerCase().replace(/[^a-z]/gi, '');\n\n if (elClass && elClass.includes(\"customeremail\")) {\n fetchAndTrackCheckout();\n return;\n }\n });\n }\n\n if (!isGuest) {\n fetchAndTrackCheckout();\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 pageType = data.page_type;\n const shop = data.shop;\n const product = data.product;\n\n const eligiblePageTypes = [\n \"product\",\n ];\n\n if (!eligiblePageTypes.includes(pageType)) return;\n if (!product.id) return;\n\n const currencyCode = bcUtils.extractProductCurrency(product);\n const productPrice = bcUtils.extractProductPrice(product);\n const productCompareAtPrice = bcUtils.extractProductCompareAtPrice(product) || null;\n\n var payload = {};\n payload[\"product_id\"] = product.id;\n payload[\"name\"] = product.title;\n payload[\"currency\"] = data.currency_selector.default_currency_code;\n payload[\"price\"] = bcUtils.convertDefaultRate(productPrice, currencyCode);\n payload[\"compare_at_price\"] = productCompareAtPrice ? bcUtils.convertDefaultRate(productCompareAtPrice, currencyCode) : null;\n payload[\"categories\"] = product.categories;\n payload[\"url\"] = product.url;\n payload[\"image_url\"] = product.image_url && utils.isValidUrl(product.image_url) ? product.image_url.replace(\"{:size}\", \"600x600\") : null;\n\n window.OnVoard('web_tracking', 'track', 'bigcommerce.product_viewed', payload);\n}\n\n//====================================\n// Cart Item Added\n//====================================\nfunction generateCartItemAddedPayload() {\n let data = window.OnVoardData;\n const pageType = data.page_type;\n const shop = data.shop;\n const product = data.product;\n\n const eligiblePageTypes = [\n \"product\",\n ];\n\n if (!eligiblePageTypes.includes(pageType)) return;\n if (!product.id) return;\n\n const currencyCode = bcUtils.extractProductCurrency(product);\n const productPrice = bcUtils.extractProductPrice(product);\n const productCompareAtPrice = bcUtils.extractProductCompareAtPrice(product) || null;\n\n var payload = {};\n payload[\"product_id\"] = product.id;\n payload[\"name\"] = product.title;\n payload[\"currency\"] = data.currency_selector.default_currency_code;\n payload[\"price\"] = bcUtils.convertDefaultRate(productPrice, currencyCode);\n payload[\"compare_at_price\"] = productCompareAtPrice ? bcUtils.convertDefaultRate(productCompareAtPrice, currencyCode) : null;\n payload[\"categories\"] = product.categories;\n payload[\"url\"] = product.url;\n payload[\"image_url\"] = product.image_url && utils.isValidUrl(product.image_url) ? product.image_url.replace(\"{:size}\", \"600x600\") : null;\n return payload\n}\n\n// Prices shown on product page is based on shop's default currency\nfunction trackCartItemAdded(data) {\n const pageType = data.page_type;\n const shop = data.shop;\n const product = data.product;\n\n const eligiblePageTypes = [\n \"product\",\n ];\n\n if (!eligiblePageTypes.includes(pageType)) return;\n if (!product.id) return;\n\n const isAddToCart = (text) => {\n if (!text) return false;\n const validTexts = [\n \"addtocart\",\n \"addtobag\"\n ];\n\n // convert to lower case and only keep a-z characters\n text = text.toLowerCase().replace(/[^a-z]/gi, '');\n return validTexts.includes(text);\n };\n\n const triggerAddToCart = () => {\n let payload = generateCartItemAddedPayload();\n if (!payload) return;\n window.OnVoard('web_tracking', 'track', 'bigcommerce.cart_item_added', payload);\n };\n\n if (!window.OnVoardAddedScripts.bigCommerceTrackCartItemAdded) {\n window.OnVoardAddedScripts.bigCommerceTrackCartItemAdded = true;\n document.addEventListener('click', (evt) => {\n var target = evt.target;\n if (!target) return;\n\n var innerText = target.innerText;\n if (innerText && isAddToCart(innerText)) {\n triggerAddToCart();\n return;\n }\n\n var elId = target.getAttribute(\"id\");\n if (elId && isAddToCart(elId)) {\n triggerAddToCart();\n return;\n }\n\n var elValue = target.getAttribute(\"value\");\n if (elValue && isAddToCart(elValue)) {\n triggerAddToCart();\n return;\n }\n\n var elClassList = [...target.classList];\n if (elClassList.some((elClassName) => isAddToCart(elClassName))) {\n triggerAddToCart();\n return;\n }\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_bigcommerce namespace\n if (ns === \"web_tracking_bigcommerce\") {\n if (handler[method]) {\n handler[method].apply(handler, params);\n } else {\n console.log(`web_tracking_bigcommerce 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.webTrackingBigCommerce || [];\n for (var i in queue) {\n process(queue[i]);\n }\n\n // setup api endpoint after everything is ready\n window.OnVoardApi.webTrackingBigCommerce = function(args) {\n process(args);\n };\n}\n\n\n\n"],"names":["loadStorefrontProductData","callback","window","OnVoardData","product","storefront_api_token","storefront","apiToken","variables","parseInt","id","fetch","method","credentials","headers","concat","body","JSON","stringify","query","then","res","json","result","utils","data","site","convertDefaultRate","amount","amountCur","arguments","length","undefined","currency_selector","default_currency_code","exchange_rate","parseFloat","Math","round","convertActiveRate","active_currency_code","executeWithRates","currency","exchangeRate","extractProductCurrency","withoutTax","price","without_tax","withTax","with_tax","extractProductPrice","value","extractProductCompareAtPrice","non_sale_price_without_tax","non_sale_price_with_tax","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","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","isFinite","isBoolean","isString","isFunction","isArray","Array","isObject","constructor","Object","isEmpty","ldIsEmpty","stringContains","string","subString","indexOf","inArray","item","arrayList","$","loopObject","object","k","getRandomInt","max","floor","random","generateHash","_toConsumableArray","map","toString","join","formatAmount","replace","isMobileScreen","screenWidth","screen","width","height","getCurrentTimestamp","Date","now","currentURL","href","currentURLWithoutParams","protocol","host","pathname","currentDomain","currentURLPath","getScrollPercent","h","document","documentElement","b","st","sh","clientHeight","appendQueryString","url","qs","parsed","queryString","_objectSpread","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","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","_unused","printErrors","errors","console","log","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray","interceptRequests","interceptPaths","__AJAX_INTERCEPTOR__","some","path","includes","xhr","responseText","oldXHROpen","XMLHttpRequest","prototype","open","async","user","password","response","jQuery","ajaxSuccess","event","settings","e","replaceXHROpen","oldFetch","_asyncToGenerator","_regeneratorRuntime","_callee","reqUrl","_args","_context","prev","next","sent","abrupt","clone","text","textResponse","err","stop","replaceFetch","handleErrorCallback","errorCallback","status","message","handleRqSuccess","successCallback","handleRqError","getRq","kwargs","config","axios","postRq","buildUrl","BASE_API_URL","constants","uniqueId","prefix","customAlphabet","dictionary","generator","to","promise","trackCheckoutStarted","pageType","page_type","customer","isGuest","email","extractCartProduct","currencyCode","productData","productId","name","sku","variantId","imageUrl","quantity","salePrice","bcUtils","handleCheckoutData","checkoutData","grandTotal","cartData","cart","code","recordData","discountAmount","subtotal","createdTime","products","lineItems","physicalItems","push","digitalItems","webTrackingId","getAttribute","getWebTrackingToken","payload","phone","navigator","sendBeacon","fetchAndTrackCheckout","get","cartsData","cartId","OnVoardAddedScripts","bigCommerceTrackCheckoutStarted","evt","target","elId","elClass","toLowerCase","trackCartItemAdded","isAddToCart","triggerAddToCart","productPrice","productCompareAtPrice","title","categories","image_url","generateCartItemAddedPayload","OnVoard","bigCommerceTrackCartItemAdded","innerText","elValue","classList","elClassName","getHandler","handler","identify","contactData","trackProductViewed","process","args","params","slice","ns","shift","processTracking","queue","OnVoardQueue","webTrackingBigCommerce","i","OnVoardApi"],"sourceRoot":""}