zar 0.5.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"zar.es.js","sources":["../src/analyticsLite.js","../src/facebook.js","../src/googleAnalytics4.js","../src/utils.js","../src/zar.js"],"sourcesContent":["/* eslint-disable no-empty */\nexport function Analytics({ app, plugins = [] } = {}) {\n const instance = {\n app,\n plugins: {},\n page: (payload = {}) => runPage(instance, payload),\n track: (event, properties = {}, options) =>\n runTrack(\n instance,\n options ? { event, properties, options } : { event, properties }\n ),\n reset: async (...args) => runReset(instance, ...args)\n };\n\n // Register plugins and bind/hoist methods to plugin object\n plugins.forEach((p) => {\n if (!p || !p.name) return;\n p.instance = instance;\n if (p.methods) {\n Object.keys(p.methods).forEach((k) => {\n const fn = p.methods[k];\n if (typeof fn === \"function\") {\n const bound = fn.bind(p);\n p.methods[k] = bound;\n p[k] = bound;\n }\n });\n }\n instance.plugins[p.name] = p;\n });\n\n // Initialize plugins\n plugins.forEach((p) => {\n try {\n p.initialize && p.initialize({ config: p.config, instance });\n } catch (_) {}\n });\n\n return instance;\n}\n\nconst hashRegex = /#.*$/;\n\nfunction currentUrl() {\n if (typeof window === \"undefined\") return \"\";\n return window.location.href.replace(hashRegex, \"\");\n}\n\nfunction getPageData(pageData = {}) {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return pageData;\n }\n const { title, referrer } = document;\n const { innerWidth, innerHeight } = window;\n const url = currentUrl();\n const page = {\n title: title,\n url: url,\n width: innerWidth,\n height: innerHeight\n };\n if (referrer && referrer !== \"\") {\n page.referrer = referrer;\n }\n return Object.assign({}, page, pageData);\n}\n\nasync function runPage(instance, payload = {}) {\n if (!payload.type) payload.type = \"page\";\n payload.properties = getPageData(payload.properties || {});\n\n Object.values(instance.plugins).forEach((p) => {\n if (typeof p.pageStart === \"function\") {\n try {\n const next = p.pageStart({ payload, config: p.config, instance });\n if (next) payload = next;\n } catch (_) {}\n }\n });\n\n for (const p of Object.values(instance.plugins)) {\n if (typeof p.page === \"function\") {\n try {\n await p.page({ payload, options: {}, instance, config: p.config });\n } catch (_) {}\n }\n }\n return payload;\n}\n\nasync function runTrack(instance, payload = {}) {\n if (!payload.type) payload.type = \"track\";\n const base = getPageData();\n const props = payload.properties || {};\n if (props.url === undefined) props.url = base.url;\n if (props.referrer === undefined && base.referrer !== undefined) {\n props.referrer = base.referrer;\n }\n payload.properties = props;\n\n const options = payload.options || {};\n const perCallPlugins =\n options && typeof options.plugins === \"object\" ? options.plugins : null;\n const isDisabled = (p) => perCallPlugins && perCallPlugins[p.name] === false;\n\n Object.values(instance.plugins).forEach((p) => {\n if (isDisabled(p)) return;\n if (typeof p.trackStart === \"function\") {\n try {\n const next = p.trackStart({\n payload,\n options,\n config: p.config,\n instance\n });\n if (next) payload = next;\n } catch (_) {}\n }\n });\n\n for (const p of Object.values(instance.plugins)) {\n if (isDisabled(p)) continue;\n if (typeof p.track === \"function\") {\n try {\n await p.track({ payload, options, instance, config: p.config });\n } catch (_) {}\n }\n }\n return payload;\n}\n\nasync function runReset(instance, ...args) {\n for (const p of Object.values(instance.plugins)) {\n if (typeof p.reset === \"function\") {\n try {\n await p.reset(...args);\n } catch (_) {}\n }\n }\n}\n","function facebookScriptInit(f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = \"2.0\";\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n}\n\nfunction facebookInit({ trackingId }) {\n facebookScriptInit(\n window,\n document,\n \"script\",\n \"https://connect.facebook.net/en_US/fbevents.js\"\n );\n window.fbq(\"init\", trackingId);\n}\n\nfunction facebook(pluginConfig = {}) {\n return {\n name: \"facebook\",\n config: pluginConfig,\n initialize: function ({ config, instance }) {\n if (!config.trackingId) throw new Error(\"No Facebook trackingId defined\");\n facebookInit({ trackingId: config.trackingId });\n },\n page: function ({ payload, config, instance }) {\n window.fbq(\"track\", \"PageView\");\n },\n track: function ({ payload, config, instance }) {\n window.fbq(\"trackCustom\", payload.event, payload.properties);\n },\n identify: function ({ payload, config }) {\n // not supported yet\n },\n loaded: function () {\n return !!window.fbq;\n }\n };\n}\n\nexport { facebookInit, facebook };\n","function gtag() {\n window.dataLayer.push(arguments);\n}\n\nwindow.gtag = gtag;\n\n// https://github.com/idmadj/ga-gtag/blob/master/src/index.js\nfunction gtagInit({ trackingId, configParams = {}, setParams = {} }) {\n var scriptId = 'ga-gtag';\n\n if (document.getElementById(scriptId)) return;\n\n var head = document.head;\n var script = document.createElement('script');\n script.id = scriptId;\n script.type = 'text/javascript';\n script.async = true;\n script.src = 'https://www.googletagmanager.com/gtag/js?id=' + trackingId;\n head.insertBefore(script, head.firstChild);\n\n window.dataLayer = window.dataLayer || [];\n\n gtag('js', new Date());\n if (setParams) {\n gtag('set', setParams);\n }\n gtag('config', trackingId, configParams);\n}\n\nfunction googleAnalytics4(pluginConfig = {}) {\n return {\n name: 'google-analytics-4',\n config: pluginConfig,\n initialize: function ({ config, instance }) {\n if (!config.trackingId) throw new Error('No GA trackingId defined');\n\n var configParams = {};\n var setParams = {};\n if (config.customDimensions) {\n var customMap = {};\n for (var i = 0; i < config.customDimensions.length; i++) {\n var customDim = config.customDimensions[i];\n configParams[customDim.name] = customDim.callback(instance, config);\n customMap['dimension' + (i + 1)] = customDim.name;\n }\n setParams['custom_map'] = customMap;\n }\n\n gtagInit({ trackingId: config.trackingId, configParams, setParams });\n },\n page: function ({ payload, config, instance }) {\n // no-op: GA4 sends page on init and page is just another \"event\"\n },\n track: function ({ payload, config, instance }) {\n gtag('event', payload.event, payload.properties);\n },\n identify: function ({ payload, config }) {\n // not supported yet\n },\n loaded: function () {\n return !!window.gtag;\n }\n };\n}\n\nexport { gtag, googleAnalytics4 };","export var urlParams = new URLSearchParams(window.location.search);\nvar DEBUG = urlParams.get(\"zdbg\");\nvar zarGlobal = {};\nconst undef = \"undefined\";\n\nexport function dbg() {\n if (DEBUG != 1) return;\n console.debug(...arguments);\n}\n\nexport function warn(msg) {\n console.warn(msg);\n if (window.Rollbar) {\n window.Rollbar.warning(msg);\n }\n}\n\nexport function isFunc(value) {\n return (\n value &&\n (Object.prototype.toString.call(value) === \"[object Function]\" ||\n \"function\" === typeof value ||\n value instanceof Function)\n );\n}\n\nexport function isBot() {\n try {\n var ua = navigator.userAgent || \"\";\n var bots = new RegExp(\n [\n /bot/,\n /spider/,\n /crawl/,\n /mediapartners/,\n /Google-Read-Aloud/,\n /semrush/\n ]\n .map((r) => r.source)\n .join(\"|\"),\n \"i\"\n );\n return bots.test(ua);\n } catch (e) {\n return false;\n }\n}\n\nexport function afterDOMContentLoaded(func) {\n if (\n document.readyState === \"complete\" ||\n document.readyState === \"loaded\" ||\n document.readyState === \"interactive\"\n ) {\n func();\n } else {\n window.addEventListener(\"DOMContentLoaded\", func);\n }\n}\n\n// Copied from analytics-utils to keep bundle size down\n\nvar supportsSessionStorage = hasSessionStorage();\n\nfunction hasSessionStorage() {\n if (typeof supportsSessionStorage !== undef) {\n return supportsSessionStorage;\n }\n supportsSessionStorage = true;\n try {\n sessionStorage.setItem(undef, undef);\n sessionStorage.removeItem(undef);\n } catch (e) {\n supportsSessionStorage = false;\n }\n return supportsSessionStorage;\n}\n\nexport function getSessionStorage(key) {\n // Get from SS if supported, fall back to global\n var value;\n var globalValue = zarGlobal[key];\n if (supportsSessionStorage) {\n value = sessionStorage.getItem(key);\n if (!value && globalValue) {\n value = globalValue;\n // Restore session storage\n sessionStorage.setItem(key, value);\n }\n } else {\n value = globalValue;\n }\n return value ? JSON.parse(value) : undefined;\n}\n\nexport function setSessionStorage(key, value) {\n // Set both SS (if supported) and global\n var value_str = JSON.stringify(value);\n if (supportsSessionStorage) {\n sessionStorage.setItem(key, value_str);\n }\n zarGlobal[key] = value_str;\n}\n\nexport function removeSessionStorage(key) {\n // Remove both SS (if supported) and global\n if (supportsSessionStorage) {\n sessionStorage.removeItem(key);\n }\n delete zarGlobal[key];\n}\n\nfunction makeRequest({ method, url, data, json = true }) {\n return new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open(method, url);\n xhr.withCredentials = true;\n\n if (json) {\n xhr.setRequestHeader(\"Accept\", \"application/json\");\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n }\n\n xhr.onload = function () {\n if (this.status >= 200 && this.status < 300) {\n if (json) {\n resolve(JSON.parse(xhr.response));\n } else {\n resolve(xhr.response);\n }\n } else {\n reject({\n status: this.status,\n message: xhr.statusText\n });\n }\n };\n xhr.onerror = function () {\n reject({\n status: this.status,\n message: \"Network Error\"\n });\n };\n if (data) {\n xhr.send(data);\n } else {\n xhr.send();\n }\n });\n}\n\nfunction formatParams(params) {\n return (\n \"?\" +\n Object.keys(params)\n .map(function (key) {\n return key + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\")\n );\n}\n\nasync function postBeacon({ url, data }) {\n if (\n window &&\n window.navigator &&\n typeof window.navigator.sendBeacon === \"function\" &&\n typeof window.Blob === \"function\"\n ) {\n try {\n const blob = new Blob([JSON.stringify(data)], {\n type: \"text/plain; charset=UTF-8\"\n });\n if (window.navigator.sendBeacon(url, blob)) {\n return true;\n }\n return false;\n } catch (e) {\n warn(\"postBeacon:\", e);\n return false;\n }\n }\n return false;\n}\n\nexport async function httpGet({ url, params = null, json = true }) {\n var finalUrl = url;\n if (params) {\n finalUrl = finalUrl + formatParams(params);\n }\n return await makeRequest({ method: \"GET\", url: finalUrl, json });\n}\n\nexport async function httpPost({ url, data, json = true, beacon = false }) {\n var finalData = data;\n if (json) {\n finalData = JSON.stringify(finalData);\n }\n if (beacon) {\n var res = await postBeacon({ url, data });\n if (res) {\n return;\n }\n dbg(\"Beacon failed\");\n }\n return await makeRequest({ method: \"POST\", url, data: finalData, json });\n}\n","import { Analytics } from \"./analyticsLite\";\nimport { facebook } from \"./facebook\";\nimport { googleAnalytics4 } from \"./googleAnalytics4\";\nimport {\n dbg,\n getSessionStorage,\n setSessionStorage,\n isBot,\n httpGet,\n httpPost,\n warn,\n afterDOMContentLoaded,\n isFunc\n} from \"./utils\";\n\nvar VID_KEY = \"__zar_vid\";\nvar NUMBER_POOL_SUCCESS = \"success\";\nvar NUMBER_POOL_ERROR = \"error\";\nvar NUMBER_POOL_RENEWAL_INTERVAL_MS = 30 * 1000;\nvar NUMBER_POOL_RENEWAL_MIN_TIME_MS = 10 * 1000;\nvar getNumberFailureCount = 0;\nvar MAX_GET_NUMBER_FAILURES = 3;\nvar poolIntervals = {};\nvar lastRenewalAttemptMs = {};\nvar stopAllRenewals = false;\n\nwindow.zarPoolData = window.zarPoolData || null;\nwindow.zarPoolDLObserverDone = window.zarPoolDLObserverDone || false;\nwindow.zarPoolDataLayer = window.zarPoolDataLayer || [];\n\n// Tracks original phone numbers that have been replaced so\n// we can revert if necessary.\nvar numberOverlayMap = new Map();\n\nfunction generateVisitId() {\n return (\n Date.now().toString(36) + \".\" + Math.random().toString(36).substring(2)\n );\n}\n\nfunction initId(key, generator, getter, setter) {\n var id;\n var isNew = false;\n var t;\n var origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n t = Date.now();\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n t = idObj.t;\n }\n\n var result = { id, t, origReferrer, isNew };\n setter(key, result);\n return result;\n}\n\nfunction initIDs() {\n var vidResult = initId(\n VID_KEY,\n generateVisitId,\n getSessionStorage,\n setSessionStorage\n );\n return { vid: vidResult };\n}\n\nfunction getDefaultApiUrl() {\n return window.location.protocol + \"://\" + window.location.host + \"/api/v2\";\n}\n\nfunction getIDObj(key) {\n return getSessionStorage(key);\n}\n\nfunction getID(key) {\n var obj = getIDObj(key);\n return obj ? obj.id : null;\n}\n\nfunction getStorage() {\n return {\n vid: getIDObj(VID_KEY)\n };\n}\n\nfunction getIDs() {\n return {\n vid: getID(VID_KEY)\n };\n}\n\nfunction extractPhoneNumber({ elem }) {\n // NOTE: only tested for US numbers!\n var numberText = null;\n var number = null;\n var href = null;\n var regex = new RegExp(\n \"\\\\+?\\\\(?\\\\d*\\\\)? ?\\\\(?\\\\d+\\\\)?\\\\d*([\\\\s./-]?\\\\d{2,})+\",\n \"g\"\n );\n\n if (elem.href && elem.href.startsWith(\"tel:\")) {\n href = elem.href;\n }\n var text = elem.innerText;\n var html = elem.innerHTML;\n var match = regex.exec(text);\n if (match) {\n numberText = match[0].trim();\n number = numberText\n .replace(\"+\", \"\")\n .replace(/-/g, \"\")\n .replace(/ /g, \"\")\n .replace(\"(\", \"\")\n .replace(\")\", \"\")\n .replace(/^1/, \"\");\n }\n return { text, html, numberText, href, number };\n}\n\nfunction overlayPhoneNumber({ elems, number, force = false }) {\n var origNum;\n var overlayNum = number;\n if (!number.startsWith(\"+1\")) {\n overlayNum = \"+1\" + number; // NOTE: expects 10-digit US numbers\n }\n\n for (var i = 0; i < elems.length; i++) {\n if (numberOverlayMap.has(elems[i])) {\n if (force) {\n origNum = numberOverlayMap.get(elems[i]);\n } else {\n dbg(\"element already in overlay map:\", elems[i]);\n continue;\n }\n }\n\n var elemNum = extractPhoneNumber({ elem: elems[i] });\n\n if (!origNum) {\n origNum = elemNum;\n } else if (\n !force &&\n elemNum.number &&\n origNum.number &&\n origNum.number !== elemNum.number\n ) {\n warn(\n \"overlaying multiple numbers with a single number\",\n origNum.number,\n elemNum.number\n );\n }\n\n dbg(\"overlaying\", overlayNum, \"on\", elems[i]);\n\n // Store the original values if this is the first time overlaying\n if (!numberOverlayMap.has(elems[i])) {\n numberOverlayMap.set(elems[i], elemNum);\n }\n\n if (elemNum.href) {\n elems[i].href = \"tel:\" + overlayNum;\n }\n\n if (elemNum.numberText) {\n // If there is a phone number present in the text...\n elems[i].innerHTML = \"\";\n if (elemNum.text) {\n var overlay = overlayNum;\n if (elemNum.numberText.indexOf(\"-\") > -1) {\n overlay =\n overlayNum.slice(2, 5) +\n \"-\" +\n overlayNum.slice(5, 8) +\n \"-\" +\n overlayNum.slice(8, 12);\n }\n if (elemNum.html.indexOf(\"<img\") > -1) {\n var numberHtml = elemNum.html.replace(elemNum.numberText, overlay);\n elems[i].innerHTML = numberHtml;\n } else {\n var numberText = elemNum.text.replace(elemNum.numberText, overlay);\n elems[i].appendChild(document.createTextNode(numberText));\n }\n } else {\n elems[i].appendChild(document.createTextNode(overlayNum));\n }\n } else {\n dbg(\"no number text found:\", elems[i]);\n }\n }\n}\n\nfunction revertOverlayNumbers({ elems }) {\n for (var i = 0; i < elems.length; i++) {\n if (numberOverlayMap.has(elems[i])) {\n var currentHTML = elems[i].innerHTML;\n var origElemData = numberOverlayMap.get(elems[i]);\n dbg(\"orig:\", origElemData);\n var origHTML = origElemData.html;\n dbg(\"reverting\", currentHTML, \"to\", origHTML);\n // Prefer restoring original HTML; fall back to original text if HTML is empty/null\n if (origHTML !== undefined && origHTML !== null && origHTML !== \"\") {\n elems[i].innerHTML = origHTML;\n } else if (\n origElemData.text !== undefined &&\n origElemData.text !== null\n ) {\n elems[i].textContent = origElemData.text;\n } else {\n // As a last resort, clear contents\n elems[i].textContent = \"\";\n }\n if (origElemData.href) {\n elems[i].setAttribute(\"href\", origElemData.href);\n }\n numberOverlayMap.delete(elems[i]);\n } else {\n dbg(\"element not in map:\", elems[i]);\n }\n }\n}\n\nfunction clearPoolInterval(poolId) {\n clearInterval(poolIntervals[poolId]);\n delete poolIntervals[poolId];\n}\n\nfunction clearPoolIntervals() {\n for (var poolId in poolIntervals) {\n clearPoolInterval(poolId);\n }\n}\n\nasync function getPoolNumber({\n poolId,\n apiUrl,\n number = null,\n context = null\n}) {\n var payload = {\n pool_id: poolId,\n number: number,\n context: context,\n properties: {\n zar: getStorage()\n }\n };\n var resp = await httpPost({ url: `${apiUrl}/number_pool`, data: payload });\n return resp;\n}\n\nfunction poolActive() {\n return (\n window.zarPoolData &&\n window.zarPoolData.status === NUMBER_POOL_SUCCESS &&\n window.zarPoolData.number\n );\n}\n\nfunction drainPoolDataLayer() {\n if (\n !window.zarPoolDataLayer ||\n !Array.isArray(window.zarPoolDataLayer) ||\n window.zarPoolDataLayer.length === 0\n ) {\n return null;\n }\n\n var mergedObject = {};\n for (var i = 0; i < window.zarPoolDataLayer.length; i++) {\n var obj = window.zarPoolDataLayer[i];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n mergedObject[key] = obj[key];\n }\n }\n }\n\n window.zarPoolDataLayer.length = 0;\n return mergedObject;\n}\n\nasync function updateTrackingNumberContext({\n apiUrl,\n poolId,\n number,\n context\n}) {\n if (!poolActive()) {\n warn(\"no valid pool data, not updating context\");\n return;\n }\n\n var payload = {\n pool_id: poolId,\n number: number,\n context: context,\n properties: {\n zar: getStorage()\n }\n };\n var resp = await httpPost({ url: `${apiUrl}/update_number`, data: payload });\n return resp;\n}\n\nasync function getPoolStats({ apiUrl, key = null, with_contexts = false }) {\n var params = {\n key,\n with_contexts\n };\n var resp = await httpGet({\n url: `${apiUrl}/number_pool_stats`,\n params: params\n });\n return resp;\n}\n\nasync function renewTrackingPool({\n overlayElements,\n apiUrl = getDefaultApiUrl(),\n contextCallback = null,\n initCallback = null,\n checkLastRenewal = true\n} = {}) {\n if (stopAllRenewals) {\n return { status: NUMBER_POOL_ERROR, msg: \"stopped\" };\n }\n\n const poolId = window.zarPoolData.pool_id;\n const number = window.zarPoolData.number;\n\n // Skip if requested and the last attempt was too recent\n var now = Date.now();\n var last = lastRenewalAttemptMs[poolId];\n if (\n checkLastRenewal &&\n last &&\n now - last < NUMBER_POOL_RENEWAL_MIN_TIME_MS\n ) {\n return { status: NUMBER_POOL_SUCCESS };\n }\n\n lastRenewalAttemptMs[poolId] = now;\n\n var context = drainPoolDataLayer() || {};\n if (contextCallback) {\n context = contextCallback(context) || {};\n }\n\n try {\n var resp = await getPoolNumber({ poolId, apiUrl, number, context });\n } catch (e) {\n var msg = \"error getting number: \" + JSON.stringify(e);\n warn(msg);\n getNumberFailureCount++;\n if (getNumberFailureCount >= MAX_GET_NUMBER_FAILURES) {\n warn(\"max failures, stopping pool\");\n stopAllRenewals = true;\n clearPoolIntervals();\n if (overlayElements) {\n revertOverlayNumbers({ elems: overlayElements });\n }\n }\n return { status: NUMBER_POOL_ERROR, msg };\n }\n\n if (resp.status === NUMBER_POOL_SUCCESS && resp.number) {\n var force = false;\n if (resp.number !== window.zarPoolData.number) {\n warn(\n \"number changed from \" +\n window.zarPoolData.number +\n \" to \" +\n resp.number\n );\n window.zarPoolData.number = resp.number;\n force = true;\n }\n if (overlayElements) {\n overlayPhoneNumber({\n elems: overlayElements,\n number: resp.number,\n force\n });\n }\n } else {\n if (overlayElements) {\n revertOverlayNumbers({ elems: overlayElements });\n }\n if (poolIntervals[poolId]) {\n clearInterval(poolIntervals[poolId]);\n delete poolIntervals[poolId];\n }\n }\n\n if (initCallback) {\n resp.renew = true;\n initCallback(resp);\n }\n\n return resp;\n}\n\nfunction getPoolId(poolId) {\n if (isFunc(poolId)) return poolId();\n return poolId;\n}\n\nfunction initPoolDataLayerObserver(apiUrl) {\n if (window.zarPoolDLObserverDone) {\n return;\n }\n\n if (!poolActive()) {\n return;\n }\n\n var originalPush = window.zarPoolDataLayer.push;\n window.zarPoolDataLayer.push = function (...args) {\n var result = originalPush.apply(this, args);\n var context = drainPoolDataLayer();\n if (!context) {\n return result;\n }\n updateTrackingNumberContext({\n apiUrl,\n poolId: window.zarPoolData.pool_id,\n number: window.zarPoolData.number,\n context\n });\n return result;\n };\n\n // Do an initial drain in case data was added between contextCallback\n // and the observer being set up.\n var context = drainPoolDataLayer();\n if (context) {\n updateTrackingNumberContext({\n apiUrl,\n poolId: window.zarPoolData.pool_id,\n number: window.zarPoolData.number,\n context\n });\n }\n\n window.zarPoolDLObserverDone = true;\n}\n\nasync function initTrackingPool({ poolData, poolConfig, apiUrl } = {}) {\n var msg;\n stopAllRenewals = false;\n\n if (\n !poolConfig ||\n !poolConfig.poolId ||\n !poolConfig.overlayQuerySelector ||\n !apiUrl\n ) {\n msg = \"missing pool config: \" + JSON.stringify(poolConfig);\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return poolIntervals;\n }\n\n var poolId = getPoolId(poolConfig.poolId);\n if (!poolId) {\n msg = \"no pool ID\";\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return poolIntervals;\n }\n\n if (!poolData) {\n var context = drainPoolDataLayer() || {};\n if (poolConfig.contextCallback) {\n context = poolConfig.contextCallback(context) || {};\n }\n\n try {\n poolData = await getPoolNumber({ poolId, apiUrl, number: null, context });\n } catch (e) {\n msg = \"error getting number on init: \" + JSON.stringify(e);\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return poolIntervals;\n }\n }\n\n window.zarPoolData = poolData;\n\n if (poolActive()) {\n lastRenewalAttemptMs[poolId] = Date.now();\n\n try {\n initPoolDataLayerObserver(apiUrl);\n } catch (e) {\n warn(\"data layer error: \" + JSON.stringify(e));\n }\n\n afterDOMContentLoaded(function () {\n var overlayElements = document.querySelectorAll(\n poolConfig.overlayQuerySelector\n );\n if (!overlayElements) {\n var msg = \"No elems found for:\" + poolConfig.overlayQuerySelector;\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return;\n }\n\n overlayPhoneNumber({ elems: overlayElements, number: poolData.number });\n\n var renewalInterval =\n poolConfig.renewalInterval || NUMBER_POOL_RENEWAL_INTERVAL_MS;\n\n var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback,\n initCallback: poolConfig.initCallback\n });\n } catch (e) {\n var msg = \"error on interval: \" + JSON.stringify(e);\n warn(msg);\n }\n }, renewalInterval);\n\n poolIntervals[poolData.pool_id] = interval;\n if (poolConfig.initCallback) {\n poolConfig.initCallback(poolData);\n }\n\n var forceRenewOnReturn = function (opts = {}) {\n try {\n if (!poolActive()) return;\n if (\n (opts.type === \"vc\" && document.visibilityState === \"visible\") ||\n (opts.type === \"ps\" && opts.persisted === true)\n ) {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback,\n initCallback: poolConfig.initCallback\n });\n }\n } catch (e) {\n warn(\"error on renew: \" + JSON.stringify(e));\n }\n };\n\n document.addEventListener(\n \"visibilitychange\",\n function () {\n forceRenewOnReturn({ type: \"vc\" });\n },\n { passive: true }\n );\n\n window.addEventListener(\n \"pageshow\",\n function (e) {\n forceRenewOnReturn({ type: \"ps\", persisted: e && e.persisted });\n },\n { passive: true }\n );\n });\n }\n\n return poolIntervals;\n}\n\nfunction zar({ apiUrl, poolConfig }) {\n initIDs();\n\n return {\n name: \"zar\",\n config: { apiUrl, poolConfig },\n initialize: function ({ config }) {},\n loaded: function () {\n return true;\n },\n pageStart: function ({ payload, config, instance }) {\n payload.properties.zar = getStorage();\n payload.properties.referrer = document.referrer;\n payload.properties.is_bot = isBot();\n\n try {\n var pcfg = config.poolConfig;\n if (pcfg && pcfg.poolId) {\n payload.properties.pool_id = getPoolId(pcfg.poolId);\n var context = drainPoolDataLayer() || {};\n if (pcfg.contextCallback) {\n payload.properties.pool_context =\n pcfg.contextCallback(context) || {};\n }\n }\n } catch (e) {\n warn(\"error getting pool id: \" + JSON.stringify(e));\n }\n return payload;\n },\n page: async function ({ payload, options, instance, config }) {\n dbg(\"page\", payload, options, config);\n var tries = 0;\n var maxTries = 3;\n var res;\n while (tries < maxTries) {\n try {\n res = await httpPost({ url: `${config.apiUrl}/page`, data: payload });\n break;\n } catch (e) {\n tries++;\n if (tries >= maxTries) {\n warn(\"error posting page: \" + JSON.stringify(e));\n throw e;\n }\n await new Promise((r) => setTimeout(r, 1000));\n }\n }\n if (res && res.pool_data) {\n initTrackingPool({\n poolData: res.pool_data,\n poolConfig: config.poolConfig,\n apiUrl: config.apiUrl\n });\n }\n },\n trackStart: function ({ payload, config, instance }) {\n payload.properties.zar = getStorage();\n payload.properties.url = window.location.href;\n payload.properties.referrer = document.referrer;\n return payload;\n },\n track: function ({ payload, options, instance, config }) {\n dbg(\"track\", payload);\n httpPost({ url: `${config.apiUrl}/track`, data: payload, beacon: true });\n },\n methods: {\n apiUrl() {\n return apiUrl;\n },\n poolConfig() {\n return poolConfig;\n },\n initIDs() {\n return initIDs();\n },\n getIDs() {\n return getIDs();\n },\n getStorage() {\n return getStorage();\n },\n getVID() {\n return getID(VID_KEY);\n },\n isBot() {\n return isBot();\n },\n initTrackingPool({ poolConfig }) {\n var plugin = this.instance.plugins.zar;\n return initTrackingPool({\n poolData: null,\n poolConfig: Object.assign(plugin.poolConfig(), poolConfig || {}),\n apiUrl: plugin.apiUrl()\n });\n },\n updateTrackingNumberContext({ number, context }) {\n var plugin = this.instance.plugins.zar;\n var poolConfig = plugin.poolConfig();\n return updateTrackingNumberContext({\n apiUrl: this.instance.plugins.zar.apiUrl(),\n poolId: getPoolId(poolConfig.poolId),\n number,\n context\n });\n },\n getPoolIntervals() {\n return poolIntervals;\n },\n clearPoolInterval({ poolId }) {\n clearPoolInterval(poolId);\n },\n clearPoolIntervals() {\n clearPoolIntervals();\n },\n extractPhoneNumbers({ elems }) {\n var res = [];\n for (var i = 0; i < elems.length; i++) {\n var elemRes = extractPhoneNumber({ elem: elems[i] });\n res.push(elemRes);\n }\n return res;\n },\n overlayPhoneNumber({ overlayElements, number }) {\n overlayPhoneNumber({ elems: overlayElements, number });\n },\n revertOverlayNumbers({ overlayElements }) {\n revertOverlayNumbers({ elems: overlayElements });\n },\n getPoolStats({ key = null, with_contexts = false }) {\n return getPoolStats({\n apiUrl: this.instance.plugins.zar.apiUrl(),\n key,\n with_contexts\n });\n }\n }\n };\n}\n\nfunction init({\n app,\n ga4Config = null,\n facebookConfig = null,\n apiUrl = null,\n poolConfig = null\n}) {\n if (!apiUrl) {\n apiUrl = getDefaultApiUrl();\n }\n\n var plugins = [zar({ apiUrl, poolConfig })];\n if (ga4Config) {\n plugins.push(googleAnalytics4(ga4Config));\n }\n if (facebookConfig) {\n plugins.push(facebook(facebookConfig));\n }\n\n return Analytics({ app, plugins });\n}\n\n// Internal test helpers export\nexport const __test__ = {\n extractPhoneNumber,\n overlayPhoneNumber,\n revertOverlayNumbers,\n drainPoolDataLayer,\n getPoolId\n};\n\nexport { init, zar, Analytics };\n"],"names":["Analytics","app","plugins","instance","payload","runPage","event","properties","options","runTrack","args","__async","runReset","p","k","fn","bound","_","hashRegex","currentUrl","getPageData","pageData","title","referrer","innerWidth","innerHeight","url","page","_0","next","base","props","perCallPlugins","isDisabled","facebookScriptInit","f","b","e","v","n","t","s","facebookInit","trackingId","facebook","pluginConfig","config","gtag","gtagInit","configParams","setParams","scriptId","head","script","googleAnalytics4","customMap","i","customDim","urlParams","DEBUG","zarGlobal","undef","dbg","warn","msg","isFunc","value","isBot","ua","bots","r","afterDOMContentLoaded","func","supportsSessionStorage","hasSessionStorage","getSessionStorage","key","globalValue","setSessionStorage","value_str","makeRequest","method","data","json","resolve","reject","xhr","formatParams","params","postBeacon","blob","httpGet","finalUrl","httpPost","beacon","finalData","res","VID_KEY","NUMBER_POOL_SUCCESS","NUMBER_POOL_ERROR","NUMBER_POOL_RENEWAL_INTERVAL_MS","NUMBER_POOL_RENEWAL_MIN_TIME_MS","getNumberFailureCount","MAX_GET_NUMBER_FAILURES","poolIntervals","lastRenewalAttemptMs","stopAllRenewals","numberOverlayMap","generateVisitId","initId","generator","getter","setter","id","isNew","origReferrer","idObj","result","initIDs","vidResult","getDefaultApiUrl","getIDObj","getID","obj","getStorage","getIDs","extractPhoneNumber","elem","numberText","number","href","regex","text","html","match","overlayPhoneNumber","elems","force","origNum","overlayNum","elemNum","overlay","numberHtml","revertOverlayNumbers","currentHTML","origElemData","origHTML","clearPoolInterval","poolId","clearPoolIntervals","getPoolNumber","apiUrl","context","resp","poolActive","drainPoolDataLayer","mergedObject","updateTrackingNumberContext","getPoolStats","with_contexts","renewTrackingPool","overlayElements","contextCallback","initCallback","checkLastRenewal","now","last","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","renewalInterval","interval","forceRenewOnReturn","opts","zar","pcfg","tries","maxTries","plugin","elemRes","init","ga4Config","facebookConfig","__test__"],"mappings":"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"}
1
+ {"version":3,"file":"zar.es.js","sources":["../src/analyticsLite.js","../src/facebook.js","../src/googleAnalytics4.js","../src/utils.js","../src/zar.js"],"sourcesContent":["/* eslint-disable no-empty */\nexport function Analytics({ app, plugins = [] } = {}) {\n const instance = {\n app,\n plugins: {},\n page: (payload = {}) => runPage(instance, payload),\n track: (event, properties = {}, options) =>\n runTrack(\n instance,\n options ? { event, properties, options } : { event, properties }\n ),\n reset: async (...args) => runReset(instance, ...args)\n };\n\n // Register plugins and bind/hoist methods to plugin object\n plugins.forEach((p) => {\n if (!p || !p.name) return;\n p.instance = instance;\n if (p.methods) {\n Object.keys(p.methods).forEach((k) => {\n const fn = p.methods[k];\n if (typeof fn === \"function\") {\n const bound = fn.bind(p);\n p.methods[k] = bound;\n p[k] = bound;\n }\n });\n }\n instance.plugins[p.name] = p;\n });\n\n // Initialize plugins\n plugins.forEach((p) => {\n try {\n p.initialize && p.initialize({ config: p.config, instance });\n } catch (_) {}\n });\n\n return instance;\n}\n\nconst hashRegex = /#.*$/;\n\nfunction currentUrl() {\n if (typeof window === \"undefined\") return \"\";\n return window.location.href.replace(hashRegex, \"\");\n}\n\nfunction getPageData(pageData = {}) {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return pageData;\n }\n const { title, referrer } = document;\n const { innerWidth, innerHeight } = window;\n const url = currentUrl();\n const page = {\n title: title,\n url: url,\n width: innerWidth,\n height: innerHeight\n };\n if (referrer && referrer !== \"\") {\n page.referrer = referrer;\n }\n return Object.assign({}, page, pageData);\n}\n\nasync function runPage(instance, payload = {}) {\n if (!payload.type) payload.type = \"page\";\n payload.properties = getPageData(payload.properties || {});\n\n Object.values(instance.plugins).forEach((p) => {\n if (typeof p.pageStart === \"function\") {\n try {\n const next = p.pageStart({ payload, config: p.config, instance });\n if (next) payload = next;\n } catch (_) {}\n }\n });\n\n for (const p of Object.values(instance.plugins)) {\n if (typeof p.page === \"function\") {\n try {\n await p.page({ payload, options: {}, instance, config: p.config });\n } catch (_) {}\n }\n }\n return payload;\n}\n\nasync function runTrack(instance, payload = {}) {\n if (!payload.type) payload.type = \"track\";\n const base = getPageData();\n const props = payload.properties || {};\n if (props.url === undefined) props.url = base.url;\n if (props.referrer === undefined && base.referrer !== undefined) {\n props.referrer = base.referrer;\n }\n payload.properties = props;\n\n const options = payload.options || {};\n const perCallPlugins =\n options && typeof options.plugins === \"object\" ? options.plugins : null;\n const isDisabled = (p) => perCallPlugins && perCallPlugins[p.name] === false;\n\n Object.values(instance.plugins).forEach((p) => {\n if (isDisabled(p)) return;\n if (typeof p.trackStart === \"function\") {\n try {\n const next = p.trackStart({\n payload,\n options,\n config: p.config,\n instance\n });\n if (next) payload = next;\n } catch (_) {}\n }\n });\n\n for (const p of Object.values(instance.plugins)) {\n if (isDisabled(p)) continue;\n if (typeof p.track === \"function\") {\n try {\n await p.track({ payload, options, instance, config: p.config });\n } catch (_) {}\n }\n }\n return payload;\n}\n\nasync function runReset(instance, ...args) {\n for (const p of Object.values(instance.plugins)) {\n if (typeof p.reset === \"function\") {\n try {\n await p.reset(...args);\n } catch (_) {}\n }\n }\n}\n","function facebookScriptInit(f, b, e, v, n, t, s) {\n if (f.fbq) return;\n n = f.fbq = function () {\n n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n n.push = n;\n n.loaded = !0;\n n.version = \"2.0\";\n n.queue = [];\n t = b.createElement(e);\n t.async = !0;\n t.src = v;\n s = b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t, s);\n}\n\nfunction facebookInit({ trackingId }) {\n facebookScriptInit(\n window,\n document,\n \"script\",\n \"https://connect.facebook.net/en_US/fbevents.js\"\n );\n window.fbq(\"init\", trackingId);\n}\n\nfunction facebook(pluginConfig = {}) {\n return {\n name: \"facebook\",\n config: pluginConfig,\n initialize: function ({ config, instance }) {\n if (!config.trackingId) throw new Error(\"No Facebook trackingId defined\");\n facebookInit({ trackingId: config.trackingId });\n },\n page: function ({ payload, config, instance }) {\n window.fbq(\"track\", \"PageView\");\n },\n track: function ({ payload, config, instance }) {\n window.fbq(\"trackCustom\", payload.event, payload.properties);\n },\n identify: function ({ payload, config }) {\n // not supported yet\n },\n loaded: function () {\n return !!window.fbq;\n }\n };\n}\n\nexport { facebookInit, facebook };\n","function gtag() {\n window.dataLayer.push(arguments);\n}\n\nwindow.gtag = gtag;\n\n// https://github.com/idmadj/ga-gtag/blob/master/src/index.js\nfunction gtagInit({ trackingId, configParams = {}, setParams = {} }) {\n var scriptId = 'ga-gtag';\n\n if (document.getElementById(scriptId)) return;\n\n var head = document.head;\n var script = document.createElement('script');\n script.id = scriptId;\n script.type = 'text/javascript';\n script.async = true;\n script.src = 'https://www.googletagmanager.com/gtag/js?id=' + trackingId;\n head.insertBefore(script, head.firstChild);\n\n window.dataLayer = window.dataLayer || [];\n\n gtag('js', new Date());\n if (setParams) {\n gtag('set', setParams);\n }\n gtag('config', trackingId, configParams);\n}\n\nfunction googleAnalytics4(pluginConfig = {}) {\n return {\n name: 'google-analytics-4',\n config: pluginConfig,\n initialize: function ({ config, instance }) {\n if (!config.trackingId) throw new Error('No GA trackingId defined');\n\n var configParams = {};\n var setParams = {};\n if (config.customDimensions) {\n var customMap = {};\n for (var i = 0; i < config.customDimensions.length; i++) {\n var customDim = config.customDimensions[i];\n configParams[customDim.name] = customDim.callback(instance, config);\n customMap['dimension' + (i + 1)] = customDim.name;\n }\n setParams['custom_map'] = customMap;\n }\n\n gtagInit({ trackingId: config.trackingId, configParams, setParams });\n },\n page: function ({ payload, config, instance }) {\n // no-op: GA4 sends page on init and page is just another \"event\"\n },\n track: function ({ payload, config, instance }) {\n gtag('event', payload.event, payload.properties);\n },\n identify: function ({ payload, config }) {\n // not supported yet\n },\n loaded: function () {\n return !!window.gtag;\n }\n };\n}\n\nexport { gtag, googleAnalytics4 };","export var urlParams = new URLSearchParams(window.location.search);\nvar DEBUG = urlParams.get(\"zdbg\");\nvar zarGlobal = {};\nconst undef = \"undefined\";\n\nexport function dbg() {\n if (DEBUG != 1) return;\n console.debug(...arguments);\n}\n\nexport function warn(msg) {\n console.warn(msg);\n if (window.Rollbar) {\n window.Rollbar.warning(msg);\n }\n}\n\nexport function isFunc(value) {\n return (\n value &&\n (Object.prototype.toString.call(value) === \"[object Function]\" ||\n \"function\" === typeof value ||\n value instanceof Function)\n );\n}\n\nexport function isBot() {\n try {\n var ua = navigator.userAgent || \"\";\n var bots = new RegExp(\n [\n /bot/,\n /spider/,\n /crawl/,\n /mediapartners/,\n /Google-Read-Aloud/,\n /semrush/\n ]\n .map((r) => r.source)\n .join(\"|\"),\n \"i\"\n );\n return bots.test(ua);\n } catch (e) {\n return false;\n }\n}\n\nexport function afterDOMContentLoaded(func) {\n if (\n document.readyState === \"complete\" ||\n document.readyState === \"loaded\" ||\n document.readyState === \"interactive\"\n ) {\n func();\n } else {\n window.addEventListener(\"DOMContentLoaded\", func);\n }\n}\n\n// Copied from analytics-utils to keep bundle size down\n\nvar supportsSessionStorage = hasSessionStorage();\n\nfunction hasSessionStorage() {\n if (typeof supportsSessionStorage !== undef) {\n return supportsSessionStorage;\n }\n supportsSessionStorage = true;\n try {\n sessionStorage.setItem(undef, undef);\n sessionStorage.removeItem(undef);\n } catch (e) {\n supportsSessionStorage = false;\n }\n return supportsSessionStorage;\n}\n\nexport function getSessionStorage(key) {\n // Get from SS if supported, fall back to global\n var value;\n var globalValue = zarGlobal[key];\n if (supportsSessionStorage) {\n value = sessionStorage.getItem(key);\n if (!value && globalValue) {\n value = globalValue;\n // Restore session storage\n sessionStorage.setItem(key, value);\n }\n } else {\n value = globalValue;\n }\n return value ? JSON.parse(value) : undefined;\n}\n\nexport function setSessionStorage(key, value) {\n // Set both SS (if supported) and global\n var value_str = JSON.stringify(value);\n if (supportsSessionStorage) {\n sessionStorage.setItem(key, value_str);\n }\n zarGlobal[key] = value_str;\n}\n\nexport function removeSessionStorage(key) {\n // Remove both SS (if supported) and global\n if (supportsSessionStorage) {\n sessionStorage.removeItem(key);\n }\n delete zarGlobal[key];\n}\n\nfunction makeRequest({ method, url, data, json = true }) {\n return new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open(method, url);\n xhr.withCredentials = true;\n\n if (json) {\n xhr.setRequestHeader(\"Accept\", \"application/json\");\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n }\n\n xhr.onload = function () {\n if (this.status >= 200 && this.status < 300) {\n if (json) {\n resolve(JSON.parse(xhr.response));\n } else {\n resolve(xhr.response);\n }\n } else {\n reject({\n status: this.status,\n message: xhr.statusText\n });\n }\n };\n xhr.onerror = function () {\n reject({\n status: this.status,\n message: \"Network Error\"\n });\n };\n if (data) {\n xhr.send(data);\n } else {\n xhr.send();\n }\n });\n}\n\nfunction formatParams(params) {\n return (\n \"?\" +\n Object.keys(params)\n .map(function (key) {\n return key + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\")\n );\n}\n\nasync function postBeacon({ url, data }) {\n if (\n window &&\n window.navigator &&\n typeof window.navigator.sendBeacon === \"function\" &&\n typeof window.Blob === \"function\"\n ) {\n try {\n const blob = new Blob([JSON.stringify(data)], {\n type: \"text/plain; charset=UTF-8\"\n });\n if (window.navigator.sendBeacon(url, blob)) {\n return true;\n }\n return false;\n } catch (e) {\n warn(\"postBeacon:\", e);\n return false;\n }\n }\n return false;\n}\n\nexport async function httpGet({ url, params = null, json = true }) {\n var finalUrl = url;\n if (params) {\n finalUrl = finalUrl + formatParams(params);\n }\n return await makeRequest({ method: \"GET\", url: finalUrl, json });\n}\n\nexport async function httpPost({ url, data, json = true, beacon = false }) {\n var finalData = data;\n if (json) {\n finalData = JSON.stringify(finalData);\n }\n if (beacon) {\n var res = await postBeacon({ url, data });\n if (res) {\n return;\n }\n dbg(\"Beacon failed\");\n }\n return await makeRequest({ method: \"POST\", url, data: finalData, json });\n}\n","import { Analytics } from \"./analyticsLite\";\nimport { facebook } from \"./facebook\";\nimport { googleAnalytics4 } from \"./googleAnalytics4\";\nimport {\n dbg,\n getSessionStorage,\n setSessionStorage,\n isBot,\n httpGet,\n httpPost,\n warn,\n afterDOMContentLoaded,\n isFunc\n} from \"./utils\";\n\nvar VID_KEY = \"__zar_vid\";\nvar NUMBER_POOL_SUCCESS = \"success\";\nvar NUMBER_POOL_ERROR = \"error\";\nvar NUMBER_POOL_RENEWAL_INTERVAL_MS = 30 * 1000;\nvar NUMBER_POOL_RENEWAL_MIN_TIME_MS = 10 * 1000;\n// Persist last known merged pool context so renewals still include it.\nvar POOL_LAST_CTX_KEY = \"__zar_pool_last_ctx\";\n\nvar getNumberFailureCount = 0;\nvar MAX_GET_NUMBER_FAILURES = 3;\nvar poolIntervals = {};\nvar lastRenewalAttemptMs = {};\nvar stopAllRenewals = false;\n\nwindow.zarPoolData = window.zarPoolData || null;\nwindow.zarPoolDLObserverDone = window.zarPoolDLObserverDone || false;\nwindow.zarPoolDataLayer = window.zarPoolDataLayer || [];\n\n// Tracks original phone numbers that have been replaced so\n// we can revert if necessary.\nvar numberOverlayMap = new Map();\n\nfunction generateVisitId() {\n return (\n Date.now().toString(36) + \".\" + Math.random().toString(36).substring(2)\n );\n}\n\nfunction initId(key, generator, getter, setter) {\n var id;\n var isNew = false;\n var t;\n var origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n t = Date.now();\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n t = idObj.t;\n }\n\n var result = { id, t, origReferrer, isNew };\n setter(key, result);\n return result;\n}\n\nfunction initIDs() {\n var vidResult = initId(\n VID_KEY,\n generateVisitId,\n getSessionStorage,\n setSessionStorage\n );\n return { vid: vidResult };\n}\n\nfunction getDefaultApiUrl() {\n return window.location.protocol + \"://\" + window.location.host + \"/api/v2\";\n}\n\nfunction getIDObj(key) {\n return getSessionStorage(key);\n}\n\nfunction getID(key) {\n var obj = getIDObj(key);\n return obj ? obj.id : null;\n}\n\nfunction getStorage() {\n return {\n vid: getIDObj(VID_KEY)\n };\n}\n\nfunction getIDs() {\n return {\n vid: getID(VID_KEY)\n };\n}\n\nfunction extractPhoneNumber({ elem }) {\n // NOTE: only tested for US numbers!\n var numberText = null;\n var number = null;\n var href = null;\n var regex = new RegExp(\n \"\\\\+?\\\\(?\\\\d*\\\\)? ?\\\\(?\\\\d+\\\\)?\\\\d*([\\\\s./-]?\\\\d{2,})+\",\n \"g\"\n );\n\n if (elem.href && elem.href.startsWith(\"tel:\")) {\n href = elem.href;\n }\n var text = elem.innerText;\n var html = elem.innerHTML;\n var match = regex.exec(text);\n if (match) {\n numberText = match[0].trim();\n number = numberText\n .replace(\"+\", \"\")\n .replace(/-/g, \"\")\n .replace(/ /g, \"\")\n .replace(\"(\", \"\")\n .replace(\")\", \"\")\n .replace(/^1/, \"\");\n }\n return { text, html, numberText, href, number };\n}\n\nfunction overlayPhoneNumber({ elems, number, force = false }) {\n var origNum;\n var overlayNum = number;\n if (!number.startsWith(\"+1\")) {\n overlayNum = \"+1\" + number; // NOTE: expects 10-digit US numbers\n }\n\n for (var i = 0; i < elems.length; i++) {\n if (numberOverlayMap.has(elems[i])) {\n if (force) {\n origNum = numberOverlayMap.get(elems[i]);\n } else {\n dbg(\"element already in overlay map:\", elems[i]);\n continue;\n }\n }\n\n var elemNum = extractPhoneNumber({ elem: elems[i] });\n\n if (!origNum) {\n origNum = elemNum;\n } else if (\n !force &&\n elemNum.number &&\n origNum.number &&\n origNum.number !== elemNum.number\n ) {\n warn(\n \"overlaying multiple numbers with a single number\",\n origNum.number,\n elemNum.number\n );\n }\n\n dbg(\"overlaying\", overlayNum, \"on\", elems[i]);\n\n // Store the original values if this is the first time overlaying\n if (!numberOverlayMap.has(elems[i])) {\n numberOverlayMap.set(elems[i], elemNum);\n }\n\n if (elemNum.href) {\n elems[i].href = \"tel:\" + overlayNum;\n }\n\n if (elemNum.numberText) {\n // If there is a phone number present in the text...\n elems[i].innerHTML = \"\";\n if (elemNum.text) {\n var overlay = overlayNum;\n if (elemNum.numberText.indexOf(\"-\") > -1) {\n overlay =\n overlayNum.slice(2, 5) +\n \"-\" +\n overlayNum.slice(5, 8) +\n \"-\" +\n overlayNum.slice(8, 12);\n }\n if (elemNum.html.indexOf(\"<img\") > -1) {\n var numberHtml = elemNum.html.replace(elemNum.numberText, overlay);\n elems[i].innerHTML = numberHtml;\n } else {\n var numberText = elemNum.text.replace(elemNum.numberText, overlay);\n elems[i].appendChild(document.createTextNode(numberText));\n }\n } else {\n elems[i].appendChild(document.createTextNode(overlayNum));\n }\n } else {\n dbg(\"no number text found:\", elems[i]);\n }\n }\n}\n\nfunction revertOverlayNumbers({ elems }) {\n for (var i = 0; i < elems.length; i++) {\n if (numberOverlayMap.has(elems[i])) {\n var currentHTML = elems[i].innerHTML;\n var origElemData = numberOverlayMap.get(elems[i]);\n dbg(\"orig:\", origElemData);\n var origHTML = origElemData.html;\n dbg(\"reverting\", currentHTML, \"to\", origHTML);\n // Prefer restoring original HTML; fall back to original text if HTML is empty/null\n if (origHTML !== undefined && origHTML !== null && origHTML !== \"\") {\n elems[i].innerHTML = origHTML;\n } else if (\n origElemData.text !== undefined &&\n origElemData.text !== null\n ) {\n elems[i].textContent = origElemData.text;\n } else {\n // As a last resort, clear contents\n elems[i].textContent = \"\";\n }\n if (origElemData.href) {\n elems[i].setAttribute(\"href\", origElemData.href);\n }\n numberOverlayMap.delete(elems[i]);\n } else {\n dbg(\"element not in map:\", elems[i]);\n }\n }\n}\n\nfunction clearPoolInterval(poolId) {\n clearInterval(poolIntervals[poolId]);\n delete poolIntervals[poolId];\n}\n\nfunction clearPoolIntervals() {\n for (var poolId in poolIntervals) {\n clearPoolInterval(poolId);\n }\n}\n\nasync function getPoolNumber({\n poolId,\n apiUrl,\n number = null,\n context = null\n}) {\n var payload = {\n pool_id: poolId,\n number: number,\n context: context,\n properties: {\n zar: getStorage()\n }\n };\n var resp = await httpPost({ url: `${apiUrl}/number_pool`, data: payload });\n return resp;\n}\n\nfunction poolActive() {\n return (\n window.zarPoolData &&\n window.zarPoolData.status === NUMBER_POOL_SUCCESS &&\n window.zarPoolData.number\n );\n}\n\nfunction drainPoolDataLayer() {\n if (\n !window.zarPoolDataLayer ||\n !Array.isArray(window.zarPoolDataLayer) ||\n window.zarPoolDataLayer.length === 0\n ) {\n return null;\n }\n\n var mergedObject = {};\n for (var i = 0; i < window.zarPoolDataLayer.length; i++) {\n var obj = window.zarPoolDataLayer[i];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n mergedObject[key] = obj[key];\n }\n }\n }\n\n window.zarPoolDataLayer.length = 0;\n return mergedObject;\n}\n\nfunction getLastPoolContext() {\n return getSessionStorage(POOL_LAST_CTX_KEY) || {};\n}\n\nfunction setLastPoolContext(ctx) {\n if (!ctx) return;\n // Minimal guard: only persist plain objects\n if (typeof ctx !== \"object\") return;\n setSessionStorage(POOL_LAST_CTX_KEY, ctx);\n}\n\nfunction buildPoolContext({ contextCallback = null } = {}) {\n // Merge last-known with any newly-pushed items; new values win.\n var last = getLastPoolContext() || {};\n var drained = drainPoolDataLayer() || {};\n var merged = Object.assign({}, last, drained);\n\n if (contextCallback) {\n // Let callback override final merged context (but don’t lose persistence)\n merged = contextCallback(merged) || {};\n }\n\n setLastPoolContext(merged);\n return merged;\n}\n\nasync function updateTrackingNumberContext({\n apiUrl,\n poolId,\n number,\n context\n}) {\n if (!poolActive()) {\n warn(\"no valid pool data, not updating context\");\n return;\n }\n\n var payload = {\n pool_id: poolId,\n number: number,\n context: context,\n properties: {\n zar: getStorage()\n }\n };\n var resp = await httpPost({ url: `${apiUrl}/update_number`, data: payload });\n return resp;\n}\n\nasync function getPoolStats({ apiUrl, key = null, with_contexts = false }) {\n var params = {\n key,\n with_contexts\n };\n var resp = await httpGet({\n url: `${apiUrl}/number_pool_stats`,\n params: params\n });\n return resp;\n}\n\nasync function renewTrackingPool({\n overlayElements,\n apiUrl = getDefaultApiUrl(),\n contextCallback = null,\n initCallback = null,\n checkLastRenewal = true\n} = {}) {\n if (stopAllRenewals) {\n return { status: NUMBER_POOL_ERROR, msg: \"stopped\" };\n }\n\n const poolId = window.zarPoolData.pool_id;\n const number = window.zarPoolData.number;\n\n // Skip if requested and the last attempt was too recent\n var now = Date.now();\n var last = lastRenewalAttemptMs[poolId];\n if (\n checkLastRenewal &&\n last &&\n now - last < NUMBER_POOL_RENEWAL_MIN_TIME_MS\n ) {\n return { status: NUMBER_POOL_SUCCESS };\n }\n\n lastRenewalAttemptMs[poolId] = now;\n\n var context = buildPoolContext({ contextCallback });\n\n try {\n var resp = await getPoolNumber({ poolId, apiUrl, number, context });\n } catch (e) {\n var msg = \"error getting number: \" + JSON.stringify(e);\n warn(msg);\n getNumberFailureCount++;\n if (getNumberFailureCount >= MAX_GET_NUMBER_FAILURES) {\n warn(\"max failures, stopping pool\");\n stopAllRenewals = true;\n clearPoolIntervals();\n if (overlayElements) {\n revertOverlayNumbers({ elems: overlayElements });\n }\n }\n return { status: NUMBER_POOL_ERROR, msg };\n }\n\n if (resp.status === NUMBER_POOL_SUCCESS && resp.number) {\n var force = false;\n if (resp.number !== window.zarPoolData.number) {\n warn(\n \"number changed from \" +\n window.zarPoolData.number +\n \" to \" +\n resp.number\n );\n window.zarPoolData.number = resp.number;\n force = true;\n }\n if (overlayElements) {\n overlayPhoneNumber({\n elems: overlayElements,\n number: resp.number,\n force\n });\n }\n } else {\n if (overlayElements) {\n revertOverlayNumbers({ elems: overlayElements });\n }\n if (poolIntervals[poolId]) {\n clearInterval(poolIntervals[poolId]);\n delete poolIntervals[poolId];\n }\n }\n\n if (initCallback) {\n resp.renew = true;\n initCallback(resp);\n }\n\n return resp;\n}\n\nfunction getPoolId(poolId) {\n if (isFunc(poolId)) return poolId();\n return poolId;\n}\n\nfunction initPoolDataLayerObserver(apiUrl) {\n if (window.zarPoolDLObserverDone) {\n return;\n }\n\n if (!poolActive()) {\n return;\n }\n\n var originalPush = window.zarPoolDataLayer.push;\n window.zarPoolDataLayer.push = function (...args) {\n var result = originalPush.apply(this, args);\n\n // Persist any new context immediately (even if update call fails)\n var context = buildPoolContext({ contextCallback: null });\n if (!context) {\n return result;\n }\n\n updateTrackingNumberContext({\n apiUrl,\n poolId: window.zarPoolData.pool_id,\n number: window.zarPoolData.number,\n context\n });\n return result;\n };\n\n // Do an initial drain (and persist) in case data was added before observer setup.\n var context = buildPoolContext({ contextCallback: null });\n if (context && Object.keys(context).length > 0) {\n updateTrackingNumberContext({\n apiUrl,\n poolId: window.zarPoolData.pool_id,\n number: window.zarPoolData.number,\n context\n });\n }\n\n window.zarPoolDLObserverDone = true;\n}\n\nasync function initTrackingPool({ poolData, poolConfig, apiUrl } = {}) {\n var msg;\n stopAllRenewals = false;\n\n if (\n !poolConfig ||\n !poolConfig.poolId ||\n !poolConfig.overlayQuerySelector ||\n !apiUrl\n ) {\n msg = \"missing pool config: \" + JSON.stringify(poolConfig);\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return poolIntervals;\n }\n\n var poolId = getPoolId(poolConfig.poolId);\n if (!poolId) {\n msg = \"no pool ID\";\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return poolIntervals;\n }\n\n if (!poolData) {\n var context = buildPoolContext({\n contextCallback: poolConfig.contextCallback\n });\n\n try {\n poolData = await getPoolNumber({ poolId, apiUrl, number: null, context });\n } catch (e) {\n msg = \"error getting number on init: \" + JSON.stringify(e);\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return poolIntervals;\n }\n }\n\n window.zarPoolData = poolData;\n\n if (poolActive()) {\n lastRenewalAttemptMs[poolId] = Date.now();\n\n try {\n initPoolDataLayerObserver(apiUrl);\n } catch (e) {\n warn(\"data layer error: \" + JSON.stringify(e));\n }\n\n afterDOMContentLoaded(function () {\n var overlayElements = document.querySelectorAll(\n poolConfig.overlayQuerySelector\n );\n if (!overlayElements) {\n var msg = \"No elems found for:\" + poolConfig.overlayQuerySelector;\n warn(msg);\n if (poolConfig.initCallback) {\n poolConfig.initCallback({ status: NUMBER_POOL_ERROR, msg });\n }\n return;\n }\n\n overlayPhoneNumber({ elems: overlayElements, number: poolData.number });\n\n var renewalInterval =\n poolConfig.renewalInterval || NUMBER_POOL_RENEWAL_INTERVAL_MS;\n\n var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback,\n initCallback: poolConfig.initCallback\n });\n } catch (e) {\n var msg = \"error on interval: \" + JSON.stringify(e);\n warn(msg);\n }\n }, renewalInterval);\n\n poolIntervals[poolData.pool_id] = interval;\n if (poolConfig.initCallback) {\n poolConfig.initCallback(poolData);\n }\n\n var forceRenewOnReturn = function (opts = {}) {\n try {\n if (!poolActive()) return;\n if (\n (opts.type === \"vc\" && document.visibilityState === \"visible\") ||\n (opts.type === \"ps\" && opts.persisted === true)\n ) {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback,\n initCallback: poolConfig.initCallback\n });\n }\n } catch (e) {\n warn(\"error on renew: \" + JSON.stringify(e));\n }\n };\n\n document.addEventListener(\n \"visibilitychange\",\n function () {\n forceRenewOnReturn({ type: \"vc\" });\n },\n { passive: true }\n );\n\n window.addEventListener(\n \"pageshow\",\n function (e) {\n forceRenewOnReturn({ type: \"ps\", persisted: e && e.persisted });\n },\n { passive: true }\n );\n });\n }\n\n return poolIntervals;\n}\n\nfunction zar({ apiUrl, poolConfig }) {\n initIDs();\n\n return {\n name: \"zar\",\n config: { apiUrl, poolConfig },\n initialize: function ({ config }) {},\n loaded: function () {\n return true;\n },\n pageStart: function ({ payload, config, instance }) {\n payload.properties.zar = getStorage();\n payload.properties.referrer = document.referrer;\n payload.properties.is_bot = isBot();\n\n try {\n var pcfg = config.poolConfig;\n if (pcfg && pcfg.poolId) {\n payload.properties.pool_id = getPoolId(pcfg.poolId);\n var context = drainPoolDataLayer() || {};\n if (pcfg.contextCallback) {\n payload.properties.pool_context =\n pcfg.contextCallback(context) || {};\n }\n }\n } catch (e) {\n warn(\"error getting pool id: \" + JSON.stringify(e));\n }\n return payload;\n },\n page: async function ({ payload, options, instance, config }) {\n dbg(\"page\", payload, options, config);\n var tries = 0;\n var maxTries = 3;\n var res;\n while (tries < maxTries) {\n try {\n res = await httpPost({ url: `${config.apiUrl}/page`, data: payload });\n break;\n } catch (e) {\n tries++;\n if (tries >= maxTries) {\n warn(\"error posting page: \" + JSON.stringify(e));\n throw e;\n }\n await new Promise((r) => setTimeout(r, 1000));\n }\n }\n if (res && res.pool_data) {\n initTrackingPool({\n poolData: res.pool_data,\n poolConfig: config.poolConfig,\n apiUrl: config.apiUrl\n });\n }\n },\n trackStart: function ({ payload, config, instance }) {\n payload.properties.zar = getStorage();\n payload.properties.url = window.location.href;\n payload.properties.referrer = document.referrer;\n return payload;\n },\n track: function ({ payload, options, instance, config }) {\n dbg(\"track\", payload);\n httpPost({ url: `${config.apiUrl}/track`, data: payload, beacon: true });\n },\n methods: {\n apiUrl() {\n return apiUrl;\n },\n poolConfig() {\n return poolConfig;\n },\n initIDs() {\n return initIDs();\n },\n getIDs() {\n return getIDs();\n },\n getStorage() {\n return getStorage();\n },\n getVID() {\n return getID(VID_KEY);\n },\n isBot() {\n return isBot();\n },\n initTrackingPool({ poolConfig }) {\n var plugin = this.instance.plugins.zar;\n return initTrackingPool({\n poolData: null,\n poolConfig: Object.assign(plugin.poolConfig(), poolConfig || {}),\n apiUrl: plugin.apiUrl()\n });\n },\n updateTrackingNumberContext({ number, context }) {\n var plugin = this.instance.plugins.zar;\n var poolConfig = plugin.poolConfig();\n return updateTrackingNumberContext({\n apiUrl: this.instance.plugins.zar.apiUrl(),\n poolId: getPoolId(poolConfig.poolId),\n number,\n context\n });\n },\n getPoolIntervals() {\n return poolIntervals;\n },\n clearPoolInterval({ poolId }) {\n clearPoolInterval(poolId);\n },\n clearPoolIntervals() {\n clearPoolIntervals();\n },\n extractPhoneNumbers({ elems }) {\n var res = [];\n for (var i = 0; i < elems.length; i++) {\n var elemRes = extractPhoneNumber({ elem: elems[i] });\n res.push(elemRes);\n }\n return res;\n },\n overlayPhoneNumber({ overlayElements, number }) {\n overlayPhoneNumber({ elems: overlayElements, number });\n },\n revertOverlayNumbers({ overlayElements }) {\n revertOverlayNumbers({ elems: overlayElements });\n },\n getPoolStats({ key = null, with_contexts = false }) {\n return getPoolStats({\n apiUrl: this.instance.plugins.zar.apiUrl(),\n key,\n with_contexts\n });\n }\n }\n };\n}\n\nfunction init({\n app,\n ga4Config = null,\n facebookConfig = null,\n apiUrl = null,\n poolConfig = null\n}) {\n if (!apiUrl) {\n apiUrl = getDefaultApiUrl();\n }\n\n var plugins = [zar({ apiUrl, poolConfig })];\n if (ga4Config) {\n plugins.push(googleAnalytics4(ga4Config));\n }\n if (facebookConfig) {\n plugins.push(facebook(facebookConfig));\n }\n\n return Analytics({ app, plugins });\n}\n\n// Internal test helpers export\nexport const __test__ = {\n extractPhoneNumber,\n overlayPhoneNumber,\n revertOverlayNumbers,\n drainPoolDataLayer,\n getPoolId\n};\n\nexport {\n init,\n zar,\n Analytics,\n getSessionStorage,\n setSessionStorage,\n afterDOMContentLoaded\n};\n"],"names":["Analytics","app","plugins","instance","payload","runPage","event","properties","options","runTrack","args","__async","runReset","p","k","fn","bound","_","hashRegex","currentUrl","getPageData","pageData","title","referrer","innerWidth","innerHeight","url","page","_0","next","base","props","perCallPlugins","isDisabled","facebookScriptInit","f","b","e","v","n","t","s","facebookInit","trackingId","facebook","pluginConfig","config","gtag","gtagInit","configParams","setParams","scriptId","head","script","googleAnalytics4","customMap","i","customDim","urlParams","DEBUG","zarGlobal","undef","dbg","warn","msg","isFunc","value","isBot","ua","bots","r","afterDOMContentLoaded","func","supportsSessionStorage","hasSessionStorage","getSessionStorage","key","globalValue","setSessionStorage","value_str","makeRequest","method","data","json","resolve","reject","xhr","formatParams","params","postBeacon","blob","httpGet","finalUrl","httpPost","beacon","finalData","res","VID_KEY","NUMBER_POOL_SUCCESS","NUMBER_POOL_ERROR","NUMBER_POOL_RENEWAL_INTERVAL_MS","NUMBER_POOL_RENEWAL_MIN_TIME_MS","POOL_LAST_CTX_KEY","getNumberFailureCount","MAX_GET_NUMBER_FAILURES","poolIntervals","lastRenewalAttemptMs","stopAllRenewals","numberOverlayMap","generateVisitId","initId","generator","getter","setter","id","isNew","origReferrer","idObj","result","initIDs","vidResult","getDefaultApiUrl","getIDObj","getID","obj","getStorage","getIDs","extractPhoneNumber","elem","numberText","number","href","regex","text","html","match","overlayPhoneNumber","elems","force","origNum","overlayNum","elemNum","overlay","numberHtml","revertOverlayNumbers","currentHTML","origElemData","origHTML","clearPoolInterval","poolId","clearPoolIntervals","getPoolNumber","apiUrl","context","resp","poolActive","drainPoolDataLayer","mergedObject","getLastPoolContext","setLastPoolContext","ctx","buildPoolContext","contextCallback","last","drained","merged","updateTrackingNumberContext","getPoolStats","with_contexts","renewTrackingPool","overlayElements","initCallback","checkLastRenewal","now","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","renewalInterval","interval","forceRenewOnReturn","opts","zar","pcfg","tries","maxTries","plugin","elemRes","init","ga4Config","facebookConfig","__test__"],"mappings":"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"}
package/dist/zar.iife.js CHANGED
@@ -1,2 +1,2 @@
1
- var zar=function(b){"use strict";var d=(b,x,y)=>new Promise((M,I)=>{var B=p=>{try{O(y.next(p))}catch(z){I(z)}},C=p=>{try{O(y.throw(p))}catch(z){I(z)}},O=p=>p.done?M(p.value):Promise.resolve(p.value).then(B,C);O((y=y.apply(b,x)).next())});function x({app:t,plugins:e=[]}={}){const n={app:t,plugins:{},page:(r={})=>B(n,r),track:(r,i={},a)=>C(n,a?{event:r,properties:i,options:a}:{event:r,properties:i}),reset:(...r)=>d(this,null,function*(){return O(n,...r)})};return e.forEach(r=>{!r||!r.name||(r.instance=n,r.methods&&Object.keys(r.methods).forEach(i=>{const a=r.methods[i];if(typeof a=="function"){const o=a.bind(r);r.methods[i]=o,r[i]=o}}),n.plugins[r.name]=r)}),e.forEach(r=>{try{r.initialize&&r.initialize({config:r.config,instance:n})}catch(i){}}),n}const y=/#.*$/;function M(){return typeof window=="undefined"?"":window.location.href.replace(y,"")}function I(t={}){if(typeof window=="undefined"||typeof document=="undefined")return t;const{title:e,referrer:n}=document,{innerWidth:r,innerHeight:i}=window,a=M(),o={title:e,url:a,width:r,height:i};return n&&n!==""&&(o.referrer=n),Object.assign({},o,t)}function B(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="page"),e.properties=I(e.properties||{}),Object.values(t.plugins).forEach(r=>{if(typeof r.pageStart=="function")try{const i=r.pageStart({payload:e,config:r.config,instance:t});i&&(e=i)}catch(i){}});for(const r of Object.values(t.plugins))if(typeof r.page=="function")try{yield r.page({payload:e,options:{},instance:t,config:r.config})}catch(i){}return e})}function C(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="track");const r=I(),i=e.properties||{};i.url===void 0&&(i.url=r.url),i.referrer===void 0&&r.referrer!==void 0&&(i.referrer=r.referrer),e.properties=i;const a=e.options||{},o=a&&typeof a.plugins=="object"?a.plugins:null,u=c=>o&&o[c.name]===!1;Object.values(t.plugins).forEach(c=>{if(!u(c)&&typeof c.trackStart=="function")try{const s=c.trackStart({payload:e,options:a,config:c.config,instance:t});s&&(e=s)}catch(s){}});for(const c of Object.values(t.plugins))if(!u(c)&&typeof c.track=="function")try{yield c.track({payload:e,options:a,instance:t,config:c.config})}catch(s){}return e})}function O(t,...e){return d(this,null,function*(){for(const n of Object.values(t.plugins))if(typeof n.reset=="function")try{yield n.reset(...e)}catch(r){}})}function p(t,e,n,r,i,a,o){t.fbq||(i=t.fbq=function(){i.callMethod?i.callMethod.apply(i,arguments):i.queue.push(arguments)},t._fbq||(t._fbq=i),i.push=i,i.loaded=!0,i.version="2.0",i.queue=[],a=e.createElement(n),a.async=!0,a.src=r,o=e.getElementsByTagName(n)[0],o.parentNode.insertBefore(a,o))}function z({trackingId:t}){p(window,document,"script","https://connect.facebook.net/en_US/fbevents.js"),window.fbq("init",t)}function ot(t={}){return{name:"facebook",config:t,initialize:function({config:e,instance:n}){if(!e.trackingId)throw new Error("No Facebook trackingId defined");z({trackingId:e.trackingId})},page:function({payload:e,config:n,instance:r}){window.fbq("track","PageView")},track:function({payload:e,config:n,instance:r}){window.fbq("trackCustom",e.event,e.properties)},identify:function({payload:e,config:n}){},loaded:function(){return!!window.fbq}}}function k(){window.dataLayer.push(arguments)}window.gtag=k;function ut({trackingId:t,configParams:e={},setParams:n={}}){var r="ga-gtag";if(!document.getElementById(r)){var i=document.head,a=document.createElement("script");a.id=r,a.type="text/javascript",a.async=!0,a.src="https://www.googletagmanager.com/gtag/js?id="+t,i.insertBefore(a,i.firstChild),window.dataLayer=window.dataLayer||[],k("js",new Date),n&&k("set",n),k("config",t,e)}}function ct(t={}){return{name:"google-analytics-4",config:t,initialize:function({config:e,instance:n}){if(!e.trackingId)throw new Error("No GA trackingId defined");var r={},i={};if(e.customDimensions){for(var a={},o=0;o<e.customDimensions.length;o++){var u=e.customDimensions[o];r[u.name]=u.callback(n,e),a["dimension"+(o+1)]=u.name}i.custom_map=a}ut({trackingId:e.trackingId,configParams:r,setParams:i})},page:function({payload:e,config:n,instance:r}){},track:function({payload:e,config:n,instance:r}){k("event",e.event,e.properties)},identify:function({payload:e,config:n}){},loaded:function(){return!!window.gtag}}}var st=new URLSearchParams(window.location.search),ft=st.get("zdbg"),V={};const L="undefined";function g(){ft==1&&console.debug(...arguments)}function f(t){console.warn(t),window.Rollbar&&window.Rollbar.warning(t)}function lt(t){return t&&(Object.prototype.toString.call(t)==="[object Function]"||typeof t=="function"||t instanceof Function)}function $(){try{var t=navigator.userAgent||"",e=new RegExp([/bot/,/spider/,/crawl/,/mediapartners/,/Google-Read-Aloud/,/semrush/].map(n=>n.source).join("|"),"i");return e.test(t)}catch(n){return!1}}function dt(t){document.readyState==="complete"||document.readyState==="loaded"||document.readyState==="interactive"?t():window.addEventListener("DOMContentLoaded",t)}var h=wt();function wt(){if(typeof h!==L)return h;h=!0;try{sessionStorage.setItem(L,L),sessionStorage.removeItem(L)}catch(t){h=!1}return h}function H(t){var e,n=V[t];return h?(e=sessionStorage.getItem(t),!e&&n&&(e=n,sessionStorage.setItem(t,e))):e=n,e?JSON.parse(e):void 0}function vt(t,e){var n=JSON.stringify(e);h&&sessionStorage.setItem(t,n),V[t]=n}function W({method:t,url:e,data:n,json:r=!0}){return new Promise(function(i,a){var o=new XMLHttpRequest;o.open(t,e),o.withCredentials=!0,r&&(o.setRequestHeader("Accept","application/json"),o.setRequestHeader("Content-Type","application/json")),o.onload=function(){this.status>=200&&this.status<300?i(r?JSON.parse(o.response):o.response):a({status:this.status,message:o.statusText})},o.onerror=function(){a({status:this.status,message:"Network Error"})},n?o.send(n):o.send()})}function gt(t){return"?"+Object.keys(t).map(function(e){return e+"="+encodeURIComponent(t[e])}).join("&")}function pt(n){return d(this,arguments,function*({url:t,data:e}){if(window&&window.navigator&&typeof window.navigator.sendBeacon=="function"&&typeof window.Blob=="function")try{const r=new Blob([JSON.stringify(e)],{type:"text/plain; charset=UTF-8"});return!!window.navigator.sendBeacon(t,r)}catch(r){return f("postBeacon:"),!1}return!1})}function bt(r){return d(this,arguments,function*({url:t,params:e=null,json:n=!0}){var i=t;return e&&(i=i+gt(e)),yield W({method:"GET",url:i,json:n})})}function R(i){return d(this,arguments,function*({url:t,data:e,json:n=!0,beacon:r=!1}){var a=e;if(n&&(a=JSON.stringify(a)),r){var o=yield pt({url:t,data:e});if(o)return;g("Beacon failed")}return yield W({method:"POST",url:t,data:a,json:n})})}var N="__zar_vid",U="success",P="error",ht=30*1e3,mt=10*1e3,Q=0,yt=3,v={},q={},J=!1;window.zarPoolData=window.zarPoolData||null,window.zarPoolDLObserverDone=window.zarPoolDLObserverDone||!1,window.zarPoolDataLayer=window.zarPoolDataLayer||[];var m=new Map;function Pt(){return Date.now().toString(36)+"."+Math.random().toString(36).substring(2)}function St(t,e,n,r){var i,a=!1,o,u=null,c=n(t);!c||!c.id?(i=e(),u=document.referrer,o=Date.now(),a=!0,g("new ID for",t,"-",i)):(i=c.id,u=c.origReferrer,o=c.t);var s={id:i,t:o,origReferrer:u,isNew:a};return r(t,s),s}function X(){var t=St(N,Pt,H,vt);return{vid:t}}function K(){return window.location.protocol+"://"+window.location.host+"/api/v2"}function Y(t){return H(t)}function Z(t){var e=Y(t);return e?e.id:null}function D(){return{vid:Y(N)}}function _t(){return{vid:Z(N)}}function F({elem:t}){var e=null,n=null,r=null,i=new RegExp("\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]?\\d{2,})+","g");t.href&&t.href.startsWith("tel:")&&(r=t.href);var a=t.innerText,o=t.innerHTML,u=i.exec(a);return u&&(e=u[0].trim(),n=e.replace("+","").replace(/-/g,"").replace(/ /g,"").replace("(","").replace(")","").replace(/^1/,"")),{text:a,html:o,numberText:e,href:r,number:n}}function T({elems:t,number:e,force:n=!1}){var r,i=e;e.startsWith("+1")||(i="+1"+e);for(var a=0;a<t.length;a++){if(m.has(t[a]))if(n)r=m.get(t[a]);else{g("element already in overlay map:",t[a]);continue}var o=F({elem:t[a]});if(r?!n&&o.number&&r.number&&r.number!==o.number&&f("overlaying multiple numbers with a single number",r.number,o.number):r=o,g("overlaying",i,"on",t[a]),m.has(t[a])||m.set(t[a],o),o.href&&(t[a].href="tel:"+i),o.numberText)if(t[a].innerHTML="",o.text){var u=i;if(o.numberText.indexOf("-")>-1&&(u=i.slice(2,5)+"-"+i.slice(5,8)+"-"+i.slice(8,12)),o.html.indexOf("<img")>-1){var c=o.html.replace(o.numberText,u);t[a].innerHTML=c}else{var s=o.text.replace(o.numberText,u);t[a].appendChild(document.createTextNode(s))}}else t[a].appendChild(document.createTextNode(i));else g("no number text found:",t[a])}}function E({elems:t}){for(var e=0;e<t.length;e++)if(m.has(t[e])){var n=t[e].innerHTML,r=m.get(t[e]);g("orig:",r);var i=r.html;g("reverting",n,"to",i),i!=null&&i!==""?t[e].innerHTML=i:r.text!==void 0&&r.text!==null?t[e].textContent=r.text:t[e].textContent="",r.href&&t[e].setAttribute("href",r.href),m.delete(t[e])}else g("element not in map:",t[e])}function tt(t){clearInterval(v[t]),delete v[t]}function et(){for(var t in v)tt(t)}function rt(i){return d(this,arguments,function*({poolId:t,apiUrl:e,number:n=null,context:r=null}){var a={pool_id:t,number:n,context:r,properties:{zar:D()}},o=yield R({url:`${e}/number_pool`,data:a});return o})}function j(){return window.zarPoolData&&window.zarPoolData.status===U&&window.zarPoolData.number}function S(){if(!window.zarPoolDataLayer||!Array.isArray(window.zarPoolDataLayer)||window.zarPoolDataLayer.length===0)return null;for(var t={},e=0;e<window.zarPoolDataLayer.length;e++){var n=window.zarPoolDataLayer[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return window.zarPoolDataLayer.length=0,t}function G(i){return d(this,arguments,function*({apiUrl:t,poolId:e,number:n,context:r}){if(!j()){f("no valid pool data, not updating context");return}var a={pool_id:e,number:n,context:r,properties:{zar:D()}},o=yield R({url:`${t}/update_number`,data:a});return o})}function It(r){return d(this,arguments,function*({apiUrl:t,key:e=null,with_contexts:n=!1}){var i={key:e,with_contexts:n},a=yield bt({url:`${t}/number_pool_stats`,params:i});return a})}function nt(){return d(this,arguments,function*({overlayElements:t,apiUrl:e=K(),contextCallback:n=null,initCallback:r=null,checkLastRenewal:i=!0}={}){if(J)return{status:P,msg:"stopped"};const a=window.zarPoolData.pool_id,o=window.zarPoolData.number;var u=Date.now(),c=q[a];if(i&&c&&u-c<mt)return{status:U};q[a]=u;var s=S()||{};n&&(s=n(s)||{});try{var l=yield rt({poolId:a,apiUrl:e,number:o,context:s})}catch(Dt){var w="error getting number: "+JSON.stringify(Dt);return f(w),Q++,Q>=yt&&(f("max failures, stopping pool"),J=!0,et(),t&&E({elems:t})),{status:P,msg:w}}if(l.status===U&&l.number){var _=!1;l.number!==window.zarPoolData.number&&(f("number changed from "+window.zarPoolData.number+" to "+l.number),window.zarPoolData.number=l.number,_=!0),t&&T({elems:t,number:l.number,force:_})}else t&&E({elems:t}),v[a]&&(clearInterval(v[a]),delete v[a]);return r&&(l.renew=!0,r(l)),l})}function A(t){return lt(t)?t():t}function Ot(t){if(!window.zarPoolDLObserverDone&&j()){var e=window.zarPoolDataLayer.push;window.zarPoolDataLayer.push=function(...r){var i=e.apply(this,r),a=S();return a&&G({apiUrl:t,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:a}),i};var n=S();n&&G({apiUrl:t,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:n}),window.zarPoolDLObserverDone=!0}}function at(){return d(this,arguments,function*({poolData:t,poolConfig:e,apiUrl:n}={}){var r;if(J=!1,!e||!e.poolId||!e.overlayQuerySelector||!n)return r="missing pool config: "+JSON.stringify(e),f(r),e.initCallback&&e.initCallback({status:P,msg:r}),v;var i=A(e.poolId);if(!i)return r="no pool ID",f(r),e.initCallback&&e.initCallback({status:P,msg:r}),v;if(!t){var a=S()||{};e.contextCallback&&(a=e.contextCallback(a)||{});try{t=yield rt({poolId:i,apiUrl:n,number:null,context:a})}catch(o){return r="error getting number on init: "+JSON.stringify(o),f(r),e.initCallback&&e.initCallback({status:P,msg:r}),v}}if(window.zarPoolData=t,j()){q[i]=Date.now();try{Ot(n)}catch(o){f("data layer error: "+JSON.stringify(o))}dt(function(){var o=document.querySelectorAll(e.overlayQuerySelector);if(!o){var u="No elems found for:"+e.overlayQuerySelector;f(u),e.initCallback&&e.initCallback({status:P,msg:u});return}T({elems:o,number:t.number});var c=e.renewalInterval||ht,s=setInterval(function(){try{nt({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback,initCallback:e.initCallback})}catch(_){var w="error on interval: "+JSON.stringify(_);f(w)}},c);v[t.pool_id]=s,e.initCallback&&e.initCallback(t);var l=function(w={}){try{if(!j())return;(w.type==="vc"&&document.visibilityState==="visible"||w.type==="ps"&&w.persisted===!0)&&nt({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback,initCallback:e.initCallback})}catch(_){f("error on renew: "+JSON.stringify(_))}};document.addEventListener("visibilitychange",function(){l({type:"vc"})},{passive:!0}),window.addEventListener("pageshow",function(w){l({type:"ps",persisted:w&&w.persisted})},{passive:!0})})}return v})}function it({apiUrl:t,poolConfig:e}){return X(),{name:"zar",config:{apiUrl:t,poolConfig:e},initialize:function({config:n}){},loaded:function(){return!0},pageStart:function({payload:n,config:r,instance:i}){n.properties.zar=D(),n.properties.referrer=document.referrer,n.properties.is_bot=$();try{var a=r.poolConfig;if(a&&a.poolId){n.properties.pool_id=A(a.poolId);var o=S()||{};a.contextCallback&&(n.properties.pool_context=a.contextCallback(o)||{})}}catch(u){f("error getting pool id: "+JSON.stringify(u))}return n},page:function(o){return d(this,arguments,function*({payload:n,options:r,instance:i,config:a}){g("page",n,r,a);for(var u=0,c=3,s;u<c;)try{s=yield R({url:`${a.apiUrl}/page`,data:n});break}catch(l){if(u++,u>=c)throw f("error posting page: "+JSON.stringify(l)),l;yield new Promise(w=>setTimeout(w,1e3))}s&&s.pool_data&&at({poolData:s.pool_data,poolConfig:a.poolConfig,apiUrl:a.apiUrl})})},trackStart:function({payload:n,config:r,instance:i}){return n.properties.zar=D(),n.properties.url=window.location.href,n.properties.referrer=document.referrer,n},track:function({payload:n,options:r,instance:i,config:a}){g("track",n),R({url:`${a.apiUrl}/track`,data:n,beacon:!0})},methods:{apiUrl(){return t},poolConfig(){return e},initIDs(){return X()},getIDs(){return _t()},getStorage(){return D()},getVID(){return Z(N)},isBot(){return $()},initTrackingPool({poolConfig:n}){var r=this.instance.plugins.zar;return at({poolData:null,poolConfig:Object.assign(r.poolConfig(),n||{}),apiUrl:r.apiUrl()})},updateTrackingNumberContext({number:n,context:r}){var i=this.instance.plugins.zar,a=i.poolConfig();return G({apiUrl:this.instance.plugins.zar.apiUrl(),poolId:A(a.poolId),number:n,context:r})},getPoolIntervals(){return v},clearPoolInterval({poolId:n}){tt(n)},clearPoolIntervals(){et()},extractPhoneNumbers({elems:n}){for(var r=[],i=0;i<n.length;i++){var a=F({elem:n[i]});r.push(a)}return r},overlayPhoneNumber({overlayElements:n,number:r}){T({elems:n,number:r})},revertOverlayNumbers({overlayElements:n}){E({elems:n})},getPoolStats({key:n=null,with_contexts:r=!1}){return It({apiUrl:this.instance.plugins.zar.apiUrl(),key:n,with_contexts:r})}}}}function zt({app:t,ga4Config:e=null,facebookConfig:n=null,apiUrl:r=null,poolConfig:i=null}){r||(r=K());var a=[it({apiUrl:r,poolConfig:i})];return e&&a.push(ct(e)),n&&a.push(ot(n)),x({app:t,plugins:a})}const kt={extractPhoneNumber:F,overlayPhoneNumber:T,revertOverlayNumbers:E,drainPoolDataLayer:S,getPoolId:A};return b.Analytics=x,b.__test__=kt,b.init=zt,b.zar=it,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"}),b}({});
1
+ var zar=function(v){"use strict";var d=(v,D,m)=>new Promise((M,_)=>{var B=b=>{try{O(m.next(b))}catch(I){_(I)}},U=b=>{try{O(m.throw(b))}catch(I){_(I)}},O=b=>b.done?M(b.value):Promise.resolve(b.value).then(B,U);O((m=m.apply(v,D)).next())});function D({app:t,plugins:e=[]}={}){const n={app:t,plugins:{},page:(r={})=>B(n,r),track:(r,i={},a)=>U(n,a?{event:r,properties:i,options:a}:{event:r,properties:i}),reset:(...r)=>d(this,null,function*(){return O(n,...r)})};return e.forEach(r=>{!r||!r.name||(r.instance=n,r.methods&&Object.keys(r.methods).forEach(i=>{const a=r.methods[i];if(typeof a=="function"){const o=a.bind(r);r.methods[i]=o,r[i]=o}}),n.plugins[r.name]=r)}),e.forEach(r=>{try{r.initialize&&r.initialize({config:r.config,instance:n})}catch(i){}}),n}const m=/#.*$/;function M(){return typeof window=="undefined"?"":window.location.href.replace(m,"")}function _(t={}){if(typeof window=="undefined"||typeof document=="undefined")return t;const{title:e,referrer:n}=document,{innerWidth:r,innerHeight:i}=window,a=M(),o={title:e,url:a,width:r,height:i};return n&&n!==""&&(o.referrer=n),Object.assign({},o,t)}function B(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="page"),e.properties=_(e.properties||{}),Object.values(t.plugins).forEach(r=>{if(typeof r.pageStart=="function")try{const i=r.pageStart({payload:e,config:r.config,instance:t});i&&(e=i)}catch(i){}});for(const r of Object.values(t.plugins))if(typeof r.page=="function")try{yield r.page({payload:e,options:{},instance:t,config:r.config})}catch(i){}return e})}function U(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="track");const r=_(),i=e.properties||{};i.url===void 0&&(i.url=r.url),i.referrer===void 0&&r.referrer!==void 0&&(i.referrer=r.referrer),e.properties=i;const a=e.options||{},o=a&&typeof a.plugins=="object"?a.plugins:null,u=c=>o&&o[c.name]===!1;Object.values(t.plugins).forEach(c=>{if(!u(c)&&typeof c.trackStart=="function")try{const s=c.trackStart({payload:e,options:a,config:c.config,instance:t});s&&(e=s)}catch(s){}});for(const c of Object.values(t.plugins))if(!u(c)&&typeof c.track=="function")try{yield c.track({payload:e,options:a,instance:t,config:c.config})}catch(s){}return e})}function O(t,...e){return d(this,null,function*(){for(const n of Object.values(t.plugins))if(typeof n.reset=="function")try{yield n.reset(...e)}catch(r){}})}function b(t,e,n,r,i,a,o){t.fbq||(i=t.fbq=function(){i.callMethod?i.callMethod.apply(i,arguments):i.queue.push(arguments)},t._fbq||(t._fbq=i),i.push=i,i.loaded=!0,i.version="2.0",i.queue=[],a=e.createElement(n),a.async=!0,a.src=r,o=e.getElementsByTagName(n)[0],o.parentNode.insertBefore(a,o))}function I({trackingId:t}){b(window,document,"script","https://connect.facebook.net/en_US/fbevents.js"),window.fbq("init",t)}function lt(t={}){return{name:"facebook",config:t,initialize:function({config:e,instance:n}){if(!e.trackingId)throw new Error("No Facebook trackingId defined");I({trackingId:e.trackingId})},page:function({payload:e,config:n,instance:r}){window.fbq("track","PageView")},track:function({payload:e,config:n,instance:r}){window.fbq("trackCustom",e.event,e.properties)},identify:function({payload:e,config:n}){},loaded:function(){return!!window.fbq}}}function k(){window.dataLayer.push(arguments)}window.gtag=k;function ft({trackingId:t,configParams:e={},setParams:n={}}){var r="ga-gtag";if(!document.getElementById(r)){var i=document.head,a=document.createElement("script");a.id=r,a.type="text/javascript",a.async=!0,a.src="https://www.googletagmanager.com/gtag/js?id="+t,i.insertBefore(a,i.firstChild),window.dataLayer=window.dataLayer||[],k("js",new Date),n&&k("set",n),k("config",t,e)}}function dt(t={}){return{name:"google-analytics-4",config:t,initialize:function({config:e,instance:n}){if(!e.trackingId)throw new Error("No GA trackingId defined");var r={},i={};if(e.customDimensions){for(var a={},o=0;o<e.customDimensions.length;o++){var u=e.customDimensions[o];r[u.name]=u.callback(n,e),a["dimension"+(o+1)]=u.name}i.custom_map=a}ft({trackingId:e.trackingId,configParams:r,setParams:i})},page:function({payload:e,config:n,instance:r}){},track:function({payload:e,config:n,instance:r}){k("event",e.event,e.properties)},identify:function({payload:e,config:n}){},loaded:function(){return!!window.gtag}}}var wt=new URLSearchParams(window.location.search),gt=wt.get("zdbg"),W={};const x="undefined";function p(){gt==1&&console.debug(...arguments)}function l(t){console.warn(t),window.Rollbar&&window.Rollbar.warning(t)}function vt(t){return t&&(Object.prototype.toString.call(t)==="[object Function]"||typeof t=="function"||t instanceof Function)}function Q(){try{var t=navigator.userAgent||"",e=new RegExp([/bot/,/spider/,/crawl/,/mediapartners/,/Google-Read-Aloud/,/semrush/].map(n=>n.source).join("|"),"i");return e.test(t)}catch(n){return!1}}function X(t){document.readyState==="complete"||document.readyState==="loaded"||document.readyState==="interactive"?t():window.addEventListener("DOMContentLoaded",t)}var h=pt();function pt(){if(typeof h!==x)return h;h=!0;try{sessionStorage.setItem(x,x),sessionStorage.removeItem(x)}catch(t){h=!1}return h}function L(t){var e,n=W[t];return h?(e=sessionStorage.getItem(t),!e&&n&&(e=n,sessionStorage.setItem(t,e))):e=n,e?JSON.parse(e):void 0}function q(t,e){var n=JSON.stringify(e);h&&sessionStorage.setItem(t,n),W[t]=n}function K({method:t,url:e,data:n,json:r=!0}){return new Promise(function(i,a){var o=new XMLHttpRequest;o.open(t,e),o.withCredentials=!0,r&&(o.setRequestHeader("Accept","application/json"),o.setRequestHeader("Content-Type","application/json")),o.onload=function(){this.status>=200&&this.status<300?i(r?JSON.parse(o.response):o.response):a({status:this.status,message:o.statusText})},o.onerror=function(){a({status:this.status,message:"Network Error"})},n?o.send(n):o.send()})}function bt(t){return"?"+Object.keys(t).map(function(e){return e+"="+encodeURIComponent(t[e])}).join("&")}function ht(n){return d(this,arguments,function*({url:t,data:e}){if(window&&window.navigator&&typeof window.navigator.sendBeacon=="function"&&typeof window.Blob=="function")try{const r=new Blob([JSON.stringify(e)],{type:"text/plain; charset=UTF-8"});return!!window.navigator.sendBeacon(t,r)}catch(r){return l("postBeacon:"),!1}return!1})}function yt(r){return d(this,arguments,function*({url:t,params:e=null,json:n=!0}){var i=t;return e&&(i=i+bt(e)),yield K({method:"GET",url:i,json:n})})}function R(i){return d(this,arguments,function*({url:t,data:e,json:n=!0,beacon:r=!1}){var a=e;if(n&&(a=JSON.stringify(a)),r){var o=yield ht({url:t,data:e});if(o)return;p("Beacon failed")}return yield K({method:"POST",url:t,data:a,json:n})})}var N="__zar_vid",J="success",P="error",mt=30*1e3,Pt=10*1e3,Y="__zar_pool_last_ctx",Z=0,St=3,g={},F={},G=!1;window.zarPoolData=window.zarPoolData||null,window.zarPoolDLObserverDone=window.zarPoolDLObserverDone||!1,window.zarPoolDataLayer=window.zarPoolDataLayer||[];var y=new Map;function _t(){return Date.now().toString(36)+"."+Math.random().toString(36).substring(2)}function Ot(t,e,n,r){var i,a=!1,o,u=null,c=n(t);!c||!c.id?(i=e(),u=document.referrer,o=Date.now(),a=!0,p("new ID for",t,"-",i)):(i=c.id,u=c.origReferrer,o=c.t);var s={id:i,t:o,origReferrer:u,isNew:a};return r(t,s),s}function tt(){var t=Ot(N,_t,L,q);return{vid:t}}function et(){return window.location.protocol+"://"+window.location.host+"/api/v2"}function rt(t){return L(t)}function nt(t){var e=rt(t);return e?e.id:null}function z(){return{vid:rt(N)}}function It(){return{vid:nt(N)}}function V({elem:t}){var e=null,n=null,r=null,i=new RegExp("\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]?\\d{2,})+","g");t.href&&t.href.startsWith("tel:")&&(r=t.href);var a=t.innerText,o=t.innerHTML,u=i.exec(a);return u&&(e=u[0].trim(),n=e.replace("+","").replace(/-/g,"").replace(/ /g,"").replace("(","").replace(")","").replace(/^1/,"")),{text:a,html:o,numberText:e,href:r,number:n}}function T({elems:t,number:e,force:n=!1}){var r,i=e;e.startsWith("+1")||(i="+1"+e);for(var a=0;a<t.length;a++){if(y.has(t[a]))if(n)r=y.get(t[a]);else{p("element already in overlay map:",t[a]);continue}var o=V({elem:t[a]});if(r?!n&&o.number&&r.number&&r.number!==o.number&&l("overlaying multiple numbers with a single number",r.number,o.number):r=o,p("overlaying",i,"on",t[a]),y.has(t[a])||y.set(t[a],o),o.href&&(t[a].href="tel:"+i),o.numberText)if(t[a].innerHTML="",o.text){var u=i;if(o.numberText.indexOf("-")>-1&&(u=i.slice(2,5)+"-"+i.slice(5,8)+"-"+i.slice(8,12)),o.html.indexOf("<img")>-1){var c=o.html.replace(o.numberText,u);t[a].innerHTML=c}else{var s=o.text.replace(o.numberText,u);t[a].appendChild(document.createTextNode(s))}}else t[a].appendChild(document.createTextNode(i));else p("no number text found:",t[a])}}function C({elems:t}){for(var e=0;e<t.length;e++)if(y.has(t[e])){var n=t[e].innerHTML,r=y.get(t[e]);p("orig:",r);var i=r.html;p("reverting",n,"to",i),i!=null&&i!==""?t[e].innerHTML=i:r.text!==void 0&&r.text!==null?t[e].textContent=r.text:t[e].textContent="",r.href&&t[e].setAttribute("href",r.href),y.delete(t[e])}else p("element not in map:",t[e])}function at(t){clearInterval(g[t]),delete g[t]}function it(){for(var t in g)at(t)}function ot(i){return d(this,arguments,function*({poolId:t,apiUrl:e,number:n=null,context:r=null}){var a={pool_id:t,number:n,context:r,properties:{zar:z()}},o=yield R({url:`${e}/number_pool`,data:a});return o})}function E(){return window.zarPoolData&&window.zarPoolData.status===J&&window.zarPoolData.number}function $(){if(!window.zarPoolDataLayer||!Array.isArray(window.zarPoolDataLayer)||window.zarPoolDataLayer.length===0)return null;for(var t={},e=0;e<window.zarPoolDataLayer.length;e++){var n=window.zarPoolDataLayer[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return window.zarPoolDataLayer.length=0,t}function kt(){return L(Y)||{}}function zt(t){t&&typeof t=="object"&&q(Y,t)}function j({contextCallback:t=null}={}){var e=kt()||{},n=$()||{},r=Object.assign({},e,n);return t&&(r=t(r)||{}),zt(r),r}function H(i){return d(this,arguments,function*({apiUrl:t,poolId:e,number:n,context:r}){if(!E()){l("no valid pool data, not updating context");return}var a={pool_id:e,number:n,context:r,properties:{zar:z()}},o=yield R({url:`${t}/update_number`,data:a});return o})}function Dt(r){return d(this,arguments,function*({apiUrl:t,key:e=null,with_contexts:n=!1}){var i={key:e,with_contexts:n},a=yield yt({url:`${t}/number_pool_stats`,params:i});return a})}function ut(){return d(this,arguments,function*({overlayElements:t,apiUrl:e=et(),contextCallback:n=null,initCallback:r=null,checkLastRenewal:i=!0}={}){if(G)return{status:P,msg:"stopped"};const a=window.zarPoolData.pool_id,o=window.zarPoolData.number;var u=Date.now(),c=F[a];if(i&&c&&u-c<Pt)return{status:J};F[a]=u;var s=j({contextCallback:n});try{var f=yield ot({poolId:a,apiUrl:e,number:o,context:s})}catch(Nt){var w="error getting number: "+JSON.stringify(Nt);return l(w),Z++,Z>=St&&(l("max failures, stopping pool"),G=!0,it(),t&&C({elems:t})),{status:P,msg:w}}if(f.status===J&&f.number){var S=!1;f.number!==window.zarPoolData.number&&(l("number changed from "+window.zarPoolData.number+" to "+f.number),window.zarPoolData.number=f.number,S=!0),t&&T({elems:t,number:f.number,force:S})}else t&&C({elems:t}),g[a]&&(clearInterval(g[a]),delete g[a]);return r&&(f.renew=!0,r(f)),f})}function A(t){return vt(t)?t():t}function xt(t){if(!window.zarPoolDLObserverDone&&E()){var e=window.zarPoolDataLayer.push;window.zarPoolDataLayer.push=function(...r){var i=e.apply(this,r),a=j({contextCallback:null});return a&&H({apiUrl:t,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:a}),i};var n=j({contextCallback:null});n&&Object.keys(n).length>0&&H({apiUrl:t,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:n}),window.zarPoolDLObserverDone=!0}}function ct(){return d(this,arguments,function*({poolData:t,poolConfig:e,apiUrl:n}={}){var r;if(G=!1,!e||!e.poolId||!e.overlayQuerySelector||!n)return r="missing pool config: "+JSON.stringify(e),l(r),e.initCallback&&e.initCallback({status:P,msg:r}),g;var i=A(e.poolId);if(!i)return r="no pool ID",l(r),e.initCallback&&e.initCallback({status:P,msg:r}),g;if(!t){var a=j({contextCallback:e.contextCallback});try{t=yield ot({poolId:i,apiUrl:n,number:null,context:a})}catch(o){return r="error getting number on init: "+JSON.stringify(o),l(r),e.initCallback&&e.initCallback({status:P,msg:r}),g}}if(window.zarPoolData=t,E()){F[i]=Date.now();try{xt(n)}catch(o){l("data layer error: "+JSON.stringify(o))}X(function(){var o=document.querySelectorAll(e.overlayQuerySelector);if(!o){var u="No elems found for:"+e.overlayQuerySelector;l(u),e.initCallback&&e.initCallback({status:P,msg:u});return}T({elems:o,number:t.number});var c=e.renewalInterval||mt,s=setInterval(function(){try{ut({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback,initCallback:e.initCallback})}catch(S){var w="error on interval: "+JSON.stringify(S);l(w)}},c);g[t.pool_id]=s,e.initCallback&&e.initCallback(t);var f=function(w={}){try{if(!E())return;(w.type==="vc"&&document.visibilityState==="visible"||w.type==="ps"&&w.persisted===!0)&&ut({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback,initCallback:e.initCallback})}catch(S){l("error on renew: "+JSON.stringify(S))}};document.addEventListener("visibilitychange",function(){f({type:"vc"})},{passive:!0}),window.addEventListener("pageshow",function(w){f({type:"ps",persisted:w&&w.persisted})},{passive:!0})})}return g})}function st({apiUrl:t,poolConfig:e}){return tt(),{name:"zar",config:{apiUrl:t,poolConfig:e},initialize:function({config:n}){},loaded:function(){return!0},pageStart:function({payload:n,config:r,instance:i}){n.properties.zar=z(),n.properties.referrer=document.referrer,n.properties.is_bot=Q();try{var a=r.poolConfig;if(a&&a.poolId){n.properties.pool_id=A(a.poolId);var o=$()||{};a.contextCallback&&(n.properties.pool_context=a.contextCallback(o)||{})}}catch(u){l("error getting pool id: "+JSON.stringify(u))}return n},page:function(o){return d(this,arguments,function*({payload:n,options:r,instance:i,config:a}){p("page",n,r,a);for(var u=0,c=3,s;u<c;)try{s=yield R({url:`${a.apiUrl}/page`,data:n});break}catch(f){if(u++,u>=c)throw l("error posting page: "+JSON.stringify(f)),f;yield new Promise(w=>setTimeout(w,1e3))}s&&s.pool_data&&ct({poolData:s.pool_data,poolConfig:a.poolConfig,apiUrl:a.apiUrl})})},trackStart:function({payload:n,config:r,instance:i}){return n.properties.zar=z(),n.properties.url=window.location.href,n.properties.referrer=document.referrer,n},track:function({payload:n,options:r,instance:i,config:a}){p("track",n),R({url:`${a.apiUrl}/track`,data:n,beacon:!0})},methods:{apiUrl(){return t},poolConfig(){return e},initIDs(){return tt()},getIDs(){return It()},getStorage(){return z()},getVID(){return nt(N)},isBot(){return Q()},initTrackingPool({poolConfig:n}){var r=this.instance.plugins.zar;return ct({poolData:null,poolConfig:Object.assign(r.poolConfig(),n||{}),apiUrl:r.apiUrl()})},updateTrackingNumberContext({number:n,context:r}){var i=this.instance.plugins.zar,a=i.poolConfig();return H({apiUrl:this.instance.plugins.zar.apiUrl(),poolId:A(a.poolId),number:n,context:r})},getPoolIntervals(){return g},clearPoolInterval({poolId:n}){at(n)},clearPoolIntervals(){it()},extractPhoneNumbers({elems:n}){for(var r=[],i=0;i<n.length;i++){var a=V({elem:n[i]});r.push(a)}return r},overlayPhoneNumber({overlayElements:n,number:r}){T({elems:n,number:r})},revertOverlayNumbers({overlayElements:n}){C({elems:n})},getPoolStats({key:n=null,with_contexts:r=!1}){return Dt({apiUrl:this.instance.plugins.zar.apiUrl(),key:n,with_contexts:r})}}}}function Lt({app:t,ga4Config:e=null,facebookConfig:n=null,apiUrl:r=null,poolConfig:i=null}){r||(r=et());var a=[st({apiUrl:r,poolConfig:i})];return e&&a.push(dt(e)),n&&a.push(lt(n)),D({app:t,plugins:a})}const Rt={extractPhoneNumber:V,overlayPhoneNumber:T,revertOverlayNumbers:C,drainPoolDataLayer:$,getPoolId:A};return v.Analytics=D,v.__test__=Rt,v.afterDOMContentLoaded=X,v.getSessionStorage=L,v.init=Lt,v.setSessionStorage=q,v.zar=st,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),v}({});
2
2
  //# sourceMappingURL=zar.iife.js.map