{"version":3,"file":"chunks-75330cbe70226a2a/apps_recommender_tracking_src_index_js.f90165044f9800dc.js?t=1741497828074","mappings":"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","sources":["webpack://assemble/./apps/common/constants/index.js","webpack://assemble/./apps/common/cookie-utils/Utils.js","webpack://assemble/./apps/common/cookie-utils/Shopware.js","webpack://assemble/./apps/common/cookie-utils/index.js","webpack://assemble/./apps/common/utils/index.js","webpack://assemble/./apps/recommender/tracking/src/index.js","webpack://assemble/./apps/recommender/tracking/src/Api.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 Cookies from 'js-cookie';\nimport * as comUtils from \"common/utils\";\nexport * from \"common/utils\";\nimport * as constants from 'common/constants';\n\n\nexport function getCookie(name, attributes={}) {\n return Cookies.get(name, attributes);\n}\n","import * as utils from './Utils';\n\nexport function requireCookieConsent() {\n if (!window.OnVoardData.use_cookie_consent) return false;\n if (!document.querySelector(\".cookie-permission-container\")) return false;\n return true;\n}\n\nexport function allowCookieId() {\n if (!requireCookieConsent()) return true;\n\n let allow = utils.getCookie('ov_allow_cookie_id');\n if (allow) return true;\n return false;\n}\n\nexport function allowContactIdCookie() {\n if (!requireCookieConsent()) return true;\n\n let allow = utils.getCookie('ov_allow_contact_id');\n if (allow) return true;\n return false;\n}\n\nexport function allowBackInStockVisitorIdCookie() {\n return true;\n}\n\nexport function allowReviewsUpvotedCookie() {\n return true;\n}\n\nexport function allowPromptSessionCookies() {\n return true;\n}\n\nexport function allowPromptVisitorIdCookie() {\n return true;\n}\n\nexport function allowPromptLastSeenCookie() {\n if (!requireCookieConsent()) return true;\n\n let allow = utils.getCookie('ov_allow_prompt_last_seen');\n if (allow) return true;\n return false;\n}\n","import Cookies from 'js-cookie';\nimport * as utils from './Utils';\nimport * as shopwareUtils from './Shopware';\nimport * as constants from 'common/constants';\n\n\nexport function allowCookieId() {\n let platform = utils.getEcommercePlatform();\n if (platform === 'shopware') return shopwareUtils.allowCookieId();\n return true;\n}\n\nexport function allowContactIdCookie() {\n let platform = utils.getEcommercePlatform();\n if (platform === 'shopware') return shopwareUtils.allowContactIdCookie();\n return true;\n}\n\nexport function allowBackInStockVisitorIdCookie() {\n let platform = utils.getEcommercePlatform();\n if (platform === 'shopware') return shopwareUtils.allowBackInStockVisitorIdCookie();\n return true;\n}\n\nexport function allowReviewsUpvotedCookie() {\n let platform = utils.getEcommercePlatform();\n if (platform === 'shopware') return shopwareUtils.allowReviewsUpvotedCookie();\n return true;\n}\n\nexport function allowPromptSessionCookies() {\n let platform = utils.getEcommercePlatform();\n if (platform === 'shopware') return shopwareUtils.allowPromptSessionCookies();\n return true;\n}\n\nexport function allowPromptVisitorIdCookie() {\n let platform = utils.getEcommercePlatform();\n if (platform === 'shopware') return shopwareUtils.allowPromptVisitorIdCookie();\n return true;\n}\n\nexport function allowPromptLastSeenCookie() {\n let platform = utils.getEcommercePlatform();\n if (platform === 'shopware') return shopwareUtils.allowPromptLastSeenCookie();\n return true;\n}\n\n//======================================\n// Core Functions\n//======================================\nexport function canSetCookie(name) {\n if (name === constants.COOKIE_ID) return allowCookieId();\n if (name === constants.COOKIE_CONTACT_ID) return allowContactIdCookie();\n if (name === constants.COOKIE_REVIEWS_UPVOTED) return allowReviewsUpvotedCookie();\n if (name === constants.COOKIE_BACKINSTOCK_VISITOR_ID) return allowBackInStockVisitorIdCookie();\n\n if (name.startsWith(\"ov_prompt_session\")) return allowPromptSessionCookies();\n if (name === constants.COOKIE_PROMPT_VISITOR_ID) return allowPromptVisitorIdCookie();\n if (name === constants.COOKIE_PROMPT_LAST_SEEN) return allowPromptLastSeenCookie();\n return true;\n}\n\nexport function getCookie(...args) {\n return utils.getCookie(...args);\n}\n\nexport function setCookie(name, value, attributes={}) {\n if (!canSetCookie(name)) return;\n\n if (!('expires' in attributes)) {\n attributes['expires'] = constants.COOKIE_EXPIRES_DAYS;\n }\n\n Cookies.set(name, value, attributes);\n return Cookies.get(name, attributes);\n}\n\nexport function setSessionCookie(name, value, attributes={}) {\n if (!canSetCookie(name)) return;\n Cookies.set(name, value, attributes);\n return Cookies.get(name, attributes);\n}\n\nexport function getOrSetCookie(name, value, attributes={}) {\n const cookie = getCookie(name, attributes) || null;\n if (cookie) return cookie;\n if (!canSetCookie(name)) return;\n\n if (!('expires' in attributes)) {\n attributes['expires'] = constants.COOKIE_EXPIRES_DAYS;\n }\n\n setCookie(name, value, attributes);\n return getCookie(name, attributes);\n}\n\nexport function removeCookie(name, attributes={}) {\n Cookies.remove(name, attributes);\n}\n\nexport function getCookieInt(cookieName) {\n let value = 0;\n\n try {\n value = parseInt(getCookie(cookieName)) || 0;\n } catch(e) {\n value = 0;\n }\n\n return value;\n}\n\nexport function parseCookieJson(rawValue, defaultValue) {\n let value = defaultValue;\n if (rawValue) {\n try {\n value = JSON.parse(rawValue);\n } catch(e) {\n value = defaultValue;\n }\n }\n\n if (!rawValue) value = defaultValue;\n return value;\n}\n\n//======================================\n// Get Cookies\n//======================================\nexport function getCookieId() {\n const cookieName = constants.COOKIE_ID;\n let cookieValue = getCookie(cookieName);\n return cookieValue;\n}\n\nexport function getOrCreateCookieId() {\n let cookieValue = getCookieId();\n if (cookieValue) return cookieValue;\n\n const cookieName = constants.COOKIE_ID;\n if (!canSetCookie(cookieName)) return;\n\n cookieValue = utils.uniqueId();\n setCookie(cookieName, cookieValue);\n return cookieValue;\n}\n\nexport function getContactId() {\n const cookieName = constants.COOKIE_CONTACT_ID;\n let cookieValue = getCookie(cookieName);\n return cookieValue;\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 api from './Api';\nimport * as utils from './Utils';\n\n\nfunction extractProductExternalId() {\n let ovData = window.OnVoardData;\n if (!ovData) return;\n\n if (ovData.ecommerce_platform === \"shopify\") {\n const template = ovData.template;\n const product = ovData.product;\n if (template !== \"product\" || !product) return;\n return product.id;\n }\n\n if (ovData.ecommerce_platform === \"bigcommerce\") {\n const pageType = ovData.page_type;\n const product = ovData.product;\n if (pageType !== \"product\" || !product) return;\n return product.id;\n }\n\n if (ovData.ecommerce_platform === \"easystore\") {\n const template = ovData.template;\n const product = ovData.product;\n if (template !== \"product\" || !product) return;\n return product.id;\n }\n\n if (ovData.ecommerce_platform === \"shopline\") {\n const product = ovData.product;\n if (!product || !product.id) return;\n return product.id;\n }\n\n if (ovData.ecommerce_platform === \"shopware\") {\n const product = ovData.product;\n if (!product || !product.id) return;\n return product.id;\n }\n\n if (ovData.ecommerce_platform === \"wix\") {\n const pageType = ovData.page_type;\n const product = ovData.product;\n if (pageType !== \"product\" || !product) return;\n return product.id;\n }\n\n if (ovData.ecommerce_platform === \"woocommerce\") {\n const pageType = ovData.page_type;\n const product = ovData.product;\n if (pageType !== \"product\" || !product) return;\n return product.id;\n }\n\n return;\n}\n\nfunction trackClick(qs, cookieId, productExternalId) {\n if (!qs['ov_recommender']) return;\n\n let clickedRecommenderId = decodeURIComponent(qs['ov_recommender']);\n if (!clickedRecommenderId) return;\n\n let payload = {};\n payload['recommender'] = clickedRecommenderId;\n payload['cookie_id'] = cookieId;\n payload['ecommerce_platform'] = utils.getEcommercePlatform();\n payload['platform_identifier'] = utils.getPlatformIdentifierForEngagement();\n if (productExternalId) payload['product_external_id'] = productExternalId;\n\n const successCallback = (response) => {};\n const errorCallback = (error) => {\n console.error(error);\n };\n\n api.postRecommenderTrackClick(successCallback, errorCallback, JSON.stringify(payload));\n}\n\n\nfunction trackRecentlyViewed(accountId, cookieId, productExternalId) {\n if (!cookieId || !productExternalId) return;\n\n let payload = {};\n payload['account_id'] = accountId;\n payload['cookie_id'] = cookieId;\n payload['product_external_id'] = productExternalId;\n\n const successCallback = (response) => {};\n const errorCallback = (error) => {\n console.error(error);\n };\n\n api.postRecommenderTrackRecentlyViewed(successCallback, errorCallback, JSON.stringify(payload));\n}\n\n\nexport function processTracking() {\n if (!utils.isBrowser()) return;\n\n let ovData = window.OnVoardData;\n const platform = utils.getEcommercePlatform();\n const el = document.querySelector(\".ov-app-recommender-tracking\");\n if (!el) return;\n\n let accountId = el.getAttribute('data-account-id');\n if (!accountId && platform === 'shopline') {\n if (ovData && ovData.config) {\n accountId = ovData.config['account_id'];\n }\n }\n\n if (accountId && !el.getAttribute('data-account-id')) {\n el.setAttribute(\"data-account-id\", accountId);\n }\n\n const qs = utils.parseQueryString(window.location.search);\n const cookieId = utils.getOrCreateCookieId();\n const productExternalId = extractProductExternalId();\n\n // track click\n trackClick(qs, cookieId, productExternalId);\n\n // track recently viewed\n trackRecentlyViewed(accountId, cookieId, productExternalId);\n};\n\n","import * as utils from 'Utils';\n\n\nexport function postRecommenderTrackClick(successCallback, errorCallback, data) {\n utils.postRq({\n \"url\": utils.buildUrl(`recommenders/track-click`),\n \"successCallback\": successCallback,\n \"errorCallback\": errorCallback,\n \"data\": data\n });\n}\n\nexport function postRecommenderTrackRecentlyViewed(successCallback, errorCallback, data) {\n utils.postRq({\n \"url\": utils.buildUrl(`recommenders/track-recently-viewed`),\n \"successCallback\": successCallback,\n \"errorCallback\": errorCallback,\n \"data\": data\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","getCookie","name","attributes","arguments","length","undefined","Cookies","requireCookieConsent","window","OnVoardData","use_cookie_consent","document","querySelector","allowCookieId","utils","allowContactIdCookie","allowPromptLastSeenCookie","canSetCookie","constants","startsWith","apply","setCookie","value","setSessionCookie","removeCookie","parseCookieJson","rawValue","defaultValue","JSON","parse","e","getCookieId","getOrCreateCookieId","cookieValue","cookieName","getContactId","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","parseFloat","isFinite","isBoolean","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","_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","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","style","getComputedStyle","getPropertyValue","attachUrlChangeEvent","OV_ATTACHED_URL_CHANGE_EVENT","f","lastUrl","MutationObserver","dispatchEvent","Event","observe","subtree","childList","history","pushState","ret","this","replaceState","addEventListener","attachHashChangeEvent","OV_ATTACHED_HASH_CHANGE_EVENT","isValidUrl","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","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","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","uniqueId","prefix","id","customAlphabet","dictionary","generator","to","promise","trackClick","cookieId","productExternalId","clickedRecommenderId","decodeURIComponent","payload","api","trackRecentlyViewed","accountId","processTracking","getAttribute","setAttribute","search","template","product","pageType","page_type","extractProductExternalId"],"sourceRoot":""}