zar 0.5.2 → 0.5.3

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.
package/dist/zar.es.js CHANGED
@@ -191,7 +191,7 @@ function ct(t = {}) {
191
191
  }
192
192
  var ft = new URLSearchParams(window.location.search), lt = ft.get("zdbg"), J = {};
193
193
  const I = "undefined";
194
- function g() {
194
+ function v() {
195
195
  lt == 1 && console.debug(...arguments);
196
196
  }
197
197
  function l(t) {
@@ -221,8 +221,8 @@ function B() {
221
221
  function wt(t) {
222
222
  document.readyState === "complete" || document.readyState === "loaded" || document.readyState === "interactive" ? t() : window.addEventListener("DOMContentLoaded", t);
223
223
  }
224
- var p = gt();
225
- function gt() {
224
+ var p = vt();
225
+ function vt() {
226
226
  if (typeof p !== I)
227
227
  return p;
228
228
  p = !0;
@@ -237,7 +237,7 @@ function F(t) {
237
237
  var e, n = J[t];
238
238
  return p ? (e = sessionStorage.getItem(t), !e && n && (e = n, sessionStorage.setItem(t, e))) : e = n, e ? JSON.parse(e) : void 0;
239
239
  }
240
- function vt(t, e) {
240
+ function gt(t, e) {
241
241
  var n = JSON.stringify(e);
242
242
  p && sessionStorage.setItem(t, n), J[t] = n;
243
243
  }
@@ -289,7 +289,7 @@ function x(i) {
289
289
  var o = yield bt({ url: t, data: e });
290
290
  if (o)
291
291
  return;
292
- g("Beacon failed");
292
+ v("Beacon failed");
293
293
  }
294
294
  return yield G({ method: "POST", url: t, data: a, json: n });
295
295
  });
@@ -304,7 +304,7 @@ function yt() {
304
304
  }
305
305
  function Pt(t, e, n, r) {
306
306
  var i, a = !1, o = null, u = n(t);
307
- !u || !u.id ? (i = e(), o = document.referrer, a = !0, g("new ID for", t, "-", i)) : (i = u.id, o = u.origReferrer);
307
+ !u || !u.id ? (i = e(), o = document.referrer, a = !0, v("new ID for", t, "-", i)) : (i = u.id, o = u.origReferrer);
308
308
  var s = { id: i, t: Date.now(), origReferrer: o, isNew: a };
309
309
  return r(t, s), s;
310
310
  }
@@ -313,7 +313,7 @@ function A() {
313
313
  k,
314
314
  yt,
315
315
  F,
316
- vt
316
+ gt
317
317
  );
318
318
  return { vid: t };
319
319
  }
@@ -354,7 +354,7 @@ function _({ elems: t, number: e, force: n = !1 }) {
354
354
  if (n)
355
355
  r = b.get(t[a]);
356
356
  else {
357
- g("element already in overlay map:", t[a]);
357
+ v("element already in overlay map:", t[a]);
358
358
  continue;
359
359
  }
360
360
  var o = E({ elem: t[a] });
@@ -362,7 +362,7 @@ function _({ elems: t, number: e, force: n = !1 }) {
362
362
  "overlaying multiple numbers with a single number",
363
363
  r.number,
364
364
  o.number
365
- ) : r = o, g("overlaying", i, "on", t[a]), b.has(t[a]) || b.set(t[a], o), o.href && (t[a].href = "tel:" + i), o.numberText)
365
+ ) : r = o, v("overlaying", i, "on", t[a]), b.has(t[a]) || b.set(t[a], o), o.href && (t[a].href = "tel:" + i), o.numberText)
366
366
  if (t[a].innerHTML = "", o.text) {
367
367
  var u = i;
368
368
  if (o.numberText.indexOf("-") > -1 && (u = i.slice(2, 5) + "-" + i.slice(5, 8) + "-" + i.slice(8, 12)), o.html.indexOf("<img") > -1) {
@@ -375,18 +375,18 @@ function _({ elems: t, number: e, force: n = !1 }) {
375
375
  } else
376
376
  t[a].appendChild(document.createTextNode(i));
377
377
  else
378
- g("no number text found:", t[a]);
378
+ v("no number text found:", t[a]);
379
379
  }
380
380
  }
381
381
  function O({ elems: t }) {
382
382
  for (var e = 0; e < t.length; e++)
383
383
  if (b.has(t[e])) {
384
384
  var n = t[e].innerHTML, r = b.get(t[e]);
385
- g("orig:", r);
385
+ v("orig:", r);
386
386
  var i = r.html;
387
- 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), b.delete(t[e]);
387
+ v("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), b.delete(t[e]);
388
388
  } else
389
- g("element not in map:", t[e]);
389
+ v("element not in map:", t[e]);
390
390
  }
391
391
  function Q(t) {
392
392
  clearInterval(w[t]), delete w[t];
@@ -475,10 +475,10 @@ function U() {
475
475
  if (r && s && u - s < i + c)
476
476
  return { status: L };
477
477
  R[a] = u;
478
- var v = y() || {};
479
- n && (v = n(v) || {});
478
+ var g = y() || {};
479
+ n && (g = n(g) || {});
480
480
  try {
481
- var f = yield K({ poolId: a, apiUrl: e, number: o, context: v });
481
+ var f = yield K({ poolId: a, apiUrl: e, number: o, context: g });
482
482
  } catch (Y) {
483
483
  var h = "error getting number: " + JSON.stringify(Y);
484
484
  return l(h), C++, C >= mt && (l("max failures, stopping pool"), N = !0, X(), t && O({ elems: t })), { status: m, msg: h };
@@ -555,17 +555,30 @@ function M() {
555
555
  return;
556
556
  }
557
557
  _({ elems: o, number: t.number });
558
- var s = e.renewalInterval || $, c = function(f = {}) {
558
+ var s = e.renewalInterval || $, c = setInterval(function() {
559
+ try {
560
+ U({
561
+ overlayElements: o,
562
+ apiUrl: n,
563
+ contextCallback: e.contextCallback
564
+ });
565
+ } catch (h) {
566
+ var f = "error on interval: " + JSON.stringify(h);
567
+ l(f);
568
+ }
569
+ }, s);
570
+ w[t.pool_id] = c, e.initCallback && e.initCallback(t);
571
+ var g = function(f = {}) {
559
572
  try {
560
573
  if (!D())
561
574
  return;
562
- (f.type === "vc" && document.visibilityState === "visible" || f.type === "ps" && f.persisted === !0) && (console.log("renew on", f.type), U({
575
+ (f.type === "vc" && document.visibilityState === "visible" || f.type === "ps" && f.persisted === !0) && U({
563
576
  overlayElements: o,
564
577
  apiUrl: n,
565
578
  contextCallback: e.contextCallback,
566
579
  checkLastRenewal: !0,
567
580
  renewalInterval: s
568
- }));
581
+ });
569
582
  } catch (h) {
570
583
  l("error on renew: " + JSON.stringify(h));
571
584
  }
@@ -573,29 +586,16 @@ function M() {
573
586
  document.addEventListener(
574
587
  "visibilitychange",
575
588
  function() {
576
- c({ type: "vc" });
589
+ g({ type: "vc" });
577
590
  },
578
591
  { passive: !0 }
579
592
  ), window.addEventListener(
580
593
  "pageshow",
581
594
  function(f) {
582
- c({ type: "ps", persisted: f && f.persisted });
595
+ g({ type: "ps", persisted: f && f.persisted });
583
596
  },
584
597
  { passive: !0 }
585
598
  );
586
- var v = setInterval(function() {
587
- try {
588
- U({
589
- overlayElements: o,
590
- apiUrl: n,
591
- contextCallback: e.contextCallback
592
- });
593
- } catch (h) {
594
- var f = "error on interval: " + JSON.stringify(h);
595
- l(f);
596
- }
597
- }, s);
598
- w[t.pool_id] = v, e.initCallback && e.initCallback(t);
599
599
  });
600
600
  }
601
601
  return w;
@@ -626,14 +626,14 @@ function Ot({ apiUrl: t, poolConfig: e }) {
626
626
  },
627
627
  page: function(o) {
628
628
  return d(this, arguments, function* ({ payload: n, options: r, instance: i, config: a }) {
629
- g("page", n, r, a);
629
+ v("page", n, r, a);
630
630
  for (var u = 0, s = 3, c; u < s; )
631
631
  try {
632
632
  c = yield x({ url: `${a.apiUrl}/page`, data: n });
633
633
  break;
634
- } catch (v) {
634
+ } catch (g) {
635
635
  if (u++, u >= s)
636
- throw l("error posting page: " + JSON.stringify(v)), v;
636
+ throw l("error posting page: " + JSON.stringify(g)), g;
637
637
  yield new Promise((f) => setTimeout(f, 1e3));
638
638
  }
639
639
  c && c.pool_data && M({
@@ -647,7 +647,7 @@ function Ot({ apiUrl: t, poolConfig: e }) {
647
647
  return n.properties.zar = S(), n.properties.url = window.location.href, n.properties.referrer = document.referrer, n;
648
648
  },
649
649
  track: function({ payload: n, options: r, instance: i, config: a }) {
650
- g("track", n), x({ url: `${a.apiUrl}/track`, data: n, beacon: !0 });
650
+ v("track", n), x({ url: `${a.apiUrl}/track`, data: n, beacon: !0 });
651
651
  },
652
652
  methods: {
653
653
  apiUrl() {
@@ -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_TIME_MS = 30 * 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 origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n }\n\n var result = { id, t: Date.now(), 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 checkLastRenewal = false,\n renewalInterval = NUMBER_POOL_RENEWAL_TIME_MS\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 var elbowRoom = 3 * 1000;\n if (checkLastRenewal && last && now - last < renewalInterval + elbowRoom) {\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 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_TIME_MS;\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 console.log(\"renew on\", opts.type);\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback,\n checkLastRenewal: true,\n renewalInterval\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 var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback\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 }\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_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","checkLastRenewal","renewalInterval","now","last","elbowRoom","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","forceRenewOnReturn","opts","interval","zar","pcfg","tries","maxTries","plugin","elemRes","init","ga4Config","facebookConfig","__test__"],"mappings":";;;;;;;;;;;;;;;;AACO,SAASA,EAAU,EAAE,KAAAC,GAAK,SAAAC,IAAU,CAAE,EAAA,IAAK,CAAA,GAAI;AACpD,QAAMC,IAAW;AAAA,IACf,KAAAF;AAAA,IACA,SAAS,CAAE;AAAA,IACX,MAAM,CAACG,IAAU,CAAA,MAAOC,GAAQF,GAAUC,CAAO;AAAA,IACjD,OAAO,CAACE,GAAOC,IAAa,CAAE,GAAEC,MAC9BC;AAAA,MACEN;AAAA,MACAK,IAAU,EAAE,OAAAF,GAAO,YAAAC,GAAY,SAAAC,EAAO,IAAK,EAAE,OAAAF,GAAO,YAAAC,EAAY;AAAA,IACjE;AAAA,IACH,OAAO,IAAUG,MAAIC,EAAA;AAAK,aAAAC,GAAST,GAAU,GAAGO,CAAI;AAAA;AAAA,EACxD;AAGE,SAAAR,EAAQ,QAAQ,CAACW,MAAM;AACrB,IAAI,CAACA,KAAK,CAACA,EAAE,SACbA,EAAE,WAAWV,GACTU,EAAE,WACJ,OAAO,KAAKA,EAAE,OAAO,EAAE,QAAQ,CAACC,MAAM;AACpC,YAAMC,IAAKF,EAAE,QAAQC,CAAC;AACtB,UAAI,OAAOC,KAAO,YAAY;AAC5B,cAAMC,IAAQD,EAAG,KAAKF,CAAC;AACvB,QAAAA,EAAE,QAAQC,CAAC,IAAIE,GACfH,EAAEC,CAAC,IAAIE;AAAA;AAAA,IAEjB,CAAO,GAEHb,EAAS,QAAQU,EAAE,IAAI,IAAIA;AAAA,EAC/B,CAAG,GAGDX,EAAQ,QAAQ,CAACW,MAAM;AACrB,QAAI;AACF,MAAAA,EAAE,cAAcA,EAAE,WAAW,EAAE,QAAQA,EAAE,QAAQ,UAAAV,EAAQ,CAAE;AAAA,IACjE,SAAac,GAAP;AAAA,IAAY;AAAA,EAClB,CAAG,GAEMd;AACT;AAEA,MAAMe,KAAY;AAElB,SAASC,KAAa;AACpB,SAAI,OAAO,UAAW,cAAoB,KACnC,OAAO,SAAS,KAAK,QAAQD,IAAW,EAAE;AACnD;AAEA,SAASE,EAAYC,IAAW,IAAI;AAClC,MAAI,OAAO,UAAW,eAAe,OAAO,YAAa;AACvD,WAAOA;AAET,QAAM,EAAE,OAAAC,GAAO,UAAAC,EAAU,IAAG,UACtB,EAAE,YAAAC,GAAY,aAAAC,EAAa,IAAG,QAC9BC,IAAMP,MACNQ,IAAO;AAAA,IACX,OAAOL;AAAA,IACP,KAAKI;AAAA,IACL,OAAOF;AAAA,IACP,QAAQC;AAAA,EACZ;AACE,SAAIF,KAAYA,MAAa,OAC3BI,EAAK,WAAWJ,IAEX,OAAO,OAAO,CAAE,GAAEI,GAAMN,CAAQ;AACzC;AAEA,SAAehB,GAAQuB,GAAwB;AAAA,SAAAjB,EAAA,4BAAxBR,GAAUC,IAAU,IAAI;AAC7C,IAAKA,EAAQ,SAAMA,EAAQ,OAAO,SAClCA,EAAQ,aAAagB,EAAYhB,EAAQ,cAAc,CAAE,CAAA,GAEzD,OAAO,OAAOD,EAAS,OAAO,EAAE,QAAQ,CAACU,MAAM;AAC7C,UAAI,OAAOA,EAAE,aAAc;AACzB,YAAI;AACF,gBAAMgB,IAAOhB,EAAE,UAAU,EAAE,SAAAT,GAAS,QAAQS,EAAE,QAAQ,UAAAV,EAAQ,CAAE;AAChE,UAAI0B,MAAMzB,IAAUyB;AAAA,QAC5B,SAAeZ,GAAP;AAAA,QAAY;AAAA,IAEpB,CAAG;AAED,eAAWJ,KAAK,OAAO,OAAOV,EAAS,OAAO;AAC5C,UAAI,OAAOU,EAAE,QAAS;AACpB,YAAI;AACF,gBAAMA,EAAE,KAAK,EAAE,SAAAT,GAAS,SAAS,IAAI,UAAAD,GAAU,QAAQU,EAAE,OAAQ,CAAA;AAAA,QACzE,SAAeI,GAAP;AAAA,QAAY;AAGlB,WAAOb;AAAA,EACT;AAAA;AAEA,SAAeK,GAASmB,GAAwB;AAAA,SAAAjB,EAAA,4BAAxBR,GAAUC,IAAU,IAAI;AAC9C,IAAKA,EAAQ,SAAMA,EAAQ,OAAO;AAClC,UAAM0B,IAAOV,KACPW,IAAQ3B,EAAQ,cAAc;AACpC,IAAI2B,EAAM,QAAQ,WAAWA,EAAM,MAAMD,EAAK,MAC1CC,EAAM,aAAa,UAAaD,EAAK,aAAa,WACpDC,EAAM,WAAWD,EAAK,WAExB1B,EAAQ,aAAa2B;AAErB,UAAMvB,IAAUJ,EAAQ,WAAW,IAC7B4B,IACJxB,KAAW,OAAOA,EAAQ,WAAY,WAAWA,EAAQ,UAAU,MAC/DyB,IAAa,CAACpB,MAAMmB,KAAkBA,EAAenB,EAAE,IAAI,MAAM;AAEvE,WAAO,OAAOV,EAAS,OAAO,EAAE,QAAQ,CAACU,MAAM;AAC7C,UAAI,CAAAoB,EAAWpB,CAAC,KACZ,OAAOA,EAAE,cAAe;AAC1B,YAAI;AACF,gBAAMgB,IAAOhB,EAAE,WAAW;AAAA,YACxB,SAAAT;AAAA,YACA,SAAAI;AAAA,YACA,QAAQK,EAAE;AAAA,YACV,UAAAV;AAAA,UACV,CAAS;AACD,UAAI0B,MAAMzB,IAAUyB;AAAA,QAC5B,SAAeZ,GAAP;AAAA,QAAY;AAAA,IAEpB,CAAG;AAED,eAAWJ,KAAK,OAAO,OAAOV,EAAS,OAAO;AAC5C,UAAI,CAAA8B,EAAWpB,CAAC,KACZ,OAAOA,EAAE,SAAU;AACrB,YAAI;AACF,gBAAMA,EAAE,MAAM,EAAE,SAAAT,GAAS,SAAAI,GAAS,UAAAL,GAAU,QAAQU,EAAE,OAAM,CAAE;AAAA,QACtE,SAAeI,GAAP;AAAA,QAAY;AAGlB,WAAOb;AAAA,EACT;AAAA;AAEA,SAAeQ,GAAST,MAAaO,GAAM;AAAA,SAAAC,EAAA;AACzC,eAAWE,KAAK,OAAO,OAAOV,EAAS,OAAO;AAC5C,UAAI,OAAOU,EAAE,SAAU;AACrB,YAAI;AACF,gBAAMA,EAAE,MAAM,GAAGH,CAAI;AAAA,QAC7B,SAAeO,GAAP;AAAA,QAAY;AAAA,EAGpB;AAAA;AC3IA,SAASiB,GAAmBC,GAAGC,GAAGC,GAAGC,GAAGC,GAAGC,GAAGC,GAAG;AAC/C,EAAIN,EAAE,QACNI,IAAIJ,EAAE,MAAM,WAAY;AACtB,IAAAI,EAAE,aAAaA,EAAE,WAAW,MAAMA,GAAG,SAAS,IAAIA,EAAE,MAAM,KAAK,SAAS;AAAA,EAC5E,GACOJ,EAAE,SAAMA,EAAE,OAAOI,IACtBA,EAAE,OAAOA,GACTA,EAAE,SAAS,IACXA,EAAE,UAAU,OACZA,EAAE,QAAQ,IACVC,IAAIJ,EAAE,cAAcC,CAAC,GACrBG,EAAE,QAAQ,IACVA,EAAE,MAAMF,GACRG,IAAIL,EAAE,qBAAqBC,CAAC,EAAE,CAAC,GAC/BI,EAAE,WAAW,aAAaD,GAAGC,CAAC;AAChC;AAEA,SAASC,GAAa,EAAE,YAAAC,KAAc;AACpC,EAAAT;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GACE,OAAO,IAAI,QAAQS,CAAU;AAC/B;AAEA,SAASC,GAASC,IAAe,IAAI;AACnC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQA;AAAA,IACR,YAAY,SAAU,EAAE,QAAAC,GAAQ,UAAA3C,KAAY;AAC1C,UAAI,CAAC2C,EAAO;AAAY,cAAM,IAAI,MAAM,gCAAgC;AACxE,MAAAJ,GAAa,EAAE,YAAYI,EAAO,WAAY,CAAA;AAAA,IAC/C;AAAA,IACD,MAAM,SAAU,EAAE,SAAA1C,GAAS,QAAA0C,GAAQ,UAAA3C,EAAQ,GAAI;AAC7C,aAAO,IAAI,SAAS,UAAU;AAAA,IAC/B;AAAA,IACD,OAAO,SAAU,EAAE,SAAAC,GAAS,QAAA0C,GAAQ,UAAA3C,EAAQ,GAAI;AAC9C,aAAO,IAAI,eAAeC,EAAQ,OAAOA,EAAQ,UAAU;AAAA,IAC5D;AAAA,IACD,UAAU,SAAU,EAAE,SAAAA,GAAS,QAAA0C,KAAU;AAAA,IAExC;AAAA,IACD,QAAQ,WAAY;AAClB,aAAO,CAAC,CAAC,OAAO;AAAA,IACjB;AAAA,EACL;AACA;AChDA,SAASC,IAAO;AACd,SAAO,UAAU,KAAK,SAAS;AACjC;AAEA,OAAO,OAAOA;AAGd,SAASC,GAAS,EAAE,YAAAL,GAAY,cAAAM,IAAe,CAAA,GAAI,WAAAC,IAAY,CAAA,KAAM;AACnE,MAAIC,IAAW;AAEf,MAAI,UAAS,eAAeA,CAAQ,GAEpC;AAAA,QAAIC,IAAO,SAAS,MAChBC,IAAS,SAAS,cAAc,QAAQ;AAC5C,IAAAA,EAAO,KAAKF,GACZE,EAAO,OAAO,mBACdA,EAAO,QAAQ,IACfA,EAAO,MAAM,iDAAiDV,GAC9DS,EAAK,aAAaC,GAAQD,EAAK,UAAU,GAEzC,OAAO,YAAY,OAAO,aAAa,CAAA,GAEvCL,EAAK,MAAM,oBAAI,KAAI,CAAE,GACjBG,KACFH,EAAK,OAAOG,CAAS,GAEvBH,EAAK,UAAUJ,GAAYM,CAAY;AAAA;AACzC;AAEA,SAASK,GAAiBT,IAAe,IAAI;AAC3C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQA;AAAA,IACR,YAAY,SAAU,EAAE,QAAAC,GAAQ,UAAA3C,KAAY;AAC1C,UAAI,CAAC2C,EAAO;AAAY,cAAM,IAAI,MAAM,0BAA0B;AAElE,UAAIG,IAAe,CAAA,GACfC,IAAY,CAAA;AAChB,UAAIJ,EAAO,kBAAkB;AAE3B,iBADIS,IAAY,CAAA,GACPC,IAAI,GAAGA,IAAIV,EAAO,iBAAiB,QAAQU,KAAK;AACvD,cAAIC,IAAYX,EAAO,iBAAiBU,CAAC;AACzC,UAAAP,EAAaQ,EAAU,IAAI,IAAIA,EAAU,SAAStD,GAAU2C,CAAM,GAClES,EAAU,eAAeC,IAAI,EAAE,IAAIC,EAAU;AAAA;AAE/C,QAAAP,EAAU,aAAgBK;AAAA;AAG5B,MAAAP,GAAS,EAAE,YAAYF,EAAO,YAAY,cAAAG,GAAc,WAAAC,EAAS,CAAE;AAAA,IACpE;AAAA,IACD,MAAM,SAAU,EAAE,SAAA9C,GAAS,QAAA0C,GAAQ,UAAA3C,EAAQ,GAAI;AAAA,IAE9C;AAAA,IACD,OAAO,SAAU,EAAE,SAAAC,GAAS,QAAA0C,GAAQ,UAAA3C,EAAQ,GAAI;AAC9C,MAAA4C,EAAK,SAAS3C,EAAQ,OAAOA,EAAQ,UAAU;AAAA,IAChD;AAAA,IACD,UAAU,SAAU,EAAE,SAAAA,GAAS,QAAA0C,KAAU;AAAA,IAExC;AAAA,IACD,QAAQ,WAAY;AAClB,aAAO,CAAC,CAAC,OAAO;AAAA,IACjB;AAAA,EACL;AACA;AC/DO,IAAIY,KAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM,GAC7DC,KAAQD,GAAU,IAAI,MAAM,GAC5BE,IAAY,CAAA;AAChB,MAAMC,IAAQ;AAEP,SAASC,IAAM;AACpB,EAAIH,MAAS,KACb,QAAQ,MAAM,GAAG,SAAS;AAC5B;AAEO,SAASI,EAAKC,GAAK;AACxB,UAAQ,KAAKA,CAAG,GACZ,OAAO,WACT,OAAO,QAAQ,QAAQA,CAAG;AAE9B;AAEO,SAASC,GAAOC,GAAO;AAC5B,SACEA,MACC,OAAO,UAAU,SAAS,KAAKA,CAAK,MAAM,uBAC1B,OAAOA,KAAtB,cACAA,aAAiB;AAEvB;AAEO,SAASC,IAAQ;AACtB,MAAI;AACF,QAAIC,IAAK,UAAU,aAAa,IAC5BC,IAAO,IAAI;AAAA,MACb;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,EACE,IAAI,CAACC,MAAMA,EAAE,MAAM,EACnB,KAAK,GAAG;AAAA,MACX;AAAA,IACN;AACI,WAAOD,EAAK,KAAKD,CAAE;AAAA,EACpB,SAAQ/B,GAAP;AACA,WAAO;AAAA,EACR;AACH;AAEO,SAASkC,GAAsBC,GAAM;AAC1C,EACE,SAAS,eAAe,cACxB,SAAS,eAAe,YACxB,SAAS,eAAe,gBAExBA,MAEA,OAAO,iBAAiB,oBAAoBA,CAAI;AAEpD;AAIA,IAAIC,IAAyBC,GAAiB;AAE9C,SAASA,KAAoB;AAC3B,MAAI,OAAOD,MAA2BZ;AACpC,WAAOY;AAET,EAAAA,IAAyB;AACzB,MAAI;AACF,mBAAe,QAAQZ,GAAOA,CAAK,GACnC,eAAe,WAAWA,CAAK;AAAA,EAChC,SAAQxB,GAAP;AACA,IAAAoC,IAAyB;AAAA,EAC1B;AACD,SAAOA;AACT;AAEO,SAASE,EAAkBC,GAAK;AAErC,MAAIV,GACAW,IAAcjB,EAAUgB,CAAG;AAC/B,SAAIH,KACFP,IAAQ,eAAe,QAAQU,CAAG,GAC9B,CAACV,KAASW,MACZX,IAAQW,GAER,eAAe,QAAQD,GAAKV,CAAK,MAGnCA,IAAQW,GAEHX,IAAQ,KAAK,MAAMA,CAAK,IAAI;AACrC;AAEO,SAASY,GAAkBF,GAAKV,GAAO;AAE5C,MAAIa,IAAY,KAAK,UAAUb,CAAK;AACpC,EAAIO,KACF,eAAe,QAAQG,GAAKG,CAAS,GAEvCnB,EAAUgB,CAAG,IAAIG;AACnB;AAUA,SAASC,EAAY,EAAE,QAAAC,GAAQ,KAAAvD,GAAK,MAAAwD,GAAM,MAAAC,IAAO,MAAQ;AACvD,SAAO,IAAI,QAAQ,SAAUC,GAASC,GAAQ;AAC5C,QAAIC,IAAM,IAAI;AACd,IAAAA,EAAI,KAAKL,GAAQvD,CAAG,GACpB4D,EAAI,kBAAkB,IAElBH,MACFG,EAAI,iBAAiB,UAAU,kBAAkB,GACjDA,EAAI,iBAAiB,gBAAgB,kBAAkB,IAGzDA,EAAI,SAAS,WAAY;AACvB,MAAI,KAAK,UAAU,OAAO,KAAK,SAAS,MAEpCF,EADED,IACM,KAAK,MAAMG,EAAI,QAAQ,IAEvBA,EAAI,QAFoB,IAKlCD,EAAO;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,SAASC,EAAI;AAAA,MACvB,CAAS;AAAA,IAET,GACIA,EAAI,UAAU,WAAY;AACxB,MAAAD,EAAO;AAAA,QACL,QAAQ,KAAK;AAAA,QACb,SAAS;AAAA,MACjB,CAAO;AAAA,IACP,GACQH,IACFI,EAAI,KAAKJ,CAAI,IAEbI,EAAI,KAAI;AAAA,EAEd,CAAG;AACH;AAEA,SAASC,GAAaC,GAAQ;AAC5B,SACE,MACA,OAAO,KAAKA,CAAM,EACf,IAAI,SAAUZ,GAAK;AAClB,WAAOA,IAAM,MAAM,mBAAmBY,EAAOZ,CAAG,CAAC;AAAA,EACzD,CAAO,EACA,KAAK,GAAG;AAEf;AAEA,SAAea,GAAW7D,GAAe;AAAA,SAAAjB,EAAA,4BAAf,EAAE,KAAAe,GAAK,MAAAwD,KAAQ;AACvC,QACE,UACA,OAAO,aACP,OAAO,OAAO,UAAU,cAAe,cACvC,OAAO,OAAO,QAAS;AAEvB,UAAI;AACF,cAAMQ,IAAO,IAAI,KAAK,CAAC,KAAK,UAAUR,CAAI,CAAC,GAAG;AAAA,UAC5C,MAAM;AAAA,QACd,CAAO;AACD,eAAI,SAAO,UAAU,WAAWxD,GAAKgE,CAAI;AAAA,MAI1C,SAAQrD,GAAP;AACA,eAAA0B,EAAK,aAAgB,GACd;AAAA,MACR;AAEH,WAAO;AAAA,EACT;AAAA;AAEO,SAAe4B,GAAQ/D,GAAqC;AAAA,SAAAjB,EAAA,4BAArC,EAAE,KAAAe,GAAK,QAAA8D,IAAS,MAAM,MAAAL,IAAO,MAAQ;AACjE,QAAIS,IAAWlE;AACf,WAAI8D,MACFI,IAAWA,IAAWL,GAAaC,CAAM,IAEpC,MAAMR,EAAY,EAAE,QAAQ,OAAO,KAAKY,GAAU,MAAAT,EAAI,CAAE;AAAA,EACjE;AAAA;AAEO,SAAeU,EAASjE,GAA4C;AAAA,SAAAjB,EAAA,4BAA5C,EAAE,KAAAe,GAAK,MAAAwD,GAAM,MAAAC,IAAO,IAAM,QAAAW,IAAS,MAAS;AACzE,QAAIC,IAAYb;AAIhB,QAHIC,MACFY,IAAY,KAAK,UAAUA,CAAS,IAElCD,GAAQ;AACV,UAAIE,IAAM,MAAMP,GAAW,EAAE,KAAA/D,GAAK,MAAAwD,EAAM,CAAA;AACxC,UAAIc;AACF;AAEF,MAAAlC,EAAI,eAAe;AAAA;AAErB,WAAO,MAAMkB,EAAY,EAAE,QAAQ,QAAQ,KAAAtD,GAAK,MAAMqE,GAAW,MAAAZ,EAAI,CAAE;AAAA,EACzE;AAAA;AC/LA,IAAIc,IAAU,aACVC,IAAsB,WACtBC,IAAoB,SACpBC,IAA8B,KAAK,KACnCC,IAAwB,GACxBC,KAA0B,GAC1BC,IAAgB,CAAA,GAChBC,IAAuB,CAAA,GACvBC,IAAkB;AAEtB,OAAO,cAAc,OAAO,eAAe;AAC3C,OAAO,wBAAwB,OAAO,yBAAyB;AAC/D,OAAO,mBAAmB,OAAO,oBAAoB;AAIrD,IAAIC,IAAmB,oBAAI;AAE3B,SAASC,KAAkB;AACzB,SACE,KAAK,IAAK,EAAC,SAAS,EAAE,IAAI,MAAM,KAAK,OAAQ,EAAC,SAAS,EAAE,EAAE,UAAU,CAAC;AAE1E;AAEA,SAASC,GAAOhC,GAAKiC,GAAWC,GAAQC,GAAQ;AAC9C,MAAIC,GACAC,IAAQ,IACRC,IAAe,MACfC,IAAQL,EAAOlC,CAAG;AAEtB,EAAI,CAACuC,KAAS,CAACA,EAAM,MACnBH,IAAKH,EAAS,GACdK,IAAe,SAAS,UACxBD,IAAQ,IACRnD,EAAI,cAAcc,GAAK,KAAKoC,CAAE,MAE9BA,IAAKG,EAAM,IACXD,IAAeC,EAAM;AAGvB,MAAIC,IAAS,EAAE,IAAAJ,GAAI,GAAG,KAAK,IAAK,GAAE,cAAAE,GAAc,OAAAD;AAChD,SAAAF,EAAOnC,GAAKwC,CAAM,GACXA;AACT;AAEA,SAASC,IAAU;AACjB,MAAIC,IAAYV;AAAA,IACdX;AAAA,IACAU;AAAA,IACAhC;AAAA,IACAG;AAAA,EACJ;AACE,SAAO,EAAE,KAAKwC;AAChB;AAEA,SAASC,IAAmB;AAC1B,SAAO,OAAO,SAAS,WAAW,QAAQ,OAAO,SAAS,OAAO;AACnE;AAEA,SAASC,EAAS5C,GAAK;AACrB,SAAOD,EAAkBC,CAAG;AAC9B;AAEA,SAAS6C,EAAM7C,GAAK;AAClB,MAAI8C,IAAMF,EAAS5C,CAAG;AACtB,SAAO8C,IAAMA,EAAI,KAAK;AACxB;AAEA,SAASC,IAAa;AACpB,SAAO;AAAA,IACL,KAAKH,EAASvB,CAAO;AAAA,EACzB;AACA;AAEA,SAAS2B,KAAS;AAChB,SAAO;AAAA,IACL,KAAKH,EAAMxB,CAAO;AAAA,EACtB;AACA;AAEA,SAAS4B,EAAmB,EAAE,MAAAC,KAAQ;AAEpC,MAAIC,IAAa,MACbC,IAAS,MACTC,IAAO,MACPC,IAAQ,IAAI;AAAA,IACd;AAAA,IACA;AAAA,EACJ;AAEE,EAAIJ,EAAK,QAAQA,EAAK,KAAK,WAAW,MAAM,MAC1CG,IAAOH,EAAK;AAEd,MAAIK,IAAOL,EAAK,WACZM,IAAON,EAAK,WACZO,IAAQH,EAAM,KAAKC,CAAI;AAC3B,SAAIE,MACFN,IAAaM,EAAM,CAAC,EAAE,KAAI,GAC1BL,IAASD,EACN,QAAQ,KAAK,EAAE,EACf,QAAQ,MAAM,EAAE,EAChB,QAAQ,MAAM,EAAE,EAChB,QAAQ,KAAK,EAAE,EACf,QAAQ,KAAK,EAAE,EACf,QAAQ,MAAM,EAAE,IAEd,EAAE,MAAAI,GAAM,MAAAC,GAAM,YAAAL,GAAY,MAAAE,GAAM,QAAAD,EAAM;AAC/C;AAEA,SAASM,EAAmB,EAAE,OAAAC,GAAO,QAAAP,GAAQ,OAAAQ,IAAQ,GAAK,GAAI;AAC5D,MAAIC,GACAC,IAAaV;AACjB,EAAKA,EAAO,WAAW,IAAI,MACzBU,IAAa,OAAOV;AAGtB,WAASxE,IAAI,GAAGA,IAAI+E,EAAM,QAAQ/E,KAAK;AACrC,QAAIkD,EAAiB,IAAI6B,EAAM/E,CAAC,CAAC;AAC/B,UAAIgF;AACF,QAAAC,IAAU/B,EAAiB,IAAI6B,EAAM/E,CAAC,CAAC;AAAA,WAClC;AACL,QAAAM,EAAI,mCAAmCyE,EAAM/E,CAAC,CAAC;AAC/C;AAAA;AAIJ,QAAImF,IAAUd,EAAmB,EAAE,MAAMU,EAAM/E,CAAC,EAAC,CAAE;AA4BnD,QA1BKiF,IAGH,CAACD,KACDG,EAAQ,UACRF,EAAQ,UACRA,EAAQ,WAAWE,EAAQ,UAE3B5E;AAAA,MACE;AAAA,MACA0E,EAAQ;AAAA,MACRE,EAAQ;AAAA,IAChB,IAXMF,IAAUE,GAcZ7E,EAAI,cAAc4E,GAAY,MAAMH,EAAM/E,CAAC,CAAC,GAGvCkD,EAAiB,IAAI6B,EAAM/E,CAAC,CAAC,KAChCkD,EAAiB,IAAI6B,EAAM/E,CAAC,GAAGmF,CAAO,GAGpCA,EAAQ,SACVJ,EAAM/E,CAAC,EAAE,OAAO,SAASkF,IAGvBC,EAAQ;AAGV,UADAJ,EAAM/E,CAAC,EAAE,YAAY,IACjBmF,EAAQ,MAAM;AAChB,YAAIC,IAAUF;AASd,YARIC,EAAQ,WAAW,QAAQ,GAAG,IAAI,OACpCC,IACEF,EAAW,MAAM,GAAG,CAAC,IACrB,MACAA,EAAW,MAAM,GAAG,CAAC,IACrB,MACAA,EAAW,MAAM,GAAG,EAAE,IAEtBC,EAAQ,KAAK,QAAQ,MAAM,IAAI,IAAI;AACrC,cAAIE,IAAaF,EAAQ,KAAK,QAAQA,EAAQ,YAAYC,CAAO;AACjE,UAAAL,EAAM/E,CAAC,EAAE,YAAYqF;AAAA,eAChB;AACL,cAAId,IAAaY,EAAQ,KAAK,QAAQA,EAAQ,YAAYC,CAAO;AACjE,UAAAL,EAAM/E,CAAC,EAAE,YAAY,SAAS,eAAeuE,CAAU,CAAC;AAAA;AAAA;AAG1D,QAAAQ,EAAM/E,CAAC,EAAE,YAAY,SAAS,eAAekF,CAAU,CAAC;AAAA;AAG1D,MAAA5E,EAAI,yBAAyByE,EAAM/E,CAAC,CAAC;AAAA;AAG3C;AAEA,SAASsF,EAAqB,EAAE,OAAAP,KAAS;AACvC,WAAS/E,IAAI,GAAGA,IAAI+E,EAAM,QAAQ/E;AAChC,QAAIkD,EAAiB,IAAI6B,EAAM/E,CAAC,CAAC,GAAG;AAClC,UAAIuF,IAAcR,EAAM/E,CAAC,EAAE,WACvBwF,IAAetC,EAAiB,IAAI6B,EAAM/E,CAAC,CAAC;AAChD,MAAAM,EAAI,SAASkF,CAAY;AACzB,UAAIC,IAAWD,EAAa;AAC5B,MAAAlF,EAAI,aAAaiF,GAAa,MAAME,CAAQ,GAEdA,KAAa,QAAQA,MAAa,KAC9DV,EAAM/E,CAAC,EAAE,YAAYyF,IAErBD,EAAa,SAAS,UACtBA,EAAa,SAAS,OAEtBT,EAAM/E,CAAC,EAAE,cAAcwF,EAAa,OAGpCT,EAAM/E,CAAC,EAAE,cAAc,IAErBwF,EAAa,QACfT,EAAM/E,CAAC,EAAE,aAAa,QAAQwF,EAAa,IAAI,GAEjDtC,EAAiB,OAAO6B,EAAM/E,CAAC,CAAC;AAAA;AAEhC,MAAAM,EAAI,uBAAuByE,EAAM/E,CAAC,CAAC;AAGzC;AAEA,SAAS0F,EAAkBC,GAAQ;AACjC,gBAAc5C,EAAc4C,CAAM,CAAC,GACnC,OAAO5C,EAAc4C,CAAM;AAC7B;AAEA,SAASC,IAAqB;AAC5B,WAASD,KAAU5C;AACjB,IAAA2C,EAAkBC,CAAM;AAE5B;AAEA,SAAeE,EAAczH,GAK1B;AAAA,SAAAjB,EAAA,4BAL0B;AAAA,IAC3B,QAAAwI;AAAA,IACA,QAAAG;AAAA,IACA,QAAAtB,IAAS;AAAA,IACT,SAAAuB,IAAU;AAAA,EACZ,GAAG;AACD,QAAInJ,IAAU;AAAA,MACZ,SAAS+I;AAAA,MACT,QAAQnB;AAAA,MACR,SAASuB;AAAA,MACT,YAAY;AAAA,QACV,KAAK5B,EAAY;AAAA,MAClB;AAAA,IACL,GACM6B,IAAO,MAAM3D,EAAS,EAAE,KAAK,GAAGyD,iBAAsB,MAAMlJ,EAAS,CAAA;AACzE,WAAOoJ;AAAA,EACT;AAAA;AAEA,SAASC,IAAa;AACpB,SACE,OAAO,eACP,OAAO,YAAY,WAAWvD,KAC9B,OAAO,YAAY;AAEvB;AAEA,SAASwD,IAAqB;AAC5B,MACE,CAAC,OAAO,oBACR,CAAC,MAAM,QAAQ,OAAO,gBAAgB,KACtC,OAAO,iBAAiB,WAAW;AAEnC,WAAO;AAIT,WADIC,IAAe,CAAA,GACVnG,IAAI,GAAGA,IAAI,OAAO,iBAAiB,QAAQA,KAAK;AACvD,QAAIkE,IAAM,OAAO,iBAAiBlE,CAAC;AACnC,aAASoB,KAAO8C;AACd,MAAI,OAAO,UAAU,eAAe,KAAKA,GAAK9C,CAAG,MAC/C+E,EAAa/E,CAAG,IAAI8C,EAAI9C,CAAG;AAAA;AAKjC,gBAAO,iBAAiB,SAAS,GAC1B+E;AACT;AAEA,SAAeC,EAA4BhI,GAKxC;AAAA,SAAAjB,EAAA,4BALwC;AAAA,IACzC,QAAA2I;AAAA,IACA,QAAAH;AAAA,IACA,QAAAnB;AAAA,IACA,SAAAuB;AAAA,EACF,GAAG;AACD,QAAI,CAACE,EAAU,GAAI;AACjB,MAAA1F,EAAK,0CAA0C;AAC/C;AAAA;AAGF,QAAI3D,IAAU;AAAA,MACZ,SAAS+I;AAAA,MACT,QAAQnB;AAAA,MACR,SAASuB;AAAA,MACT,YAAY;AAAA,QACV,KAAK5B,EAAY;AAAA,MAClB;AAAA,IACL,GACM6B,IAAO,MAAM3D,EAAS,EAAE,KAAK,GAAGyD,mBAAwB,MAAMlJ,EAAS,CAAA;AAC3E,WAAOoJ;AAAA,EACT;AAAA;AAEA,SAAeK,GAAajI,GAA+C;AAAA,SAAAjB,EAAA,4BAA/C,EAAE,QAAA2I,GAAQ,KAAA1E,IAAM,MAAM,eAAAkF,IAAgB,MAAS;AACzE,QAAItE,IAAS;AAAA,MACX,KAAAZ;AAAA,MACA,eAAAkF;AAAA,IACJ,GACMN,IAAO,MAAM7D,GAAQ;AAAA,MACvB,KAAK,GAAG2D;AAAA,MACR,QAAQ9D;AAAA,IACZ,CAAG;AACD,WAAOgE;AAAA,EACT;AAAA;AAEA,SAAeO,IAMP;AAAA,SAAApJ,EAAA,4BANyB;AAAA,IAC/B,iBAAAqJ;AAAA,IACA,QAAAV,IAAS/B,EAAkB;AAAA,IAC3B,iBAAA0C,IAAkB;AAAA,IAClB,kBAAAC,IAAmB;AAAA,IACnB,iBAAAC,IAAkB/D;AAAA,EACpB,IAAI,IAAI;AACN,QAAIK;AACF,aAAO,EAAE,QAAQN,GAAmB,KAAK,UAAS;AAGpD,UAAMgD,IAAS,OAAO,YAAY,SAC5BnB,IAAS,OAAO,YAAY;AAGlC,QAAIoC,IAAM,KAAK,OACXC,IAAO7D,EAAqB2C,CAAM,GAClCmB,IAAY,IAAI;AACpB,QAAIJ,KAAoBG,KAAQD,IAAMC,IAAOF,IAAkBG;AAC7D,aAAO,EAAE,QAAQpE;AAGnB,IAAAM,EAAqB2C,CAAM,IAAIiB;AAE/B,QAAIb,IAAUG,EAAoB,KAAI;AACtC,IAAIO,MACFV,IAAUU,EAAgBV,CAAO,KAAK;AAGxC,QAAI;AACF,UAAIC,IAAO,MAAMH,EAAc,EAAE,QAAAF,GAAQ,QAAAG,GAAQ,QAAAtB,GAAQ,SAAAuB,EAAO,CAAE;AAAA,IACnE,SAAQlH,GAAP;AACA,UAAI2B,IAAM,2BAA2B,KAAK,UAAU3B,CAAC;AACrD,aAAA0B,EAAKC,CAAG,GACRqC,KACIA,KAAyBC,OAC3BvC,EAAK,6BAA6B,GAClC0C,IAAkB,IAClB2C,KACIY,KACFlB,EAAqB,EAAE,OAAOkB,EAAe,CAAE,IAG5C,EAAE,QAAQ7D,GAAmB,KAAAnC;IACrC;AAED,QAAIwF,EAAK,WAAWtD,KAAuBsD,EAAK,QAAQ;AACtD,UAAIhB,IAAQ;AACZ,MAAIgB,EAAK,WAAW,OAAO,YAAY,WACrCzF;AAAA,QACE,yBACE,OAAO,YAAY,SACnB,SACAyF,EAAK;AAAA,MACf,GACM,OAAO,YAAY,SAASA,EAAK,QACjChB,IAAQ,KAENwB,KACF1B,EAAmB;AAAA,QACjB,OAAO0B;AAAA,QACP,QAAQR,EAAK;AAAA,QACb,OAAAhB;AAAA,MACR,CAAO;AAAA;AAGH,MAAIwB,KACFlB,EAAqB,EAAE,OAAOkB,EAAe,CAAE,GAE7CzD,EAAc4C,CAAM,MACtB,cAAc5C,EAAc4C,CAAM,CAAC,GACnC,OAAO5C,EAAc4C,CAAM;AAI/B,WAAOK;AAAA,EACT;AAAA;AAEA,SAASe,EAAUpB,GAAQ;AACzB,SAAIlF,GAAOkF,CAAM,IAAUA,EAAM,IAC1BA;AACT;AAEA,SAASqB,GAA0BlB,GAAQ;AACzC,MAAI,QAAO,yBAING,EAAU,GAIf;AAAA,QAAIgB,IAAe,OAAO,iBAAiB;AAC3C,WAAO,iBAAiB,OAAO,YAAa/J,GAAM;AAChD,UAAI0G,IAASqD,EAAa,MAAM,MAAM/J,CAAI,GACtC6I,IAAUG;AACd,aAAKH,KAGLK,EAA4B;AAAA,QAC1B,QAAAN;AAAA,QACA,QAAQ,OAAO,YAAY;AAAA,QAC3B,QAAQ,OAAO,YAAY;AAAA,QAC3B,SAAAC;AAAA,MACN,CAAK,GACMnC;AAAA,IACX;AAIE,QAAImC,IAAUG;AACd,IAAIH,KACFK,EAA4B;AAAA,MAC1B,QAAAN;AAAA,MACA,QAAQ,OAAO,YAAY;AAAA,MAC3B,QAAQ,OAAO,YAAY;AAAA,MAC3B,SAAAC;AAAA,IACN,CAAK,GAGH,OAAO,wBAAwB;AAAA;AACjC;AAEA,SAAemB,IAAwD;AAAA,SAAA/J,EAAA,4BAAvC,EAAE,UAAAgK,GAAU,YAAAC,GAAY,QAAAtB,EAAM,IAAK,CAAA,GAAI;AACrE,QAAItF;AAGJ,QAFAyC,IAAkB,IAGhB,CAACmE,KACD,CAACA,EAAW,UACZ,CAACA,EAAW,wBACZ,CAACtB;AAED,aAAAtF,IAAM,0BAA0B,KAAK,UAAU4G,CAAU,GACzD7G,EAAKC,CAAG,GACJ4G,EAAW,gBACbA,EAAW,aAAa,EAAE,QAAQzE,GAAmB,KAAAnC,EAAK,CAAA,GAErDuC;AAGT,QAAI4C,IAASoB,EAAUK,EAAW,MAAM;AACxC,QAAI,CAACzB;AACH,aAAAnF,IAAM,cACND,EAAKC,CAAG,GACJ4G,EAAW,gBACbA,EAAW,aAAa,EAAE,QAAQzE,GAAmB,KAAAnC,EAAK,CAAA,GAErDuC;AAGT,QAAI,CAACoE,GAAU;AACb,UAAIpB,IAAUG,EAAoB,KAAI;AACtC,MAAIkB,EAAW,oBACbrB,IAAUqB,EAAW,gBAAgBrB,CAAO,KAAK,CAAA;AAGnD,UAAI;AACF,QAAAoB,IAAW,MAAMtB,EAAc,EAAE,QAAAF,GAAQ,QAAAG,GAAQ,QAAQ,MAAM,SAAAC,EAAO,CAAE;AAAA,MACzE,SAAQlH,GAAP;AACA,eAAA2B,IAAM,mCAAmC,KAAK,UAAU3B,CAAC,GACzD0B,EAAKC,CAAG,GACJ4G,EAAW,gBACbA,EAAW,aAAa,EAAE,QAAQzE,GAAmB,KAAAnC,EAAK,CAAA,GAErDuC;AAAA,MACR;AAAA;AAKH,QAFA,OAAO,cAAcoE,GAEjBlB,EAAU,GAAI;AAChB,MAAAjD,EAAqB2C,CAAM,IAAI,KAAK,IAAG;AAEvC,UAAI;AACF,QAAAqB,GAA0BlB,CAAM;AAAA,MACjC,SAAQjH,GAAP;AACA,QAAA0B,EAAK,uBAAuB,KAAK,UAAU1B,CAAC,CAAC;AAAA,MAC9C;AAED,MAAAkC,GAAsB,WAAY;AAChC,YAAIyF,IAAkB,SAAS;AAAA,UAC7BY,EAAW;AAAA,QACnB;AACM,YAAI,CAACZ,GAAiB;AACpB,cAAIhG,IAAM,wBAAwB4G,EAAW;AAC7C,UAAA7G,EAAKC,CAAG,GACJ4G,EAAW,gBACbA,EAAW,aAAa,EAAE,QAAQzE,GAAmB,KAAAnC,EAAK,CAAA;AAE5D;AAAA;AAGF,QAAAsE,EAAmB,EAAE,OAAO0B,GAAiB,QAAQW,EAAS,OAAM,CAAE;AAEtE,YAAIR,IACFS,EAAW,mBAAmBxE,GAE5ByE,IAAqB,SAAUC,IAAO,IAAI;AAC5C,cAAI;AACF,gBAAI,CAACrB,EAAU;AAAI;AACnB,aACGqB,EAAK,SAAS,QAAQ,SAAS,oBAAoB,aACnDA,EAAK,SAAS,QAAQA,EAAK,cAAc,QAE1C,QAAQ,IAAI,YAAYA,EAAK,IAAI,GACjCf,EAAkB;AAAA,cAChB,iBAAAC;AAAA,cACA,QAAAV;AAAA,cACA,iBAAiBsB,EAAW;AAAA,cAC5B,kBAAkB;AAAA,cAClB,iBAAAT;AAAA,YACd,CAAa;AAAA,UAEJ,SAAQ9H,GAAP;AACA,YAAA0B,EAAK,qBAAqB,KAAK,UAAU1B,CAAC,CAAC;AAAA,UAC5C;AAAA,QACT;AAEM,iBAAS;AAAA,UACP;AAAA,UACA,WAAY;AACV,YAAAwI,EAAmB,EAAE,MAAM,KAAI,CAAE;AAAA,UAClC;AAAA,UACD,EAAE,SAAS,GAAM;AAAA,QACzB,GAEM,OAAO;AAAA,UACL;AAAA,UACA,SAAUxI,GAAG;AACX,YAAAwI,EAAmB,EAAE,MAAM,MAAM,WAAWxI,KAAKA,EAAE,UAAS,CAAE;AAAA,UAC/D;AAAA,UACD,EAAE,SAAS,GAAM;AAAA,QACzB;AAEM,YAAI0I,IAAW,YAAY,WAAY;AACrC,cAAI;AACF,YAAAhB,EAAkB;AAAA,cAChB,iBAAAC;AAAA,cACA,QAAAV;AAAA,cACA,iBAAiBsB,EAAW;AAAA,YACxC,CAAW;AAAA,UACF,SAAQvI,GAAP;AACA,gBAAI2B,IAAM,wBAAwB,KAAK,UAAU3B,CAAC;AAClD,YAAA0B,EAAKC,CAAG;AAAA,UACT;AAAA,QACF,GAAEmG,CAAe;AAElB,QAAA5D,EAAcoE,EAAS,OAAO,IAAII,GAC9BH,EAAW,gBACbA,EAAW,aAAaD,CAAQ;AAAA,MAExC,CAAK;AAAA;AAGH,WAAOpE;AAAA,EACT;AAAA;AAEA,SAASyE,GAAI,EAAE,QAAA1B,GAAQ,YAAAsB,KAAc;AACnC,SAAAvD,KAEO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,QAAAiC,GAAQ,YAAAsB,EAAY;AAAA,IAC9B,YAAY,SAAU,EAAE,QAAA9H,EAAM,GAAI;AAAA,IAAE;AAAA,IACpC,QAAQ,WAAY;AAClB,aAAO;AAAA,IACR;AAAA,IACD,WAAW,SAAU,EAAE,SAAA1C,GAAS,QAAA0C,GAAQ,UAAA3C,EAAQ,GAAI;AAClD,MAAAC,EAAQ,WAAW,MAAMuH,KACzBvH,EAAQ,WAAW,WAAW,SAAS,UACvCA,EAAQ,WAAW,SAAS+D;AAE5B,UAAI;AACF,YAAI8G,IAAOnI,EAAO;AAClB,YAAImI,KAAQA,EAAK,QAAQ;AACvB,UAAA7K,EAAQ,WAAW,UAAUmK,EAAUU,EAAK,MAAM;AAClD,cAAI1B,IAAUG,EAAoB,KAAI;AACtC,UAAIuB,EAAK,oBACP7K,EAAQ,WAAW,eACjB6K,EAAK,gBAAgB1B,CAAO,KAAK;;MAGxC,SAAQlH,GAAP;AACA,QAAA0B,EAAK,4BAA4B,KAAK,UAAU1B,CAAC,CAAC;AAAA,MACnD;AACD,aAAOjC;AAAA,IACR;AAAA,IACD,MAAM,SAAgBwB,GAAwC;AAAA,aAAAjB,EAAA,4BAAxC,EAAE,SAAAP,GAAS,SAAAI,GAAS,UAAAL,GAAU,QAAA2C,EAAM,GAAI;AAC5D,QAAAgB,EAAI,QAAQ1D,GAASI,GAASsC,CAAM;AAIpC,iBAHIoI,IAAQ,GACRC,IAAW,GACXnF,GACGkF,IAAQC;AACb,cAAI;AACF,YAAAnF,IAAM,MAAMH,EAAS,EAAE,KAAK,GAAG/C,EAAO,eAAe,MAAM1C,EAAS,CAAA;AACpE;AAAA,UACD,SAAQiC,GAAP;AAEA,gBADA6I,KACIA,KAASC;AACX,oBAAApH,EAAK,yBAAyB,KAAK,UAAU1B,CAAC,CAAC,GACzCA;AAER,kBAAM,IAAI,QAAQ,CAACiC,MAAM,WAAWA,GAAG,GAAI,CAAC;AAAA,UAC7C;AAEH,QAAI0B,KAAOA,EAAI,aACb0E,EAAiB;AAAA,UACf,UAAU1E,EAAI;AAAA,UACd,YAAYlD,EAAO;AAAA,UACnB,QAAQA,EAAO;AAAA,QACzB,CAAS;AAAA,MAEJ;AAAA;AAAA,IACD,YAAY,SAAU,EAAE,SAAA1C,GAAS,QAAA0C,GAAQ,UAAA3C,EAAQ,GAAI;AACnD,aAAAC,EAAQ,WAAW,MAAMuH,KACzBvH,EAAQ,WAAW,MAAM,OAAO,SAAS,MACzCA,EAAQ,WAAW,WAAW,SAAS,UAChCA;AAAA,IACR;AAAA,IACD,OAAO,SAAU,EAAE,SAAAA,GAAS,SAAAI,GAAS,UAAAL,GAAU,QAAA2C,EAAM,GAAI;AACvD,MAAAgB,EAAI,SAAS1D,CAAO,GACpByF,EAAS,EAAE,KAAK,GAAG/C,EAAO,gBAAgB,MAAM1C,GAAS,QAAQ,GAAM,CAAA;AAAA,IACxE;AAAA,IACD,SAAS;AAAA,MACP,SAAS;AACP,eAAOkJ;AAAA,MACR;AAAA,MACD,aAAa;AACX,eAAOsB;AAAA,MACR;AAAA,MACD,UAAU;AACR,eAAOvD,EAAO;AAAA,MACf;AAAA,MACD,SAAS;AACP,eAAOO,GAAM;AAAA,MACd;AAAA,MACD,aAAa;AACX,eAAOD,EAAU;AAAA,MAClB;AAAA,MACD,SAAS;AACP,eAAOF,EAAMxB,CAAO;AAAA,MACrB;AAAA,MACD,QAAQ;AACN,eAAO9B,EAAK;AAAA,MACb;AAAA,MACD,iBAAiB,EAAE,YAAAyG,KAAc;AAC/B,YAAIQ,IAAS,KAAK,SAAS,QAAQ;AACnC,eAAOV,EAAiB;AAAA,UACtB,UAAU;AAAA,UACV,YAAY,OAAO,OAAOU,EAAO,WAAY,GAAER,KAAc,EAAE;AAAA,UAC/D,QAAQQ,EAAO,OAAQ;AAAA,QACjC,CAAS;AAAA,MACF;AAAA,MACD,4BAA4B,EAAE,QAAApD,GAAQ,SAAAuB,KAAW;AAC/C,YAAI6B,IAAS,KAAK,SAAS,QAAQ,KAC/BR,IAAaQ,EAAO;AACxB,eAAOxB,EAA4B;AAAA,UACjC,QAAQ,KAAK,SAAS,QAAQ,IAAI,OAAQ;AAAA,UAC1C,QAAQW,EAAUK,EAAW,MAAM;AAAA,UACnC,QAAA5C;AAAA,UACA,SAAAuB;AAAA,QACV,CAAS;AAAA,MACF;AAAA,MACD,mBAAmB;AACjB,eAAOhD;AAAA,MACR;AAAA,MACD,kBAAkB,EAAE,QAAA4C,KAAU;AAC5B,QAAAD,EAAkBC,CAAM;AAAA,MACzB;AAAA,MACD,qBAAqB;AACnB,QAAAC;MACD;AAAA,MACD,oBAAoB,EAAE,OAAAb,KAAS;AAE7B,iBADIvC,IAAM,CAAA,GACD,IAAI,GAAG,IAAIuC,EAAM,QAAQ,KAAK;AACrC,cAAI8C,IAAUxD,EAAmB,EAAE,MAAMU,EAAM,CAAC,EAAC,CAAE;AACnD,UAAAvC,EAAI,KAAKqF,CAAO;AAAA;AAElB,eAAOrF;AAAA,MACR;AAAA,MACD,mBAAmB,EAAE,iBAAAgE,GAAiB,QAAAhC,KAAU;AAC9C,QAAAM,EAAmB,EAAE,OAAO0B,GAAiB,QAAAhC,EAAQ,CAAA;AAAA,MACtD;AAAA,MACD,qBAAqB,EAAE,iBAAAgC,KAAmB;AACxC,QAAAlB,EAAqB,EAAE,OAAOkB,EAAe,CAAE;AAAA,MAChD;AAAA,MACD,aAAa,EAAE,KAAApF,IAAM,MAAM,eAAAkF,IAAgB,GAAK,GAAI;AAClD,eAAOD,GAAa;AAAA,UAClB,QAAQ,KAAK,SAAS,QAAQ,IAAI,OAAQ;AAAA,UAC1C,KAAAjF;AAAA,UACA,eAAAkF;AAAA,QACV,CAAS;AAAA,MACF;AAAA,IACF;AAAA,EACL;AACA;AAEA,SAASwB,GAAK;AAAA,EACZ,KAAArL;AAAA,EACA,WAAAsL,IAAY;AAAA,EACZ,gBAAAC,IAAiB;AAAA,EACjB,QAAAlC,IAAS;AAAA,EACT,YAAAsB,IAAa;AACf,GAAG;AACD,EAAKtB,MACHA,IAAS/B,EAAgB;AAG3B,MAAIrH,IAAU,CAAC8K,GAAI,EAAE,QAAA1B,GAAQ,YAAAsB,EAAY,CAAA,CAAC;AAC1C,SAAIW,KACFrL,EAAQ,KAAKoD,GAAiBiI,CAAS,CAAC,GAEtCC,KACFtL,EAAQ,KAAK0C,GAAS4I,CAAc,CAAC,GAGhCxL,EAAU,EAAE,KAAAC,GAAK,SAAAC,EAAS,CAAA;AACnC;AAGY,MAACuL,KAAW;AAAA,EACtB,oBAAA5D;AAAA,EACA,oBAAAS;AAAA,EACA,sBAAAQ;AAAA,EACA,oBAAAY;AAAA,EACA,WAAAa;AACF;"}
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_TIME_MS = 30 * 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 origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n }\n\n var result = { id, t: Date.now(), 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 checkLastRenewal = false,\n renewalInterval = NUMBER_POOL_RENEWAL_TIME_MS\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 var elbowRoom = 3 * 1000;\n if (checkLastRenewal && last && now - last < renewalInterval + elbowRoom) {\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 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_TIME_MS;\n\n var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback\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 checkLastRenewal: true,\n renewalInterval\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_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","checkLastRenewal","renewalInterval","now","last","elbowRoom","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","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(p){"use strict";var d=(p,x,y)=>new Promise((B,O)=>{var C=v=>{try{z(y.next(v))}catch(_){O(_)}},M=v=>{try{z(y.throw(v))}catch(_){O(_)}},z=v=>v.done?B(v.value):Promise.resolve(v.value).then(C,M);z((y=y.apply(p,x)).next())});function x({app:t,plugins:e=[]}={}){const n={app:t,plugins:{},page:(r={})=>C(n,r),track:(r,i={},a)=>M(n,a?{event:r,properties:i,options:a}:{event:r,properties:i}),reset:(...r)=>d(this,null,function*(){return z(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 B(){return typeof window=="undefined"?"":window.location.href.replace(y,"")}function O(t={}){if(typeof window=="undefined"||typeof document=="undefined")return t;const{title:e,referrer:n}=document,{innerWidth:r,innerHeight:i}=window,a=B(),o={title:e,url:a,width:r,height:i};return n&&n!==""&&(o.referrer=n),Object.assign({},o,t)}function C(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="page"),e.properties=O(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 M(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="track");const r=O(),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 f=c.trackStart({payload:e,options:a,config:c.config,instance:t});f&&(e=f)}catch(f){}});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(f){}return e})}function z(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 v(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 _({trackingId:t}){v(window,document,"script","https://connect.facebook.net/en_US/fbevents.js"),window.fbq("init",t)}function ct(t={}){return{name:"facebook",config:t,initialize:function({config:e,instance:n}){if(!e.trackingId)throw new Error("No Facebook trackingId defined");_({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 D(){window.dataLayer.push(arguments)}window.gtag=D;function st({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||[],D("js",new Date),n&&D("set",n),D("config",t,e)}}function ft(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}st({trackingId:e.trackingId,configParams:r,setParams:i})},page:function({payload:e,config:n,instance:r}){},track:function({payload:e,config:n,instance:r}){D("event",e.event,e.properties)},identify:function({payload:e,config:n}){},loaded:function(){return!!window.gtag}}}var lt=new URLSearchParams(window.location.search),dt=lt.get("zdbg"),$={};const L="undefined";function g(){dt==1&&console.debug(...arguments)}function l(t){console.warn(t),window.Rollbar&&window.Rollbar.warning(t)}function wt(t){return t&&(Object.prototype.toString.call(t)==="[object Function]"||typeof t=="function"||t instanceof Function)}function H(){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 gt(t){document.readyState==="complete"||document.readyState==="loaded"||document.readyState==="interactive"?t():window.addEventListener("DOMContentLoaded",t)}var h=vt();function vt(){if(typeof h!==L)return h;h=!0;try{sessionStorage.setItem(L,L),sessionStorage.removeItem(L)}catch(t){h=!1}return h}function V(t){var e,n=$[t];return h?(e=sessionStorage.getItem(t),!e&&n&&(e=n,sessionStorage.setItem(t,e))):e=n,e?JSON.parse(e):void 0}function pt(t,e){var n=JSON.stringify(e);h&&sessionStorage.setItem(t,n),$[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 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 mt(r){return d(this,arguments,function*({url:t,params:e=null,json:n=!0}){var i=t;return e&&(i=i+bt(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 ht({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",Q=30*1e3,X=0,yt=3,w={},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=null,u=n(t);!u||!u.id?(i=e(),o=document.referrer,a=!0,g("new ID for",t,"-",i)):(i=u.id,o=u.origReferrer);var c={id:i,t:Date.now(),origReferrer:o,isNew:a};return r(t,c),c}function K(){var t=St(N,Pt,V,pt);return{vid:t}}function Y(){return window.location.protocol+"://"+window.location.host+"/api/v2"}function Z(t){return V(t)}function tt(t){var e=Z(t);return e?e.id:null}function k(){return{vid:Z(N)}}function It(){return{vid:tt(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&&l("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 f=o.text.replace(o.numberText,u);t[a].appendChild(document.createTextNode(f))}}else t[a].appendChild(document.createTextNode(i));else g("no number text found:",t[a])}}function j({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 et(t){clearInterval(w[t]),delete w[t]}function rt(){for(var t in w)et(t)}function nt(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:k()}},o=yield R({url:`${e}/number_pool`,data:a});return o})}function E(){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(!E()){l("no valid pool data, not updating context");return}var a={pool_id:e,number:n,context:r,properties:{zar:k()}},o=yield R({url:`${t}/update_number`,data:a});return o})}function Ot(r){return d(this,arguments,function*({apiUrl:t,key:e=null,with_contexts:n=!1}){var i={key:e,with_contexts:n},a=yield mt({url:`${t}/number_pool_stats`,params:i});return a})}function at(){return d(this,arguments,function*({overlayElements:t,apiUrl:e=Y(),contextCallback:n=null,checkLastRenewal:r=!1,renewalInterval:i=Q}={}){if(J)return{status:P,msg:"stopped"};const a=window.zarPoolData.pool_id,o=window.zarPoolData.number;var u=Date.now(),c=q[a],f=3*1e3;if(r&&c&&u-c<i+f)return{status:U};q[a]=u;var b=S()||{};n&&(b=n(b)||{});try{var s=yield nt({poolId:a,apiUrl:e,number:o,context:b})}catch(kt){var I="error getting number: "+JSON.stringify(kt);return l(I),X++,X>=yt&&(l("max failures, stopping pool"),J=!0,rt(),t&&j({elems:t})),{status:P,msg:I}}if(s.status===U&&s.number){var ut=!1;s.number!==window.zarPoolData.number&&(l("number changed from "+window.zarPoolData.number+" to "+s.number),window.zarPoolData.number=s.number,ut=!0),t&&T({elems:t,number:s.number,force:ut})}else t&&j({elems:t}),w[a]&&(clearInterval(w[a]),delete w[a]);return s})}function A(t){return wt(t)?t():t}function zt(t){if(!window.zarPoolDLObserverDone&&E()){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 it(){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),l(r),e.initCallback&&e.initCallback({status:P,msg:r}),w;var i=A(e.poolId);if(!i)return r="no pool ID",l(r),e.initCallback&&e.initCallback({status:P,msg:r}),w;if(!t){var a=S()||{};e.contextCallback&&(a=e.contextCallback(a)||{});try{t=yield nt({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}),w}}if(window.zarPoolData=t,E()){q[i]=Date.now();try{zt(n)}catch(o){l("data layer error: "+JSON.stringify(o))}gt(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||Q,f=function(s={}){try{if(!E())return;(s.type==="vc"&&document.visibilityState==="visible"||s.type==="ps"&&s.persisted===!0)&&(console.log("renew on",s.type),at({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback,checkLastRenewal:!0,renewalInterval:c}))}catch(I){l("error on renew: "+JSON.stringify(I))}};document.addEventListener("visibilitychange",function(){f({type:"vc"})},{passive:!0}),window.addEventListener("pageshow",function(s){f({type:"ps",persisted:s&&s.persisted})},{passive:!0});var b=setInterval(function(){try{at({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback})}catch(I){var s="error on interval: "+JSON.stringify(I);l(s)}},c);w[t.pool_id]=b,e.initCallback&&e.initCallback(t)})}return w})}function ot({apiUrl:t,poolConfig:e}){return K(),{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=k(),n.properties.referrer=document.referrer,n.properties.is_bot=H();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){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}){g("page",n,r,a);for(var u=0,c=3,f;u<c;)try{f=yield R({url:`${a.apiUrl}/page`,data:n});break}catch(b){if(u++,u>=c)throw l("error posting page: "+JSON.stringify(b)),b;yield new Promise(s=>setTimeout(s,1e3))}f&&f.pool_data&&it({poolData:f.pool_data,poolConfig:a.poolConfig,apiUrl:a.apiUrl})})},trackStart:function({payload:n,config:r,instance:i}){return n.properties.zar=k(),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 K()},getIDs(){return It()},getStorage(){return k()},getVID(){return tt(N)},isBot(){return H()},initTrackingPool({poolConfig:n}){var r=this.instance.plugins.zar;return it({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 w},clearPoolInterval({poolId:n}){et(n)},clearPoolIntervals(){rt()},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}){j({elems:n})},getPoolStats({key:n=null,with_contexts:r=!1}){return Ot({apiUrl:this.instance.plugins.zar.apiUrl(),key:n,with_contexts:r})}}}}function _t({app:t,ga4Config:e=null,facebookConfig:n=null,apiUrl:r=null,poolConfig:i=null}){r||(r=Y());var a=[ot({apiUrl:r,poolConfig:i})];return e&&a.push(ft(e)),n&&a.push(ct(n)),x({app:t,plugins:a})}const Dt={extractPhoneNumber:F,overlayPhoneNumber:T,revertOverlayNumbers:j,drainPoolDataLayer:S,getPoolId:A};return p.Analytics=x,p.__test__=Dt,p.init=_t,p.zar=ot,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"}),p}({});
1
+ var zar=function(b){"use strict";var d=(b,x,y)=>new Promise((B,O)=>{var C=g=>{try{z(y.next(g))}catch(_){O(_)}},M=g=>{try{z(y.throw(g))}catch(_){O(_)}},z=g=>g.done?B(g.value):Promise.resolve(g.value).then(C,M);z((y=y.apply(b,x)).next())});function x({app:t,plugins:e=[]}={}){const n={app:t,plugins:{},page:(r={})=>C(n,r),track:(r,i={},a)=>M(n,a?{event:r,properties:i,options:a}:{event:r,properties:i}),reset:(...r)=>d(this,null,function*(){return z(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 B(){return typeof window=="undefined"?"":window.location.href.replace(y,"")}function O(t={}){if(typeof window=="undefined"||typeof document=="undefined")return t;const{title:e,referrer:n}=document,{innerWidth:r,innerHeight:i}=window,a=B(),o={title:e,url:a,width:r,height:i};return n&&n!==""&&(o.referrer=n),Object.assign({},o,t)}function C(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="page"),e.properties=O(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 M(n){return d(this,arguments,function*(t,e={}){e.type||(e.type="track");const r=O(),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 l=c.trackStart({payload:e,options:a,config:c.config,instance:t});l&&(e=l)}catch(l){}});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(l){}return e})}function z(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 g(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 _({trackingId:t}){g(window,document,"script","https://connect.facebook.net/en_US/fbevents.js"),window.fbq("init",t)}function ct(t={}){return{name:"facebook",config:t,initialize:function({config:e,instance:n}){if(!e.trackingId)throw new Error("No Facebook trackingId defined");_({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 D(){window.dataLayer.push(arguments)}window.gtag=D;function st({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||[],D("js",new Date),n&&D("set",n),D("config",t,e)}}function ft(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}st({trackingId:e.trackingId,configParams:r,setParams:i})},page:function({payload:e,config:n,instance:r}){},track:function({payload:e,config:n,instance:r}){D("event",e.event,e.properties)},identify:function({payload:e,config:n}){},loaded:function(){return!!window.gtag}}}var lt=new URLSearchParams(window.location.search),dt=lt.get("zdbg"),$={};const L="undefined";function v(){dt==1&&console.debug(...arguments)}function f(t){console.warn(t),window.Rollbar&&window.Rollbar.warning(t)}function wt(t){return t&&(Object.prototype.toString.call(t)==="[object Function]"||typeof t=="function"||t instanceof Function)}function H(){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 vt(t){document.readyState==="complete"||document.readyState==="loaded"||document.readyState==="interactive"?t():window.addEventListener("DOMContentLoaded",t)}var h=gt();function gt(){if(typeof h!==L)return h;h=!0;try{sessionStorage.setItem(L,L),sessionStorage.removeItem(L)}catch(t){h=!1}return h}function V(t){var e,n=$[t];return h?(e=sessionStorage.getItem(t),!e&&n&&(e=n,sessionStorage.setItem(t,e))):e=n,e?JSON.parse(e):void 0}function pt(t,e){var n=JSON.stringify(e);h&&sessionStorage.setItem(t,n),$[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 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 f("postBeacon:"),!1}return!1})}function mt(r){return d(this,arguments,function*({url:t,params:e=null,json:n=!0}){var i=t;return e&&(i=i+bt(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 ht({url:t,data:e});if(o)return;v("Beacon failed")}return yield W({method:"POST",url:t,data:a,json:n})})}var N="__zar_vid",U="success",P="error",Q=30*1e3,X=0,yt=3,w={},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=null,u=n(t);!u||!u.id?(i=e(),o=document.referrer,a=!0,v("new ID for",t,"-",i)):(i=u.id,o=u.origReferrer);var c={id:i,t:Date.now(),origReferrer:o,isNew:a};return r(t,c),c}function K(){var t=St(N,Pt,V,pt);return{vid:t}}function Y(){return window.location.protocol+"://"+window.location.host+"/api/v2"}function Z(t){return V(t)}function tt(t){var e=Z(t);return e?e.id:null}function k(){return{vid:Z(N)}}function It(){return{vid:tt(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{v("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,v("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 l=o.text.replace(o.numberText,u);t[a].appendChild(document.createTextNode(l))}}else t[a].appendChild(document.createTextNode(i));else v("no number text found:",t[a])}}function j({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]);v("orig:",r);var i=r.html;v("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 v("element not in map:",t[e])}function et(t){clearInterval(w[t]),delete w[t]}function rt(){for(var t in w)et(t)}function nt(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:k()}},o=yield R({url:`${e}/number_pool`,data:a});return o})}function E(){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(!E()){f("no valid pool data, not updating context");return}var a={pool_id:e,number:n,context:r,properties:{zar:k()}},o=yield R({url:`${t}/update_number`,data:a});return o})}function Ot(r){return d(this,arguments,function*({apiUrl:t,key:e=null,with_contexts:n=!1}){var i={key:e,with_contexts:n},a=yield mt({url:`${t}/number_pool_stats`,params:i});return a})}function at(){return d(this,arguments,function*({overlayElements:t,apiUrl:e=Y(),contextCallback:n=null,checkLastRenewal:r=!1,renewalInterval:i=Q}={}){if(J)return{status:P,msg:"stopped"};const a=window.zarPoolData.pool_id,o=window.zarPoolData.number;var u=Date.now(),c=q[a],l=3*1e3;if(r&&c&&u-c<i+l)return{status:U};q[a]=u;var p=S()||{};n&&(p=n(p)||{});try{var s=yield nt({poolId:a,apiUrl:e,number:o,context:p})}catch(kt){var I="error getting number: "+JSON.stringify(kt);return f(I),X++,X>=yt&&(f("max failures, stopping pool"),J=!0,rt(),t&&j({elems:t})),{status:P,msg:I}}if(s.status===U&&s.number){var ut=!1;s.number!==window.zarPoolData.number&&(f("number changed from "+window.zarPoolData.number+" to "+s.number),window.zarPoolData.number=s.number,ut=!0),t&&T({elems:t,number:s.number,force:ut})}else t&&j({elems:t}),w[a]&&(clearInterval(w[a]),delete w[a]);return s})}function A(t){return wt(t)?t():t}function zt(t){if(!window.zarPoolDLObserverDone&&E()){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 it(){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}),w;var i=A(e.poolId);if(!i)return r="no pool ID",f(r),e.initCallback&&e.initCallback({status:P,msg:r}),w;if(!t){var a=S()||{};e.contextCallback&&(a=e.contextCallback(a)||{});try{t=yield nt({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}),w}}if(window.zarPoolData=t,E()){q[i]=Date.now();try{zt(n)}catch(o){f("data layer error: "+JSON.stringify(o))}vt(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||Q,l=setInterval(function(){try{at({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback})}catch(I){var s="error on interval: "+JSON.stringify(I);f(s)}},c);w[t.pool_id]=l,e.initCallback&&e.initCallback(t);var p=function(s={}){try{if(!E())return;(s.type==="vc"&&document.visibilityState==="visible"||s.type==="ps"&&s.persisted===!0)&&at({overlayElements:o,apiUrl:n,contextCallback:e.contextCallback,checkLastRenewal:!0,renewalInterval:c})}catch(I){f("error on renew: "+JSON.stringify(I))}};document.addEventListener("visibilitychange",function(){p({type:"vc"})},{passive:!0}),window.addEventListener("pageshow",function(s){p({type:"ps",persisted:s&&s.persisted})},{passive:!0})})}return w})}function ot({apiUrl:t,poolConfig:e}){return K(),{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=k(),n.properties.referrer=document.referrer,n.properties.is_bot=H();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}){v("page",n,r,a);for(var u=0,c=3,l;u<c;)try{l=yield R({url:`${a.apiUrl}/page`,data:n});break}catch(p){if(u++,u>=c)throw f("error posting page: "+JSON.stringify(p)),p;yield new Promise(s=>setTimeout(s,1e3))}l&&l.pool_data&&it({poolData:l.pool_data,poolConfig:a.poolConfig,apiUrl:a.apiUrl})})},trackStart:function({payload:n,config:r,instance:i}){return n.properties.zar=k(),n.properties.url=window.location.href,n.properties.referrer=document.referrer,n},track:function({payload:n,options:r,instance:i,config:a}){v("track",n),R({url:`${a.apiUrl}/track`,data:n,beacon:!0})},methods:{apiUrl(){return t},poolConfig(){return e},initIDs(){return K()},getIDs(){return It()},getStorage(){return k()},getVID(){return tt(N)},isBot(){return H()},initTrackingPool({poolConfig:n}){var r=this.instance.plugins.zar;return it({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 w},clearPoolInterval({poolId:n}){et(n)},clearPoolIntervals(){rt()},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}){j({elems:n})},getPoolStats({key:n=null,with_contexts:r=!1}){return Ot({apiUrl:this.instance.plugins.zar.apiUrl(),key:n,with_contexts:r})}}}}function _t({app:t,ga4Config:e=null,facebookConfig:n=null,apiUrl:r=null,poolConfig:i=null}){r||(r=Y());var a=[ot({apiUrl:r,poolConfig:i})];return e&&a.push(ft(e)),n&&a.push(ct(n)),x({app:t,plugins:a})}const Dt={extractPhoneNumber:F,overlayPhoneNumber:T,revertOverlayNumbers:j,drainPoolDataLayer:S,getPoolId:A};return b.Analytics=x,b.__test__=Dt,b.init=_t,b.zar=ot,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"}),b}({});
2
2
  //# sourceMappingURL=zar.iife.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zar.iife.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_TIME_MS = 30 * 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 origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n }\n\n var result = { id, t: Date.now(), 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 checkLastRenewal = false,\n renewalInterval = NUMBER_POOL_RENEWAL_TIME_MS\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 var elbowRoom = 3 * 1000;\n if (checkLastRenewal && last && now - last < renewalInterval + elbowRoom) {\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 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_TIME_MS;\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 console.log(\"renew on\", opts.type);\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback,\n checkLastRenewal: true,\n renewalInterval\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 var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback\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 }\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_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","checkLastRenewal","renewalInterval","now","last","elbowRoom","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","forceRenewOnReturn","opts","interval","zar","pcfg","tries","maxTries","plugin","elemRes","init","ga4Config","facebookConfig","__test__"],"mappings":"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"}
1
+ {"version":3,"file":"zar.iife.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_TIME_MS = 30 * 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 origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n }\n\n var result = { id, t: Date.now(), 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 checkLastRenewal = false,\n renewalInterval = NUMBER_POOL_RENEWAL_TIME_MS\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 var elbowRoom = 3 * 1000;\n if (checkLastRenewal && last && now - last < renewalInterval + elbowRoom) {\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 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_TIME_MS;\n\n var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback\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 checkLastRenewal: true,\n renewalInterval\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_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","checkLastRenewal","renewalInterval","now","last","elbowRoom","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","interval","forceRenewOnReturn","opts","zar","pcfg","tries","maxTries","plugin","elemRes","init","ga4Config","facebookConfig","__test__"],"mappings":"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"}
package/dist/zar.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- (function(g,b){typeof exports=="object"&&typeof module!="undefined"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(g=typeof globalThis!="undefined"?globalThis:g||self,b(g.zar={}))})(this,function(g){"use strict";var d=(g,b,P)=>new Promise((B,z)=>{var C=p=>{try{_(P.next(p))}catch(D){z(D)}},M=p=>{try{_(P.throw(p))}catch(D){z(D)}},_=p=>p.done?B(p.value):Promise.resolve(p.value).then(C,M);_((P=P.apply(g,b)).next())});function b({app:e,plugins:t=[]}={}){const n={app:e,plugins:{},page:(r={})=>C(n,r),track:(r,i={},a)=>M(n,a?{event:r,properties:i,options:a}:{event:r,properties:i}),reset:(...r)=>d(this,null,function*(){return _(n,...r)})};return t.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)}),t.forEach(r=>{try{r.initialize&&r.initialize({config:r.config,instance:n})}catch(i){}}),n}const P=/#.*$/;function B(){return typeof window=="undefined"?"":window.location.href.replace(P,"")}function z(e={}){if(typeof window=="undefined"||typeof document=="undefined")return e;const{title:t,referrer:n}=document,{innerWidth:r,innerHeight:i}=window,a=B(),o={title:t,url:a,width:r,height:i};return n&&n!==""&&(o.referrer=n),Object.assign({},o,e)}function C(n){return d(this,arguments,function*(e,t={}){t.type||(t.type="page"),t.properties=z(t.properties||{}),Object.values(e.plugins).forEach(r=>{if(typeof r.pageStart=="function")try{const i=r.pageStart({payload:t,config:r.config,instance:e});i&&(t=i)}catch(i){}});for(const r of Object.values(e.plugins))if(typeof r.page=="function")try{yield r.page({payload:t,options:{},instance:e,config:r.config})}catch(i){}return t})}function M(n){return d(this,arguments,function*(e,t={}){t.type||(t.type="track");const r=z(),i=t.properties||{};i.url===void 0&&(i.url=r.url),i.referrer===void 0&&r.referrer!==void 0&&(i.referrer=r.referrer),t.properties=i;const a=t.options||{},o=a&&typeof a.plugins=="object"?a.plugins:null,u=s=>o&&o[s.name]===!1;Object.values(e.plugins).forEach(s=>{if(!u(s)&&typeof s.trackStart=="function")try{const f=s.trackStart({payload:t,options:a,config:s.config,instance:e});f&&(t=f)}catch(f){}});for(const s of Object.values(e.plugins))if(!u(s)&&typeof s.track=="function")try{yield s.track({payload:t,options:a,instance:e,config:s.config})}catch(f){}return t})}function _(e,...t){return d(this,null,function*(){for(const n of Object.values(e.plugins))if(typeof n.reset=="function")try{yield n.reset(...t)}catch(r){}})}function p(e,t,n,r,i,a,o){e.fbq||(i=e.fbq=function(){i.callMethod?i.callMethod.apply(i,arguments):i.queue.push(arguments)},e._fbq||(e._fbq=i),i.push=i,i.loaded=!0,i.version="2.0",i.queue=[],a=t.createElement(n),a.async=!0,a.src=r,o=t.getElementsByTagName(n)[0],o.parentNode.insertBefore(a,o))}function D({trackingId:e}){p(window,document,"script","https://connect.facebook.net/en_US/fbevents.js"),window.fbq("init",e)}function se(e={}){return{name:"facebook",config:e,initialize:function({config:t,instance:n}){if(!t.trackingId)throw new Error("No Facebook trackingId defined");D({trackingId:t.trackingId})},page:function({payload:t,config:n,instance:r}){window.fbq("track","PageView")},track:function({payload:t,config:n,instance:r}){window.fbq("trackCustom",t.event,t.properties)},identify:function({payload:t,config:n}){},loaded:function(){return!!window.fbq}}}function x(){window.dataLayer.push(arguments)}window.gtag=x;function ce({trackingId:e,configParams:t={},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="+e,i.insertBefore(a,i.firstChild),window.dataLayer=window.dataLayer||[],x("js",new Date),n&&x("set",n),x("config",e,t)}}function fe(e={}){return{name:"google-analytics-4",config:e,initialize:function({config:t,instance:n}){if(!t.trackingId)throw new Error("No GA trackingId defined");var r={},i={};if(t.customDimensions){for(var a={},o=0;o<t.customDimensions.length;o++){var u=t.customDimensions[o];r[u.name]=u.callback(n,t),a["dimension"+(o+1)]=u.name}i.custom_map=a}ce({trackingId:t.trackingId,configParams:r,setParams:i})},page:function({payload:t,config:n,instance:r}){},track:function({payload:t,config:n,instance:r}){x("event",t.event,t.properties)},identify:function({payload:t,config:n}){},loaded:function(){return!!window.gtag}}}var le=new URLSearchParams(window.location.search),de=le.get("zdbg"),$={};const L="undefined";function v(){de==1&&console.debug(...arguments)}function l(e){console.warn(e),window.Rollbar&&window.Rollbar.warning(e)}function we(e){return e&&(Object.prototype.toString.call(e)==="[object Function]"||typeof e=="function"||e instanceof Function)}function H(){try{var e=navigator.userAgent||"",t=new RegExp([/bot/,/spider/,/crawl/,/mediapartners/,/Google-Read-Aloud/,/semrush/].map(n=>n.source).join("|"),"i");return t.test(e)}catch(n){return!1}}function ge(e){document.readyState==="complete"||document.readyState==="loaded"||document.readyState==="interactive"?e():window.addEventListener("DOMContentLoaded",e)}var m=ve();function ve(){if(typeof m!==L)return m;m=!0;try{sessionStorage.setItem(L,L),sessionStorage.removeItem(L)}catch(e){m=!1}return m}function V(e){var t,n=$[e];return m?(t=sessionStorage.getItem(e),!t&&n&&(t=n,sessionStorage.setItem(e,t))):t=n,t?JSON.parse(t):void 0}function pe(e,t){var n=JSON.stringify(t);m&&sessionStorage.setItem(e,n),$[e]=n}function W({method:e,url:t,data:n,json:r=!0}){return new Promise(function(i,a){var o=new XMLHttpRequest;o.open(e,t),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 be(e){return"?"+Object.keys(e).map(function(t){return t+"="+encodeURIComponent(e[t])}).join("&")}function he(n){return d(this,arguments,function*({url:e,data:t}){if(window&&window.navigator&&typeof window.navigator.sendBeacon=="function"&&typeof window.Blob=="function")try{const r=new Blob([JSON.stringify(t)],{type:"text/plain; charset=UTF-8"});return!!window.navigator.sendBeacon(e,r)}catch(r){return l("postBeacon:"),!1}return!1})}function me(r){return d(this,arguments,function*({url:e,params:t=null,json:n=!0}){var i=e;return t&&(i=i+be(t)),yield W({method:"GET",url:i,json:n})})}function R(i){return d(this,arguments,function*({url:e,data:t,json:n=!0,beacon:r=!1}){var a=t;if(n&&(a=JSON.stringify(a)),r){var o=yield he({url:e,data:t});if(o)return;v("Beacon failed")}return yield W({method:"POST",url:e,data:a,json:n})})}var T="__zar_vid",U="success",S="error",Q=30*1e3,X=0,ye=3,w={},q={},J=!1;window.zarPoolData=window.zarPoolData||null,window.zarPoolDLObserverDone=window.zarPoolDLObserverDone||!1,window.zarPoolDataLayer=window.zarPoolDataLayer||[];var y=new Map;function Pe(){return Date.now().toString(36)+"."+Math.random().toString(36).substring(2)}function Se(e,t,n,r){var i,a=!1,o=null,u=n(e);!u||!u.id?(i=t(),o=document.referrer,a=!0,v("new ID for",e,"-",i)):(i=u.id,o=u.origReferrer);var s={id:i,t:Date.now(),origReferrer:o,isNew:a};return r(e,s),s}function K(){var e=Se(T,Pe,V,pe);return{vid:e}}function Y(){return window.location.protocol+"://"+window.location.host+"/api/v2"}function Z(e){return V(e)}function ee(e){var t=Z(e);return t?t.id:null}function k(){return{vid:Z(T)}}function Ie(){return{vid:ee(T)}}function F({elem:e}){var t=null,n=null,r=null,i=new RegExp("\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]?\\d{2,})+","g");e.href&&e.href.startsWith("tel:")&&(r=e.href);var a=e.innerText,o=e.innerHTML,u=i.exec(a);return u&&(t=u[0].trim(),n=t.replace("+","").replace(/-/g,"").replace(/ /g,"").replace("(","").replace(")","").replace(/^1/,"")),{text:a,html:o,numberText:t,href:r,number:n}}function N({elems:e,number:t,force:n=!1}){var r,i=t;t.startsWith("+1")||(i="+1"+t);for(var a=0;a<e.length;a++){if(y.has(e[a]))if(n)r=y.get(e[a]);else{v("element already in overlay map:",e[a]);continue}var o=F({elem:e[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,v("overlaying",i,"on",e[a]),y.has(e[a])||y.set(e[a],o),o.href&&(e[a].href="tel:"+i),o.numberText)if(e[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 s=o.html.replace(o.numberText,u);e[a].innerHTML=s}else{var f=o.text.replace(o.numberText,u);e[a].appendChild(document.createTextNode(f))}}else e[a].appendChild(document.createTextNode(i));else v("no number text found:",e[a])}}function j({elems:e}){for(var t=0;t<e.length;t++)if(y.has(e[t])){var n=e[t].innerHTML,r=y.get(e[t]);v("orig:",r);var i=r.html;v("reverting",n,"to",i),i!=null&&i!==""?e[t].innerHTML=i:r.text!==void 0&&r.text!==null?e[t].textContent=r.text:e[t].textContent="",r.href&&e[t].setAttribute("href",r.href),y.delete(e[t])}else v("element not in map:",e[t])}function te(e){clearInterval(w[e]),delete w[e]}function re(){for(var e in w)te(e)}function ne(i){return d(this,arguments,function*({poolId:e,apiUrl:t,number:n=null,context:r=null}){var a={pool_id:e,number:n,context:r,properties:{zar:k()}},o=yield R({url:`${t}/number_pool`,data:a});return o})}function E(){return window.zarPoolData&&window.zarPoolData.status===U&&window.zarPoolData.number}function I(){if(!window.zarPoolDataLayer||!Array.isArray(window.zarPoolDataLayer)||window.zarPoolDataLayer.length===0)return null;for(var e={},t=0;t<window.zarPoolDataLayer.length;t++){var n=window.zarPoolDataLayer[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return window.zarPoolDataLayer.length=0,e}function G(i){return d(this,arguments,function*({apiUrl:e,poolId:t,number:n,context:r}){if(!E()){l("no valid pool data, not updating context");return}var a={pool_id:t,number:n,context:r,properties:{zar:k()}},o=yield R({url:`${e}/update_number`,data:a});return o})}function Oe(r){return d(this,arguments,function*({apiUrl:e,key:t=null,with_contexts:n=!1}){var i={key:t,with_contexts:n},a=yield me({url:`${e}/number_pool_stats`,params:i});return a})}function ae(){return d(this,arguments,function*({overlayElements:e,apiUrl:t=Y(),contextCallback:n=null,checkLastRenewal:r=!1,renewalInterval:i=Q}={}){if(J)return{status:S,msg:"stopped"};const a=window.zarPoolData.pool_id,o=window.zarPoolData.number;var u=Date.now(),s=q[a],f=3*1e3;if(r&&s&&u-s<i+f)return{status:U};q[a]=u;var h=I()||{};n&&(h=n(h)||{});try{var c=yield ne({poolId:a,apiUrl:t,number:o,context:h})}catch(xe){var O="error getting number: "+JSON.stringify(xe);return l(O),X++,X>=ye&&(l("max failures, stopping pool"),J=!0,re(),e&&j({elems:e})),{status:S,msg:O}}if(c.status===U&&c.number){var ue=!1;c.number!==window.zarPoolData.number&&(l("number changed from "+window.zarPoolData.number+" to "+c.number),window.zarPoolData.number=c.number,ue=!0),e&&N({elems:e,number:c.number,force:ue})}else e&&j({elems:e}),w[a]&&(clearInterval(w[a]),delete w[a]);return c})}function A(e){return we(e)?e():e}function ze(e){if(!window.zarPoolDLObserverDone&&E()){var t=window.zarPoolDataLayer.push;window.zarPoolDataLayer.push=function(...r){var i=t.apply(this,r),a=I();return a&&G({apiUrl:e,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:a}),i};var n=I();n&&G({apiUrl:e,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:n}),window.zarPoolDLObserverDone=!0}}function ie(){return d(this,arguments,function*({poolData:e,poolConfig:t,apiUrl:n}={}){var r;if(J=!1,!t||!t.poolId||!t.overlayQuerySelector||!n)return r="missing pool config: "+JSON.stringify(t),l(r),t.initCallback&&t.initCallback({status:S,msg:r}),w;var i=A(t.poolId);if(!i)return r="no pool ID",l(r),t.initCallback&&t.initCallback({status:S,msg:r}),w;if(!e){var a=I()||{};t.contextCallback&&(a=t.contextCallback(a)||{});try{e=yield ne({poolId:i,apiUrl:n,number:null,context:a})}catch(o){return r="error getting number on init: "+JSON.stringify(o),l(r),t.initCallback&&t.initCallback({status:S,msg:r}),w}}if(window.zarPoolData=e,E()){q[i]=Date.now();try{ze(n)}catch(o){l("data layer error: "+JSON.stringify(o))}ge(function(){var o=document.querySelectorAll(t.overlayQuerySelector);if(!o){var u="No elems found for:"+t.overlayQuerySelector;l(u),t.initCallback&&t.initCallback({status:S,msg:u});return}N({elems:o,number:e.number});var s=t.renewalInterval||Q,f=function(c={}){try{if(!E())return;(c.type==="vc"&&document.visibilityState==="visible"||c.type==="ps"&&c.persisted===!0)&&(console.log("renew on",c.type),ae({overlayElements:o,apiUrl:n,contextCallback:t.contextCallback,checkLastRenewal:!0,renewalInterval:s}))}catch(O){l("error on renew: "+JSON.stringify(O))}};document.addEventListener("visibilitychange",function(){f({type:"vc"})},{passive:!0}),window.addEventListener("pageshow",function(c){f({type:"ps",persisted:c&&c.persisted})},{passive:!0});var h=setInterval(function(){try{ae({overlayElements:o,apiUrl:n,contextCallback:t.contextCallback})}catch(O){var c="error on interval: "+JSON.stringify(O);l(c)}},s);w[e.pool_id]=h,t.initCallback&&t.initCallback(e)})}return w})}function oe({apiUrl:e,poolConfig:t}){return K(),{name:"zar",config:{apiUrl:e,poolConfig:t},initialize:function({config:n}){},loaded:function(){return!0},pageStart:function({payload:n,config:r,instance:i}){n.properties.zar=k(),n.properties.referrer=document.referrer,n.properties.is_bot=H();try{var a=r.poolConfig;if(a&&a.poolId){n.properties.pool_id=A(a.poolId);var o=I()||{};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}){v("page",n,r,a);for(var u=0,s=3,f;u<s;)try{f=yield R({url:`${a.apiUrl}/page`,data:n});break}catch(h){if(u++,u>=s)throw l("error posting page: "+JSON.stringify(h)),h;yield new Promise(c=>setTimeout(c,1e3))}f&&f.pool_data&&ie({poolData:f.pool_data,poolConfig:a.poolConfig,apiUrl:a.apiUrl})})},trackStart:function({payload:n,config:r,instance:i}){return n.properties.zar=k(),n.properties.url=window.location.href,n.properties.referrer=document.referrer,n},track:function({payload:n,options:r,instance:i,config:a}){v("track",n),R({url:`${a.apiUrl}/track`,data:n,beacon:!0})},methods:{apiUrl(){return e},poolConfig(){return t},initIDs(){return K()},getIDs(){return Ie()},getStorage(){return k()},getVID(){return ee(T)},isBot(){return H()},initTrackingPool({poolConfig:n}){var r=this.instance.plugins.zar;return ie({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 w},clearPoolInterval({poolId:n}){te(n)},clearPoolIntervals(){re()},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}){N({elems:n,number:r})},revertOverlayNumbers({overlayElements:n}){j({elems:n})},getPoolStats({key:n=null,with_contexts:r=!1}){return Oe({apiUrl:this.instance.plugins.zar.apiUrl(),key:n,with_contexts:r})}}}}function _e({app:e,ga4Config:t=null,facebookConfig:n=null,apiUrl:r=null,poolConfig:i=null}){r||(r=Y());var a=[oe({apiUrl:r,poolConfig:i})];return t&&a.push(fe(t)),n&&a.push(se(n)),b({app:e,plugins:a})}const De={extractPhoneNumber:F,overlayPhoneNumber:N,revertOverlayNumbers:j,drainPoolDataLayer:I,getPoolId:A};g.Analytics=b,g.__test__=De,g.init=_e,g.zar=oe,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
1
+ (function(g,h){typeof exports=="object"&&typeof module!="undefined"?h(exports):typeof define=="function"&&define.amd?define(["exports"],h):(g=typeof globalThis!="undefined"?globalThis:g||self,h(g.zar={}))})(this,function(g){"use strict";var d=(g,h,P)=>new Promise((B,z)=>{var C=p=>{try{_(P.next(p))}catch(D){z(D)}},M=p=>{try{_(P.throw(p))}catch(D){z(D)}},_=p=>p.done?B(p.value):Promise.resolve(p.value).then(C,M);_((P=P.apply(g,h)).next())});function h({app:e,plugins:t=[]}={}){const n={app:e,plugins:{},page:(r={})=>C(n,r),track:(r,i={},a)=>M(n,a?{event:r,properties:i,options:a}:{event:r,properties:i}),reset:(...r)=>d(this,null,function*(){return _(n,...r)})};return t.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)}),t.forEach(r=>{try{r.initialize&&r.initialize({config:r.config,instance:n})}catch(i){}}),n}const P=/#.*$/;function B(){return typeof window=="undefined"?"":window.location.href.replace(P,"")}function z(e={}){if(typeof window=="undefined"||typeof document=="undefined")return e;const{title:t,referrer:n}=document,{innerWidth:r,innerHeight:i}=window,a=B(),o={title:t,url:a,width:r,height:i};return n&&n!==""&&(o.referrer=n),Object.assign({},o,e)}function C(n){return d(this,arguments,function*(e,t={}){t.type||(t.type="page"),t.properties=z(t.properties||{}),Object.values(e.plugins).forEach(r=>{if(typeof r.pageStart=="function")try{const i=r.pageStart({payload:t,config:r.config,instance:e});i&&(t=i)}catch(i){}});for(const r of Object.values(e.plugins))if(typeof r.page=="function")try{yield r.page({payload:t,options:{},instance:e,config:r.config})}catch(i){}return t})}function M(n){return d(this,arguments,function*(e,t={}){t.type||(t.type="track");const r=z(),i=t.properties||{};i.url===void 0&&(i.url=r.url),i.referrer===void 0&&r.referrer!==void 0&&(i.referrer=r.referrer),t.properties=i;const a=t.options||{},o=a&&typeof a.plugins=="object"?a.plugins:null,u=s=>o&&o[s.name]===!1;Object.values(e.plugins).forEach(s=>{if(!u(s)&&typeof s.trackStart=="function")try{const l=s.trackStart({payload:t,options:a,config:s.config,instance:e});l&&(t=l)}catch(l){}});for(const s of Object.values(e.plugins))if(!u(s)&&typeof s.track=="function")try{yield s.track({payload:t,options:a,instance:e,config:s.config})}catch(l){}return t})}function _(e,...t){return d(this,null,function*(){for(const n of Object.values(e.plugins))if(typeof n.reset=="function")try{yield n.reset(...t)}catch(r){}})}function p(e,t,n,r,i,a,o){e.fbq||(i=e.fbq=function(){i.callMethod?i.callMethod.apply(i,arguments):i.queue.push(arguments)},e._fbq||(e._fbq=i),i.push=i,i.loaded=!0,i.version="2.0",i.queue=[],a=t.createElement(n),a.async=!0,a.src=r,o=t.getElementsByTagName(n)[0],o.parentNode.insertBefore(a,o))}function D({trackingId:e}){p(window,document,"script","https://connect.facebook.net/en_US/fbevents.js"),window.fbq("init",e)}function se(e={}){return{name:"facebook",config:e,initialize:function({config:t,instance:n}){if(!t.trackingId)throw new Error("No Facebook trackingId defined");D({trackingId:t.trackingId})},page:function({payload:t,config:n,instance:r}){window.fbq("track","PageView")},track:function({payload:t,config:n,instance:r}){window.fbq("trackCustom",t.event,t.properties)},identify:function({payload:t,config:n}){},loaded:function(){return!!window.fbq}}}function x(){window.dataLayer.push(arguments)}window.gtag=x;function ce({trackingId:e,configParams:t={},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="+e,i.insertBefore(a,i.firstChild),window.dataLayer=window.dataLayer||[],x("js",new Date),n&&x("set",n),x("config",e,t)}}function fe(e={}){return{name:"google-analytics-4",config:e,initialize:function({config:t,instance:n}){if(!t.trackingId)throw new Error("No GA trackingId defined");var r={},i={};if(t.customDimensions){for(var a={},o=0;o<t.customDimensions.length;o++){var u=t.customDimensions[o];r[u.name]=u.callback(n,t),a["dimension"+(o+1)]=u.name}i.custom_map=a}ce({trackingId:t.trackingId,configParams:r,setParams:i})},page:function({payload:t,config:n,instance:r}){},track:function({payload:t,config:n,instance:r}){x("event",t.event,t.properties)},identify:function({payload:t,config:n}){},loaded:function(){return!!window.gtag}}}var le=new URLSearchParams(window.location.search),de=le.get("zdbg"),$={};const L="undefined";function v(){de==1&&console.debug(...arguments)}function f(e){console.warn(e),window.Rollbar&&window.Rollbar.warning(e)}function we(e){return e&&(Object.prototype.toString.call(e)==="[object Function]"||typeof e=="function"||e instanceof Function)}function H(){try{var e=navigator.userAgent||"",t=new RegExp([/bot/,/spider/,/crawl/,/mediapartners/,/Google-Read-Aloud/,/semrush/].map(n=>n.source).join("|"),"i");return t.test(e)}catch(n){return!1}}function ge(e){document.readyState==="complete"||document.readyState==="loaded"||document.readyState==="interactive"?e():window.addEventListener("DOMContentLoaded",e)}var m=ve();function ve(){if(typeof m!==L)return m;m=!0;try{sessionStorage.setItem(L,L),sessionStorage.removeItem(L)}catch(e){m=!1}return m}function V(e){var t,n=$[e];return m?(t=sessionStorage.getItem(e),!t&&n&&(t=n,sessionStorage.setItem(e,t))):t=n,t?JSON.parse(t):void 0}function pe(e,t){var n=JSON.stringify(t);m&&sessionStorage.setItem(e,n),$[e]=n}function W({method:e,url:t,data:n,json:r=!0}){return new Promise(function(i,a){var o=new XMLHttpRequest;o.open(e,t),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 be(e){return"?"+Object.keys(e).map(function(t){return t+"="+encodeURIComponent(e[t])}).join("&")}function he(n){return d(this,arguments,function*({url:e,data:t}){if(window&&window.navigator&&typeof window.navigator.sendBeacon=="function"&&typeof window.Blob=="function")try{const r=new Blob([JSON.stringify(t)],{type:"text/plain; charset=UTF-8"});return!!window.navigator.sendBeacon(e,r)}catch(r){return f("postBeacon:"),!1}return!1})}function me(r){return d(this,arguments,function*({url:e,params:t=null,json:n=!0}){var i=e;return t&&(i=i+be(t)),yield W({method:"GET",url:i,json:n})})}function R(i){return d(this,arguments,function*({url:e,data:t,json:n=!0,beacon:r=!1}){var a=t;if(n&&(a=JSON.stringify(a)),r){var o=yield he({url:e,data:t});if(o)return;v("Beacon failed")}return yield W({method:"POST",url:e,data:a,json:n})})}var T="__zar_vid",U="success",S="error",Q=30*1e3,X=0,ye=3,w={},q={},J=!1;window.zarPoolData=window.zarPoolData||null,window.zarPoolDLObserverDone=window.zarPoolDLObserverDone||!1,window.zarPoolDataLayer=window.zarPoolDataLayer||[];var y=new Map;function Pe(){return Date.now().toString(36)+"."+Math.random().toString(36).substring(2)}function Se(e,t,n,r){var i,a=!1,o=null,u=n(e);!u||!u.id?(i=t(),o=document.referrer,a=!0,v("new ID for",e,"-",i)):(i=u.id,o=u.origReferrer);var s={id:i,t:Date.now(),origReferrer:o,isNew:a};return r(e,s),s}function K(){var e=Se(T,Pe,V,pe);return{vid:e}}function Y(){return window.location.protocol+"://"+window.location.host+"/api/v2"}function Z(e){return V(e)}function ee(e){var t=Z(e);return t?t.id:null}function k(){return{vid:Z(T)}}function Ie(){return{vid:ee(T)}}function F({elem:e}){var t=null,n=null,r=null,i=new RegExp("\\+?\\(?\\d*\\)? ?\\(?\\d+\\)?\\d*([\\s./-]?\\d{2,})+","g");e.href&&e.href.startsWith("tel:")&&(r=e.href);var a=e.innerText,o=e.innerHTML,u=i.exec(a);return u&&(t=u[0].trim(),n=t.replace("+","").replace(/-/g,"").replace(/ /g,"").replace("(","").replace(")","").replace(/^1/,"")),{text:a,html:o,numberText:t,href:r,number:n}}function N({elems:e,number:t,force:n=!1}){var r,i=t;t.startsWith("+1")||(i="+1"+t);for(var a=0;a<e.length;a++){if(y.has(e[a]))if(n)r=y.get(e[a]);else{v("element already in overlay map:",e[a]);continue}var o=F({elem:e[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,v("overlaying",i,"on",e[a]),y.has(e[a])||y.set(e[a],o),o.href&&(e[a].href="tel:"+i),o.numberText)if(e[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 s=o.html.replace(o.numberText,u);e[a].innerHTML=s}else{var l=o.text.replace(o.numberText,u);e[a].appendChild(document.createTextNode(l))}}else e[a].appendChild(document.createTextNode(i));else v("no number text found:",e[a])}}function j({elems:e}){for(var t=0;t<e.length;t++)if(y.has(e[t])){var n=e[t].innerHTML,r=y.get(e[t]);v("orig:",r);var i=r.html;v("reverting",n,"to",i),i!=null&&i!==""?e[t].innerHTML=i:r.text!==void 0&&r.text!==null?e[t].textContent=r.text:e[t].textContent="",r.href&&e[t].setAttribute("href",r.href),y.delete(e[t])}else v("element not in map:",e[t])}function te(e){clearInterval(w[e]),delete w[e]}function re(){for(var e in w)te(e)}function ne(i){return d(this,arguments,function*({poolId:e,apiUrl:t,number:n=null,context:r=null}){var a={pool_id:e,number:n,context:r,properties:{zar:k()}},o=yield R({url:`${t}/number_pool`,data:a});return o})}function E(){return window.zarPoolData&&window.zarPoolData.status===U&&window.zarPoolData.number}function I(){if(!window.zarPoolDataLayer||!Array.isArray(window.zarPoolDataLayer)||window.zarPoolDataLayer.length===0)return null;for(var e={},t=0;t<window.zarPoolDataLayer.length;t++){var n=window.zarPoolDataLayer[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return window.zarPoolDataLayer.length=0,e}function G(i){return d(this,arguments,function*({apiUrl:e,poolId:t,number:n,context:r}){if(!E()){f("no valid pool data, not updating context");return}var a={pool_id:t,number:n,context:r,properties:{zar:k()}},o=yield R({url:`${e}/update_number`,data:a});return o})}function Oe(r){return d(this,arguments,function*({apiUrl:e,key:t=null,with_contexts:n=!1}){var i={key:t,with_contexts:n},a=yield me({url:`${e}/number_pool_stats`,params:i});return a})}function ae(){return d(this,arguments,function*({overlayElements:e,apiUrl:t=Y(),contextCallback:n=null,checkLastRenewal:r=!1,renewalInterval:i=Q}={}){if(J)return{status:S,msg:"stopped"};const a=window.zarPoolData.pool_id,o=window.zarPoolData.number;var u=Date.now(),s=q[a],l=3*1e3;if(r&&s&&u-s<i+l)return{status:U};q[a]=u;var b=I()||{};n&&(b=n(b)||{});try{var c=yield ne({poolId:a,apiUrl:t,number:o,context:b})}catch(xe){var O="error getting number: "+JSON.stringify(xe);return f(O),X++,X>=ye&&(f("max failures, stopping pool"),J=!0,re(),e&&j({elems:e})),{status:S,msg:O}}if(c.status===U&&c.number){var ue=!1;c.number!==window.zarPoolData.number&&(f("number changed from "+window.zarPoolData.number+" to "+c.number),window.zarPoolData.number=c.number,ue=!0),e&&N({elems:e,number:c.number,force:ue})}else e&&j({elems:e}),w[a]&&(clearInterval(w[a]),delete w[a]);return c})}function A(e){return we(e)?e():e}function ze(e){if(!window.zarPoolDLObserverDone&&E()){var t=window.zarPoolDataLayer.push;window.zarPoolDataLayer.push=function(...r){var i=t.apply(this,r),a=I();return a&&G({apiUrl:e,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:a}),i};var n=I();n&&G({apiUrl:e,poolId:window.zarPoolData.pool_id,number:window.zarPoolData.number,context:n}),window.zarPoolDLObserverDone=!0}}function ie(){return d(this,arguments,function*({poolData:e,poolConfig:t,apiUrl:n}={}){var r;if(J=!1,!t||!t.poolId||!t.overlayQuerySelector||!n)return r="missing pool config: "+JSON.stringify(t),f(r),t.initCallback&&t.initCallback({status:S,msg:r}),w;var i=A(t.poolId);if(!i)return r="no pool ID",f(r),t.initCallback&&t.initCallback({status:S,msg:r}),w;if(!e){var a=I()||{};t.contextCallback&&(a=t.contextCallback(a)||{});try{e=yield ne({poolId:i,apiUrl:n,number:null,context:a})}catch(o){return r="error getting number on init: "+JSON.stringify(o),f(r),t.initCallback&&t.initCallback({status:S,msg:r}),w}}if(window.zarPoolData=e,E()){q[i]=Date.now();try{ze(n)}catch(o){f("data layer error: "+JSON.stringify(o))}ge(function(){var o=document.querySelectorAll(t.overlayQuerySelector);if(!o){var u="No elems found for:"+t.overlayQuerySelector;f(u),t.initCallback&&t.initCallback({status:S,msg:u});return}N({elems:o,number:e.number});var s=t.renewalInterval||Q,l=setInterval(function(){try{ae({overlayElements:o,apiUrl:n,contextCallback:t.contextCallback})}catch(O){var c="error on interval: "+JSON.stringify(O);f(c)}},s);w[e.pool_id]=l,t.initCallback&&t.initCallback(e);var b=function(c={}){try{if(!E())return;(c.type==="vc"&&document.visibilityState==="visible"||c.type==="ps"&&c.persisted===!0)&&ae({overlayElements:o,apiUrl:n,contextCallback:t.contextCallback,checkLastRenewal:!0,renewalInterval:s})}catch(O){f("error on renew: "+JSON.stringify(O))}};document.addEventListener("visibilitychange",function(){b({type:"vc"})},{passive:!0}),window.addEventListener("pageshow",function(c){b({type:"ps",persisted:c&&c.persisted})},{passive:!0})})}return w})}function oe({apiUrl:e,poolConfig:t}){return K(),{name:"zar",config:{apiUrl:e,poolConfig:t},initialize:function({config:n}){},loaded:function(){return!0},pageStart:function({payload:n,config:r,instance:i}){n.properties.zar=k(),n.properties.referrer=document.referrer,n.properties.is_bot=H();try{var a=r.poolConfig;if(a&&a.poolId){n.properties.pool_id=A(a.poolId);var o=I()||{};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}){v("page",n,r,a);for(var u=0,s=3,l;u<s;)try{l=yield R({url:`${a.apiUrl}/page`,data:n});break}catch(b){if(u++,u>=s)throw f("error posting page: "+JSON.stringify(b)),b;yield new Promise(c=>setTimeout(c,1e3))}l&&l.pool_data&&ie({poolData:l.pool_data,poolConfig:a.poolConfig,apiUrl:a.apiUrl})})},trackStart:function({payload:n,config:r,instance:i}){return n.properties.zar=k(),n.properties.url=window.location.href,n.properties.referrer=document.referrer,n},track:function({payload:n,options:r,instance:i,config:a}){v("track",n),R({url:`${a.apiUrl}/track`,data:n,beacon:!0})},methods:{apiUrl(){return e},poolConfig(){return t},initIDs(){return K()},getIDs(){return Ie()},getStorage(){return k()},getVID(){return ee(T)},isBot(){return H()},initTrackingPool({poolConfig:n}){var r=this.instance.plugins.zar;return ie({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 w},clearPoolInterval({poolId:n}){te(n)},clearPoolIntervals(){re()},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}){N({elems:n,number:r})},revertOverlayNumbers({overlayElements:n}){j({elems:n})},getPoolStats({key:n=null,with_contexts:r=!1}){return Oe({apiUrl:this.instance.plugins.zar.apiUrl(),key:n,with_contexts:r})}}}}function _e({app:e,ga4Config:t=null,facebookConfig:n=null,apiUrl:r=null,poolConfig:i=null}){r||(r=Y());var a=[oe({apiUrl:r,poolConfig:i})];return t&&a.push(fe(t)),n&&a.push(se(n)),h({app:e,plugins:a})}const De={extractPhoneNumber:F,overlayPhoneNumber:N,revertOverlayNumbers:j,drainPoolDataLayer:I,getPoolId:A};g.Analytics=h,g.__test__=De,g.init=_e,g.zar=oe,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=zar.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zar.umd.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_TIME_MS = 30 * 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 origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n }\n\n var result = { id, t: Date.now(), 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 checkLastRenewal = false,\n renewalInterval = NUMBER_POOL_RENEWAL_TIME_MS\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 var elbowRoom = 3 * 1000;\n if (checkLastRenewal && last && now - last < renewalInterval + elbowRoom) {\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 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_TIME_MS;\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 console.log(\"renew on\", opts.type);\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback,\n checkLastRenewal: true,\n renewalInterval\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 var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback\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 }\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_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","checkLastRenewal","renewalInterval","now","last","elbowRoom","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","forceRenewOnReturn","opts","interval","zar","pcfg","tries","maxTries","plugin","elemRes","init","ga4Config","facebookConfig","__test__"],"mappings":"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"}
1
+ {"version":3,"file":"zar.umd.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_TIME_MS = 30 * 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 origReferrer = null;\n var idObj = getter(key);\n\n if (!idObj || !idObj.id) {\n id = generator();\n origReferrer = document.referrer;\n isNew = true;\n dbg(\"new ID for\", key, \"-\", id);\n } else {\n id = idObj.id;\n origReferrer = idObj.origReferrer;\n }\n\n var result = { id, t: Date.now(), 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 checkLastRenewal = false,\n renewalInterval = NUMBER_POOL_RENEWAL_TIME_MS\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 var elbowRoom = 3 * 1000;\n if (checkLastRenewal && last && now - last < renewalInterval + elbowRoom) {\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 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_TIME_MS;\n\n var interval = setInterval(function () {\n try {\n renewTrackingPool({\n overlayElements,\n apiUrl,\n contextCallback: poolConfig.contextCallback\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 checkLastRenewal: true,\n renewalInterval\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_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","checkLastRenewal","renewalInterval","now","last","elbowRoom","getPoolId","initPoolDataLayerObserver","originalPush","initTrackingPool","poolData","poolConfig","interval","forceRenewOnReturn","opts","zar","pcfg","tries","maxTries","plugin","elemRes","init","ga4Config","facebookConfig","__test__"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zar",
3
- "version": "0.5.2",
3
+ "version": "0.5.3",
4
4
  "description": "Zillion Analytics Recorder",
5
5
  "publishConfig": {
6
6
  "access": "public"