diff --git a/__tests__/prodsdk.js b/__tests__/prodsdk.js index 18b5ba1ff0..a7298ed925 100644 --- a/__tests__/prodsdk.js +++ b/__tests__/prodsdk.js @@ -1,7959 +1,2 @@ -rudderanalytics = (function (e) { - function t(e) { - return (t = - typeof Symbol === "function" && typeof Symbol.iterator === "symbol" - ? function (e) { - return typeof e; - } - : function (e) { - return e && - typeof Symbol === "function" && - e.constructor === Symbol && - e !== Symbol.prototype - ? "symbol" - : typeof e; - })(e); - } - function n(e, t) { - if (!(e instanceof t)) - throw new TypeError("Cannot call a class as a function"); - } - function r(e, t) { - for (let n = 0; n < t.length; n++) { - const r = t[n]; - (r.enumerable = r.enumerable || !1), - (r.configurable = !0), - "value" in r && (r.writable = !0), - Object.defineProperty(e, r.key, r); - } - } - function i(e, t, n) { - return t && r(e.prototype, t), n && r(e, n), e; - } - function o(e, t, n) { - return ( - t in e - ? Object.defineProperty(e, t, { - value: n, - enumerable: !0, - configurable: !0, - writable: !0, - }) - : (e[t] = n), - e - ); - } - function s(e, t) { - const n = Object.keys(e); - if (Object.getOwnPropertySymbols) { - let r = Object.getOwnPropertySymbols(e); - t && - (r = r.filter(function (t) { - return Object.getOwnPropertyDescriptor(e, t).enumerable; - })), - n.push.apply(n, r); - } - return n; - } - function a(e) { - for (let t = 1; t < arguments.length; t++) { - var n = arguments[t] != null ? arguments[t] : {}; - t % 2 - ? s(n, !0).forEach(function (t) { - o(e, t, n[t]); - }) - : Object.getOwnPropertyDescriptors - ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) - : s(n).forEach(function (t) { - Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); - }); - } - return e; - } - function c(e) { - return ( - (function (e) { - if (Array.isArray(e)) { - for (var t = 0, n = new Array(e.length); t < e.length; t++) - n[t] = e[t]; - return n; - } - })(e) || - (function (e) { - if ( - Symbol.iterator in Object(e) || - Object.prototype.toString.call(e) === "[object Arguments]" - ) - return Array.from(e); - })(e) || - (function () { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - })() - ); - } - const u = - typeof globalThis !== "undefined" - ? globalThis - : typeof window !== "undefined" - ? window - : typeof global !== "undefined" - ? global - : typeof self !== "undefined" - ? self - : {}; - function l(e, t) { - return e((t = { exports: {} }), t.exports), t.exports; - } - const d = l(function (e) { - function t(e) { - if (e) - return (function (e) { - for (const n in t.prototype) e[n] = t.prototype[n]; - return e; - })(e); - } - (e.exports = t), - (t.prototype.on = t.prototype.addEventListener = function (e, t) { - return ( - (this._callbacks = this._callbacks || {}), - (this._callbacks[`$${e}`] = this._callbacks[`$${e}`] || []).push(t), - this - ); - }), - (t.prototype.once = function (e, t) { - function n() { - this.off(e, n), t.apply(this, arguments); - } - return (n.fn = t), this.on(e, n), this; - }), - (t.prototype.off = t.prototype.removeListener = t.prototype.removeAllListeners = t.prototype.removeEventListener = function ( - e, - t - ) { - if (((this._callbacks = this._callbacks || {}), arguments.length == 0)) - return (this._callbacks = {}), this; - let n; - const r = this._callbacks[`$${e}`]; - if (!r) return this; - if (arguments.length == 1) return delete this._callbacks[`$${e}`], this; - for (let i = 0; i < r.length; i++) - if ((n = r[i]) === t || n.fn === t) { - r.splice(i, 1); - break; - } - return r.length === 0 && delete this._callbacks[`$${e}`], this; - }), - (t.prototype.emit = function (e) { - this._callbacks = this._callbacks || {}; - for ( - var t = new Array(arguments.length - 1), - n = this._callbacks[`$${e}`], - r = 1; - r < arguments.length; - r++ - ) - t[r - 1] = arguments[r]; - if (n) { - r = 0; - for (let i = (n = n.slice(0)).length; r < i; ++r) n[r].apply(this, t); - } - return this; - }), - (t.prototype.listeners = function (e) { - return ( - (this._callbacks = this._callbacks || {}), - this._callbacks[`$${e}`] || [] - ); - }), - (t.prototype.hasListeners = function (e) { - return !!this.listeners(e).length; - }); - }); - const p = function (e, t, n) { - let r = !1; - return (n = n || h), (i.count = e), e === 0 ? t() : i; - function i(e, o) { - if (i.count <= 0) throw new Error("after called too many times"); - --i.count, - e ? ((r = !0), t(e), (t = n)) : i.count !== 0 || r || t(null, o); - } - }; - function h() {} - let f = 4; - const g = { - setLogLevel(e) { - switch (e.toUpperCase()) { - case "INFO": - return void (f = 1); - case "DEBUG": - return void (f = 2); - case "WARN": - return void (f = 3); - } - }, - info() { - let e; - f <= 1 && (e = console).info.apply(e, arguments); - }, - debug() { - let e; - f <= 2 && (e = console).debug.apply(e, arguments); - }, - warn() { - let e; - f <= 3 && (e = console).warn.apply(e, arguments); - }, - error() { - let e; - f <= 4 && (e = console).error.apply(e, arguments); - }, - }; - const m = { - All: "All", - "Google Analytics": "GA", - GoogleAnalytics: "GA", - GA: "GA", - "Google Ads": "GOOGLEADS", - GoogleAds: "GOOGLEADS", - GOOGLEADS: "GOOGLEADS", - Braze: "BRAZE", - BRAZE: "BRAZE", - Chartbeat: "CHARTBEAT", - CHARTBEAT: "CHARTBEAT", - Comscore: "COMSCORE", - COMSCORE: "COMSCORE", - Customerio: "CUSTOMERIO", - "Customer.io": "CUSTOMERIO", - "FB Pixel": "FACEBOOK_PIXEL", - "Facebook Pixel": "FACEBOOK_PIXEL", - FB_PIXEL: "FACEBOOK_PIXEL", - "Google Tag Manager": "GOOGLETAGMANAGER", - GTM: "GTM", - Hotjar: "HOTJAR", - hotjar: "HOTJAR", - HOTJAR: "HOTJAR", - Hubspot: "HS", - HUBSPOT: "HS", - Intercom: "INTERCOM", - INTERCOM: "INTERCOM", - Keen: "KEEN", - "Keen.io": "KEEN", - KEEN: "KEEN", - Kissmetrics: "KISSMETRICS", - KISSMETRICS: "KISSMETRICS", - Lotame: "LOTAME", - LOTAME: "LOTAME", - "Visual Website Optimizer": "VWO", - VWO: "VWO", - }; - const y = { - All: "All", - GA: "Google Analytics", - GOOGLEADS: "Google Ads", - BRAZE: "Braze", - CHARTBEAT: "Chartbeat", - COMSCORE: "Comscore", - CUSTOMERIO: "Customer IO", - FACEBOOK_PIXEL: "Facebook Pixel", - GTM: "Google Tag Manager", - HOTJAR: "Hotjar", - HS: "HubSpot", - INTERCOM: "Intercom", - KEEN: "Keen", - KISSMETRICS: "Kiss Metrics", - LOTAME: "Lotame", - VWO: "VWO", - }; - function v(e, t) { - return t == null ? void 0 : t; - } - function b() { - let e = new Date().getTime(); - return ( - typeof performance !== "undefined" && - typeof performance.now === "function" && - (e += performance.now()), - "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (t) { - const n = (e + 16 * Math.random()) % 16 | 0; - return ( - (e = Math.floor(e / 16)), (t === "x" ? n : (3 & n) | 8).toString(16) - ); - }) - ); - } - function w() { - return new Date().toISOString(); - } - function k(e, t) { - let n = e.message ? e.message : void 0; - let r = void 0; - try { - e instanceof Event && - e.target && - e.target.localName == "script" && - ((n = `error in script loading:: src:: ${e.target.src} id:: ${e.target.id}`), - t && - e.target.src.includes("adsbygoogle") && - ((r = !0), - t.page( - "RudderJS-Initiated", - "ad-block page request", - { path: "/ad-blocked", title: n }, - t.sendAdblockPageOptions - ))), - n && !r && g.error("[Util] handleError:: ", n); - } catch (e) { - g.error("[Util] handleError:: ", e); - } - } - function E() { - const e = I(); - const t = e ? e.pathname : window.location.pathname; - const n = document.referrer; - const r = window.location.search; - return { - path: t, - referrer: n, - search: r, - title: document.title, - url: (function (e) { - const t = I(); - const n = t ? (t.indexOf("?") > -1 ? t : t + e) : window.location.href; - const r = n.indexOf("#"); - return r > -1 ? n.slice(0, r) : n; - })(r), - }; - } - function I() { - for ( - var e, t = document.getElementsByTagName("link"), n = 0; - (e = t[n]); - n++ - ) - if (e.getAttribute("rel") === "canonical") return e.getAttribute("href"); - } - function _(e, t) { - let n = e.revenue; - return ( - !n && - t && - t.match( - /^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i - ) && - (n = e.total), - (function (e) { - if (e) { - if (typeof e === "number") return e; - if (typeof e === "string") - return ( - (e = e.replace(/\$/g, "")), - (e = parseFloat(e)), - isNaN(e) ? void 0 : e - ); - } - })(n) - ); - } - function A(e) { - Object.keys(e).forEach(function (t) { - e.hasOwnProperty(t) && - (m[t] && (e[m[t]] = e[t]), - t != "All" && m[t] != null && m[t] != t && delete e[t]); - }); - } - function C(e, n) { - const r = []; - if (!n || n.length == 0) return r; - let i = !0; - return typeof n[0] === "string" - ? (e.All != null && (i = e.All), - n.forEach(function (t) { - if (i) { - let n = !0; - e[t] != null && e[t] == 0 && (n = !1), n && r.push(t); - } else e[t] != null && e[t] == 1 && r.push(t); - }), - r) - : t(n[0]) == "object" - ? (e.All != null && (i = e.All), - n.forEach(function (t) { - if (i) { - let n = !0; - e[t.name] != null && e[t.name] == 0 && (n = !1), n && r.push(t); - } else e[t.name] != null && e[t.name] == 1 && r.push(t); - }), - r) - : void 0; - } - function T(e, n) { - return ( - (n = n || S), - (function (e) { - switch (toString.call(e)) { - case "[object Function]": - return "function"; - case "[object Date]": - return "date"; - case "[object RegExp]": - return "regexp"; - case "[object Arguments]": - return "arguments"; - case "[object Array]": - return "array"; - } - return e === null - ? "null" - : void 0 === e - ? "undefined" - : e === Object(e) - ? "object" - : t(e); - })(e) == "array" - ? O(e, n) - : P(e, n) - ); - } - var O = function (e, t) { - for (var n = [], r = 0; r < e.length; ++r) - t(e[r], r) || (n[n.length] = e[r]); - return n; - }; - var P = function (e, t) { - const n = {}; - for (const r in e) e.hasOwnProperty(r) && !t(e[r], r) && (n[r] = e[r]); - return n; - }; - function S(e) { - return e == null; - } - const x = { TRACK: "track", PAGE: "page", IDENTIFY: "identify" }; - const R = { - PRODUCTS_SEARCHED: "Products Searched", - PRODUCT_LIST_VIEWED: "Product List Viewed", - PRODUCT_LIST_FILTERED: "Product List Filtered", - PROMOTION_VIEWED: "Promotion Viewed", - PROMOTION_CLICKED: "Promotion Clicked", - PRODUCT_CLICKED: "Product Clicked", - PRODUCT_VIEWED: "Product Viewed", - PRODUCT_ADDED: "Product Added", - PRODUCT_REMOVED: "Product Removed", - CART_VIEWED: "Cart Viewed", - CHECKOUT_STARTED: "Checkout Started", - CHECKOUT_STEP_VIEWED: "Checkout Step Viewed", - CHECKOUT_STEP_COMPLETED: "Checkout Step Completed", - PAYMENT_INFO_ENTERED: "Payment Info Entered", - ORDER_UPDATED: "Order Updated", - ORDER_COMPLETED: "Order Completed", - ORDER_REFUNDED: "Order Refunded", - ORDER_CANCELLED: "Order Cancelled", - COUPON_ENTERED: "Coupon Entered", - COUPON_APPLIED: "Coupon Applied", - COUPON_DENIED: "Coupon Denied", - COUPON_REMOVED: "Coupon Removed", - PRODUCT_ADDED_TO_WISHLIST: "Product Added to Wishlist", - PRODUCT_REMOVED_FROM_WISHLIST: "Product Removed from Wishlist", - WISH_LIST_PRODUCT_ADDED_TO_CART: "Wishlist Product Added to Cart", - PRODUCT_SHARED: "Product Shared", - CART_SHARED: "Cart Shared", - PRODUCT_REVIEWED: "Product Reviewed", - }; - const j = "https://hosted.rudderlabs.com"; - function L(e, t) { - g.debug(`in script loader=== ${e}`); - const n = document.createElement("script"); - (n.src = t), (n.async = !0), (n.type = "text/javascript"), (n.id = e); - const r = document.getElementsByTagName("script")[0]; - g.debug("==script==", r), r.parentNode.insertBefore(n, r); - } - let D; - let M; - const U = (function () { - function e(t) { - n(this, e), (this.hubId = t.hubID), (this.name = "HS"); - } - return ( - i(e, [ - { - key: "init", - value() { - L( - "hubspot-integration", - `http://js.hs-scripts.com/${this.hubId}.js` - ), - g.debug("===in init HS==="); - }, - }, - { - key: "identify", - value(e) { - g.debug("in HubspotAnalyticsManager identify"); - const n = e.message.context.traits; - const r = {}; - for (const i in n) - if (Object.getOwnPropertyDescriptor(n, i) && n[i]) { - const o = i; - toString.call(n[i]) == "[object Date]" - ? (r[o] = n[i].getTime()) - : (r[o] = n[i]); - } - const s = e.message.context.user_properties; - for (const a in s) { - if (Object.getOwnPropertyDescriptor(s, a) && s[a]) r[a] = s[a]; - } - (g.debug(r), - void 0 !== - (typeof window === "undefined" ? "undefined" : t(window))) && - (window._hsq = window._hsq || []).push(["identify", r]); - }, - }, - { - key: "track", - value(e) { - g.debug("in HubspotAnalyticsManager track"); - const t = (window._hsq = window._hsq || []); - const n = {}; - (n.id = e.message.event), - e.message.properties && - (e.message.properties.revenue || e.message.properties.value) && - (n.value = - e.message.properties.revenue || e.message.properties.value), - t.push(["trackEvent", n]); - }, - }, - { - key: "page", - value(e) { - g.debug("in HubspotAnalyticsManager page"); - const t = (window._hsq = window._hsq || []); - e.message.properties && - e.message.properties.path && - t.push(["setPath", e.message.properties.path]), - t.push(["trackPageView"]); - }, - }, - { - key: "isLoaded", - value() { - return ( - g.debug("in hubspot isLoaded"), - !(!window._hsq || window._hsq.push === Array.prototype.push) - ); - }, - }, - { - key: "isReady", - value() { - return !(!window._hsq || window._hsq.push === Array.prototype.push); - }, - }, - ]), - e - ); - })(); - const N = Object.prototype; - const q = N.hasOwnProperty; - const B = N.toString; - typeof Symbol === "function" && (D = Symbol.prototype.valueOf), - typeof BigInt === "function" && (M = BigInt.prototype.valueOf); - const F = function (e) { - return e != e; - }; - const G = { boolean: 1, number: 1, string: 1, undefined: 1 }; - const K = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/; - const V = /^[A-Fa-f0-9]+$/; - const H = {}; - (H.a = H.type = function (e, t) { - return typeof e === t; - }), - (H.defined = function (e) { - return void 0 !== e; - }), - (H.empty = function (e) { - let t; - const n = B.call(e); - if ( - n === "[object Array]" || - n === "[object Arguments]" || - n === "[object String]" - ) - return e.length === 0; - if (n === "[object Object]") { - for (t in e) if (q.call(e, t)) return !1; - return !0; - } - return !e; - }), - (H.equal = function (e, t) { - if (e === t) return !0; - let n; - const r = B.call(e); - if (r !== B.call(t)) return !1; - if (r === "[object Object]") { - for (n in e) if (!(H.equal(e[n], t[n]) && n in t)) return !1; - for (n in t) if (!(H.equal(e[n], t[n]) && n in e)) return !1; - return !0; - } - if (r === "[object Array]") { - if ((n = e.length) !== t.length) return !1; - for (; n--; ) if (!H.equal(e[n], t[n])) return !1; - return !0; - } - return r === "[object Function]" - ? e.prototype === t.prototype - : r === "[object Date]" && e.getTime() === t.getTime(); - }), - (H.hosted = function (e, t) { - const n = typeof t[e]; - return n === "object" ? !!t[e] : !G[n]; - }), - (H.instance = H.instanceof = function (e, t) { - return e instanceof t; - }), - (H.nil = H.null = function (e) { - return e === null; - }), - (H.undef = H.undefined = function (e) { - return void 0 === e; - }), - (H.args = H.arguments = function (e) { - const t = B.call(e) === "[object Arguments]"; - const n = !H.array(e) && H.arraylike(e) && H.object(e) && H.fn(e.callee); - return t || n; - }), - (H.array = - Array.isArray || - function (e) { - return B.call(e) === "[object Array]"; - }), - (H.args.empty = function (e) { - return H.args(e) && e.length === 0; - }), - (H.array.empty = function (e) { - return H.array(e) && e.length === 0; - }), - (H.arraylike = function (e) { - return ( - !!e && - !H.bool(e) && - q.call(e, "length") && - isFinite(e.length) && - H.number(e.length) && - e.length >= 0 - ); - }), - (H.bool = H.boolean = function (e) { - return B.call(e) === "[object Boolean]"; - }), - (H.false = function (e) { - return H.bool(e) && !1 === Boolean(Number(e)); - }), - (H.true = function (e) { - return H.bool(e) && !0 === Boolean(Number(e)); - }), - (H.date = function (e) { - return B.call(e) === "[object Date]"; - }), - (H.date.valid = function (e) { - return H.date(e) && !isNaN(Number(e)); - }), - (H.element = function (e) { - return ( - void 0 !== e && - typeof HTMLElement !== "undefined" && - e instanceof HTMLElement && - e.nodeType === 1 - ); - }), - (H.error = function (e) { - return B.call(e) === "[object Error]"; - }), - (H.fn = H.function = function (e) { - if (typeof window !== "undefined" && e === window.alert) return !0; - const t = B.call(e); - return ( - t === "[object Function]" || - t === "[object GeneratorFunction]" || - t === "[object AsyncFunction]" - ); - }), - (H.number = function (e) { - return B.call(e) === "[object Number]"; - }), - (H.infinite = function (e) { - return e === 1 / 0 || e === -1 / 0; - }), - (H.decimal = function (e) { - return H.number(e) && !F(e) && !H.infinite(e) && e % 1 != 0; - }), - (H.divisibleBy = function (e, t) { - const n = H.infinite(e); - const r = H.infinite(t); - const i = H.number(e) && !F(e) && H.number(t) && !F(t) && t !== 0; - return n || r || (i && e % t == 0); - }), - (H.integer = H.int = function (e) { - return H.number(e) && !F(e) && e % 1 == 0; - }), - (H.maximum = function (e, t) { - if (F(e)) throw new TypeError("NaN is not a valid value"); - if (!H.arraylike(t)) - throw new TypeError("second argument must be array-like"); - for (let n = t.length; --n >= 0; ) if (e < t[n]) return !1; - return !0; - }), - (H.minimum = function (e, t) { - if (F(e)) throw new TypeError("NaN is not a valid value"); - if (!H.arraylike(t)) - throw new TypeError("second argument must be array-like"); - for (let n = t.length; --n >= 0; ) if (e > t[n]) return !1; - return !0; - }), - (H.nan = function (e) { - return !H.number(e) || e != e; - }), - (H.even = function (e) { - return H.infinite(e) || (H.number(e) && e == e && e % 2 == 0); - }), - (H.odd = function (e) { - return H.infinite(e) || (H.number(e) && e == e && e % 2 != 0); - }), - (H.ge = function (e, t) { - if (F(e) || F(t)) throw new TypeError("NaN is not a valid value"); - return !H.infinite(e) && !H.infinite(t) && e >= t; - }), - (H.gt = function (e, t) { - if (F(e) || F(t)) throw new TypeError("NaN is not a valid value"); - return !H.infinite(e) && !H.infinite(t) && e > t; - }), - (H.le = function (e, t) { - if (F(e) || F(t)) throw new TypeError("NaN is not a valid value"); - return !H.infinite(e) && !H.infinite(t) && e <= t; - }), - (H.lt = function (e, t) { - if (F(e) || F(t)) throw new TypeError("NaN is not a valid value"); - return !H.infinite(e) && !H.infinite(t) && e < t; - }), - (H.within = function (e, t, n) { - if (F(e) || F(t) || F(n)) throw new TypeError("NaN is not a valid value"); - if (!H.number(e) || !H.number(t) || !H.number(n)) - throw new TypeError("all arguments must be numbers"); - return ( - H.infinite(e) || H.infinite(t) || H.infinite(n) || (e >= t && e <= n) - ); - }), - (H.object = function (e) { - return B.call(e) === "[object Object]"; - }), - (H.primitive = function (e) { - return ( - !e || !(typeof e === "object" || H.object(e) || H.fn(e) || H.array(e)) - ); - }), - (H.hash = function (e) { - return ( - H.object(e) && e.constructor === Object && !e.nodeType && !e.setInterval - ); - }), - (H.regexp = function (e) { - return B.call(e) === "[object RegExp]"; - }), - (H.string = function (e) { - return B.call(e) === "[object String]"; - }), - (H.base64 = function (e) { - return H.string(e) && (!e.length || K.test(e)); - }), - (H.hex = function (e) { - return H.string(e) && (!e.length || V.test(e)); - }), - (H.symbol = function (e) { - return ( - typeof Symbol === "function" && - B.call(e) === "[object Symbol]" && - typeof D.call(e) === "symbol" - ); - }), - (H.bigint = function (e) { - return ( - typeof BigInt === "function" && - B.call(e) === "[object BigInt]" && - typeof M.call(e) === "bigint" - ); - }); - let z; - const J = H; - const W = Object.prototype.toString; - const $ = function (e) { - switch (W.call(e)) { - case "[object Function]": - return "function"; - case "[object Date]": - return "date"; - case "[object RegExp]": - return "regexp"; - case "[object Arguments]": - return "arguments"; - case "[object Array]": - return "array"; - case "[object String]": - return "string"; - } - return e === null - ? "null" - : void 0 === e - ? "undefined" - : e && e.nodeType === 1 - ? "element" - : e === Object(e) - ? "object" - : typeof e; - }; - const Y = /\b(Array|Date|Object|Math|JSON)\b/g; - const Q = function (e, t) { - const n = (function (e) { - for (var t = [], n = 0; n < e.length; n++) - ~t.indexOf(e[n]) || t.push(e[n]); - return t; - })( - (function (e) { - return ( - e - .replace(/\.\w+|\w+ *\(|"[^"]*"|'[^']*'|\/([^/]+)\//g, "") - .replace(Y, "") - .match(/[a-zA-Z_]\w*/g) || [] - ); - })(e) - ); - return ( - t && - typeof t === "string" && - (t = (function (e) { - return function (t) { - return e + t; - }; - })(t)), - t - ? (function (e, t, n) { - return e.replace( - /\.\w+|\w+ *\(|"[^"]*"|'[^']*'|\/([^/]+)\/|[a-zA-Z_]\w*/g, - function (e) { - return e[e.length - 1] == "(" ? n(e) : ~t.indexOf(e) ? n(e) : e; - } - ); - })(e, n, t) - : n - ); - }; - try { - z = Q; - } catch (e) { - z = Q; - } - const Z = X; - function X(e) { - switch ({}.toString.call(e)) { - case "[object Object]": - return (function (e) { - const t = {}; - for (const n in e) - t[n] = typeof e[n] === "string" ? ee(e[n]) : X(e[n]); - return function (e) { - if (typeof e !== "object") return !1; - for (const n in t) { - if (!(n in e)) return !1; - if (!t[n](e[n])) return !1; - } - return !0; - }; - })(e); - case "[object Function]": - return e; - case "[object String]": - return /^ *\W+/.test((n = e)) - ? new Function("_", `return _ ${n}`) - : new Function( - "_", - `return ${(function (e) { - let t; - let n; - let r; - const i = z(e); - if (!i.length) return `_.${e}`; - for (n = 0; n < i.length; n++) - (r = i[n]), - (e = te( - r, - e, - (t = `('function' == typeof ${(t = `_.${r}`)} ? ${t}() : ${t})`) - )); - return e; - })(n)}` - ); - case "[object RegExp]": - return ( - (t = e), - function (e) { - return t.test(e); - } - ); - default: - return ee(e); - } - let t; - let n; - } - function ee(e) { - return function (t) { - return e === t; - }; - } - function te(e, t, n) { - return t.replace(new RegExp(`(\\.)?${e}`, "g"), function (e, t) { - return t ? e : n; - }); - } - try { - var ne = $; - } catch (e) { - ne = $; - } - const re = Object.prototype.hasOwnProperty; - const ie = function (e, t, n) { - switch (((t = Z(t)), (n = n || this), ne(e))) { - case "array": - return oe(e, t, n); - case "object": - return typeof e.length === "number" - ? oe(e, t, n) - : (function (e, t, n) { - for (const r in e) re.call(e, r) && t.call(n, r, e[r]); - })(e, t, n); - case "string": - return (function (e, t, n) { - for (let r = 0; r < e.length; ++r) t.call(n, e.charAt(r), r); - })(e, t, n); - } - }; - function oe(e, t, n) { - for (let r = 0; r < e.length; ++r) t.call(n, e[r], r); - } - const se = Math.max; - const ae = function (e, t) { - const n = t ? t.length : 0; - if (!n) return []; - for ( - var r = se(Number(e) || 0, 0), i = se(n - r, 0), o = new Array(i), s = 0; - s < i; - s += 1 - ) - o[s] = t[s + r]; - return o; - }; - const ce = Math.max; - const ue = function (e) { - if (e == null || !e.length) return []; - for (var t = new Array(ce(e.length - 2, 0)), n = 1; n < e.length; n += 1) - t[n - 1] = e[n]; - return t; - }; - const le = Object.prototype.hasOwnProperty; - const de = Object.prototype.toString; - const pe = function (e) { - return Boolean(e) && typeof e === "object"; - }; - const he = function (e) { - return Boolean(e) && de.call(e) === "[object Object]"; - }; - const fe = function (e, t, n, r) { - return le.call(t, r) && void 0 === e[r] && (e[r] = n), t; - }; - const ge = function (e, t, n, r) { - return ( - le.call(t, r) && - (he(e[r]) && he(n) - ? (e[r] = ye(e[r], n)) - : void 0 === e[r] && (e[r] = n)), - t - ); - }; - const me = function (e, t) { - if (!pe(t)) return t; - e = e || fe; - for (let n = ae(2, arguments), r = 0; r < n.length; r += 1) - for (const i in n[r]) e(t, n[r], n[r][i], i); - return t; - }; - var ye = function (e) { - return me.apply(null, [ge, e].concat(ue(arguments))); - }; - const ve = function (e) { - return me.apply(null, [null, e].concat(ue(arguments))); - }; - const be = ye; - ve.deep = be; - const we = (function () { - function e(t) { - n(this, e), - (this.trackingID = t.trackingID), - (this.sendUserId = t.sendUserId || !1), - (this.dimensions = t.dimensions || []), - (this.metrics = t.metrics || []), - (this.contentGroupings = t.contentGroupings || []), - (this.nonInteraction = t.nonInteraction || !1), - (this.anonymizeIp = t.anonymizeIp || !1), - (this.useGoogleAmpClientId = t.useGoogleAmpClientId || !1), - (this.domain = t.domain || "auto"), - (this.doubleClick = t.doubleClick || !1), - (this.enhancedEcommerce = t.enhancedEcommerce || !1), - (this.enhancedLinkAttribution = t.enhancedLinkAttribution || !1), - (this.includeSearch = t.includeSearch || !1), - (this.setAllMappedProps = t.setAllMappedProps || !0), - (this.siteSpeedSampleRate = t.siteSpeedSampleRate || 1), - (this.sampleRate = t.sampleRate || 100), - (this.trackCategorizedPages = t.trackCategorizedPages || !0), - (this.trackNamedPages = t.trackNamedPages || !0), - (this.optimizeContainerId = t.optimize || ""), - (this.resetCustomDimensionsOnPage = - t.resetCustomDimensionsOnPage || []), - (this.inputs = t), - (this.enhancedEcommerceLoaded = 0), - (this.name = "GA"), - (this.eventWithCategoryFieldProductScoped = [ - "product clicked", - "product added", - "product viewed", - "product removed", - ]); - } - return ( - i(e, [ - { - key: "loadScript", - value() { - L( - "google-analytics", - "https://www.google-analytics.com/analytics.js" - ); - }, - }, - { - key: "init", - value() { - (this.pageCalled = !1), (this.dimensionsArray = {}); - let e = !0; - let t = !1; - let n = void 0; - try { - for ( - var r, i = this.dimensions[Symbol.iterator](); - !(e = (r = i.next()).done); - e = !0 - ) { - const o = r.value; - this.dimensionsArray[o.from] = o.to; - } - } catch (e) { - (t = !0), (n = e); - } finally { - try { - e || i.return == null || i.return(); - } finally { - if (t) throw n; - } - } - this.metricsArray = {}; - let s = !0; - let a = !1; - let c = void 0; - try { - for ( - var u, l = this.metrics[Symbol.iterator](); - !(s = (u = l.next()).done); - s = !0 - ) { - const d = u.value; - this.metricsArray[d.from] = d.to; - } - } catch (e) { - (a = !0), (c = e); - } finally { - try { - s || l.return == null || l.return(); - } finally { - if (a) throw c; - } - } - this.contentGroupingsArray = {}; - let p = !0; - let h = !1; - let f = void 0; - try { - for ( - var m, y = this.contentGroupings[Symbol.iterator](); - !(p = (m = y.next()).done); - p = !0 - ) { - const v = m.value; - this.contentGroupingsArray[v.from] = v.to; - } - } catch (e) { - (h = !0), (f = e); - } finally { - try { - p || y.return == null || y.return(); - } finally { - if (h) throw f; - } - } - (window.GoogleAnalyticsObject = "ga"), - (window.ga = - window.ga || - function () { - (window.ga.q = window.ga.q || []), - window.ga.q.push(arguments); - }), - (window.ga.l = new Date().getTime()); - const b = { - cookieDomain: this.domain, - siteSpeedSampleRate: this.siteSpeedSampleRate, - sampleRate: this.sampleRate, - allowLinker: !0, - useAmpClientId: this.useGoogleAmpClientId, - }; - window.ga("create", this.trackingID, b), - this.optimizeContainerId && - window.ga("require", this.optimizeContainerId), - this.ecommerce || - (window.ga("require", "ecommerce"), (this.ecommerce = !0)), - this.doubleClick && window.ga("require", "displayfeatures"), - this.enhancedLinkAttribution && window.ga("require", "linkid"), - this.anonymizeIp && window.ga("set", "anonymizeIp", !0), - g.debug("===in init GA==="); - }, - }, - { - key: "identify", - value(e) { - this.sendUserId && - e.message.userId && - window.ga("set", "userId", e.message.userId); - const t = this.metricsFunction( - e.message.context.traits, - this.dimensionsArray, - this.metricsArray, - this.contentGroupingsArray - ); - console.log(Object.keys(t).length), - Object.keys(t).length && window.ga("set", t), - g.debug("in GoogleAnalyticsManager identify"); - }, - }, - { - key: "track", - value(e, t) { - const n = this; - const r = e.message.event; - if (r !== "Order Completed" || this.enhancedEcommerce) - if (this.enhancedEcommerce) - switch (r) { - case "Checkout Started": - case "Checkout Step Viewed": - case "Order Updated": - (E = (b = e.message.properties).products), - (t = this.extractCheckoutOptions(e)); - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - ie(E, function (t) { - let r = n.createProductTrack(e, t); - (r = { message: r }), - n.enhancedEcommerceTrackProduct(r, n.inputs); - }), - window.ga("ec:setAction", "checkout", { - step: b.step || 1, - option: t || void 0, - }), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Checkout Step Completed": - var i = e.message.properties; - t = this.extractCheckoutOptions(e); - if (!i.step) return; - var o = { step: i.step || 1, option: t || void 0 }; - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - window.ga("ec:setAction", "checkout_option", o), - window.ga("send", "event", "Checkout", "Option"); - break; - case "Order Completed": - (w = - e.message.properties.total || - e.message.properties.revenue || - 0), - (k = e.message.properties.orderId), - (E = e.message.properties.products), - (i = e.message.properties); - if (!k) return; - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - ie(E, function (t) { - let r = n.createProductTrack(e, t); - (r = { message: r }), - n.enhancedEcommerceTrackProduct(r, n.inputs); - }), - window.ga("ec:setAction", "purchase", { - id: k, - affiliation: i.affiliation, - revenue: w, - tax: i.tax, - shipping: i.shipping, - coupon: i.coupon, - }), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Order Refunded": - (k = (i = e.message.properties).orderId), (E = i.products); - if (!k) return; - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - ie(E, function (e) { - const t = { properties: e }; - window.ga("ec:addProduct", { - id: - t.properties.product_id || - t.properties.id || - t.properties.sku, - quantity: t.properties.quantity, - }); - }), - window.ga("ec:setAction", "refund", { id: k }), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Product Added": - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - this.enhancedEcommerceTrackProductAction( - e, - "add", - null, - this.inputs - ), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Product Removed": - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - this.enhancedEcommerceTrackProductAction( - e, - "remove", - null, - this.inputs - ), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Product Viewed": - i = e.message.properties; - var s = {}; - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - i.list && (s.list = i.list), - this.enhancedEcommerceTrackProductAction( - e, - "detail", - s, - this.inputs - ), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Product Clicked": - (i = e.message.properties), (s = {}); - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - i.list && (s.list = i.list), - this.enhancedEcommerceTrackProductAction( - e, - "click", - s, - this.inputs - ), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Promotion Viewed": - i = e.message.properties; - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - window.ga("ec:addPromo", { - id: i.promotionId || i.id, - name: i.name, - creative: i.creative, - position: i.position, - }), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Promotion Clicked": - i = e.message.properties; - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - window.ga("ec:addPromo", { - id: i.promotionId || i.id, - name: i.name, - creative: i.creative, - position: i.position, - }), - window.ga("ec:setAction", "promo_click", {}), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Product List Viewed": - E = (i = e.message.properties).products; - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - ie(E, function (e) { - const t = { properties: e }; - if ( - t.properties.product_id || - t.properties.sku || - t.properties.name - ) { - let r = { - id: t.properties.productId || t.properties.sku, - name: t.properties.name, - category: t.properties.category || i.category, - list: i.list_id || i.category || "products", - brand: t.properties.band, - variant: t.properties.variant, - price: t.properties.price, - position: n.getProductPosition(t, E), - }; - for (const o in (r = a( - { impressionObj: r }, - n.metricsFunction( - t.properties, - n.dimensionsArray, - n.metricsArray, - n.contentGroupingsArray - ) - ))) - void 0 === r[o] && delete r[o]; - window.ga("ec:addImpression", r); - } - }), - this.pushEnhancedEcommerce(e, this.inputs); - break; - case "Product List Filtered": - E = (i = e.message.properties).products; - (i.filters = i.filters || []), - (i.sorters = i.sorters || []); - var c = i.filters - .map(function (e) { - return "".concat(e.type, ":").concat(e.value); - }) - .join(); - var u = i.sorters - .map(function (e) { - return "".concat(e.type, ":").concat(e.value); - }) - .join(); - (this.enhancedEcommerceLoaded = this.loadEnhancedEcommerce( - e, - this.enhancedEcommerceLoaded - )), - ie(E, function (e) { - const t = { properties: e }; - if ( - t.properties.product_id || - t.properties.sku || - t.properties.name - ) { - let r = { - id: t.properties.product_id || t.sku, - name: t.name, - category: t.category || i.category, - list: i.list_id || i.category || "search results", - brand: i.brand, - variant: "".concat(c, "::").concat(u), - price: t.price, - position: n.getProductPosition(t, E), - }; - for (const o in (r = a( - { impressionObj: r }, - n.metricsFunction( - t.properties, - n.dimensionsArray, - n.metricsArray, - n.contentGroupingsArray - ) - ))) - void 0 === r[o] && delete r[o]; - window.ga("ec:addImpression", r); - } - }), - this.pushEnhancedEcommerce(e, this.inputs); - break; - default: - var l = this.inputs; - y = ve((y = t || {}), l); - var d = e.message.properties.category; - var p = e.message.event; - var h = e.message.properties.label; - var f = ""; - e.message.properties && - (f = e.message.properties.value - ? e.message.properties.value - : e.message.properties.revenue); - var m = { - eventCategory: d || "All", - eventAction: p, - eventLabel: h, - eventValue: this.formatValue(f), - nonInteraction: - void 0 !== e.message.properties.nonInteraction - ? !!e.message.properties.nonInteraction - : !!y.nonInteraction, - }; - (v = e.message.context.campaign) && - (v.name && (m.campaignName = v.name), - v.source && (m.campaignSource = v.source), - v.medium && (m.campaignMedium = v.medium), - v.content && (m.campaignContent = v.content), - v.term && (m.campaignKeyword = v.term)), - (m = a( - { payload: m }, - this.setCustomDimenionsAndMetrics( - e.message.properties, - this.inputs - ) - )), - window.ga("send", "event", m), - g.debug("in GoogleAnalyticsManager track"); - } - else { - l = this.inputs; - var y = ve(t || {}, void 0); - y = ve(y, l); - (d = e.message.properties.category), - (p = e.message.event), - (h = e.message.properties.label), - (f = ""); - e.message.properties && - (f = e.message.properties.value - ? e.message.properties.value - : e.message.properties.revenue); - var v; - m = { - eventCategory: d || "All", - eventAction: p, - eventLabel: h, - eventValue: this.formatValue(f), - nonInteraction: - void 0 !== e.message.properties.nonInteraction - ? !!e.message.properties.nonInteraction - : !!y.nonInteraction, - }; - (v = e.message.context.campaign) && - (v.name && (m.campaignName = v.name), - v.source && (m.campaignSource = v.source), - v.medium && (m.campaignMedium = v.medium), - v.content && (m.campaignContent = v.content), - v.term && (m.campaignKeyword = v.term)), - (m = a( - { payload: m }, - this.setCustomDimenionsAndMetrics( - e.message.properties, - this.inputs - ) - )), - window.ga("send", "event", m), - g.debug("in GoogleAnalyticsManager track"); - } - else { - var b; - var w = (b = e.message.properties).total; - var k = b.orderId; - var E = b.products; - if (!k) return; - window.ga("ecommerce:addTransaction", { - affiliation: b.affiliation, - shipping: b.shipping, - revenue: w, - tax: b.tax, - id: k, - currency: b.currency, - }), - ie(E, function (t) { - const r = n.createProductTrack(e, t); - window.ga("ecommerce:addItem", { - category: r.category, - quantity: r.quantity, - price: r.price, - name: r.name, - sku: r.sku, - id: k, - currency: r.currency, - }); - }), - window.ga("ecommerce:send"); - } - }, - }, - { - key: "page", - value(e) { - g.debug("in GoogleAnalyticsManager page"); - let t; - const n = e.message.properties.category; - const r = e.message.properties; - const i = "" - .concat(e.message.properties.category, " ") - .concat(e.message.name); - const o = e.message.context.campaign | {}; - let s = {}; - const c = this.path(r, this.includeSearch); - const u = e.message.properties.referrer || ""; - (t = - e.message.properties.category || e.message.name - ? e.message.properties.category - ? e.message.name - ? i - : e.message.properties.category - : e.message.name - : r.title), - (s.page = c), - (s.title = t), - (s.location = r.url), - o && - (o.name && (s.campaignName = o.name), - o.source && (s.campaignSource = o.source), - o.medium && (s.campaignMedium = o.medium), - o.content && (s.campaignContent = o.content), - o.term && (s.campaignKeyword = o.term)); - for ( - var l = {}, d = 0; - d < this.resetCustomDimensionsOnPage.length; - d++ - ) { - const p = this.resetCustomDimensionsOnPage[d]; - this.dimensionsArray[p] && (l[this.dimensionsArray[p]] = null); - } - window.ga("set", l), - (s = a( - { pageview: s }, - this.setCustomDimenionsAndMetrics(r, this.inputs) - )); - const h = { page: c, title: t }; - u !== document.referrer && (h.referrer = u), - window.ga("set", h), - this.pageCalled && delete s.location, - window.ga("send", "pageview", s), - n && - this.trackCategorizedPages && - this.track(e, { nonInteraction: 1 }), - i && this.trackNamedPages && this.track(e, { nonInteraction: 1 }), - (this.pageCalled = !0); - }, - }, - { - key: "isLoaded", - value() { - return g.debug("in GA isLoaded"), !!window.gaplugins; - }, - }, - { - key: "isReady", - value() { - return !!window.gaplugins; - }, - }, - { - key: "metricsFunction", - value(e, t, n, r) { - const i = {}; - return ( - ie([n, t, r], function (t) { - ie(t, function (t, n) { - let r = e[t]; - J.boolean(r) && (r = r.toString()), - (r || r === 0) && (i[n] = r); - }); - }), - i - ); - }, - }, - { - key: "formatValue", - value(e) { - return !e || e < 0 ? 0 : Math.round(e); - }, - }, - { - key: "setCustomDimenionsAndMetrics", - value(e, t) { - const n = {}; - const r = {}; - let i = !0; - let o = !1; - let s = void 0; - try { - for ( - var a, c = t.dimensions[Symbol.iterator](); - !(i = (a = c.next()).done); - i = !0 - ) { - const u = a.value; - r[u.from] = u.to; - } - } catch (e) { - (o = !0), (s = e); - } finally { - try { - i || c.return == null || c.return(); - } finally { - if (o) throw s; - } - } - const l = {}; - let d = !0; - let p = !1; - let h = void 0; - try { - for ( - var f, g = t.metrics[Symbol.iterator](); - !(d = (f = g.next()).done); - d = !0 - ) { - const m = f.value; - l[m.from] = m.to; - } - } catch (e) { - (p = !0), (h = e); - } finally { - try { - d || g.return == null || g.return(); - } finally { - if (p) throw h; - } - } - const y = {}; - let v = !0; - let b = !1; - let w = void 0; - try { - for ( - var k, E = t.contentGroupings[Symbol.iterator](); - !(v = (k = E.next()).done); - v = !0 - ) { - const I = k.value; - y[I.from] = I.to; - } - } catch (e) { - (b = !0), (w = e); - } finally { - try { - v || E.return == null || E.return(); - } finally { - if (b) throw w; - } - } - const _ = this.metricsFunction(e, r, l, y); - if (Object.keys(_).length) { - if (!t.setAllMappedProps) - return ( - ie(_, function (e, t) { - n[e] = t; - }), - n - ); - window.ga("set", _); - } - }, - }, - { - key: "path", - value(e, t) { - if (e) { - let n = e.path; - return t && e.search && (n += e.search), n; - } - }, - }, - { - key: "createProductTrack", - value(e, t) { - const n = t || {}; - return ( - (n.currency = t.currency || e.message.properties.currency), - { properties: n } - ); - }, - }, - { - key: "loadEnhancedEcommerce", - value(e, t) { - return ( - t === 0 && (window.ga("require", "ec"), (t = 1)), - window.ga("set", "&cu", e.message.properties.currency), - t - ); - }, - }, - { - key: "enhancedEcommerceTrackProduct", - value(e, t) { - const n = {}; - let r = !0; - let i = !1; - let o = void 0; - try { - for ( - var s, c = t.dimensions[Symbol.iterator](); - !(r = (s = c.next()).done); - r = !0 - ) { - const u = s.value; - n[u.from] = u.to; - } - } catch (e) { - (i = !0), (o = e); - } finally { - try { - r || c.return == null || c.return(); - } finally { - if (i) throw o; - } - } - const l = {}; - let d = !0; - let p = !1; - let h = void 0; - try { - for ( - var f, g = t.metrics[Symbol.iterator](); - !(d = (f = g.next()).done); - d = !0 - ) { - const m = f.value; - l[m.from] = m.to; - } - } catch (e) { - (p = !0), (h = e); - } finally { - try { - d || g.return == null || g.return(); - } finally { - if (p) throw h; - } - } - const y = {}; - let v = !0; - let b = !1; - let w = void 0; - try { - for ( - var k, E = t.contentGroupings[Symbol.iterator](); - !(v = (k = E.next()).done); - v = !0 - ) { - const I = k.value; - y[I.from] = I.to; - } - } catch (e) { - (b = !0), (w = e); - } finally { - try { - v || E.return == null || E.return(); - } finally { - if (b) throw w; - } - } - const _ = e.message.properties; - let A = { - id: _.productId || _.id || _.sku, - name: _.name, - category: _.category, - quantity: _.quantity, - price: _.price, - brand: _.brand, - variant: _.variant, - currency: _.currency, - }; - _.position != null && (A.position = Math.round(_.position)); - const C = _.coupon; - C && (A.coupon = C), - (A = a({ product: A }, this.metricsFunction(_, n, l, y))), - window.ga("ec:addProduct", A); - }, - }, - { - key: "enhancedEcommerceTrackProductAction", - value(e, t, n, r) { - this.enhancedEcommerceTrackProduct(e, r), - window.ga("ec:setAction", t, n || {}); - }, - }, - { - key: "pushEnhancedEcommerce", - value(e, t) { - const n = T([ - "send", - "event", - e.message.properties.category || "EnhancedEcommerce", - e.message.event || "Action not defined", - e.message.properties.label, - a( - { nonInteraction: 1 }, - this.setCustomDimenionsAndMetrics(e.message.properties, t) - ), - ]); - let r = e.message.event; - (r = r.toLowerCase()), - this.eventWithCategoryFieldProductScoped.includes(r) && - (n[2] = "EnhancedEcommerce"), - ga.apply(window, n); - }, - }, - { - key: "getProductPosition", - value(e, t) { - const n = e.properties.position; - return void 0 !== n && !Number.isNaN(Number(n)) && Number(n) > -1 - ? n - : t - .map(function (e) { - return e.product_id; - }) - .indexOf(e.properties.product_id) + 1; - }, - }, - { - key: "extractCheckoutOptions", - value(e) { - const t = T([ - e.message.properties.paymentMethod, - e.message.properties.shippingMethod, - ]); - return t.length > 0 ? t.join(", ") : null; - }, - }, - ]), - e - ); - })(); - const ke = (function () { - function e(t) { - n(this, e), - (this.siteId = t.siteID), - (this.name = "HOTJAR"), - (this._ready = !1); - } - return ( - i(e, [ - { - key: "init", - value() { - (window.hotjarSiteId = this.siteId), - (function (e, t, n, r, i, o) { - (e.hj = - e.hj || - function () { - (e.hj.q = e.hj.q || []).push(arguments); - }), - (e._hjSettings = { hjid: e.hotjarSiteId, hjsv: 6 }), - (i = t.getElementsByTagName("head")[0]), - ((o = t.createElement("script")).async = 1), - (o.src = `https://static.hotjar.com/c/hotjar-${e._hjSettings.hjid}.js?sv=${e._hjSettings.hjsv}`), - i.appendChild(o); - })(window, document), - (this._ready = !0), - g.debug("===in init Hotjar==="); - }, - }, - { - key: "identify", - value(e) { - if (e.message.userId || e.message.anonymousId) { - const t = e.message.context.traits; - window.hj("identify", e.message.userId, t); - } else g.debug("[Hotjar] identify:: user id is required"); - }, - }, - { - key: "track", - value(e) { - g.debug("[Hotjar] track:: method not supported"); - }, - }, - { - key: "page", - value(e) { - g.debug("[Hotjar] page:: method not supported"); - }, - }, - { - key: "isLoaded", - value() { - return this._ready; - }, - }, - { - key: "isReady", - value() { - return this._ready; - }, - }, - ]), - e - ); - })(); - const Ee = (function () { - function e(t) { - n(this, e), - (this.conversionId = t.conversionID), - (this.pageLoadConversions = t.pageLoadConversions), - (this.clickEventConversions = t.clickEventConversions), - (this.defaultPageConversion = t.defaultPageConversion), - (this.name = "GOOGLEADS"); - } - return ( - i(e, [ - { - key: "init", - value() { - !(function (e, t, n) { - g.debug(`in script loader=== ${e}`); - const r = n.createElement("script"); - (r.src = t), - (r.async = 1), - (r.type = "text/javascript"), - (r.id = e); - const i = n.getElementsByTagName("head")[0]; - g.debug("==script==", i), i.appendChild(r); - })( - "googleAds-integration", - `https://www.googletagmanager.com/gtag/js?id=${this.conversionId}`, - document - ), - (window.dataLayer = window.dataLayer || []), - (window.gtag = function () { - window.dataLayer.push(arguments); - }), - window.gtag("js", new Date()), - window.gtag("config", this.conversionId), - g.debug("===in init Google Ads==="); - }, - }, - { - key: "identify", - value(e) { - g.debug("[GoogleAds] identify:: method not supported"); - }, - }, - { - key: "track", - value(e) { - g.debug("in GoogleAdsAnalyticsManager track"); - const t = this.getConversionData( - this.clickEventConversions, - e.message.event - ); - if (t.conversionLabel) { - const n = t.conversionLabel; - const r = t.eventName; - const i = `${this.conversionId}/${n}`; - const o = {}; - e.properties && - ((o.value = e.properties.revenue), - (o.currency = e.properties.currency), - (o.transaction_id = e.properties.order_id)), - (o.send_to = i), - window.gtag("event", r, o); - } - }, - }, - { - key: "page", - value(e) { - g.debug("in GoogleAdsAnalyticsManager page"); - const t = this.getConversionData( - this.pageLoadConversions, - e.message.name - ); - if (t.conversionLabel) { - const n = t.conversionLabel; - const r = t.eventName; - window.gtag("event", r, { - send_to: `${this.conversionId}/${n}`, - }); - } - }, - }, - { - key: "getConversionData", - value(e, t) { - const n = {}; - return ( - e && - (t - ? e.forEach(function (e) { - if (e.name.toLowerCase() === t.toLowerCase()) - return ( - (n.conversionLabel = e.conversionLabel), - void (n.eventName = e.name) - ); - }) - : this.defaultPageConversion && - ((n.conversionLabel = this.defaultPageConversion), - (n.eventName = "Viewed a Page"))), - n - ); - }, - }, - { - key: "isLoaded", - value() { - return window.dataLayer.push !== Array.prototype.push; - }, - }, - { - key: "isReady", - value() { - return window.dataLayer.push !== Array.prototype.push; - }, - }, - ]), - e - ); - })(); - const Ie = (function () { - function e(t, r) { - n(this, e), - (this.accountId = t.accountId), - (this.settingsTolerance = t.settingsTolerance), - (this.isSPA = t.isSPA), - (this.libraryTolerance = t.libraryTolerance), - (this.useExistingJquery = t.useExistingJquery), - (this.sendExperimentTrack = t.sendExperimentTrack), - (this.sendExperimentIdentify = t.sendExperimentIdentify), - (this.name = "VWO"), - (this.analytics = r), - g.debug("Config ", t); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init VWO==="); - const e = this.accountId; - const t = this.settingsTolerance; - const n = this.libraryTolerance; - const r = this.useExistingJquery; - const i = this.isSPA; - (window._vwo_code = (function () { - let o = !1; - const s = document; - return { - use_existing_jquery() { - return r; - }, - library_tolerance() { - return n; - }, - finish() { - if (!o) { - o = !0; - const e = s.getElementById("_vis_opt_path_hides"); - e && e.parentNode.removeChild(e); - } - }, - finished() { - return o; - }, - load(e) { - const t = s.createElement("script"); - (t.src = e), - (t.type = "text/javascript"), - t.innerText, - (t.onerror = function () { - _vwo_code.finish(); - }), - s.getElementsByTagName("head")[0].appendChild(t); - }, - init() { - const n = setTimeout("_vwo_code.finish()", t); - const r = s.createElement("style"); - const o = - "body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}"; - const a = s.getElementsByTagName("head")[0]; - return ( - r.setAttribute("id", "_vis_opt_path_hides"), - r.setAttribute("type", "text/css"), - r.styleSheet - ? (r.styleSheet.cssText = o) - : r.appendChild(s.createTextNode(o)), - a.appendChild(r), - this.load( - `//dev.visualwebsiteoptimizer.com/j.php?a=${e}&u=${encodeURIComponent( - s.URL - )}&r=${Math.random()}&f=${+i}` - ), - n - ); - }, - }; - })()), - (window._vwo_settings_timer = window._vwo_code.init()), - (this.sendExperimentTrack || this.experimentViewedIdentify) && - this.experimentViewed(); - }, - }, - { - key: "experimentViewed", - value() { - const e = this; - window.VWO = window.VWO || []; - const t = this; - window.VWO.push([ - "onVariationApplied", - function (n) { - if (n) { - g.debug("Variation Applied"); - const r = n[1]; - const i = n[2]; - if ( - (g.debug( - "experiment id:", - r, - "Variation Name:", - _vwo_exp[r].comb_n[i] - ), - void 0 !== _vwo_exp[r].comb_n[i] && - ["VISUAL_AB", "VISUAL", "SPLIT_URL", "SURVEY"].indexOf( - _vwo_exp[r].type - ) > -1) - ) { - try { - t.sendExperimentTrack && - (g.debug("Tracking..."), - e.analytics.track("Experiment Viewed", { - experimentId: r, - variationName: _vwo_exp[r].comb_n[i], - })); - } catch (e) { - g.error("[VWO] experimentViewed:: ", e); - } - try { - t.sendExperimentIdentify && - (g.debug("Identifying..."), - e.analytics.identify( - o({}, "Experiment: ".concat(r), _vwo_exp[r].comb_n[i]) - )); - } catch (e) { - g.error("[VWO] experimentViewed:: ", e); - } - } - } - }, - ]); - }, - }, - { - key: "identify", - value(e) { - g.debug("method not supported"); - }, - }, - { - key: "track", - value(e) { - if (e.message.event === "Order Completed") { - const t = e.message.properties - ? e.message.properties.total || e.message.properties.revenue - : 0; - g.debug("Revenue", t), - (window.VWO = window.VWO || []), - window.VWO.push(["track.revenueConversion", t]); - } - }, - }, - { - key: "page", - value(e) { - g.debug("method not supported"); - }, - }, - { - key: "isLoaded", - value() { - return !!window._vwo_code; - }, - }, - { - key: "isReady", - value() { - return !!window._vwo_code; - }, - }, - ]), - e - ); - })(); - const _e = (function () { - function e(t) { - n(this, e), - (this.containerID = t.containerID), - (this.name = "GOOGLETAGMANAGER"); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init GoogleTagManager==="), - (function (e, t, n, r, i) { - (e[r] = e[r] || []), - e[r].push({ - "gtm.start": new Date().getTime(), - event: "gtm.js", - }); - const o = t.getElementsByTagName(n)[0]; - const s = t.createElement(n); - (s.async = !0), - (s.src = `https://www.googletagmanager.com/gtm.js?id=${i}`), - o.parentNode.insertBefore(s, o); - })(window, document, "script", "dataLayer", this.containerID); - }, - }, - { - key: "identify", - value(e) { - g.debug("[GTM] identify:: method not supported"); - }, - }, - { - key: "track", - value(e) { - g.debug("===in track GoogleTagManager==="); - const t = e.message; - const n = a( - { - event: t.event, - userId: t.userId, - anonymousId: t.anonymousId, - }, - t.properties - ); - this.sendToGTMDatalayer(n); - }, - }, - { - key: "page", - value(e) { - g.debug("===in page GoogleTagManager==="); - let t; - const n = e.message; - const r = n.name; - const i = n.properties ? n.properties.category : void 0; - r && (t = `Viewed ${r} page`), - i && r && (t = `Viewed ${i} ${r} page`), - t || (t = "Viewed a Page"); - const o = a( - { event: t, userId: n.userId, anonymousId: n.anonymousId }, - n.properties - ); - this.sendToGTMDatalayer(o); - }, - }, - { - key: "isLoaded", - value() { - return !( - !window.dataLayer || - Array.prototype.push === window.dataLayer.push - ); - }, - }, - { - key: "sendToGTMDatalayer", - value(e) { - window.dataLayer.push(e); - }, - }, - { - key: "isReady", - value() { - return !( - !window.dataLayer || - Array.prototype.push === window.dataLayer.push - ); - }, - }, - ]), - e - ); - })(); - const Ae = (function () { - function e(t, r) { - if ( - (n(this, e), - (this.analytics = r), - (this.appKey = t.appKey), - t.appKey || (this.appKey = ""), - (this.endPoint = ""), - t.dataCenter) - ) { - const i = t.dataCenter.trim().split("-"); - i[0].toLowerCase() === "eu" - ? (this.endPoint = "sdk.fra-01.braze.eu") - : (this.endPoint = `sdk.iad-${i[1]}.braze.com`); - } - (this.name = "BRAZE"), g.debug("Config ", t); - } - return ( - i(e, [ - { - key: "formatGender", - value(e) { - if (e && typeof e === "string") { - return ["woman", "female", "w", "f"].indexOf(e.toLowerCase()) > -1 - ? window.appboy.ab.User.Genders.FEMALE - : ["man", "male", "m"].indexOf(e.toLowerCase()) > -1 - ? window.appboy.ab.User.Genders.MALE - : ["other", "o"].indexOf(e.toLowerCase()) > -1 - ? window.appboy.ab.User.Genders.OTHER - : void 0; - } - }, - }, - { - key: "init", - value() { - g.debug("===in init Braze==="), - (function (e, t, n, r, i) { - (e.appboy = {}), (e.appboyQueue = []); - for ( - let o = "initialize destroy getDeviceId toggleAppboyLogging setLogger openSession changeUser requestImmediateDataFlush requestFeedRefresh subscribeToFeedUpdates requestContentCardsRefresh subscribeToContentCardsUpdates logCardImpressions logCardClick logCardDismissal logFeedDisplayed logContentCardsDisplayed logInAppMessageImpression logInAppMessageClick logInAppMessageButtonClick logInAppMessageHtmlClick subscribeToNewInAppMessages subscribeToInAppMessage removeSubscription removeAllSubscriptions logCustomEvent logPurchase isPushSupported isPushBlocked isPushGranted isPushPermissionGranted registerAppboyPushMessages unregisterAppboyPushMessages trackLocation stopWebTracking resumeWebTracking wipeData ab ab.DeviceProperties ab.User ab.User.Genders ab.User.NotificationSubscriptionTypes ab.User.prototype.getUserId ab.User.prototype.setFirstName ab.User.prototype.setLastName ab.User.prototype.setEmail ab.User.prototype.setGender ab.User.prototype.setDateOfBirth ab.User.prototype.setCountry ab.User.prototype.setHomeCity ab.User.prototype.setLanguage ab.User.prototype.setEmailNotificationSubscriptionType ab.User.prototype.setPushNotificationSubscriptionType ab.User.prototype.setPhoneNumber ab.User.prototype.setAvatarImageUrl ab.User.prototype.setLastKnownLocation ab.User.prototype.setUserAttribute ab.User.prototype.setCustomUserAttribute ab.User.prototype.addToCustomAttributeArray ab.User.prototype.removeFromCustomAttributeArray ab.User.prototype.incrementCustomUserAttribute ab.User.prototype.addAlias ab.User.prototype.setCustomLocationAttribute ab.InAppMessage ab.InAppMessage.SlideFrom ab.InAppMessage.ClickAction ab.InAppMessage.DismissType ab.InAppMessage.OpenTarget ab.InAppMessage.ImageStyle ab.InAppMessage.TextAlignment ab.InAppMessage.Orientation ab.InAppMessage.CropType ab.InAppMessage.prototype.subscribeToClickedEvent ab.InAppMessage.prototype.subscribeToDismissedEvent ab.InAppMessage.prototype.removeSubscription ab.InAppMessage.prototype.removeAllSubscriptions ab.InAppMessage.prototype.closeMessage ab.InAppMessage.Button ab.InAppMessage.Button.prototype.subscribeToClickedEvent ab.InAppMessage.Button.prototype.removeSubscription ab.InAppMessage.Button.prototype.removeAllSubscriptions ab.SlideUpMessage ab.ModalMessage ab.FullScreenMessage ab.HtmlMessage ab.ControlMessage ab.Feed ab.Feed.prototype.getUnreadCardCount ab.ContentCards ab.ContentCards.prototype.getUnviewedCardCount ab.Card ab.Card.prototype.dismissCard ab.ClassicCard ab.CaptionedImage ab.Banner ab.ControlCard ab.WindowUtils display display.automaticallyShowNewInAppMessages display.showInAppMessage display.showFeed display.destroyFeed display.toggleFeed display.showContentCards display.hideContentCards display.toggleContentCards sharedLib".split( - " " - ), - s = 0; - s < o.length; - s++ - ) { - for ( - var a = o[s], c = e.appboy, u = a.split("."), l = 0; - l < u.length - 1; - l++ - ) - c = c[u[l]]; - c[u[l]] = new Function( - `return function ${a.replace( - /\./g, - "_" - )}(){window.appboyQueue.push(arguments); return true}` - )(); - } - (window.appboy.getUser = function () { - return new window.appboy.ab.User(); - }), - (window.appboy.getCachedFeed = function () { - return new window.appboy.ab.Feed(); - }), - (window.appboy.getCachedContentCards = function () { - return new window.appboy.ab.ContentCards(); - }), - ((i = t.createElement(n)).type = "text/javascript"), - (i.src = - "https://js.appboycdn.com/web-sdk/2.4/appboy.min.js"), - (i.async = 1), - (r = t.getElementsByTagName(n)[0]).parentNode.insertBefore( - i, - r - ); - })(window, document, "script"), - window.appboy.initialize(this.appKey, { - enableLogging: !0, - baseUrl: this.endPoint, - }), - window.appboy.display.automaticallyShowNewInAppMessages(); - const e = this.analytics.userId; - e && appboy.changeUser(e), window.appboy.openSession(); - }, - }, - { - key: "handleReservedProperties", - value(e) { - return ( - [ - "time", - "product_id", - "quantity", - "event_name", - "price", - "currency", - ].forEach(function (t) { - delete e[t]; - }), - e - ); - }, - }, - { - key: "identify", - value(e) { - const t = e.message.userId; - const n = e.message.context.traits.address; - const r = e.message.context.traits.avatar; - const i = e.message.context.traits.birthday; - const o = e.message.context.traits.email; - const s = e.message.context.traits.firstname; - const a = e.message.context.traits.gender; - const c = e.message.context.traits.lastname; - const u = e.message.context.traits.phone; - const l = JSON.parse(JSON.stringify(e.message.context.traits)); - window.appboy.changeUser(t), - window.appboy.getUser().setAvatarImageUrl(r), - o && window.appboy.getUser().setEmail(o), - s && window.appboy.getUser().setFirstName(s), - a && window.appboy.getUser().setGender(this.formatGender(a)), - c && window.appboy.getUser().setLastName(c), - u && window.appboy.getUser().setPhoneNumber(u), - n && - (window.appboy.getUser().setCountry(n.country), - window.appboy.getUser().setHomeCity(n.city)), - i && - window.appboy - .getUser() - .setDateOfBirth( - i.getUTCFullYear(), - i.getUTCMonth() + 1, - i.getUTCDate() - ); - [ - "avatar", - "address", - "birthday", - "email", - "id", - "firstname", - "gender", - "lastname", - "phone", - "facebook", - "twitter", - "first_name", - "last_name", - "dob", - "external_id", - "country", - "home_city", - "bio", - "gender", - "phone", - "email_subscribe", - "push_subscribe", - ].forEach(function (e) { - delete l[e]; - }), - Object.keys(l).forEach(function (e) { - window.appboy.getUser().setCustomUserAttribute(e, l[e]); - }); - }, - }, - { - key: "handlePurchase", - value(e, t) { - const n = e.products; - const r = e.currency; - window.appboy.changeUser(t), - del(e, "products"), - del(e, "currency"), - n.forEach(function (t) { - const n = t.product_id; - const i = t.price; - const o = t.quantity; - o && i && n && window.appboy.logPurchase(n, i, r, o, e); - }); - }, - }, - { - key: "track", - value(e) { - const t = e.message.userId; - const n = e.message.event; - let r = e.message.properties; - window.appboy.changeUser(t), - n.toLowerCase() === "order completed" - ? this.handlePurchase(r, t) - : ((r = this.handleReservedProperties(r)), - window.appboy.logCustomEvent(n, r)); - }, - }, - { - key: "page", - value(e) { - const t = e.message.userId; - const n = e.message.name; - let r = e.message.properties; - (r = this.handleReservedProperties(r)), - window.appboy.changeUser(t), - window.appboy.logCustomEvent(n, r); - }, - }, - { - key: "isLoaded", - value() { - return window.appboyQueue === null; - }, - }, - { - key: "isReady", - value() { - return window.appboyQueue === null; - }, - }, - ]), - e - ); - })(); - const Ce = l(function (e) { - !(function () { - const t = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var n = { - rotl(e, t) { - return (e << t) | (e >>> (32 - t)); - }, - rotr(e, t) { - return (e << (32 - t)) | (e >>> t); - }, - endian(e) { - if (e.constructor == Number) - return (16711935 & n.rotl(e, 8)) | (4278255360 & n.rotl(e, 24)); - for (let t = 0; t < e.length; t++) e[t] = n.endian(e[t]); - return e; - }, - randomBytes(e) { - for (var t = []; e > 0; e--) t.push(Math.floor(256 * Math.random())); - return t; - }, - bytesToWords(e) { - for (var t = [], n = 0, r = 0; n < e.length; n++, r += 8) - t[r >>> 5] |= e[n] << (24 - (r % 32)); - return t; - }, - wordsToBytes(e) { - for (var t = [], n = 0; n < 32 * e.length; n += 8) - t.push((e[n >>> 5] >>> (24 - (n % 32))) & 255); - return t; - }, - bytesToHex(e) { - for (var t = [], n = 0; n < e.length; n++) - t.push((e[n] >>> 4).toString(16)), t.push((15 & e[n]).toString(16)); - return t.join(""); - }, - hexToBytes(e) { - for (var t = [], n = 0; n < e.length; n += 2) - t.push(parseInt(e.substr(n, 2), 16)); - return t; - }, - bytesToBase64(e) { - for (var n = [], r = 0; r < e.length; r += 3) - for ( - let i = (e[r] << 16) | (e[r + 1] << 8) | e[r + 2], o = 0; - o < 4; - o++ - ) - 8 * r + 6 * o <= 8 * e.length - ? n.push(t.charAt((i >>> (6 * (3 - o))) & 63)) - : n.push("="); - return n.join(""); - }, - base64ToBytes(e) { - e = e.replace(/[^A-Z0-9+\/]/gi, ""); - for (var n = [], r = 0, i = 0; r < e.length; i = ++r % 4) - i != 0 && - n.push( - ((t.indexOf(e.charAt(r - 1)) & (Math.pow(2, -2 * i + 8) - 1)) << - (2 * i)) | - (t.indexOf(e.charAt(r)) >>> (6 - 2 * i)) - ); - return n; - }, - }; - e.exports = n; - })(); - }); - var Te = { - utf8: { - stringToBytes(e) { - return Te.bin.stringToBytes(unescape(encodeURIComponent(e))); - }, - bytesToString(e) { - return decodeURIComponent(escape(Te.bin.bytesToString(e))); - }, - }, - bin: { - stringToBytes(e) { - for (var t = [], n = 0; n < e.length; n++) - t.push(255 & e.charCodeAt(n)); - return t; - }, - bytesToString(e) { - for (var t = [], n = 0; n < e.length; n++) - t.push(String.fromCharCode(e[n])); - return t.join(""); - }, - }, - }; - const Oe = Te; - const Pe = function (e) { - return ( - e != null && - (Se(e) || - (function (e) { - return ( - typeof e.readFloatLE === "function" && - typeof e.slice === "function" && - Se(e.slice(0, 0)) - ); - })(e) || - !!e._isBuffer) - ); - }; - function Se(e) { - return ( - !!e.constructor && - typeof e.constructor.isBuffer === "function" && - e.constructor.isBuffer(e) - ); - } - const xe = l(function (e) { - !(function () { - const t = Ce; - const n = Oe.utf8; - const r = Pe; - const i = Oe.bin; - var o = function (e, s) { - e.constructor == String - ? (e = - s && s.encoding === "binary" - ? i.stringToBytes(e) - : n.stringToBytes(e)) - : r(e) - ? (e = Array.prototype.slice.call(e, 0)) - : Array.isArray(e) || (e = e.toString()); - for ( - var a = t.bytesToWords(e), - c = 8 * e.length, - u = 1732584193, - l = -271733879, - d = -1732584194, - p = 271733878, - h = 0; - h < a.length; - h++ - ) - a[h] = - (16711935 & ((a[h] << 8) | (a[h] >>> 24))) | - (4278255360 & ((a[h] << 24) | (a[h] >>> 8))); - (a[c >>> 5] |= 128 << c % 32), (a[14 + (((c + 64) >>> 9) << 4)] = c); - const f = o._ff; - const g = o._gg; - const m = o._hh; - const y = o._ii; - for (h = 0; h < a.length; h += 16) { - const v = u; - const b = l; - const w = d; - const k = p; - (u = f(u, l, d, p, a[h + 0], 7, -680876936)), - (p = f(p, u, l, d, a[h + 1], 12, -389564586)), - (d = f(d, p, u, l, a[h + 2], 17, 606105819)), - (l = f(l, d, p, u, a[h + 3], 22, -1044525330)), - (u = f(u, l, d, p, a[h + 4], 7, -176418897)), - (p = f(p, u, l, d, a[h + 5], 12, 1200080426)), - (d = f(d, p, u, l, a[h + 6], 17, -1473231341)), - (l = f(l, d, p, u, a[h + 7], 22, -45705983)), - (u = f(u, l, d, p, a[h + 8], 7, 1770035416)), - (p = f(p, u, l, d, a[h + 9], 12, -1958414417)), - (d = f(d, p, u, l, a[h + 10], 17, -42063)), - (l = f(l, d, p, u, a[h + 11], 22, -1990404162)), - (u = f(u, l, d, p, a[h + 12], 7, 1804603682)), - (p = f(p, u, l, d, a[h + 13], 12, -40341101)), - (d = f(d, p, u, l, a[h + 14], 17, -1502002290)), - (u = g( - u, - (l = f(l, d, p, u, a[h + 15], 22, 1236535329)), - d, - p, - a[h + 1], - 5, - -165796510 - )), - (p = g(p, u, l, d, a[h + 6], 9, -1069501632)), - (d = g(d, p, u, l, a[h + 11], 14, 643717713)), - (l = g(l, d, p, u, a[h + 0], 20, -373897302)), - (u = g(u, l, d, p, a[h + 5], 5, -701558691)), - (p = g(p, u, l, d, a[h + 10], 9, 38016083)), - (d = g(d, p, u, l, a[h + 15], 14, -660478335)), - (l = g(l, d, p, u, a[h + 4], 20, -405537848)), - (u = g(u, l, d, p, a[h + 9], 5, 568446438)), - (p = g(p, u, l, d, a[h + 14], 9, -1019803690)), - (d = g(d, p, u, l, a[h + 3], 14, -187363961)), - (l = g(l, d, p, u, a[h + 8], 20, 1163531501)), - (u = g(u, l, d, p, a[h + 13], 5, -1444681467)), - (p = g(p, u, l, d, a[h + 2], 9, -51403784)), - (d = g(d, p, u, l, a[h + 7], 14, 1735328473)), - (u = m( - u, - (l = g(l, d, p, u, a[h + 12], 20, -1926607734)), - d, - p, - a[h + 5], - 4, - -378558 - )), - (p = m(p, u, l, d, a[h + 8], 11, -2022574463)), - (d = m(d, p, u, l, a[h + 11], 16, 1839030562)), - (l = m(l, d, p, u, a[h + 14], 23, -35309556)), - (u = m(u, l, d, p, a[h + 1], 4, -1530992060)), - (p = m(p, u, l, d, a[h + 4], 11, 1272893353)), - (d = m(d, p, u, l, a[h + 7], 16, -155497632)), - (l = m(l, d, p, u, a[h + 10], 23, -1094730640)), - (u = m(u, l, d, p, a[h + 13], 4, 681279174)), - (p = m(p, u, l, d, a[h + 0], 11, -358537222)), - (d = m(d, p, u, l, a[h + 3], 16, -722521979)), - (l = m(l, d, p, u, a[h + 6], 23, 76029189)), - (u = m(u, l, d, p, a[h + 9], 4, -640364487)), - (p = m(p, u, l, d, a[h + 12], 11, -421815835)), - (d = m(d, p, u, l, a[h + 15], 16, 530742520)), - (u = y( - u, - (l = m(l, d, p, u, a[h + 2], 23, -995338651)), - d, - p, - a[h + 0], - 6, - -198630844 - )), - (p = y(p, u, l, d, a[h + 7], 10, 1126891415)), - (d = y(d, p, u, l, a[h + 14], 15, -1416354905)), - (l = y(l, d, p, u, a[h + 5], 21, -57434055)), - (u = y(u, l, d, p, a[h + 12], 6, 1700485571)), - (p = y(p, u, l, d, a[h + 3], 10, -1894986606)), - (d = y(d, p, u, l, a[h + 10], 15, -1051523)), - (l = y(l, d, p, u, a[h + 1], 21, -2054922799)), - (u = y(u, l, d, p, a[h + 8], 6, 1873313359)), - (p = y(p, u, l, d, a[h + 15], 10, -30611744)), - (d = y(d, p, u, l, a[h + 6], 15, -1560198380)), - (l = y(l, d, p, u, a[h + 13], 21, 1309151649)), - (u = y(u, l, d, p, a[h + 4], 6, -145523070)), - (p = y(p, u, l, d, a[h + 11], 10, -1120210379)), - (d = y(d, p, u, l, a[h + 2], 15, 718787259)), - (l = y(l, d, p, u, a[h + 9], 21, -343485551)), - (u = (u + v) >>> 0), - (l = (l + b) >>> 0), - (d = (d + w) >>> 0), - (p = (p + k) >>> 0); - } - return t.endian([u, l, d, p]); - }; - (o._ff = function (e, t, n, r, i, o, s) { - const a = e + ((t & n) | (~t & r)) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._gg = function (e, t, n, r, i, o, s) { - const a = e + ((t & r) | (n & ~r)) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._hh = function (e, t, n, r, i, o, s) { - const a = e + (t ^ n ^ r) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._ii = function (e, t, n, r, i, o, s) { - const a = e + (n ^ (t | ~r)) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._blocksize = 16), - (o._digestsize = 16), - (e.exports = function (e, n) { - if (e == null) throw new Error(`Illegal argument ${e}`); - const r = t.wordsToBytes(o(e, n)); - return n && n.asBytes - ? r - : n && n.asString - ? i.bytesToString(r) - : t.bytesToHex(r); - }); - })(); - }); - const Re = (function () { - function e(t) { - n(this, e), - (this.NAME = "INTERCOM"), - (this.API_KEY = t.apiKey), - (this.APP_ID = t.appId), - (this.MOBILE_APP_ID = t.mobileAppId), - g.debug("Config ", t); - } - return ( - i(e, [ - { - key: "init", - value() { - (window.intercomSettings = { app_id: this.APP_ID }), - (function () { - const e = window; - const t = e.Intercom; - if (typeof t === "function") - t("reattach_activator"), t("update", e.intercomSettings); - else { - const n = document; - const r = function e() { - e.c(arguments); - }; - (r.q = []), - (r.c = function (e) { - r.q.push(e); - }), - (e.Intercom = r); - const i = function () { - const e = n.createElement("script"); - (e.type = "text/javascript"), - (e.async = !0), - (e.src = `https://widget.intercom.io/widget/${window.intercomSettings.app_id}`); - const t = n.getElementsByTagName("script")[0]; - t.parentNode.insertBefore(e, t); - }; - document.readyState === "complete" - ? (i(), (window.intercom_code = !0)) - : e.attachEvent - ? (e.attachEvent("onload", i), (window.intercom_code = !0)) - : (e.addEventListener("load", i, !1), - (window.intercom_code = !0)); - } - })(); - }, - }, - { - key: "page", - value() { - window.Intercom("update"); - }, - }, - { - key: "identify", - value(e) { - const n = {}; - const r = e.message.context; - if ((r.Intercom ? r.Intercom : null) != null) { - const i = r.Intercom.user_hash ? r.Intercom.user_hash : null; - i != null && (n.user_hash = i); - const o = r.Intercom.hideDefaultLauncher - ? r.Intercom.hideDefaultLauncher - : null; - o != null && (n.hide_default_launcher = o); - } - Object.keys(r.traits).forEach(function (e) { - if (r.traits.hasOwnProperty(e)) { - const i = r.traits[e]; - if (e === "company") { - const o = []; - const s = {}; - typeof r.traits[e] === "string" && - (s.company_id = xe(r.traits[e])); - const a = - (t(r.traits[e]) == "object" && Object.keys(r.traits[e])) || - []; - a.forEach(function (t) { - a.hasOwnProperty(t) && - (t != "id" - ? (s[t] = r.traits[e][t]) - : (s.company_id = r.traits[e][t])); - }), - t(r.traits[e]) != "object" || - a.includes("id") || - (s.company_id = xe(s.name)), - o.push(s), - (n.companies = o); - } else n[e] = r.traits[e]; - switch (e) { - case "createdAt": - n.created_at = i; - break; - case "anonymousId": - n.user_id = i; - } - } - }), - (n.user_id = e.message.userId), - window.Intercom("update", n); - }, - }, - { - key: "track", - value(e) { - const t = {}; - const n = e.message; - (n.properties ? Object.keys(n.properties) : null).forEach(function ( - e - ) { - const r = n.properties[e]; - t[e] = r; - }), - n.event && (t.event_name = n.event), - (t.user_id = n.userId ? n.userId : n.anonymousId), - (t.created_at = Math.floor( - new Date(n.originalTimestamp).getTime() / 1e3 - )), - window.Intercom("trackEvent", t.event_name, t); - }, - }, - { - key: "isLoaded", - value() { - return !!window.intercom_code; - }, - }, - { - key: "isReady", - value() { - return !!window.intercom_code; - }, - }, - ]), - e - ); - })(); - const je = (function () { - function e(t) { - n(this, e), - (this.projectID = t.projectID), - (this.writeKey = t.writeKey), - (this.ipAddon = t.ipAddon), - (this.uaAddon = t.uaAddon), - (this.urlAddon = t.urlAddon), - (this.referrerAddon = t.referrerAddon), - (this.client = null), - (this.name = "KEEN"); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init Keen==="), - L( - "keen-integration", - "https://cdn.jsdelivr.net/npm/keen-tracking@4" - ); - var e = setInterval( - function () { - void 0 !== window.KeenTracking && - void 0 !== window.KeenTracking && - ((this.client = (function (e) { - return ( - (e.client = new window.KeenTracking({ - projectId: e.projectID, - writeKey: e.writeKey, - })), - e.client - ); - })(this)), - clearInterval(e)); - }.bind(this), - 1e3 - ); - }, - }, - { - key: "identify", - value(e) { - g.debug("in Keen identify"); - const t = e.message.context.traits; - const n = e.message.userId - ? e.message.userId - : e.message.anonymousId; - var r = e.message.properties - ? Object.assign(r, e.message.properties) - : {}; - (r.user = { userId: n, traits: t }), - (r = this.getAddOn(r)), - this.client.extendEvents(r); - }, - }, - { - key: "track", - value(e) { - g.debug("in Keen track"); - const t = e.message.event; - let n = e.message.properties; - (n = this.getAddOn(n)), this.client.recordEvent(t, n); - }, - }, - { - key: "page", - value(e) { - g.debug("in Keen page"); - const t = e.message.name; - const n = e.message.properties - ? e.message.properties.category - : void 0; - let r = "Loaded a Page"; - t && (r = `Viewed ${t} page`), - n && t && (r = `Viewed ${n} ${t} page`); - let i = e.message.properties; - (i = this.getAddOn(i)), this.client.recordEvent(r, i); - }, - }, - { - key: "isLoaded", - value() { - return g.debug("in Keen isLoaded"), !(this.client == null); - }, - }, - { - key: "isReady", - value() { - return !(this.client == null); - }, - }, - { - key: "getAddOn", - value(e) { - const t = []; - return ( - this.ipAddon && - ((e.ip_address = "${keen.ip}"), - t.push({ - name: "keen:ip_to_geo", - input: { ip: "ip_address" }, - output: "ip_geo_info", - })), - this.uaAddon && - ((e.user_agent = "${keen.user_agent}"), - t.push({ - name: "keen:ua_parser", - input: { ua_string: "user_agent" }, - output: "parsed_user_agent", - })), - this.urlAddon && - ((e.page_url = document.location.href), - t.push({ - name: "keen:url_parser", - input: { url: "page_url" }, - output: "parsed_page_url", - })), - this.referrerAddon && - ((e.page_url = document.location.href), - (e.referrer_url = document.referrer), - t.push({ - name: "keen:referrer_parser", - input: { - referrer_url: "referrer_url", - page_url: "page_url", - }, - output: "referrer_info", - })), - (e.keen = { addons: t }), - e - ); - }, - }, - ]), - e - ); - })(); - const Le = Object.prototype.hasOwnProperty; - const De = function (e) { - for ( - let t = Array.prototype.slice.call(arguments, 1), n = 0; - n < t.length; - n += 1 - ) - for (const r in t[n]) Le.call(t[n], r) && (e[r] = t[n][r]); - return e; - }; - const Me = l(function (e) { - function t(e) { - return function (t, n, r, o) { - let s; - (normalize = - o && - (function (e) { - return typeof e === "function"; - })(o.normalizer) - ? o.normalizer - : i), - (n = normalize(n)); - for (var a = !1; !a; ) c(); - function c() { - for (s in t) { - const e = normalize(s); - if (n.indexOf(e) === 0) { - const r = n.substr(e.length); - if (r.charAt(0) === "." || r.length === 0) { - n = r.substr(1); - const i = t[s]; - return i == null - ? void (a = !0) - : n.length - ? void (t = i) - : void (a = !0); - } - } - } - (s = void 0), (a = !0); - } - if (s) return t == null ? t : e(t, s, r); - }; - } - function n(e, t) { - return e.hasOwnProperty(t) && delete e[t], e; - } - function r(e, t, n) { - return e.hasOwnProperty(t) && (e[t] = n), e; - } - function i(e) { - return e.replace(/[^a-zA-Z0-9\.]+/g, "").toLowerCase(); - } - (e.exports = t(function (e, t) { - if (e.hasOwnProperty(t)) return e[t]; - })), - (e.exports.find = e.exports), - (e.exports.replace = function (e, n, i, o) { - return t(r).call(this, e, n, i, o), e; - }), - (e.exports.del = function (e, r, i) { - return t(n).call(this, e, r, null, i), e; - }); - }); - const Ue = - (Me.find, - Me.replace, - Me.del, - (function () { - function e(t) { - n(this, e), - (this.apiKey = t.apiKey), - (this.prefixProperties = t.prefixProperties), - (this.name = "KISSMETRICS"); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init Kissmetrics==="), - (window._kmq = window._kmq || []); - const e = window._kmk || this.apiKey; - function t(e) { - setTimeout(function () { - const t = document; - const n = t.getElementsByTagName("script")[0]; - const r = t.createElement("script"); - (r.type = "text/javascript"), - (r.async = !0), - (r.src = e), - n.parentNode.insertBefore(r, n); - }, 1); - } - t("//i.kissmetrics.com/i.js"), - t(`//scripts.kissmetrics.com/${e}.2.js`), - this.isEnvMobile() && - window._kmq.push(["set", { "Mobile Session": "Yes" }]); - }, - }, - { - key: "isEnvMobile", - value() { - return ( - navigator.userAgent.match(/Android/i) || - navigator.userAgent.match(/BlackBerry/i) || - navigator.userAgent.match(/IEMobile/i) || - navigator.userAgent.match(/Opera Mini/i) || - navigator.userAgent.match(/iPad/i) || - navigator.userAgent.match(/iPhone|iPod/i) - ); - }, - }, - { - key: "toUnixTimestamp", - value(e) { - return (e = new Date(e)), Math.floor(e.getTime() / 1e3); - }, - }, - { - key: "clean", - value(e) { - let t = {}; - for (const n in e) - if (e.hasOwnProperty(n)) { - const r = e[n]; - if (r == null) continue; - if (J.date(r)) { - t[n] = this.toUnixTimestamp(r); - continue; - } - if (J.bool(r)) { - t[n] = r; - continue; - } - if (J.number(r)) { - t[n] = r; - continue; - } - if ( - (g.debug(r.toString()), r.toString() !== "[object Object]") - ) { - t[n] = r.toString(); - continue; - } - const i = {}; - i[n] = r; - const o = this.flatten(i, { safe: !0 }); - for (const s in o) J.array(o[s]) && (o[s] = o[s].toString()); - delete (t = De(t, o))[n]; - } - return t; - }, - }, - { - key: "flatten", - value(e, t) { - const n = (t = t || {}).delimiter || "."; - let r = t.maxDepth; - let i = 1; - const o = {}; - return ( - (function e(s, a) { - for (const c in s) - if (s.hasOwnProperty(c)) { - const u = s[c]; - const l = t.safe && J.array(u); - const d = Object.prototype.toString.call(u); - const p = - d === "[object Object]" || d === "[object Array]"; - const h = []; - const f = a ? a + n + c : c; - for (const g in (t.maxDepth || (r = i + 1), u)) - u.hasOwnProperty(g) && h.push(g); - if (!l && p && h.length && i < r) return ++i, e(u, f); - o[f] = u; - } - })(e), - o - ); - }, - }, - { - key: "prefix", - value(e, t) { - const n = {}; - return ( - ie(t, function (t, r) { - t === "Billing Amount" - ? (n[t] = r) - : t === "revenue" - ? ((n[`${e} - ${t}`] = r), (n["Billing Amount"] = r)) - : (n[`${e} - ${t}`] = r); - }), - n - ); - }, - }, - { - key: "identify", - value(e) { - g.debug("in Kissmetrics identify"); - const t = this.clean(e.message.context.traits); - const n = - e.message.userId && e.message.userId != "" - ? e.message.userId - : void 0; - n && window._kmq.push(["identify", n]), - t && window._kmq.push(["set", t]); - }, - }, - { - key: "track", - value(e) { - g.debug("in Kissmetrics track"); - const t = e.message.event; - let n = JSON.parse(JSON.stringify(e.message.properties)); - const r = this.toUnixTimestamp(new Date()); - const i = _(n); - i && (n.revenue = i); - const o = n.products; - o && delete n.products, - (n = this.clean(n)), - g.debug(JSON.stringify(n)), - this.prefixProperties && (n = this.prefix(t, n)), - window._kmq.push(["record", t, n]); - const s = function (e, n) { - let i = e; - this.prefixProperties && (i = this.prefix(t, i)), - (i._t = r + n), - (i._d = 1), - window.KM.set(i); - }.bind(this); - o && - window._kmq.push(function () { - ie(o, s); - }); - }, - }, - { - key: "page", - value(e) { - g.debug("in Kissmetrics page"); - const t = e.message.name; - const n = e.message.properties - ? e.message.properties.category - : void 0; - let r = "Loaded a Page"; - t && (r = `Viewed ${t} page`), - n && t && (r = `Viewed ${n} ${t} page`); - let i = e.message.properties; - this.prefixProperties && (i = this.prefix("Page", i)), - window._kmq.push(["record", r, i]); - }, - }, - { - key: "alias", - value(e) { - const t = e.message.previousId; - const n = e.message.userId; - window._kmq.push(["alias", n, t]); - }, - }, - { - key: "group", - value(e) { - const t = e.message.groupId; - let n = e.message.traits; - (n = this.prefix("Group", n)), - t && (n["Group - id"] = t), - window._kmq.push(["set", n]), - g.debug("in Kissmetrics group"); - }, - }, - { - key: "isLoaded", - value() { - return J.object(window.KM); - }, - }, - { - key: "isReady", - value() { - return J.object(window.KM); - }, - }, - ]), - e - ); - })()); - const Ne = (function () { - function e(t) { - n(this, e), - (this.siteID = t.siteID), - (this.apiKey = t.apiKey), - (this.name = "CUSTOMERIO"); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init Customer IO init==="), - (window._cio = window._cio || []); - const e = this.siteID; - !(function () { - let t; - let n; - let r; - for ( - t = function (e) { - return function () { - window._cio.push( - [e].concat(Array.prototype.slice.call(arguments, 0)) - ); - }; - }, - n = ["load", "identify", "sidentify", "track", "page"], - r = 0; - r < n.length; - r++ - ) - window._cio[n[r]] = t(n[r]); - const i = document.createElement("script"); - const o = document.getElementsByTagName("script")[0]; - (i.async = !0), - (i.id = "cio-tracker"), - i.setAttribute("data-site-id", e), - (i.src = "https://assets.customer.io/assets/track.js"), - o.parentNode.insertBefore(i, o); - })(); - }, - }, - { - key: "identify", - value(e) { - g.debug("in Customer IO identify"); - const t = e.message.userId - ? e.message.userId - : e.message.anonymousId; - const n = e.message.context.traits ? e.message.context.traits : {}; - n.created_at || - (n.created_at = Math.floor(new Date().getTime() / 1e3)), - (n.id = t), - window._cio.identify(n); - }, - }, - { - key: "track", - value(e) { - g.debug("in Customer IO track"); - const t = e.message.event; - const n = e.message.properties; - window._cio.track(t, n); - }, - }, - { - key: "page", - value(e) { - g.debug("in Customer IO page"); - const t = e.message.name || e.message.properties.url; - window._cio.page(t, e.message.properties); - }, - }, - { - key: "isLoaded", - value() { - return !(!window._cio || window._cio.push === Array.prototype.push); - }, - }, - { - key: "isReady", - value() { - return !(!window._cio || window._cio.push === Array.prototype.push); - }, - }, - ]), - e - ); - })(); - let qe = !1; - const Be = []; - var Fe = setInterval(function () { - document.body && ((qe = !0), ie(Be, Ge), clearInterval(Fe)); - }, 5); - function Ge(e) { - e(document.body); - } - const Ke = (function () { - function e(t, r) { - n(this, e), - (this.analytics = r), - (this._sf_async_config = window._sf_async_config = - window._sf_async_config || {}), - (window._sf_async_config.useCanonical = !0), - (window._sf_async_config.uid = t.uid), - (window._sf_async_config.domain = t.domain), - (this.isVideo = !!t.video), - (this.sendNameAndCategoryAsTitle = t.sendNameAndCategoryAsTitle || !0), - (this.subscriberEngagementKeys = t.subscriberEngagementKeys || []), - (this.replayEvents = []), - (this.failed = !1), - (this.isFirstPageCallMade = !1), - (this.name = "CHARTBEAT"); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init Chartbeat==="); - }, - }, - { - key: "identify", - value(e) { - g.debug("in Chartbeat identify"); - }, - }, - { - key: "track", - value(e) { - g.debug("in Chartbeat track"); - }, - }, - { - key: "page", - value(e) { - if ( - (g.debug("in Chartbeat page"), - this.loadConfig(e), - this.isFirstPageCallMade) - ) { - if (this.failed) - return ( - g.debug("===ignoring cause failed integration==="), - void (this.replayEvents = []) - ); - if (!this.isLoaded() && !this.failed) - return ( - g.debug("===pushing to replay queue for chartbeat==="), - void this.replayEvents.push(["page", e]) - ); - g.debug("===processing page event in chartbeat==="); - const t = e.message.properties; - window.pSUPERFLY.virtualPage(t.path); - } else (this.isFirstPageCallMade = !0), this.initAfterPage(); - }, - }, - { - key: "isLoaded", - value() { - return ( - g.debug("in Chartbeat isLoaded"), - !this.isFirstPageCallMade || !!window.pSUPERFLY - ); - }, - }, - { - key: "isFailed", - value() { - return this.failed; - }, - }, - { - key: "isReady", - value() { - return !!window.pSUPERFLY; - }, - }, - { - key: "loadConfig", - value(e) { - let t; - const n = e.message.properties; - const r = n ? n.category : void 0; - const i = e.message.name; - const o = n ? n.author : void 0; - this.sendNameAndCategoryAsTitle && (t = r && i ? `${r} ${i}` : i), - r && (window._sf_async_config.sections = r), - o && (window._sf_async_config.authors = o), - t && (window._sf_async_config.title = t); - const s = (window._cbq = window._cbq || []); - for (const a in n) - n.hasOwnProperty(a) && - this.subscriberEngagementKeys.indexOf(a) > -1 && - s.push([a, n[a]]); - }, - }, - { - key: "initAfterPage", - value() { - let e; - const t = this; - (e = function () { - let e; - let n; - const r = t.isVideo ? "chartbeat_video.js" : "chartbeat.js"; - (e = document.createElement("script")), - (n = document.getElementsByTagName("script")[0]), - (e.type = "text/javascript"), - (e.async = !0), - (e.src = `//static.chartbeat.com/js/${r}`), - n.parentNode.insertBefore(e, n); - }), - qe ? Ge(e) : Be.push(e), - this._isReady(this).then(function (e) { - g.debug("===replaying on chartbeat==="), - e.replayEvents.forEach(function (t) { - e[t[0]](t[1]); - }); - }); - }, - }, - { - key: "pause", - value(e) { - return new Promise(function (t) { - setTimeout(t, e); - }); - }, - }, - { - key: "_isReady", - value(e) { - const t = this; - const n = - arguments.length > 1 && void 0 !== arguments[1] - ? arguments[1] - : 0; - return new Promise(function (r) { - return t.isLoaded() - ? ((t.failed = !1), - g.debug("===chartbeat loaded successfully==="), - e.analytics.emit("ready"), - r(e)) - : n >= 1e4 - ? ((t.failed = !0), g.debug("===chartbeat failed==="), r(e)) - : void t.pause(1e3).then(function () { - return t._isReady(e, n + 1e3).then(r); - }); - }); - }, - }, - ]), - e - ); - })(); - const Ve = (function () { - function e(t, r) { - n(this, e), - (this.c2ID = t.c2ID), - (this.analytics = r), - (this.comScoreBeaconParam = t.comScoreBeaconParam - ? t.comScoreBeaconParam - : {}), - (this.isFirstPageCallMade = !1), - (this.failed = !1), - (this.comScoreParams = {}), - (this.replayEvents = []), - (this.name = "COMSCORE"); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init Comscore init==="); - }, - }, - { - key: "identify", - value(e) { - g.debug("in Comscore identify"); - }, - }, - { - key: "track", - value(e) { - g.debug("in Comscore track"); - }, - }, - { - key: "page", - value(e) { - if ( - (g.debug("in Comscore page"), - this.loadConfig(e), - this.isFirstPageCallMade) - ) { - if (this.failed) return void (this.replayEvents = []); - if (!this.isLoaded() && !this.failed) - return void this.replayEvents.push(["page", e]); - e.message.properties; - window.COMSCORE.beacon(this.comScoreParams); - } else (this.isFirstPageCallMade = !0), this.initAfterPage(); - }, - }, - { - key: "loadConfig", - value(e) { - g.debug("=====in loadConfig====="), - (this.comScoreParams = this.mapComscoreParams( - e.message.properties - )), - (window._comscore = window._comscore || []), - window._comscore.push(this.comScoreParams); - }, - }, - { - key: "initAfterPage", - value() { - g.debug("=====in initAfterPage====="), - (function () { - const e = document.createElement("script"); - const t = document.getElementsByTagName("script")[0]; - (e.async = !0), - (e.src = `${ - document.location.protocol == "https:" - ? "https://sb" - : "http://b" - }.scorecardresearch.com/beacon.js`), - t.parentNode.insertBefore(e, t); - })(), - this._isReady(this).then(function (e) { - e.replayEvents.forEach(function (t) { - e[t[0]](t[1]); - }); - }); - }, - }, - { - key: "pause", - value(e) { - return new Promise(function (t) { - setTimeout(t, e); - }); - }, - }, - { - key: "_isReady", - value(e) { - const t = this; - const n = - arguments.length > 1 && void 0 !== arguments[1] - ? arguments[1] - : 0; - return new Promise(function (r) { - return t.isLoaded() - ? ((t.failed = !1), e.analytics.emit("ready"), r(e)) - : n >= 1e4 - ? ((t.failed = !0), r(e)) - : void t.pause(1e3).then(function () { - return t._isReady(e, n + 1e3).then(r); - }); - }); - }, - }, - { - key: "mapComscoreParams", - value(e) { - g.debug("=====in mapComscoreParams====="); - const t = this.comScoreBeaconParam; - const n = {}; - return ( - Object.keys(t).forEach(function (r) { - if (r in e) { - const i = t[r]; - const o = e[r]; - n[i] = o; - } - }), - (n.c1 = "2"), - (n.c2 = this.c2ID), - g.debug("=====in mapComscoreParams=====", n), - n - ); - }, - }, - { - key: "isLoaded", - value() { - return ( - g.debug("in Comscore isLoaded"), - !this.isFirstPageCallMade || !!window.COMSCORE - ); - }, - }, - { - key: "isReady", - value() { - return !!window.COMSCORE; - }, - }, - ]), - e - ); - })(); - const He = Object.prototype.hasOwnProperty; - const ze = String.prototype.charAt; - const Je = Object.prototype.toString; - const We = function (e, t) { - return ze.call(e, t); - }; - const $e = function (e, t) { - return He.call(e, t); - }; - const Ye = function (e, t) { - t = t || $e; - for (var n = [], r = 0, i = e.length; r < i; r += 1) - t(e, r) && n.push(String(r)); - return n; - }; - const Qe = function (e) { - return e == null - ? [] - : ((t = e), - Je.call(t) === "[object String]" - ? Ye(e, We) - : (function (e) { - return ( - e != null && - typeof e !== "function" && - typeof e.length === "number" - ); - })(e) - ? Ye(e, $e) - : (function (e, t) { - t = t || $e; - const n = []; - for (const r in e) t(e, r) && n.push(String(r)); - return n; - })(e)); - let t; - }; - const Ze = Object.prototype.toString; - const Xe = - typeof Array.isArray === "function" - ? Array.isArray - : function (e) { - return Ze.call(e) === "[object Array]"; - }; - const et = function (e) { - return ( - e != null && - (Xe(e) || - (e !== "function" && - (function (e) { - const t = typeof e; - return ( - t === "number" || - (t === "object" && Ze.call(e) === "[object Number]") - ); - })(e.length))) - ); - }; - const tt = function (e, t) { - for (let n = 0; n < t.length && !1 !== e(t[n], n, t); n += 1); - }; - const nt = function (e, t) { - for ( - let n = Qe(t), r = 0; - r < n.length && !1 !== e(t[n[r]], n[r], t); - r += 1 - ); - }; - const rt = function (e, t) { - return (et(t) ? tt : nt).call(this, e, t); - }; - const it = (function () { - function e(t) { - n(this, e), - (this.blacklistPiiProperties = t.blacklistPiiProperties), - (this.categoryToContent = t.categoryToContent), - (this.pixelId = t.pixelId), - (this.eventsToEvents = t.eventsToEvents), - (this.eventCustomProperties = t.eventCustomProperties), - (this.valueFieldIdentifier = t.valueFieldIdentifier), - (this.advancedMapping = t.advancedMapping), - (this.traitKeyToExternalId = t.traitKeyToExternalId), - (this.legacyConversionPixelId = t.legacyConversionPixelId), - (this.userIdAsPixelId = t.userIdAsPixelId), - (this.whitelistPiiProperties = t.whitelistPiiProperties), - (this.name = "FB_PIXEL"); - } - return ( - i(e, [ - { - key: "init", - value() { - void 0 === this.categoryToContent && (this.categoryToContent = []), - void 0 === this.legacyConversionPixelId && - (this.legacyConversionPixelId = []), - void 0 === this.userIdAsPixelId && (this.userIdAsPixelId = []), - g.debug("===in init FbPixel==="), - (window._fbq = function () { - window.fbq.callMethod - ? window.fbq.callMethod.apply(window.fbq, arguments) - : window.fbq.queue.push(arguments); - }), - (window.fbq = window.fbq || window._fbq), - (window.fbq.push = window.fbq), - (window.fbq.loaded = !0), - (window.fbq.disablePushState = !0), - (window.fbq.allowDuplicatePageViews = !0), - (window.fbq.version = "2.0"), - (window.fbq.queue = []), - window.fbq("init", this.pixelId), - L( - "fbpixel-integration", - "//connect.facebook.net/en_US/fbevents.js" - ); - }, - }, - { - key: "isLoaded", - value() { - return ( - g.debug("in FBPixel isLoaded"), - !(!window.fbq || !window.fbq.callMethod) - ); - }, - }, - { - key: "isReady", - value() { - return ( - g.debug("in FBPixel isReady"), - !(!window.fbq || !window.fbq.callMethod) - ); - }, - }, - { - key: "page", - value(e) { - window.fbq("track", "PageView"); - }, - }, - { - key: "identify", - value(e) { - this.advancedMapping && - window.fbq("init", this.pixelId, e.message.context.traits); - }, - }, - { - key: "track", - value(e) { - const t = this; - const n = this; - const r = e.message.event; - let i = this.formatRevenue(e.message.properties.revenue); - const o = this.buildPayLoad(e, !0); - void 0 === this.categoryToContent && (this.categoryToContent = []), - void 0 === this.legacyConversionPixelId && - (this.legacyConversionPixelId = []), - void 0 === this.userIdAsPixelId && (this.userIdAsPixelId = []), - (o.value = i); - let s; - let a; - const c = this.eventsToEvents; - const u = this.legacyConversionPixelId; - if ( - ((s = c.reduce(function (e, t) { - return t.from === r && e.push(t.to), e; - }, [])), - (a = u.reduce(function (e, t) { - return t.from === r && e.push(t.to), e; - }, [])), - rt(function (t) { - (o.currency = e.message.properties.currency || "USD"), - window.fbq("trackSingle", n.pixelId, t, o, { - eventID: e.message.messageId, - }); - }, s), - rt(function (t) { - window.fbq( - "trackSingle", - n.pixelId, - t, - { currency: e.message.properties.currency, value: i }, - { eventID: e.message.messageId } - ); - }, a), - r === "Product List Viewed") - ) { - var l = []; - var d = e.message.properties.products; - var p = this.buildPayLoad(e, !0); - Array.isArray(d) && - d.forEach(function (t) { - const n = t.product_id; - n && - (g.push(n), - l.push({ - id: n, - quantity: e.message.properties.quantity, - })); - }), - g.length - ? (f = ["product"]) - : (g.push(e.message.properties.category || ""), - l.push({ - id: e.message.properties.category || "", - quantity: 1, - }), - (f = ["product_group"])), - window.fbq( - "trackSingle", - n.pixelId, - "ViewContent", - this.merge( - { - content_ids: g, - content_type: this.getContentType(e, f), - contents: l, - }, - p - ), - { eventID: e.message.messageId } - ), - rt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: t.formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Product Viewed") { - var h = this.valueFieldIdentifier === "properties.value"; - p = this.buildPayLoad(e, !0); - window.fbq( - "trackSingle", - n.pixelId, - "ViewContent", - this.merge( - { - content_ids: [ - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - ], - content_type: this.getContentType(e, ["product"]), - content_name: e.message.properties.product_name || "", - content_category: e.message.properties.category || "", - currency: e.message.properties.currency, - value: h - ? this.formatRevenue(e.message.properties.value) - : this.formatRevenue(e.message.properties.price), - contents: [ - { - id: - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }, - ], - }, - p - ), - { eventID: e.message.messageId } - ), - rt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: h - ? t.formatRevenue(e.message.properties.value) - : t.formatRevenue(e.message.properties.price), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Product Added") { - (h = this.valueFieldIdentifier === "properties.value"), - (p = this.buildPayLoad(e, !0)); - window.fbq( - "trackSingle", - n.pixelId, - "AddToCart", - this.merge( - { - content_ids: [ - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - ], - content_type: this.getContentType(e, ["product"]), - content_name: e.message.properties.product_name || "", - content_category: e.message.properties.category || "", - currency: e.message.properties.currency, - value: h - ? this.formatRevenue(e.message.properties.value) - : this.formatRevenue(e.message.properties.price), - contents: [ - { - id: - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }, - ], - }, - p - ), - { eventID: e.message.messageId } - ), - rt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: h - ? t.formatRevenue(e.message.properties.value) - : t.formatRevenue(e.message.properties.price), - }, - { eventID: e.message.messageId } - ); - }, a), - this.merge( - { - content_ids: [ - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - ], - content_type: this.getContentType(e, ["product"]), - content_name: e.message.properties.product_name || "", - content_category: e.message.properties.category || "", - currency: e.message.properties.currency, - value: h - ? this.formatRevenue(e.message.properties.value) - : this.formatRevenue(e.message.properties.price), - contents: [ - { - id: - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }, - ], - }, - p - ); - } else if (r === "Order Completed") { - (d = e.message.properties.products), - (p = this.buildPayLoad(e, !0)), - (i = this.formatRevenue(e.message.properties.revenue)); - for ( - var f = this.getContentType(e, ["product"]), - g = [], - m = ((l = []), 0); - m < d.length; - m++ - ) { - var y = product.product_id; - g.push(y); - var v = { id: y, quantity: e.message.properties.quantity }; - e.message.properties.price && - (v.item_price = e.message.properties.price), - l.push(v); - } - window.fbq( - "trackSingle", - n.pixelId, - "Purchase", - this.merge( - { - content_ids: g, - content_type: f, - currency: e.message.properties.currency, - value: i, - contents: l, - num_items: g.length, - }, - p - ), - { eventID: e.message.messageId } - ), - rt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: t.formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Products Searched") { - p = this.buildPayLoad(e, !0); - window.fbq( - "trackSingle", - n.pixelId, - "Search", - this.merge({ search_string: e.message.properties.query }, p), - { eventID: e.message.messageId } - ), - rt(function (t) { - window.fbq( - "trackSingle", - n.pixelId, - t, - { - currency: e.message.properties.currency, - value: formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Checkout Started") { - (d = e.message.properties.products), - (p = this.buildPayLoad(e, !0)), - (i = this.formatRevenue(e.message.properties.revenue)); - let b = e.message.properties.category; - for (g = [], l = [], m = 0; m < d.length; m++) { - y = d[m].product_id; - g.push(y); - v = { - id: y, - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }; - e.message.properties.price && - (v.item_price = e.message.properties.price), - l.push(v); - } - !b && d[0] && d[0].category && (b = d[0].category), - window.fbq( - "trackSingle", - n.pixelId, - "InitiateCheckout", - this.merge( - { - content_category: b, - content_ids: g, - content_type: this.getContentType(e, ["product"]), - currency: e.message.properties.currency, - value: i, - contents: l, - num_items: g.length, - }, - p - ), - { eventID: e.message.messageId } - ), - rt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: t.formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } - }, - }, - { - key: "getContentType", - value(e, t) { - const n = e.message.options; - if (n && n.contentType) return [n.contentType]; - let r; - let i = e.message.properties.category; - if (!i) { - const o = e.message.properties.products; - o && o.length && (i = o[0].category); - } - if ( - i && - (r = this.categoryToContent.reduce(function (e, t) { - return t.from == i && e.push(t.to), e; - }, [])).length - ) - return r; - return t; - }, - }, - { - key: "merge", - value(e, t) { - const n = {}; - for (const r in e) e.hasOwnProperty(r) && (n[r] = e[r]); - for (const i in t) - t.hasOwnProperty(i) && !n.hasOwnProperty(i) && (n[i] = t[i]); - return n; - }, - }, - { - key: "formatRevenue", - value(e) { - return Number(e || 0).toFixed(2); - }, - }, - { - key: "buildPayLoad", - value(e, t) { - for ( - var n = [ - "checkinDate", - "checkoutDate", - "departingArrivalDate", - "departingDepartureDate", - "returningArrivalDate", - "returningDepartureDate", - "travelEnd", - "travelStart", - ], - r = [ - "email", - "firstName", - "lastName", - "gender", - "city", - "country", - "phone", - "state", - "zip", - "birthday", - ], - i = this.whitelistPiiProperties || [], - o = this.blacklistPiiProperties || [], - s = this.eventCustomProperties || [], - a = {}, - c = 0; - c < o[c]; - c++ - ) { - const u = o[c]; - a[u.blacklistPiiProperties] = u.blacklistPiiHash; - } - const l = {}; - const d = e.message.properties; - for (const p in d) - if (d.hasOwnProperty(p) && !(t && s.indexOf(p) < 0)) { - const h = d[p]; - if (n.indexOf(d) >= 0 && J.date(h)) - l[p] = h.toISOTring().split("T")[0]; - else if (a.hasOwnProperty(p)) - a[p] && typeof h === "string" && (l[p] = sha256(h)); - else { - const f = r.indexOf(p) >= 0; - const g = i.indexOf(p) >= 0; - (f && !g) || (l[p] = h); - } - } - return l; - }, - }, - ]), - e - ); - })(); - const ot = Object.prototype.toString; - const st = function e(t) { - const n = (function (e) { - switch (ot.call(e)) { - case "[object Date]": - return "date"; - case "[object RegExp]": - return "regexp"; - case "[object Arguments]": - return "arguments"; - case "[object Array]": - return "array"; - case "[object Error]": - return "error"; - } - return e === null - ? "null" - : void 0 === e - ? "undefined" - : e != e - ? "nan" - : e && e.nodeType === 1 - ? "element" - : (t = e) != null && - (t._isBuffer || - (t.constructor && - typeof t.constructor.isBuffer === "function" && - t.constructor.isBuffer(t))) - ? "buffer" - : typeof (e = e.valueOf - ? e.valueOf() - : Object.prototype.valueOf.apply(e)); - let t; - })(t); - if (n === "object") { - var r = {}; - for (const i in t) t.hasOwnProperty(i) && (r[i] = e(t[i])); - return r; - } - if (n === "array") { - r = new Array(t.length); - for (let o = 0, s = t.length; o < s; o++) r[o] = e(t[o]); - return r; - } - if (n === "regexp") { - let a = ""; - return ( - (a += t.multiline ? "m" : ""), - (a += t.global ? "g" : ""), - (a += t.ignoreCase ? "i" : ""), - new RegExp(t.source, a) - ); - } - return n === "date" ? new Date(t.getTime()) : t; - }; - const at = 1e3; - const ct = 60 * at; - const ut = 60 * ct; - const lt = 24 * ut; - const dt = 365.25 * lt; - const pt = function (e, t) { - return ( - (t = t || {}), - typeof e === "string" - ? (function (e) { - if ((e = `${e}`).length > 1e4) return; - const t = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - e - ); - if (!t) return; - const n = parseFloat(t[1]); - switch ((t[2] || "ms").toLowerCase()) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n * dt; - case "days": - case "day": - case "d": - return n * lt; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * ut; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * ct; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * at; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - } - })(e) - : t.long - ? (function (e) { - return ( - ht(e, lt, "day") || - ht(e, ut, "hour") || - ht(e, ct, "minute") || - ht(e, at, "second") || - `${e} ms` - ); - })(e) - : (function (e) { - return e >= lt - ? `${Math.round(e / lt)}d` - : e >= ut - ? `${Math.round(e / ut)}h` - : e >= ct - ? `${Math.round(e / ct)}m` - : e >= at - ? `${Math.round(e / at)}s` - : `${e}ms`; - })(e) - ); - }; - function ht(e, t, n) { - if (!(e < t)) - return e < 1.5 * t - ? `${Math.floor(e / t)} ${n}` - : `${Math.ceil(e / t)} ${n}s`; - } - const ft = l(function (e, t) { - ((t = e.exports = function (e) { - function i() {} - function o() { - const e = o; - const i = +new Date(); - const s = i - (n || i); - (e.diff = s), - (e.prev = n), - (e.curr = i), - (n = i), - e.useColors == null && (e.useColors = t.useColors()), - e.color == null && - e.useColors && - (e.color = t.colors[r++ % t.colors.length]); - let a = Array.prototype.slice.call(arguments); - (a[0] = t.coerce(a[0])), - typeof a[0] !== "string" && (a = ["%o"].concat(a)); - let c = 0; - (a[0] = a[0].replace(/%([a-z%])/g, function (n, r) { - if (n === "%%") return n; - c++; - const i = t.formatters[r]; - if (typeof i === "function") { - const o = a[c]; - (n = i.call(e, o)), a.splice(c, 1), c--; - } - return n; - })), - typeof t.formatArgs === "function" && (a = t.formatArgs.apply(e, a)), - (o.log || t.log || console.log.bind(console)).apply(e, a); - } - (i.enabled = !1), (o.enabled = !0); - const s = t.enabled(e) ? o : i; - return (s.namespace = e), s; - }).coerce = function (e) { - return e instanceof Error ? e.stack || e.message : e; - }), - (t.disable = function () { - t.enable(""); - }), - (t.enable = function (e) { - t.save(e); - for (let n = (e || "").split(/[\s,]+/), r = n.length, i = 0; i < r; i++) - n[i] && - ((e = n[i].replace(/\*/g, ".*?"))[0] === "-" - ? t.skips.push(new RegExp(`^${e.substr(1)}$`)) - : t.names.push(new RegExp(`^${e}$`))); - }), - (t.enabled = function (e) { - let n; - let r; - for (n = 0, r = t.skips.length; n < r; n++) - if (t.skips[n].test(e)) return !1; - for (n = 0, r = t.names.length; n < r; n++) - if (t.names[n].test(e)) return !0; - return !1; - }), - (t.humanize = pt), - (t.names = []), - (t.skips = []), - (t.formatters = {}); - let n; - var r = 0; - }); - const gt = - (ft.coerce, - ft.disable, - ft.enable, - ft.enabled, - ft.humanize, - ft.names, - ft.skips, - ft.formatters, - l(function (e, t) { - function n() { - let e; - try { - e = t.storage.debug; - } catch (e) {} - return e; - } - ((t = e.exports = ft).log = function () { - return ( - typeof console === "object" && - console.log && - Function.prototype.apply.call(console.log, console, arguments) - ); - }), - (t.formatArgs = function () { - let e = arguments; - const n = this.useColors; - if ( - ((e[0] = `${ - (n ? "%c" : "") + - this.namespace + - (n ? " %c" : " ") + - e[0] + - (n ? "%c " : " ") - }+${t.humanize(this.diff)}`), - !n) - ) - return e; - const r = `color: ${this.color}`; - e = [e[0], r, "color: inherit"].concat( - Array.prototype.slice.call(e, 1) - ); - let i = 0; - let o = 0; - return ( - e[0].replace(/%[a-z%]/g, function (e) { - e !== "%%" && (i++, e === "%c" && (o = i)); - }), - e.splice(o, 0, r), - e - ); - }), - (t.save = function (e) { - try { - e == null ? t.storage.removeItem("debug") : (t.storage.debug = e); - } catch (e) {} - }), - (t.load = n), - (t.useColors = function () { - return ( - "WebkitAppearance" in document.documentElement.style || - (window.console && - (console.firebug || (console.exception && console.table))) || - (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && - parseInt(RegExp.$1, 10) >= 31) - ); - }), - (t.storage = - typeof chrome !== "undefined" && void 0 !== chrome.storage - ? chrome.storage.local - : (function () { - try { - return window.localStorage; - } catch (e) {} - })()), - (t.colors = [ - "lightseagreen", - "forestgreen", - "goldenrod", - "dodgerblue", - "darkorchid", - "crimson", - ]), - (t.formatters.j = function (e) { - return JSON.stringify(e); - }), - t.enable(n()); - })); - const mt = - (gt.log, - gt.formatArgs, - gt.save, - gt.load, - gt.useColors, - gt.storage, - gt.colors, - gt("cookie")); - const yt = function (e, t, n) { - switch (arguments.length) { - case 3: - case 2: - return vt(e, t, n); - case 1: - return wt(e); - default: - return bt(); - } - }; - function vt(e, t, n) { - n = n || {}; - let r = `${kt(e)}=${kt(t)}`; - t == null && (n.maxage = -1), - n.maxage && (n.expires = new Date(+new Date() + n.maxage)), - n.path && (r += `; path=${n.path}`), - n.domain && (r += `; domain=${n.domain}`), - n.expires && (r += `; expires=${n.expires.toUTCString()}`), - n.samesite && (r += `; samesite=${n.samesite}`), - n.secure && (r += "; secure"), - (document.cookie = r); - } - function bt() { - let e; - try { - e = document.cookie; - } catch (e) { - return ( - typeof console !== "undefined" && - typeof console.error === "function" && - console.error(e.stack || e), - {} - ); - } - return (function (e) { - let t; - const n = {}; - const r = e.split(/ *; */); - if (r[0] == "") return n; - for (let i = 0; i < r.length; ++i) - (t = r[i].split("=")), (n[Et(t[0])] = Et(t[1])); - return n; - })(e); - } - function wt(e) { - return bt()[e]; - } - function kt(e) { - try { - return encodeURIComponent(e); - } catch (t) { - mt("error `encode(%o)` - %o", e, t); - } - } - function Et(e) { - try { - return decodeURIComponent(e); - } catch (t) { - mt("error `decode(%o)` - %o", e, t); - } - } - const It = l(function (e, t) { - (function () { - const n = { function: !0, object: !0 }; - const r = t && !t.nodeType && t; - let i = (n[typeof window] && window) || this; - const o = r && n.object && e && !e.nodeType && typeof u === "object" && u; - function s(e, t) { - e || (e = i.Object()), t || (t = i.Object()); - const r = e.Number || i.Number; - const o = e.String || i.String; - const a = e.Object || i.Object; - const c = e.Date || i.Date; - const u = e.SyntaxError || i.SyntaxError; - const l = e.TypeError || i.TypeError; - const d = e.Math || i.Math; - const p = e.JSON || i.JSON; - typeof p === "object" && - p && - ((t.stringify = p.stringify), (t.parse = p.parse)); - let h; - const f = a.prototype; - const g = f.toString; - const m = f.hasOwnProperty; - function y(e, t) { - try { - e(); - } catch (e) { - t && t(); - } - } - let v = new c(-0xc782b5b800cec); - function b(e) { - if (b[e] != null) return b[e]; - let n; - if (e == "bug-string-char-index") n = "a"[0] != "a"; - else if (e == "json") - n = - b("json-stringify") && b("date-serialization") && b("json-parse"); - else if (e == "date-serialization") { - if ((n = b("json-stringify") && v)) { - var i = t.stringify; - y(function () { - n = - i(new c(-864e13)) == '"-271821-04-20T00:00:00.000Z"' && - i(new c(864e13)) == '"+275760-09-13T00:00:00.000Z"' && - i(new c(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - i(new c(-1)) == '"1969-12-31T23:59:59.999Z"'; - }); - } - } else { - let s; - const a = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - if (e == "json-stringify") { - let u = typeof (i = t.stringify) === "function"; - u && - (((s = function () { - return 1; - }).toJSON = s), - y( - function () { - u = - i(0) === "0" && - i(new r()) === "0" && - i(new o()) == '""' && - i(g) === h && - i(h) === h && - i() === h && - i(s) === "1" && - i([s]) == "[1]" && - i([h]) == "[null]" && - i(null) == "null" && - i([h, g, null]) == "[null,null,null]" && - i({ a: [s, !0, !1, null, "\0\b\n\f\r\t"] }) == a && - i(null, s) === "1" && - i([1, 2], null, 1) == "[\n 1,\n 2\n]"; - }, - function () { - u = !1; - } - )), - (n = u); - } - if (e == "json-parse") { - let l; - const d = t.parse; - typeof d === "function" && - y( - function () { - d("0") !== 0 || - d(!1) || - ((s = d(a)), - (l = s.a.length == 5 && s.a[0] === 1) && - (y(function () { - l = !d('"\t"'); - }), - l && - y(function () { - l = d("01") !== 1; - }), - l && - y(function () { - l = d("1.") !== 1; - }))); - }, - function () { - l = !1; - } - ), - (n = l); - } - } - return (b[e] = !!n); - } - if ( - (y(function () { - v = - v.getUTCFullYear() == -109252 && - v.getUTCMonth() === 0 && - v.getUTCDate() === 1 && - v.getUTCHours() == 10 && - v.getUTCMinutes() == 37 && - v.getUTCSeconds() == 6 && - v.getUTCMilliseconds() == 708; - }), - (b["bug-string-char-index"] = b["date-serialization"] = b.json = b[ - "json-stringify" - ] = b["json-parse"] = null), - !b("json")) - ) { - const w = b("bug-string-char-index"); - var k = function (e, t) { - let r; - let i; - let o; - let s = 0; - for (o in (((r = function () { - this.valueOf = 0; - }).prototype.valueOf = 0), - (i = new r()))) - m.call(i, o) && s++; - return ( - (r = i = null), - s - ? (k = function (e, t) { - let n; - let r; - const i = g.call(e) == "[object Function]"; - for (n in e) - (i && n == "prototype") || - !m.call(e, n) || - (r = n === "constructor") || - t(n); - (r || m.call(e, (n = "constructor"))) && t(n); - }) - : ((i = [ - "valueOf", - "toString", - "toLocaleString", - "propertyIsEnumerable", - "isPrototypeOf", - "hasOwnProperty", - "constructor", - ]), - (k = function (e, t) { - let r; - let o; - const s = g.call(e) == "[object Function]"; - const a = - (!s && - typeof e.constructor !== "function" && - n[typeof e.hasOwnProperty] && - e.hasOwnProperty) || - m; - for (r in e) - (s && r == "prototype") || !a.call(e, r) || t(r); - for (o = i.length; (r = i[--o]); ) a.call(e, r) && t(r); - })), - k(e, t) - ); - }; - if (!b("json-stringify") && !b("date-serialization")) { - const E = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t", - }; - const I = function (e, t) { - return `000000${t || 0}`.slice(-e); - }; - var _ = function (e) { - let t; - let n; - let r; - let i; - let o; - let s; - let a; - let c; - let u; - if (v) - t = function (e) { - (n = e.getUTCFullYear()), - (r = e.getUTCMonth()), - (i = e.getUTCDate()), - (s = e.getUTCHours()), - (a = e.getUTCMinutes()), - (c = e.getUTCSeconds()), - (u = e.getUTCMilliseconds()); - }; - else { - const l = d.floor; - const p = [ - 0, - 31, - 59, - 90, - 120, - 151, - 181, - 212, - 243, - 273, - 304, - 334, - ]; - const h = function (e, t) { - return ( - p[t] + - 365 * (e - 1970) + - l((e - 1969 + (t = +(t > 1))) / 4) - - l((e - 1901 + t) / 100) + - l((e - 1601 + t) / 400) - ); - }; - t = function (e) { - for ( - i = l(e / 864e5), n = l(i / 365.2425) + 1970 - 1; - h(n + 1, 0) <= i; - n++ - ); - for (r = l((i - h(n, 0)) / 30.42); h(n, r + 1) <= i; r++); - (i = 1 + i - h(n, r)), - (s = l((o = ((e % 864e5) + 864e5) % 864e5) / 36e5) % 24), - (a = l(o / 6e4) % 60), - (c = l(o / 1e3) % 60), - (u = o % 1e3); - }; - } - return (_ = function (e) { - return ( - e > -1 / 0 && e < 1 / 0 - ? (t(e), - (e = `${ - n <= 0 || n >= 1e4 - ? (n < 0 ? "-" : "+") + I(6, n < 0 ? -n : n) - : I(4, n) - }-${I(2, r + 1)}-${I(2, i)}T${I(2, s)}:${I(2, a)}:${I( - 2, - c - )}.${I(3, u)}Z`), - (n = r = i = s = a = c = u = null)) - : (e = null), - e - ); - })(e); - }; - if (b("json-stringify") && !b("date-serialization")) { - function A(e) { - return _(this); - } - const C = t.stringify; - t.stringify = function (e, t, n) { - const r = c.prototype.toJSON; - c.prototype.toJSON = A; - const i = C(e, t, n); - return (c.prototype.toJSON = r), i; - }; - } else { - const T = function (e) { - const t = e.charCodeAt(0); - const n = E[t]; - return n || `\\u00${I(2, t.toString(16))}`; - }; - const O = /[\x00-\x1f\x22\x5c]/g; - const P = function (e) { - return ( - (O.lastIndex = 0), `"${O.test(e) ? e.replace(O, T) : e}"` - ); - }; - var S = function (e, t, n, r, i, o, s) { - let a; - let u; - let d; - let p; - let f; - let m; - let v; - let b; - let w; - if ( - (y(function () { - a = t[e]; - }), - typeof a === "object" && - a && - (a.getUTCFullYear && - g.call(a) == "[object Date]" && - a.toJSON === c.prototype.toJSON - ? (a = _(a)) - : typeof a.toJSON === "function" && (a = a.toJSON(e))), - n && (a = n.call(t, e, a)), - a == h) - ) - return a === h ? a : "null"; - switch ( - ((u = typeof a) == "object" && (d = g.call(a)), d || u) - ) { - case "boolean": - case "[object Boolean]": - return `${a}`; - case "number": - case "[object Number]": - return a > -1 / 0 && a < 1 / 0 ? `${a}` : "null"; - case "string": - case "[object String]": - return P(`${a}`); - } - if (typeof a === "object") { - for (v = s.length; v--; ) if (s[v] === a) throw l(); - if ( - (s.push(a), - (p = []), - (b = o), - (o += i), - d == "[object Array]") - ) { - for (m = 0, v = a.length; m < v; m++) - (f = S(m, a, n, r, i, o, s)), - p.push(f === h ? "null" : f); - w = p.length - ? i - ? `[\n${o}${p.join(`,\n${o}`)}\n${b}]` - : `[${p.join(",")}]` - : "[]"; - } else - k(r || a, function (e) { - const t = S(e, a, n, r, i, o, s); - t !== h && p.push(`${P(e)}:${i ? " " : ""}${t}`); - }), - (w = p.length - ? i - ? `{\n${o}${p.join(`,\n${o}`)}\n${b}}` - : `{${p.join(",")}}` - : "{}"); - return s.pop(), w; - } - }; - t.stringify = function (e, t, r) { - let i; - let o; - let s; - let a; - if (n[typeof t] && t) - if ((a = g.call(t)) == "[object Function]") o = t; - else if (a == "[object Array]") { - s = {}; - for (var c, u = 0, l = t.length; u < l; ) - (c = t[u++]), - ((a = g.call(c)) != "[object String]" && - a != "[object Number]") || - (s[c] = 1); - } - if (r) - if ((a = g.call(r)) == "[object Number]") { - if ((r -= r % 1) > 0) - for (r > 10 && (r = 10), i = ""; i.length < r; ) i += " "; - } else - a == "[object String]" && - (i = r.length <= 10 ? r : r.slice(0, 10)); - return S("", (((c = {})[""] = e), c), o, s, i, "", []); - }; - } - } - if (!b("json-parse")) { - let x; - let R; - const j = o.fromCharCode; - const L = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r", - }; - const D = function () { - throw ((x = R = null), u()); - }; - const M = function () { - for (var e, t, n, r, i, o = R, s = o.length; x < s; ) - switch ((i = o.charCodeAt(x))) { - case 9: - case 10: - case 13: - case 32: - x++; - break; - case 123: - case 125: - case 91: - case 93: - case 58: - case 44: - return (e = w ? o.charAt(x) : o[x]), x++, e; - case 34: - for (e = "@", x++; x < s; ) - if ((i = o.charCodeAt(x)) < 32) D(); - else if (i == 92) - switch ((i = o.charCodeAt(++x))) { - case 92: - case 34: - case 47: - case 98: - case 116: - case 110: - case 102: - case 114: - (e += L[i]), x++; - break; - case 117: - for (t = ++x, n = x + 4; x < n; x++) - ((i = o.charCodeAt(x)) >= 48 && i <= 57) || - (i >= 97 && i <= 102) || - (i >= 65 && i <= 70) || - D(); - e += j(`0x${o.slice(t, x)}`); - break; - default: - D(); - } - else { - if (i == 34) break; - for ( - i = o.charCodeAt(x), t = x; - i >= 32 && i != 92 && i != 34; - - ) - i = o.charCodeAt(++x); - e += o.slice(t, x); - } - if (o.charCodeAt(x) == 34) return x++, e; - D(); - default: - if ( - ((t = x), - i == 45 && ((r = !0), (i = o.charCodeAt(++x))), - i >= 48 && i <= 57) - ) { - for ( - i == 48 && - (i = o.charCodeAt(x + 1)) >= 48 && - i <= 57 && - D(), - r = !1; - x < s && (i = o.charCodeAt(x)) >= 48 && i <= 57; - x++ - ); - if (o.charCodeAt(x) == 46) { - for ( - n = ++x; - n < s && !((i = o.charCodeAt(n)) < 48 || i > 57); - n++ - ); - n == x && D(), (x = n); - } - if ((i = o.charCodeAt(x)) == 101 || i == 69) { - for ( - ((i = o.charCodeAt(++x)) != 43 && i != 45) || x++, - n = x; - n < s && !((i = o.charCodeAt(n)) < 48 || i > 57); - n++ - ); - n == x && D(), (x = n); - } - return +o.slice(t, x); - } - r && D(); - var a = o.slice(x, x + 4); - if (a == "true") return (x += 4), !0; - if (a == "fals" && o.charCodeAt(x + 4) == 101) - return (x += 5), !1; - if (a == "null") return (x += 4), null; - D(); - } - return "$"; - }; - var U = function (e) { - let t; - let n; - if ((e == "$" && D(), typeof e === "string")) { - if ((w ? e.charAt(0) : e[0]) == "@") return e.slice(1); - if (e == "[") { - for (t = []; (e = M()) != "]"; ) - n ? (e == "," ? (e = M()) == "]" && D() : D()) : (n = !0), - e == "," && D(), - t.push(U(e)); - return t; - } - if (e == "{") { - for (t = {}; (e = M()) != "}"; ) - n ? (e == "," ? (e = M()) == "}" && D() : D()) : (n = !0), - (e != "," && - typeof e === "string" && - (w ? e.charAt(0) : e[0]) == "@" && - M() == ":") || - D(), - (t[e.slice(1)] = U(M())); - return t; - } - D(); - } - return e; - }; - const N = function (e, t, n) { - const r = q(e, t, n); - r === h ? delete e[t] : (e[t] = r); - }; - var q = function (e, t, n) { - let r; - const i = e[t]; - if (typeof i === "object" && i) - if (g.call(i) == "[object Array]") - for (r = i.length; r--; ) N(g, k, i); - else - k(i, function (e) { - N(i, e, n); - }); - return n.call(e, t, i); - }; - t.parse = function (e, t) { - let n; - let r; - return ( - (x = 0), - (R = `${e}`), - (n = U(M())), - M() != "$" && D(), - (x = R = null), - t && g.call(t) == "[object Function]" - ? q((((r = {})[""] = n), r), "", t) - : n - ); - }; - } - } - return (t.runInContext = s), t; - } - if ( - (!o || (o.global !== o && o.window !== o && o.self !== o) || (i = o), r) - ) - s(i, r); - else { - let a = i.JSON; - let c = i.JSON3; - let l = !1; - var d = s( - i, - (i.JSON3 = { - noConflict() { - return ( - l || ((l = !0), (i.JSON = a), (i.JSON3 = c), (a = c = null)), d - ); - }, - }) - ); - i.JSON = { parse: d.parse, stringify: d.stringify }; - } - }.call(u)); - }); - const _t = l(function (e, t) { - function n(e) { - switch (e) { - case "http:": - return 80; - case "https:": - return 443; - default: - return location.port; - } - } - (t.parse = function (e) { - const t = document.createElement("a"); - return ( - (t.href = e), - { - href: t.href, - host: t.host || location.host, - port: t.port === "0" || t.port === "" ? n(t.protocol) : t.port, - hash: t.hash, - hostname: t.hostname || location.hostname, - pathname: t.pathname.charAt(0) != "/" ? `/${t.pathname}` : t.pathname, - protocol: - t.protocol && t.protocol != ":" ? t.protocol : location.protocol, - search: t.search, - query: t.search.slice(1), - } - ); - }), - (t.isAbsolute = function (e) { - return e.indexOf("//") == 0 || !!~e.indexOf("://"); - }), - (t.isRelative = function (e) { - return !t.isAbsolute(e); - }), - (t.isCrossDomain = function (e) { - e = t.parse(e); - const n = t.parse(window.location.href); - return ( - e.hostname !== n.hostname || - e.port !== n.port || - e.protocol !== n.protocol - ); - }); - }); - const At = (_t.parse, _t.isAbsolute, _t.isRelative, _t.isCrossDomain, 1e3); - const Ct = 60 * At; - const Tt = 60 * Ct; - const Ot = 24 * Tt; - const Pt = 365.25 * Ot; - const St = function (e, t) { - return ( - (t = t || {}), - typeof e === "string" - ? (function (e) { - if ((e = `${e}`).length > 1e4) return; - const t = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - e - ); - if (!t) return; - const n = parseFloat(t[1]); - switch ((t[2] || "ms").toLowerCase()) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n * Pt; - case "days": - case "day": - case "d": - return n * Ot; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * Tt; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * Ct; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * At; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - } - })(e) - : t.long - ? (function (e) { - return ( - xt(e, Ot, "day") || - xt(e, Tt, "hour") || - xt(e, Ct, "minute") || - xt(e, At, "second") || - `${e} ms` - ); - })(e) - : (function (e) { - return e >= Ot - ? `${Math.round(e / Ot)}d` - : e >= Tt - ? `${Math.round(e / Tt)}h` - : e >= Ct - ? `${Math.round(e / Ct)}m` - : e >= At - ? `${Math.round(e / At)}s` - : `${e}ms`; - })(e) - ); - }; - function xt(e, t, n) { - if (!(e < t)) - return e < 1.5 * t - ? `${Math.floor(e / t)} ${n}` - : `${Math.ceil(e / t)} ${n}s`; - } - const Rt = l(function (e, t) { - ((t = e.exports = function (e) { - function i() {} - function o() { - const e = o; - const i = +new Date(); - const s = i - (n || i); - (e.diff = s), - (e.prev = n), - (e.curr = i), - (n = i), - e.useColors == null && (e.useColors = t.useColors()), - e.color == null && - e.useColors && - (e.color = t.colors[r++ % t.colors.length]); - let a = Array.prototype.slice.call(arguments); - (a[0] = t.coerce(a[0])), - typeof a[0] !== "string" && (a = ["%o"].concat(a)); - let c = 0; - (a[0] = a[0].replace(/%([a-z%])/g, function (n, r) { - if (n === "%%") return n; - c++; - const i = t.formatters[r]; - if (typeof i === "function") { - const o = a[c]; - (n = i.call(e, o)), a.splice(c, 1), c--; - } - return n; - })), - typeof t.formatArgs === "function" && (a = t.formatArgs.apply(e, a)), - (o.log || t.log || console.log.bind(console)).apply(e, a); - } - (i.enabled = !1), (o.enabled = !0); - const s = t.enabled(e) ? o : i; - return (s.namespace = e), s; - }).coerce = function (e) { - return e instanceof Error ? e.stack || e.message : e; - }), - (t.disable = function () { - t.enable(""); - }), - (t.enable = function (e) { - t.save(e); - for (let n = (e || "").split(/[\s,]+/), r = n.length, i = 0; i < r; i++) - n[i] && - ((e = n[i].replace(/\*/g, ".*?"))[0] === "-" - ? t.skips.push(new RegExp(`^${e.substr(1)}$`)) - : t.names.push(new RegExp(`^${e}$`))); - }), - (t.enabled = function (e) { - let n; - let r; - for (n = 0, r = t.skips.length; n < r; n++) - if (t.skips[n].test(e)) return !1; - for (n = 0, r = t.names.length; n < r; n++) - if (t.names[n].test(e)) return !0; - return !1; - }), - (t.humanize = St), - (t.names = []), - (t.skips = []), - (t.formatters = {}); - let n; - var r = 0; - }); - const jt = - (Rt.coerce, - Rt.disable, - Rt.enable, - Rt.enabled, - Rt.humanize, - Rt.names, - Rt.skips, - Rt.formatters, - l(function (e, t) { - function n() { - let e; - try { - e = t.storage.debug; - } catch (e) {} - return e; - } - ((t = e.exports = Rt).log = function () { - return ( - typeof console === "object" && - console.log && - Function.prototype.apply.call(console.log, console, arguments) - ); - }), - (t.formatArgs = function () { - let e = arguments; - const n = this.useColors; - if ( - ((e[0] = `${ - (n ? "%c" : "") + - this.namespace + - (n ? " %c" : " ") + - e[0] + - (n ? "%c " : " ") - }+${t.humanize(this.diff)}`), - !n) - ) - return e; - const r = `color: ${this.color}`; - e = [e[0], r, "color: inherit"].concat( - Array.prototype.slice.call(e, 1) - ); - let i = 0; - let o = 0; - return ( - e[0].replace(/%[a-z%]/g, function (e) { - e !== "%%" && (i++, e === "%c" && (o = i)); - }), - e.splice(o, 0, r), - e - ); - }), - (t.save = function (e) { - try { - e == null ? t.storage.removeItem("debug") : (t.storage.debug = e); - } catch (e) {} - }), - (t.load = n), - (t.useColors = function () { - return ( - "WebkitAppearance" in document.documentElement.style || - (window.console && - (console.firebug || (console.exception && console.table))) || - (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && - parseInt(RegExp.$1, 10) >= 31) - ); - }), - (t.storage = - typeof chrome !== "undefined" && void 0 !== chrome.storage - ? chrome.storage.local - : (function () { - try { - return window.localStorage; - } catch (e) {} - })()), - (t.colors = [ - "lightseagreen", - "forestgreen", - "goldenrod", - "dodgerblue", - "darkorchid", - "crimson", - ]), - (t.formatters.j = function (e) { - return JSON.stringify(e); - }), - t.enable(n()); - })); - const Lt = - (jt.log, - jt.formatArgs, - jt.save, - jt.load, - jt.useColors, - jt.storage, - jt.colors, - jt("cookie")); - const Dt = function (e, t, n) { - switch (arguments.length) { - case 3: - case 2: - return Mt(e, t, n); - case 1: - return Nt(e); - default: - return Ut(); - } - }; - function Mt(e, t, n) { - n = n || {}; - let r = `${qt(e)}=${qt(t)}`; - t == null && (n.maxage = -1), - n.maxage && (n.expires = new Date(+new Date() + n.maxage)), - n.path && (r += `; path=${n.path}`), - n.domain && (r += `; domain=${n.domain}`), - n.expires && (r += `; expires=${n.expires.toUTCString()}`), - n.secure && (r += "; secure"), - (document.cookie = r); - } - function Ut() { - let e; - try { - e = document.cookie; - } catch (e) { - return ( - typeof console !== "undefined" && - typeof console.error === "function" && - console.error(e.stack || e), - {} - ); - } - return (function (e) { - let t; - const n = {}; - const r = e.split(/ *; */); - if (r[0] == "") return n; - for (let i = 0; i < r.length; ++i) - (t = r[i].split("=")), (n[Bt(t[0])] = Bt(t[1])); - return n; - })(e); - } - function Nt(e) { - return Ut()[e]; - } - function qt(e) { - try { - return encodeURIComponent(e); - } catch (t) { - Lt("error `encode(%o)` - %o", e, t); - } - } - function Bt(e) { - try { - return decodeURIComponent(e); - } catch (t) { - Lt("error `decode(%o)` - %o", e, t); - } - } - for ( - var Ft = l(function (e, t) { - const n = _t.parse; - function r(e) { - for (let n = t.cookie, r = t.levels(e), i = 0; i < r.length; ++i) { - const o = r[i]; - const s = { domain: `.${o}` }; - if ((n("__tld__", 1, s), n("__tld__"))) - return n("__tld__", null, s), o; - } - return ""; - } - (r.levels = function (e) { - const t = n(e).hostname.split("."); - const r = t[t.length - 1]; - const i = []; - if (t.length === 4 && r === parseInt(r, 10)) return i; - if (t.length <= 1) return i; - for (let o = t.length - 2; o >= 0; --o) i.push(t.slice(o).join(".")); - return i; - }), - (r.cookie = Dt), - (t = e.exports = r); - }), - Gt = new ((function () { - function e(t) { - n(this, e), (this._options = {}), this.options(t); - } - return ( - i(e, [ - { - key: "options", - value() { - const e = - arguments.length > 0 && void 0 !== arguments[0] - ? arguments[0] - : {}; - if (arguments.length === 0) return this._options; - let t = `.${Ft(window.location.href)}`; - t === "." && (t = null), - (this._options = ve(e, { - maxage: 31536e6, - path: "/", - domain: t, - samesite: "Lax", - })), - this.set("test_rudder", !0), - this.get("test_rudder") || (this._options.domain = null), - this.remove("test_rudder"); - }, - }, - { - key: "set", - value(e, t) { - try { - return (t = It.stringify(t)), yt(e, t, st(this._options)), !0; - } catch (e) { - return !1; - } - }, - }, - { - key: "get", - value(e) { - let t; - try { - return (t = (t = yt(e)) ? It.parse(t) : null); - } catch (e) { - return t || null; - } - }, - }, - { - key: "remove", - value(e) { - try { - return yt(e, null, st(this._options)), !0; - } catch (e) { - return !1; - } - }, - }, - ]), - e - ); - })())({}), - Kt = (function () { - let e; - const t = {}; - const n = typeof window !== "undefined" ? window : u; - const r = n.document; - const i = "localStorage"; - if ( - ((t.disabled = !1), - (t.version = "1.3.20"), - (t.set = function (e, t) {}), - (t.get = function (e, t) {}), - (t.has = function (e) { - return void 0 !== t.get(e); - }), - (t.remove = function (e) {}), - (t.clear = function () {}), - (t.transact = function (e, n, r) { - r == null && ((r = n), (n = null)), n == null && (n = {}); - const i = t.get(e, n); - r(i), t.set(e, i); - }), - (t.getAll = function () { - const e = {}; - return ( - t.forEach(function (t, n) { - e[t] = n; - }), - e - ); - }), - (t.forEach = function () {}), - (t.serialize = function (e) { - return It.stringify(e); - }), - (t.deserialize = function (e) { - if (typeof e === "string") - try { - return It.parse(e); - } catch (t) { - return e || void 0; - } - }), - (function () { - try { - return (i in n) && n[i]; - } catch (e) { - return !1; - } - })()) - ) - (e = n[i]), - (t.set = function (n, r) { - return void 0 === r - ? t.remove(n) - : (e.setItem(n, t.serialize(r)), r); - }), - (t.get = function (n, r) { - const i = t.deserialize(e.getItem(n)); - return void 0 === i ? r : i; - }), - (t.remove = function (t) { - e.removeItem(t); - }), - (t.clear = function () { - e.clear(); - }), - (t.forEach = function (n) { - for (let r = 0; r < e.length; r++) { - const i = e.key(r); - n(i, t.get(i)); - } - }); - else if (r && r.documentElement.addBehavior) { - let o; - let s; - try { - (s = new ActiveXObject("htmlfile")).open(), - s.write( - '' - ), - s.close(), - (o = s.w.frames[0].document), - (e = o.createElement("div")); - } catch (t) { - (e = r.createElement("div")), (o = r.body); - } - const a = function (n) { - return function () { - const r = Array.prototype.slice.call(arguments, 0); - r.unshift(e), - o.appendChild(e), - e.addBehavior("#default#userData"), - e.load(i); - const s = n.apply(t, r); - return o.removeChild(e), s; - }; - }; - const c = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g"); - const l = function (e) { - return e.replace(/^d/, "___$&").replace(c, "___"); - }; - (t.set = a(function (e, n, r) { - return ( - (n = l(n)), - void 0 === r - ? t.remove(n) - : (e.setAttribute(n, t.serialize(r)), e.save(i), r) - ); - })), - (t.get = a(function (e, n, r) { - n = l(n); - const i = t.deserialize(e.getAttribute(n)); - return void 0 === i ? r : i; - })), - (t.remove = a(function (e, t) { - (t = l(t)), e.removeAttribute(t), e.save(i); - })), - (t.clear = a(function (e) { - const t = e.XMLDocument.documentElement.attributes; - e.load(i); - for (let n = t.length - 1; n >= 0; n--) - e.removeAttribute(t[n].name); - e.save(i); - })), - (t.forEach = a(function (e, n) { - for ( - var r, i = e.XMLDocument.documentElement.attributes, o = 0; - (r = i[o]); - ++o - ) - n(r.name, t.deserialize(e.getAttribute(r.name))); - })); - } - try { - const d = "__storejs__"; - t.set(d, d), t.get(d) != d && (t.disabled = !0), t.remove(d); - } catch (e) { - t.disabled = !0; - } - return (t.enabled = !t.disabled), t; - })(), - Vt = new ((function () { - function e(t) { - n(this, e), - (this._options = {}), - (this.enabled = !1), - this.options(t); - } - return ( - i(e, [ - { - key: "options", - value() { - const e = - arguments.length > 0 && void 0 !== arguments[0] - ? arguments[0] - : {}; - if (arguments.length === 0) return this._options; - ve(e, { enabled: !0 }), - (this.enabled = e.enabled && Kt.enabled), - (this._options = e); - }, - }, - { - key: "set", - value(e, t) { - return !!this.enabled && Kt.set(e, t); - }, - }, - { - key: "get", - value(e) { - return this.enabled ? Kt.get(e) : null; - }, - }, - { - key: "remove", - value(e) { - return !!this.enabled && Kt.remove(e); - }, - }, - ]), - e - ); - })())({}), - Ht = "rl_user_id", - zt = "rl_trait", - Jt = "rl_anonymous_id", - Wt = "rl_group_id", - $t = "rl_group_trait", - Yt = new ((function () { - function e() { - if ( - (n(this, e), Gt.set("rudder_cookies", !0), Gt.get("rudder_cookies")) - ) - return Gt.remove("rudder_cookies"), void (this.storage = Gt); - Vt.enabled && (this.storage = Vt); - } - return ( - i(e, [ - { - key: "setItem", - value(e, t) { - this.storage.set(e, t); - }, - }, - { - key: "setUserId", - value(e) { - typeof e === "string" - ? this.storage.set(Ht, e) - : g.error("[Storage] setUserId:: userId should be string"); - }, - }, - { - key: "setUserTraits", - value(e) { - this.storage.set(zt, e); - }, - }, - { - key: "setGroupId", - value(e) { - typeof e === "string" - ? this.storage.set(Wt, e) - : g.error("[Storage] setGroupId:: groupId should be string"); - }, - }, - { - key: "setGroupTraits", - value(e) { - this.storage.set($t, e); - }, - }, - { - key: "setAnonymousId", - value(e) { - typeof e === "string" - ? this.storage.set(Jt, e) - : g.error( - "[Storage] setAnonymousId:: anonymousId should be string" - ); - }, - }, - { - key: "getItem", - value(e) { - return this.storage.get(e); - }, - }, - { - key: "getUserId", - value() { - return this.storage.get(Ht); - }, - }, - { - key: "getUserTraits", - value() { - return this.storage.get(zt); - }, - }, - { - key: "getGroupId", - value() { - return this.storage.get(Wt); - }, - }, - { - key: "getGroupTraits", - value() { - return this.storage.get($t); - }, - }, - { - key: "getAnonymousId", - value() { - return this.storage.get(Jt); - }, - }, - { - key: "removeItem", - value(e) { - return this.storage.remove(e); - }, - }, - { - key: "clear", - value() { - this.storage.remove(Ht), this.storage.remove(zt); - }, - }, - ]), - e - ); - })())(), - Qt = "lt_synch_timestamp", - Zt = new ((function () { - function e() { - n(this, e), (this.storage = Yt); - } - return ( - i(e, [ - { - key: "setLotameSynchTime", - value(e) { - this.storage.setItem(Qt, e); - }, - }, - { - key: "getLotameSynchTime", - value() { - return this.storage.getItem(Qt); - }, - }, - ]), - e - ); - })())(), - Xt = { - HS: U, - GA: we, - HOTJAR: ke, - GOOGLEADS: Ee, - VWO: Ie, - GTM: _e, - BRAZE: Ae, - INTERCOM: Re, - KEEN: je, - KISSMETRICS: Ue, - CUSTOMERIO: Ne, - CHARTBEAT: Ke, - COMSCORE: Ve, - FACEBOOK_PIXEL: it, - LOTAME: (function () { - function e(t, r) { - const i = this; - n(this, e), - (this.name = "LOTAME"), - (this.analytics = r), - (this.storage = Zt), - (this.bcpUrlSettingsPixel = t.bcpUrlSettingsPixel), - (this.bcpUrlSettingsIframe = t.bcpUrlSettingsIframe), - (this.dspUrlSettingsPixel = t.dspUrlSettingsPixel), - (this.dspUrlSettingsIframe = t.dspUrlSettingsIframe), - (this.mappings = {}), - t.mappings.forEach(function (e) { - const t = e.key; - const n = e.value; - i.mappings[t] = n; - }); - } - return ( - i(e, [ - { - key: "init", - value() { - g.debug("===in init Lotame==="), - (window.LOTAME_SYNCH_CALLBACK = function () {}); - }, - }, - { - key: "addPixel", - value(e, t, n) { - g.debug(`Adding pixel for :: ${e}`); - const r = document.createElement("img"); - (r.src = e), - r.setAttribute("width", t), - r.setAttribute("height", n), - g.debug(`Image Pixel :: ${r}`), - document.getElementsByTagName("body")[0].appendChild(r); - }, - }, - { - key: "addIFrame", - value(e) { - g.debug(`Adding iframe for :: ${e}`); - const t = document.createElement("iframe"); - (t.src = e), - (t.title = "empty"), - t.setAttribute("id", "LOTCCFrame"), - t.setAttribute("tabindex", "-1"), - t.setAttribute("role", "presentation"), - t.setAttribute("aria-hidden", "true"), - t.setAttribute( - "style", - "border: 0px; width: 0px; height: 0px; display: block;" - ), - g.debug(`IFrame :: ${t}`), - document.getElementsByTagName("body")[0].appendChild(t); - }, - }, - { - key: "syncPixel", - value(e) { - const t = this; - if ( - (g.debug("===== in syncPixel ======"), - g.debug("Firing DSP Pixel URLs"), - this.dspUrlSettingsPixel && - this.dspUrlSettingsPixel.length > 0) - ) { - const n = Date.now(); - this.dspUrlSettingsPixel.forEach(function (r) { - const i = t.compileUrl( - a({}, t.mappings, { userId: e, random: n }), - r.dspUrlTemplate - ); - t.addPixel(i, "1", "1"); - }); - } - if ( - (g.debug("Firing DSP IFrame URLs"), - this.dspUrlSettingsIframe && - this.dspUrlSettingsIframe.length > 0) - ) { - const r = Date.now(); - this.dspUrlSettingsIframe.forEach(function (n) { - const i = t.compileUrl( - a({}, t.mappings, { userId: e, random: r }), - n.dspUrlTemplate - ); - t.addIFrame(i); - }); - } - this.storage.setLotameSynchTime(Date.now()), - this.analytics.methodToCallbackMapping.syncPixel && - this.analytics.emit("syncPixel", { - destination: this.name, - }); - }, - }, - { - key: "compileUrl", - value(e, t) { - return ( - Object.keys(e).forEach(function (n) { - if (e.hasOwnProperty(n)) { - const r = new RegExp(`{{${n}}}`, "gi"); - t = t.replace(r, e[n]); - } - }), - t - ); - }, - }, - { - key: "identify", - value(e) { - g.debug("in Lotame identify"); - const t = e.message.userId; - this.syncPixel(t); - }, - }, - { - key: "track", - value(e) { - g.debug("track not supported for lotame"); - }, - }, - { - key: "page", - value(e) { - const t = this; - if ( - (g.debug("in Lotame page"), - g.debug("Firing BCP Pixel URLs"), - this.bcpUrlSettingsPixel && - this.bcpUrlSettingsPixel.length > 0) - ) { - const n = Date.now(); - this.bcpUrlSettingsPixel.forEach(function (e) { - const r = t.compileUrl( - a({}, t.mappings, { random: n }), - e.bcpUrlTemplate - ); - t.addPixel(r, "1", "1"); - }); - } - if ( - (g.debug("Firing BCP IFrame URLs"), - this.bcpUrlSettingsIframe && - this.bcpUrlSettingsIframe.length > 0) - ) { - const r = Date.now(); - this.bcpUrlSettingsIframe.forEach(function (e) { - const n = t.compileUrl( - a({}, t.mappings, { random: r }), - e.bcpUrlTemplate - ); - t.addIFrame(n); - }); - } - e.message.userId && - this.isPixelToBeSynched() && - this.syncPixel(e.message.userId); - }, - }, - { - key: "isPixelToBeSynched", - value() { - const e = this.storage.getLotameSynchTime(); - const t = Date.now(); - return !e || Math.floor((t - e) / 864e5) >= 7; - }, - }, - { - key: "isLoaded", - value() { - return g.debug("in Lotame isLoaded"), !0; - }, - }, - { - key: "isReady", - value() { - return !0; - }, - }, - ]), - e - ); - })(), - }, - en = function e() { - n(this, e), - (this.build = "1.0.0"), - (this.name = "RudderLabs JavaScript SDK"), - (this.namespace = "com.rudderlabs.javascript"), - (this.version = "1.1.2"); - }, - tn = function e() { - n(this, e), - (this.name = "RudderLabs JavaScript SDK"), - (this.version = "1.1.2"); - }, - nn = function e() { - n(this, e), (this.name = ""), (this.version = ""); - }, - rn = function e() { - n(this, e), (this.density = 0), (this.width = 0), (this.height = 0); - }, - on = function e() { - n(this, e), - (this.app = new en()), - (this.traits = null), - (this.library = new tn()); - const t = new nn(); - t.version = ""; - const r = new rn(); - (r.width = window.width), - (r.height = window.height), - (r.density = window.devicePixelRatio), - (this.userAgent = navigator.userAgent), - (this.locale = navigator.language || navigator.browserLanguage), - (this.os = t), - (this.screen = r), - (this.device = null), - (this.network = null); - }, - sn = (function () { - function e() { - n(this, e), - (this.channel = "web"), - (this.context = new on()), - (this.type = null), - (this.action = null), - (this.messageId = b().toString()), - (this.originalTimestamp = new Date().toISOString()), - (this.anonymousId = null), - (this.userId = null), - (this.event = null), - (this.properties = {}), - (this.integrations = {}), - (this.integrations.All = !0); - } - return ( - i(e, [ - { - key: "getProperty", - value(e) { - return this.properties[e]; - }, - }, - { - key: "addProperty", - value(e, t) { - this.properties[e] = t; - }, - }, - { - key: "validateFor", - value(e) { - if (!this.properties) - throw new Error("Key properties is required"); - switch (e) { - case x.TRACK: - if (!this.event) - throw new Error("Key event is required for track event"); - if ((this.event in Object.values(R))) - switch (this.event) { - case R.CHECKOUT_STEP_VIEWED: - case R.CHECKOUT_STEP_COMPLETED: - case R.PAYMENT_INFO_ENTERED: - this.checkForKey("checkout_id"), - this.checkForKey("step"); - break; - case R.PROMOTION_VIEWED: - case R.PROMOTION_CLICKED: - this.checkForKey("promotion_id"); - break; - case R.ORDER_REFUNDED: - this.checkForKey("order_id"); - } - else - this.properties.category || - (this.properties.category = this.event); - break; - case x.PAGE: - break; - case x.SCREEN: - if (!this.properties.name) - throw new Error("Key 'name' is required in properties"); - } - }, - }, - { - key: "checkForKey", - value(e) { - if (!this.properties[e]) - throw new Error(`Key '${e}' is required in properties`); - }, - }, - ]), - e - ); - })(), - an = (function () { - function e() { - n(this, e), (this.message = new sn()); - } - return ( - i(e, [ - { - key: "setType", - value(e) { - this.message.type = e; - }, - }, - { - key: "setProperty", - value(e) { - this.message.properties = e; - }, - }, - { - key: "setUserProperty", - value(e) { - this.message.user_properties = e; - }, - }, - { - key: "setUserId", - value(e) { - this.message.userId = e; - }, - }, - { - key: "setEventName", - value(e) { - this.message.event = e; - }, - }, - { - key: "updateTraits", - value(e) { - this.message.context.traits = e; - }, - }, - { - key: "getElementContent", - value() { - return this.message; - }, - }, - ]), - e - ); - })(), - cn = (function () { - function e() { - n(this, e), - (this.rudderProperty = null), - (this.rudderUserProperty = null), - (this.event = null), - (this.userId = null), - (this.channel = null), - (this.type = null); - } - return ( - i(e, [ - { - key: "setProperty", - value(e) { - return (this.rudderProperty = e), this; - }, - }, - { - key: "setPropertyBuilder", - value(e) { - return (this.rudderProperty = e.build()), this; - }, - }, - { - key: "setUserProperty", - value(e) { - return (this.rudderUserProperty = e), this; - }, - }, - { - key: "setUserPropertyBuilder", - value(e) { - return (this.rudderUserProperty = e.build()), this; - }, - }, - { - key: "setEvent", - value(e) { - return (this.event = e), this; - }, - }, - { - key: "setUserId", - value(e) { - return (this.userId = e), this; - }, - }, - { - key: "setChannel", - value(e) { - return (this.channel = e), this; - }, - }, - { - key: "setType", - value(e) { - return (this.type = e), this; - }, - }, - { - key: "build", - value() { - const e = new an(); - return ( - e.setUserId(this.userId), - e.setType(this.type), - e.setEventName(this.event), - e.setProperty(this.rudderProperty), - e.setUserProperty(this.rudderUserProperty), - e - ); - }, - }, - ]), - e - ); - })(), - un = function e() { - n(this, e), (this.batch = null), (this.writeKey = null); - }, - ln = l(function (e) { - const t = - (typeof crypto !== "undefined" && - crypto.getRandomValues && - crypto.getRandomValues.bind(crypto)) || - (typeof msCrypto !== "undefined" && - typeof window.msCrypto.getRandomValues === "function" && - msCrypto.getRandomValues.bind(msCrypto)); - if (t) { - const n = new Uint8Array(16); - e.exports = function () { - return t(n), n; - }; - } else { - const r = new Array(16); - e.exports = function () { - for (var e, t = 0; t < 16; t++) - (3 & t) == 0 && (e = 4294967296 * Math.random()), - (r[t] = (e >>> ((3 & t) << 3)) & 255); - return r; - }; - } - }), - dn = [], - pn = 0; - pn < 256; - ++pn - ) - dn[pn] = (pn + 256).toString(16).substr(1); - let hn; - let fn; - const gn = function (e, t) { - let n = t || 0; - const r = dn; - return [ - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - ].join(""); - }; - let mn = 0; - let yn = 0; - const vn = function (e, t, n) { - let r = (t && n) || 0; - const i = t || []; - let o = (e = e || {}).node || hn; - let s = void 0 !== e.clockseq ? e.clockseq : fn; - if (o == null || s == null) { - const a = ln(); - o == null && (o = hn = [1 | a[0], a[1], a[2], a[3], a[4], a[5]]), - s == null && (s = fn = 16383 & ((a[6] << 8) | a[7])); - } - let c = void 0 !== e.msecs ? e.msecs : new Date().getTime(); - let u = void 0 !== e.nsecs ? e.nsecs : yn + 1; - const l = c - mn + (u - yn) / 1e4; - if ( - (l < 0 && void 0 === e.clockseq && (s = (s + 1) & 16383), - (l < 0 || c > mn) && void 0 === e.nsecs && (u = 0), - u >= 1e4) - ) - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - (mn = c), (yn = u), (fn = s); - const d = (1e4 * (268435455 & (c += 122192928e5)) + u) % 4294967296; - (i[r++] = (d >>> 24) & 255), - (i[r++] = (d >>> 16) & 255), - (i[r++] = (d >>> 8) & 255), - (i[r++] = 255 & d); - const p = ((c / 4294967296) * 1e4) & 268435455; - (i[r++] = (p >>> 8) & 255), - (i[r++] = 255 & p), - (i[r++] = ((p >>> 24) & 15) | 16), - (i[r++] = (p >>> 16) & 255), - (i[r++] = (s >>> 8) | 128), - (i[r++] = 255 & s); - for (let h = 0; h < 6; ++h) i[r + h] = o[h]; - return t || gn(i); - }; - const bn = function (e, t, n) { - const r = (t && n) || 0; - typeof e === "string" && - ((t = e === "binary" ? new Array(16) : null), (e = null)); - const i = (e = e || {}).random || (e.rng || ln)(); - if (((i[6] = (15 & i[6]) | 64), (i[8] = (63 & i[8]) | 128), t)) - for (let o = 0; o < 16; ++o) t[r + o] = i[o]; - return t || gn(i); - }; - const wn = bn; - (wn.v1 = vn), (wn.v4 = bn); - const kn = wn; - const En = kn.v4; - const In = { - _data: {}, - length: 0, - setItem(e, t) { - return (this._data[e] = t), (this.length = Qe(this._data).length), t; - }, - getItem(e) { - return e in this._data ? this._data[e] : null; - }, - removeItem(e) { - return ( - e in this._data && delete this._data[e], - (this.length = Qe(this._data).length), - null - ); - }, - clear() { - (this._data = {}), (this.length = 0); - }, - key(e) { - return Qe(this._data)[e]; - }, - }; - const _n = { - defaultEngine: (function () { - try { - if (!window.localStorage) return !1; - const e = En(); - window.localStorage.setItem(e, "test_value"); - const t = window.localStorage.getItem(e); - return window.localStorage.removeItem(e), t === "test_value"; - } catch (e) { - return !1; - } - })() - ? window.localStorage - : In, - inMemoryEngine: In, - }; - const An = _n.defaultEngine; - const Cn = _n.inMemoryEngine; - function Tn(e, t, n, r) { - (this.id = t), - (this.name = e), - (this.keys = n || {}), - (this.engine = r || An); - } - (Tn.prototype.set = function (e, t) { - const n = this._createValidKey(e); - if (n) - try { - this.engine.setItem(n, It.stringify(t)); - } catch (n) { - (function (e) { - let t = !1; - if (e.code) - switch (e.code) { - case 22: - t = !0; - break; - case 1014: - e.name === "NS_ERROR_DOM_QUOTA_REACHED" && (t = !0); - } - else e.number === -2147024882 && (t = !0); - return t; - })(n) && (this._swapEngine(), this.set(e, t)); - } - }), - (Tn.prototype.get = function (e) { - try { - const t = this.engine.getItem(this._createValidKey(e)); - return t === null ? null : It.parse(t); - } catch (e) { - return null; - } - }), - (Tn.prototype.remove = function (e) { - this.engine.removeItem(this._createValidKey(e)); - }), - (Tn.prototype._createValidKey = function (e) { - let t; - const n = this.name; - const r = this.id; - return Qe(this.keys).length - ? (rt(function (i) { - i === e && (t = [n, r, e].join(".")); - }, this.keys), - t) - : [n, r, e].join("."); - }), - (Tn.prototype._swapEngine = function () { - const e = this; - rt(function (t) { - const n = e.get(t); - Cn.setItem([e.name, e.id, t].join("."), n), e.remove(t); - }, this.keys), - (this.engine = Cn); - }); - const On = Tn; - const Pn = { - setTimeout(e, t) { - return window.setTimeout(e, t); - }, - clearTimeout(e) { - return window.clearTimeout(e); - }, - Date: window.Date, - }; - let Sn = Pn; - function xn() { - (this.tasks = {}), (this.nextId = 1); - } - (xn.prototype.now = function () { - return +new Sn.Date(); - }), - (xn.prototype.run = function (e, t) { - const n = this.nextId++; - return (this.tasks[n] = Sn.setTimeout(this._handle(n, e), t)), n; - }), - (xn.prototype.cancel = function (e) { - this.tasks[e] && (Sn.clearTimeout(this.tasks[e]), delete this.tasks[e]); - }), - (xn.prototype.cancelAll = function () { - rt(Sn.clearTimeout, this.tasks), (this.tasks = {}); - }), - (xn.prototype._handle = function (e, t) { - const n = this; - return function () { - return delete n.tasks[e], t(); - }; - }), - (xn.setClock = function (e) { - Sn = e; - }), - (xn.resetClock = function () { - Sn = Pn; - }); - const Rn = xn; - const jn = Ln; - function Ln(e) { - return Ln.enabled(e) - ? function (t) { - t = Dn(t); - const n = new Date(); - const r = n - (Ln[e] || n); - (Ln[e] = n), - (t = `${e} ${t} +${Ln.humanize(r)}`), - window.console && - console.log && - Function.prototype.apply.call(console.log, console, arguments); - } - : function () {}; - } - function Dn(e) { - return e instanceof Error ? e.stack || e.message : e; - } - (Ln.names = []), - (Ln.skips = []), - (Ln.enable = function (e) { - try { - localStorage.debug = e; - } catch (e) {} - for (let t = (e || "").split(/[\s,]+/), n = t.length, r = 0; r < n; r++) - (e = t[r].replace("*", ".*?"))[0] === "-" - ? Ln.skips.push(new RegExp(`^${e.substr(1)}$`)) - : Ln.names.push(new RegExp(`^${e}$`)); - }), - (Ln.disable = function () { - Ln.enable(""); - }), - (Ln.humanize = function (e) { - return e >= 36e5 - ? `${(e / 36e5).toFixed(1)}h` - : e >= 6e4 - ? `${(e / 6e4).toFixed(1)}m` - : e >= 1e3 - ? `${(e / 1e3) | 0}s` - : `${e}ms`; - }), - (Ln.enabled = function (e) { - for (var t = 0, n = Ln.skips.length; t < n; t++) - if (Ln.skips[t].test(e)) return !1; - for (t = 0, n = Ln.names.length; t < n; t++) - if (Ln.names[t].test(e)) return !0; - return !1; - }); - try { - window.localStorage && Ln.enable(localStorage.debug); - } catch (e) {} - const Mn = kn.v4; - const Un = jn("localstorage-retry"); - function Nn(e, t) { - return function () { - return e.apply(t, arguments); - }; - } - function qn(e, t, n) { - typeof t === "function" && (n = t), - (this.name = e), - (this.id = Mn()), - (this.fn = n), - (this.maxItems = t.maxItems || 1 / 0), - (this.maxAttempts = t.maxAttempts || 1 / 0), - (this.backoff = { - MIN_RETRY_DELAY: t.minRetryDelay || 1e3, - MAX_RETRY_DELAY: t.maxRetryDelay || 3e4, - FACTOR: t.backoffFactor || 2, - JITTER: t.backoffJitter || 0, - }), - (this.timeouts = { - ACK_TIMER: 1e3, - RECLAIM_TIMER: 3e3, - RECLAIM_TIMEOUT: 1e4, - RECLAIM_WAIT: 500, - }), - (this.keys = { - IN_PROGRESS: "inProgress", - QUEUE: "queue", - ACK: "ack", - RECLAIM_START: "reclaimStart", - RECLAIM_END: "reclaimEnd", - }), - (this._schedule = new Rn()), - (this._processId = 0), - (this._store = new On(this.name, this.id, this.keys)), - this._store.set(this.keys.IN_PROGRESS, {}), - this._store.set(this.keys.QUEUE, []), - (this._ack = Nn(this._ack, this)), - (this._checkReclaim = Nn(this._checkReclaim, this)), - (this._processHead = Nn(this._processHead, this)), - (this._running = !1); - } - d(qn.prototype), - (qn.prototype.start = function () { - this._running && this.stop(), - (this._running = !0), - this._ack(), - this._checkReclaim(), - this._processHead(); - }), - (qn.prototype.stop = function () { - this._schedule.cancelAll(), (this._running = !1); - }), - (qn.prototype.shouldRetry = function (e, t) { - return !(t > this.maxAttempts); - }), - (qn.prototype.getDelay = function (e) { - let t = this.backoff.MIN_RETRY_DELAY * Math.pow(this.backoff.FACTOR, e); - if (this.backoff.JITTER) { - const n = Math.random(); - const r = Math.floor(n * this.backoff.JITTER * t); - Math.floor(10 * n) < 5 ? (t -= r) : (t += r); - } - return Number(Math.min(t, this.backoff.MAX_RETRY_DELAY).toPrecision(1)); - }), - (qn.prototype.addItem = function (e) { - this._enqueue({ item: e, attemptNumber: 0, time: this._schedule.now() }); - }), - (qn.prototype.requeue = function (e, t, n) { - this.shouldRetry(e, t, n) - ? this._enqueue({ - item: e, - attemptNumber: t, - time: this._schedule.now() + this.getDelay(t), - }) - : this.emit("discard", e, t); - }), - (qn.prototype._enqueue = function (e) { - let t = this._store.get(this.keys.QUEUE) || []; - (t = t.slice(-(this.maxItems - 1))).push(e), - (t = t.sort(function (e, t) { - return e.time - t.time; - })), - this._store.set(this.keys.QUEUE, t), - this._running && this._processHead(); - }), - (qn.prototype._processHead = function () { - const e = this; - const t = this._store; - this._schedule.cancel(this._processId); - let n = t.get(this.keys.QUEUE) || []; - const r = t.get(this.keys.IN_PROGRESS) || {}; - const i = this._schedule.now(); - const o = []; - function s(n, r) { - o.push({ - item: n.item, - done(i, o) { - const s = t.get(e.keys.IN_PROGRESS) || {}; - delete s[r], - t.set(e.keys.IN_PROGRESS, s), - e.emit("processed", i, o, n.item), - i && e.requeue(n.item, n.attemptNumber + 1, i); - }, - }); - } - for ( - let a = Object.keys(r).length; - n.length && n[0].time <= i && a++ < e.maxItems; - - ) { - const c = n.shift(); - const u = Mn(); - (r[u] = { - item: c.item, - attemptNumber: c.attemptNumber, - time: e._schedule.now(), - }), - s(c, u); - } - t.set(this.keys.QUEUE, n), - t.set(this.keys.IN_PROGRESS, r), - rt(function (t) { - try { - e.fn(t.item, t.done); - } catch (e) { - Un(`Process function threw error: ${e}`); - } - }, o), - (n = t.get(this.keys.QUEUE) || []), - this._schedule.cancel(this._processId), - n.length > 0 && - (this._processId = this._schedule.run( - this._processHead, - n[0].time - i - )); - }), - (qn.prototype._ack = function () { - this._store.set(this.keys.ACK, this._schedule.now()), - this._store.set(this.keys.RECLAIM_START, null), - this._store.set(this.keys.RECLAIM_END, null), - this._schedule.run(this._ack, this.timeouts.ACK_TIMER); - }), - (qn.prototype._checkReclaim = function () { - const e = this; - rt( - function (t) { - t.id !== e.id && - (e._schedule.now() - t.get(e.keys.ACK) < - e.timeouts.RECLAIM_TIMEOUT || - (function (t) { - t.set(e.keys.RECLAIM_START, e.id), - t.set(e.keys.ACK, e._schedule.now()), - e._schedule.run(function () { - t.get(e.keys.RECLAIM_START) === e.id && - (t.set(e.keys.RECLAIM_END, e.id), - e._schedule.run(function () { - t.get(e.keys.RECLAIM_END) === e.id && - t.get(e.keys.RECLAIM_START) === e.id && - e._reclaim(t.id); - }, e.timeouts.RECLAIM_WAIT)); - }, e.timeouts.RECLAIM_WAIT); - })(t)); - }, - (function (t) { - for (var n = [], r = e._store.engine, i = 0; i < r.length; i++) { - const o = r.key(i).split("."); - o.length === 3 && - o[0] === t && - o[2] === "ack" && - n.push(new On(t, o[1], e.keys)); - } - return n; - })(this.name) - ), - this._schedule.run(this._checkReclaim, this.timeouts.RECLAIM_TIMER); - }), - (qn.prototype._reclaim = function (e) { - const t = this; - const n = new On(this.name, e, this.keys); - const r = { queue: this._store.get(this.keys.QUEUE) || [] }; - const i = { - inProgress: n.get(this.keys.IN_PROGRESS) || {}, - queue: n.get(this.keys.QUEUE) || [], - }; - rt(function (e) { - r.queue.push({ - item: e.item, - attemptNumber: e.attemptNumber, - time: t._schedule.now(), - }); - }, i.queue), - rt(function (e) { - r.queue.push({ - item: e.item, - attemptNumber: e.attemptNumber + 1, - time: t._schedule.now(), - }); - }, i.inProgress), - (r.queue = r.queue.sort(function (e, t) { - return e.time - t.time; - })), - this._store.set(this.keys.QUEUE, r.queue), - n.remove(this.keys.ACK), - n.remove(this.keys.RECLAIM_START), - n.remove(this.keys.RECLAIM_END), - n.remove(this.keys.IN_PROGRESS), - n.remove(this.keys.QUEUE), - this._processHead(); - }); - const Bn = qn; - const Fn = { - maxRetryDelay: 36e4, - minRetryDelay: 1e3, - backoffFactor: 2, - maxAttempts: 10, - maxItems: 100, - }; - var Gn = new ((function () { - function e() { - n(this, e), - (this.eventsBuffer = []), - (this.writeKey = ""), - (this.url = j), - (this.state = "READY"), - (this.batchSize = 0), - (this.payloadQueue = new Bn("rudder", Fn, function (e, t) { - (e.message.sentAt = w()), - Gn.processQueueElement(e.url, e.headers, e.message, 1e4, function ( - e, - n - ) { - if (e) return t(e); - t(null, n); - }); - })), - this.payloadQueue.start(); - } - return ( - i(e, [ - { - key: "preaparePayloadAndFlush", - value(e) { - if ( - (g.debug( - `==== in preaparePayloadAndFlush with state: ${e.state}` - ), - g.debug(e.eventsBuffer), - e.eventsBuffer.length != 0 && e.state !== "PROCESSING") - ) { - const t = e.eventsBuffer; - const n = new un(); - (n.batch = t), - (n.writeKey = e.writeKey), - (n.sentAt = w()), - n.batch.forEach(function (e) { - e.sentAt = n.sentAt; - }), - (e.batchSize = e.eventsBuffer.length); - const r = new XMLHttpRequest(); - g.debug("==== in flush sending to Rudder BE ===="), - g.debug(JSON.stringify(n, v)), - r.open("POST", e.url, !0), - r.setRequestHeader("Content-Type", "application/json"), - r.setRequestHeader( - "Authorization", - `Basic ${btoa(`${n.writeKey}:`)}` - ), - (r.onreadystatechange = function () { - r.readyState === 4 && r.status === 200 - ? (g.debug( - `====== request processed successfully: ${r.status}` - ), - (e.eventsBuffer = e.eventsBuffer.slice(e.batchSize)), - g.debug(e.eventsBuffer.length)) - : r.readyState === 4 && - r.status !== 200 && - k( - new Error( - `request failed with status: ${r.status} for url: ${e.url}` - ) - ), - (e.state = "READY"); - }), - r.send(JSON.stringify(n, v)), - (e.state = "PROCESSING"); - } - }, - }, - { - key: "processQueueElement", - value(e, t, n, r, i) { - try { - const o = new XMLHttpRequest(); - for (const s in (o.open("POST", e, !0), t)) - o.setRequestHeader(s, t[s]); - (o.timeout = r), - (o.ontimeout = i), - (o.onerror = i), - (o.onreadystatechange = function () { - o.readyState === 4 && - (o.status === 429 || (o.status >= 500 && o.status < 600) - ? (k( - new Error( - `request failed with status: ${o.status}${o.statusText} for url: ${e}` - ) - ), - i( - new Error( - `request failed with status: ${o.status}${o.statusText} for url: ${e}` - ) - )) - : (g.debug( - `====== request processed successfully: ${o.status}` - ), - i(null, o.status))); - }), - o.send(JSON.stringify(n, v)); - } catch (e) { - i(e); - } - }, - }, - { - key: "enqueue", - value(e, t) { - const n = e.getElementContent(); - const r = { - "Content-Type": "application/json", - Authorization: `Basic ${btoa(`${this.writeKey}:`)}`, - AnonymousId: btoa(n.anonymousId), - }; - (n.originalTimestamp = w()), - (n.sentAt = w()), - JSON.stringify(n).length > 32e3 && - g.error( - "[EventRepository] enqueue:: message length greater 32 Kb ", - n - ); - const i = - this.url.slice(-1) == "/" ? this.url.slice(0, -1) : this.url; - this.payloadQueue.addItem({ - url: `${i}/v1/${t}`, - headers: r, - message: n, - }); - }, - }, - ]), - e - ); - })())(); - function Kn(e) { - const t = function (t) { - let n = (t = t || window.event).target || t.srcElement; - Wn(n) && (n = n.parentNode), - Hn(n, t) - ? g.debug("to be tracked ", t.type) - : g.debug("not to be tracked ", t.type), - (function (e, t) { - let n = e.target || e.srcElement; - let r = void 0; - Wn(n) && (n = n.parentNode); - if (Hn(n, e)) { - if (n.tagName.toLowerCase() == "form") { - r = {}; - for (let i = 0; i < n.elements.length; i++) { - const o = n.elements[i]; - if (Qn(o) && Yn(o, t.trackValues)) { - const s = o.id ? o.id : o.name; - if (s && typeof s === "string") { - const a = o.id ? o.id : o.name; - let c = o.id - ? document.getElementById(o.id).value - : document.getElementsByName(o.name)[0].value; - (o.type !== "checkbox" && o.type !== "radio") || - (c = o.checked), - a.trim() !== "" && - (r[encodeURIComponent(a)] = encodeURIComponent(c)); - } - } - } - } - for (var u = [n], l = n; l.parentNode && !zn(l, "body"); ) - u.push(l.parentNode), (l = l.parentNode); - let d; - const p = []; - let h = !1; - if ( - (u.forEach(function (e) { - const n = (function (e) { - return !(!e.parentNode || zn(e, "body")); - })(e); - e.tagName.toLowerCase() === "a" && - ((d = e.getAttribute("href")), (d = n && d)), - (h = h || !Qn(e)), - p.push( - (function (e, t) { - for ( - var n = { - classes: $n(e).split(" "), - tag_name: e.tagName.toLowerCase(), - }, - r = e.attributes.length, - i = 0; - i < r; - i++ - ) { - const o = e.attributes[i].name; - const s = e.attributes[i].value; - s && (n[`attr__${o}`] = s), - (o != "name" && o != "id") || - !Yn(e, t.trackValues) || - ((n.field_value = - o == "id" - ? document.getElementById(s).value - : document.getElementsByName(s)[0].value), - (e.type !== "checkbox" && e.type !== "radio") || - (n.field_value = e.checked)); - } - let a = 1; - let c = 1; - let u = e; - for (; (u = Zn(u)); ) a++, u.tagName === e.tagName && c++; - return (n.nth_child = a), (n.nth_of_type = c), n; - })(e, t) - ); - }), - h) - ) - return !1; - let f = ""; - const m = (function (e) { - let t = ""; - return ( - e.childNodes.forEach(function (e) { - e.nodeType === Node.TEXT_NODE && (t += e.nodeValue); - }), - t.trim() - ); - })(n); - m && m.length && (f = m); - const y = { - event_type: e.type, - page: E(), - elements: p, - el_attr_href: d, - el_text: f, - }; - r && (y.form_values = r), - g.debug("web_event", y), - t.track("autotrack", y); - } - })(t, e); - }; - Vn(document, "submit", t, !0), - Vn(document, "change", t, !0), - Vn(document, "click", t, !0), - e.page(); - } - function Vn(e, t, n, r) { - e - ? e.addEventListener(t, n, !!r) - : g.error( - "[Autotrack] register_event:: No valid element provided to register_event" - ); - } - function Hn(e, t) { - if (!e || zn(e, "html") || !Jn(e)) return !1; - switch (e.tagName.toLowerCase()) { - case "html": - return !1; - case "form": - return t.type === "submit"; - case "input": - return ["button", "submit"].indexOf(e.getAttribute("type")) === -1 - ? t.type === "change" - : t.type === "click"; - case "select": - case "textarea": - return t.type === "change"; - default: - return t.type === "click"; - } - } - function zn(e, t) { - return e && e.tagName && e.tagName.toLowerCase() === t.toLowerCase(); - } - function Jn(e) { - return e && e.nodeType === 1; - } - function Wn(e) { - return e && e.nodeType === 3; - } - function $n(e) { - switch (t(e.className)) { - case "string": - return e.className; - case "object": - return e.className.baseVal || e.getAttribute("class") || ""; - default: - return ""; - } - } - function Yn(e, t) { - for (let n = e.attributes.length, r = 0; r < n; r++) { - const i = e.attributes[r].value; - if (t.indexOf(i) > -1) return !0; - } - return !1; - } - function Qn(e) { - return !($n(e).split(" ").indexOf("rudder-no-track") >= 0); - } - function Zn(e) { - if (e.previousElementSibling) return e.previousElementSibling; - do { - e = e.previousSibling; - } while (e && !Jn(e)); - return e; - } - function Xn(e, t) { - this.eventRepository || (this.eventRepository = Gn), - this.eventRepository.enqueue(e, t); - } - var er = new ((function () { - function e() { - n(this, e), - (this.autoTrackHandlersRegistered = !1), - (this.autoTrackFeatureEnabled = !1), - (this.initialized = !1), - (this.trackValues = []), - (this.eventsBuffer = []), - (this.clientIntegrations = []), - (this.loadOnlyIntegrations = {}), - (this.clientIntegrationObjects = void 0), - (this.successfullyLoadedIntegration = []), - (this.failedToBeLoadedIntegration = []), - (this.toBeProcessedArray = []), - (this.toBeProcessedByIntegrationArray = []), - (this.storage = Yt), - (this.userId = - this.storage.getUserId() != null ? this.storage.getUserId() : ""), - (this.userTraits = - this.storage.getUserTraits() != null - ? this.storage.getUserTraits() - : {}), - (this.groupId = - this.storage.getGroupId() != null ? this.storage.getGroupId() : ""), - (this.groupTraits = - this.storage.getGroupTraits() != null - ? this.storage.getGroupTraits() - : {}), - (this.anonymousId = this.getAnonymousId()), - this.storage.setUserId(this.userId), - (this.eventRepository = Gn), - (this.sendAdblockPage = !1), - (this.sendAdblockPageOptions = {}), - (this.clientSuppliedCallbacks = {}), - (this.readyCallback = function () {}), - (this.executeReadyCallback = void 0), - (this.methodToCallbackMapping = { syncPixel: "syncPixelCallback" }); - } - return ( - i(e, [ - { - key: "processResponse", - value(e, t) { - try { - g.debug("===in process response=== ".concat(e)), - (t = JSON.parse(t)).source.useAutoTracking && - !this.autoTrackHandlersRegistered && - ((this.autoTrackFeatureEnabled = !0), - Kn(this), - (this.autoTrackHandlersRegistered = !0)), - t.source.destinations.forEach(function (e, t) { - g.debug( - "Destination " - .concat(t, " Enabled? ") - .concat(e.enabled, " Type: ") - .concat(e.destinationDefinition.name, " Use Native SDK? ") - .concat(e.config.useNativeSDK) - ), - e.enabled && - this.clientIntegrations.push({ - name: e.destinationDefinition.name, - config: e.config, - }); - }, this), - console.log( - "this.clientIntegrations: ", - this.clientIntegrations - ), - (this.clientIntegrations = C( - this.loadOnlyIntegrations, - this.clientIntegrations - )), - (this.clientIntegrations = this.clientIntegrations.filter( - function (e) { - return Xt[e.name] != null; - } - )), - this.init(this.clientIntegrations); - } catch (e) { - k(e), - g.debug("===handling config BE response processing error==="), - g.debug( - "autoTrackHandlersRegistered", - this.autoTrackHandlersRegistered - ), - this.autoTrackFeatureEnabled && - !this.autoTrackHandlersRegistered && - (Kn(this), (this.autoTrackHandlersRegistered = !0)); - } - }, - }, - { - key: "init", - value(e) { - const t = this; - const n = this; - if ((g.debug("supported intgs ", Xt), !e || e.length == 0)) - return ( - this.readyCallback && this.readyCallback(), - void (this.toBeProcessedByIntegrationArray = []) - ); - e.forEach(function (e) { - try { - g.debug( - "[Analytics] init :: trying to initialize integration name:: ", - e.name - ); - const r = new (0, Xt[e.name])(e.config, n); - r.init(), - g.debug("initializing destination: ", e), - t.isInitialized(r).then(t.replayEvents); - } catch (t) { - g.error( - "[Analytics] initialize integration (integration.init()) failed :: ", - e.name - ); - } - }); - }, - }, - { - key: "replayEvents", - value(e) { - e.successfullyLoadedIntegration.length + - e.failedToBeLoadedIntegration.length == - e.clientIntegrations.length && - e.toBeProcessedByIntegrationArray.length > 0 && - (g.debug( - "===replay events called====", - e.successfullyLoadedIntegration.length, - e.failedToBeLoadedIntegration.length - ), - (e.clientIntegrationObjects = []), - (e.clientIntegrationObjects = e.successfullyLoadedIntegration), - g.debug( - "==registering after callback===", - e.clientIntegrationObjects.length - ), - (e.executeReadyCallback = p( - e.clientIntegrationObjects.length, - e.readyCallback - )), - g.debug("==registering ready callback==="), - e.on("ready", e.executeReadyCallback), - e.clientIntegrationObjects.forEach(function (t) { - g.debug("===looping over each successful integration===="), - (t.isReady && !t.isReady()) || - (g.debug("===letting know I am ready=====", t.name), - e.emit("ready")); - }), - e.toBeProcessedByIntegrationArray.forEach(function (t) { - const n = t[0]; - t.shift(), - Object.keys(t[0].message.integrations).length > 0 && - A(t[0].message.integrations); - for ( - let r = C( - t[0].message.integrations, - e.clientIntegrationObjects - ), - i = 0; - i < r.length; - i++ - ) - try { - var o; - if (!r[i].isFailed || !r[i].isFailed()) - if (r[i][n]) (o = r[i])[n].apply(o, c(t)); - } catch (e) { - k(e); - } - }), - (e.toBeProcessedByIntegrationArray = [])); - }, - }, - { - key: "pause", - value(e) { - return new Promise(function (t) { - setTimeout(t, e); - }); - }, - }, - { - key: "isInitialized", - value(e) { - const t = this; - const n = - arguments.length > 1 && void 0 !== arguments[1] - ? arguments[1] - : 0; - return new Promise(function (r) { - return e.isLoaded() - ? (g.debug("===integration loaded successfully====", e.name), - t.successfullyLoadedIntegration.push(e), - r(t)) - : n >= 1e4 - ? (g.debug("====max wait over===="), - t.failedToBeLoadedIntegration.push(e), - r(t)) - : void t.pause(1e3).then(function () { - return ( - g.debug("====after pause, again checking===="), - t.isInitialized(e, n + 1e3).then(r) - ); - }); - }); - }, - }, - { - key: "page", - value(e, n, r, i, o) { - typeof i === "function" && ((o = i), (i = null)), - typeof r === "function" && ((o = r), (i = r = null)), - typeof n === "function" && ((o = n), (i = r = n = null)), - t(e) === "object" && ((i = n), (r = e), (n = e = null)), - t(n) === "object" && ((i = r), (r = n), (n = null)), - typeof e === "string" && - typeof n !== "string" && - ((n = e), (e = null)), - this.sendAdblockPage && - e != "RudderJS-Initiated" && - this.sendSampleRequest(), - this.processPage(e, n, r, i, o); - }, - }, - { - key: "track", - value(e, t, n, r) { - typeof n === "function" && ((r = n), (n = null)), - typeof t === "function" && ((r = t), (n = null), (t = null)), - this.processTrack(e, t, n, r); - }, - }, - { - key: "identify", - value(e, n, r, i) { - typeof r === "function" && ((i = r), (r = null)), - typeof n === "function" && ((i = n), (r = null), (n = null)), - t(e) === "object" && ((r = n), (n = e), (e = this.userId)), - this.processIdentify(e, n, r, i); - }, - }, - { - key: "alias", - value(e, n, r, i) { - typeof r === "function" && ((i = r), (r = null)), - typeof n === "function" && ((i = n), (r = null), (n = null)), - t(n) === "object" && ((r = n), (n = null)); - const o = new cn().setType("alias").build(); - (o.message.previousId = - n || (this.userId ? this.userId : this.getAnonymousId())), - (o.message.userId = e), - this.processAndSendDataToDestinations("alias", o, r, i); - }, - }, - { - key: "group", - value(e, n, r, i) { - if (arguments.length) { - typeof r === "function" && ((i = r), (r = null)), - typeof n === "function" && ((i = n), (r = null), (n = null)), - t(e) === "object" && ((r = n), (n = e), (e = this.groupId)), - (this.groupId = e), - this.storage.setGroupId(this.groupId); - const o = new cn().setType("group").build(); - if (n) for (const s in n) this.groupTraits[s] = n[s]; - else this.groupTraits = {}; - this.storage.setGroupTraits(this.groupTraits), - this.processAndSendDataToDestinations("group", o, r, i); - } - }, - }, - { - key: "processPage", - value(e, t, n, r, i) { - const o = new cn().setType("page").build(); - t && (o.message.name = t), - n || (n = {}), - e && (n.category = e), - n && (o.message.properties = this.getPageProperties(n)), - this.trackPage(o, r, i); - }, - }, - { - key: "processTrack", - value(e, t, n, r) { - const i = new cn().setType("track").build(); - e && i.setEventName(e), - t ? i.setProperty(t) : i.setProperty({}), - this.trackEvent(i, n, r); - }, - }, - { - key: "processIdentify", - value(e, t, n, r) { - e && this.userId && e !== this.userId && this.reset(), - (this.userId = e), - this.storage.setUserId(this.userId); - const i = new cn().setType("identify").build(); - if (t) { - for (const o in t) this.userTraits[o] = t[o]; - this.storage.setUserTraits(this.userTraits); - } - this.identifyUser(i, n, r); - }, - }, - { - key: "identifyUser", - value(e, t, n) { - e.message.userId && - ((this.userId = e.message.userId), - this.storage.setUserId(this.userId)), - e && - e.message && - e.message.context && - e.message.context.traits && - ((this.userTraits = a({}, e.message.context.traits)), - this.storage.setUserTraits(this.userTraits)), - this.processAndSendDataToDestinations("identify", e, t, n); - }, - }, - { - key: "trackPage", - value(e, t, n) { - this.processAndSendDataToDestinations("page", e, t, n); - }, - }, - { - key: "trackEvent", - value(e, t, n) { - this.processAndSendDataToDestinations("track", e, t, n); - }, - }, - { - key: "processAndSendDataToDestinations", - value(e, t, n, r) { - try { - this.anonymousId || this.setAnonymousId(), - (t.message.context.page = E()), - (t.message.context.traits = a({}, this.userTraits)), - g.debug("anonymousId: ", this.anonymousId), - (t.message.anonymousId = this.anonymousId), - (t.message.userId = t.message.userId - ? t.message.userId - : this.userId), - e == "group" && - (this.groupId && (t.message.groupId = this.groupId), - this.groupTraits && - (t.message.traits = a({}, this.groupTraits))), - n && this.processOptionsParam(t, n), - g.debug(JSON.stringify(t)), - Object.keys(t.message.integrations).length > 0 && - A(t.message.integrations), - C( - t.message.integrations, - this.clientIntegrationObjects - ).forEach(function (n) { - (n.isFailed && n.isFailed()) || (n[e] && n[e](t)); - }), - this.clientIntegrationObjects || - (g.debug("pushing in replay queue"), - this.toBeProcessedByIntegrationArray.push([e, t])), - (i = t.message.integrations), - Object.keys(i).forEach(function (e) { - i.hasOwnProperty(e) && - (y[e] && (i[y[e]] = i[e]), - e != "All" && y[e] != null && y[e] != e && delete i[e]); - }), - Xn.call(this, t, e), - g.debug("".concat(e, " is called ")), - r && r(); - } catch (e) { - k(e); - } - let i; - }, - }, - { - key: "processOptionsParam", - value(e, t) { - const n = ["integrations", "anonymousId", "originalTimestamp"]; - for (const r in t) - if (n.includes(r)) e.message[r] = t[r]; - else if (r !== "context") e.message.context[r] = t[r]; - else for (const i in t[r]) e.message.context[i] = t[r][i]; - }, - }, - { - key: "getPageProperties", - value(e) { - const t = E(); - for (const n in t) void 0 === e[n] && (e[n] = t[n]); - return e; - }, - }, - { - key: "reset", - value() { - (this.userId = ""), (this.userTraits = {}), this.storage.clear(); - }, - }, - { - key: "getAnonymousId", - value() { - return ( - (this.anonymousId = this.storage.getAnonymousId()), - this.anonymousId || this.setAnonymousId(), - this.anonymousId - ); - }, - }, - { - key: "setAnonymousId", - value(e) { - (this.anonymousId = e || b()), - this.storage.setAnonymousId(this.anonymousId); - }, - }, - { - key: "load", - value(e, n, r) { - const i = this; - g.debug("inside load "); - let o = "https://api.rudderlabs.com/sourceConfig/?p=web&v=1.1.2"; - if (!e || !n || n.length == 0) - throw ( - (k({ - message: - "[Analytics] load:: Unable to load due to wrong writeKey or serverUrl", - }), - Error("failed to initialize")) - ); - if ( - (r && r.logLevel && g.setLogLevel(r.logLevel), - r && - r.integrations && - (Object.assign(this.loadOnlyIntegrations, r.integrations), - A(this.loadOnlyIntegrations)), - r && r.configUrl && (o = r.configUrl), - r && r.sendAdblockPage && (this.sendAdblockPage = !0), - r && - r.sendAdblockPageOptions && - t(r.sendAdblockPageOptions) === "object" && - (this.sendAdblockPageOptions = r.sendAdblockPageOptions), - r && r.clientSuppliedCallbacks) - ) { - const s = {}; - Object.keys(this.methodToCallbackMapping).forEach(function (e) { - i.methodToCallbackMapping.hasOwnProperty(e) && - r.clientSuppliedCallbacks[i.methodToCallbackMapping[e]] && - (s[e] = - r.clientSuppliedCallbacks[i.methodToCallbackMapping[e]]); - }), - Object.assign(this.clientSuppliedCallbacks, s), - this.registerCallbacks(!0); - } - (this.eventRepository.writeKey = e), - n && (this.eventRepository.url = n), - r && - r.valTrackingList && - r.valTrackingList.push == Array.prototype.push && - (this.trackValues = r.valTrackingList), - r && - r.useAutoTracking && - ((this.autoTrackFeatureEnabled = !0), - this.autoTrackFeatureEnabled && - !this.autoTrackHandlersRegistered && - (Kn(this), - (this.autoTrackHandlersRegistered = !0), - g.debug( - "autoTrackHandlersRegistered", - this.autoTrackHandlersRegistered - ))); - try { - !(function (e, t, n, r) { - let i; - const o = r.bind(e); - (i = new XMLHttpRequest()).open("GET", t, !0), - i.setRequestHeader("Authorization", `Basic ${btoa(`${n}:`)}`), - (i.onload = function () { - const e = i.status; - e == 200 - ? (g.debug("status 200 calling callback"), - o(200, i.responseText)) - : (k( - new Error( - `request failed with status: ${i.status} for url: ${t}` - ) - ), - o(e)); - }), - i.send(); - })(this, o, e, this.processResponse); - } catch (e) { - k(e), - this.autoTrackFeatureEnabled && - !this.autoTrackHandlersRegistered && - Kn(er); - } - }, - }, - { - key: "ready", - value(e) { - typeof e !== "function" - ? g.error("ready callback is not a function") - : (this.readyCallback = e); - }, - }, - { - key: "initializeCallbacks", - value() { - const e = this; - Object.keys(this.methodToCallbackMapping).forEach(function (t) { - e.methodToCallbackMapping.hasOwnProperty(t) && - e.on(t, function () {}); - }); - }, - }, - { - key: "registerCallbacks", - value(e) { - const t = this; - e || - Object.keys(this.methodToCallbackMapping).forEach(function (e) { - t.methodToCallbackMapping.hasOwnProperty(e) && - window.rudderanalytics && - typeof window.rudderanalytics[ - t.methodToCallbackMapping[e] - ] === "function" && - (t.clientSuppliedCallbacks[e] = - window.rudderanalytics[t.methodToCallbackMapping[e]]); - }), - Object.keys(this.clientSuppliedCallbacks).forEach(function (e) { - t.clientSuppliedCallbacks.hasOwnProperty(e) && - (g.debug( - "registerCallbacks", - e, - t.clientSuppliedCallbacks[e] - ), - t.on(e, t.clientSuppliedCallbacks[e])); - }); - }, - }, - { - key: "sendSampleRequest", - value() { - L( - "ad-block", - "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" - ); - }, - }, - ]), - e - ); - })())(); - console.log("====instance formed======="), - d(er), - window.addEventListener( - "error", - function (e) { - k(e, er); - }, - !0 - ), - er.initializeCallbacks(), - er.registerCallbacks(!1); - const tr = - !!window.rudderanalytics && - window.rudderanalytics.push == Array.prototype.push; - const nr = window.rudderanalytics ? window.rudderanalytics[0] : []; - if (nr.length > 0 && nr[0] == "load") { - const rr = nr[0]; - nr.shift(), - g.debug("=====from init, calling method:: ", rr), - er[rr].apply(er, c(nr)); - } - if (tr) { - for (let ir = 1; ir < window.rudderanalytics.length; ir++) - er.toBeProcessedArray.push(window.rudderanalytics[ir]); - for (let or = 0; or < er.toBeProcessedArray.length; or++) { - const sr = c(er.toBeProcessedArray[or]); - const ar = sr[0]; - sr.shift(), - g.debug("=====from init, calling method:: ", ar), - er[ar].apply(er, c(sr)); - } - er.toBeProcessedArray = []; - } - const cr = er.ready.bind(er); - const ur = er.identify.bind(er); - const lr = er.page.bind(er); - const dr = er.track.bind(er); - const pr = er.alias.bind(er); - const hr = er.group.bind(er); - const fr = er.reset.bind(er); - const gr = er.load.bind(er); - const mr = (er.initialized = !0); - const yr = er.getAnonymousId.bind(er); - const vr = er.setAnonymousId.bind(er); - return ( - (e.alias = pr), - (e.getAnonymousId = yr), - (e.group = hr), - (e.identify = ur), - (e.initialized = mr), - (e.load = gr), - (e.page = lr), - (e.ready = cr), - (e.reset = fr), - (e.setAnonymousId = vr), - (e.track = dr), - e - ); -})({}); -// # sourceMappingURL=rudder-analytics.min.js.map +rudderanalytics=function(e){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var u=0;ue.length)&&(t=e.length);for(var u=0,n=new Array(t);u-1?t:t+e:window.location.href,n=u.indexOf("#");return n>-1?u.slice(0,n):u}(n)}}function R(){for(var e,t=document.getElementsByTagName("link"),u=0;e=t[u];u++)if("canonical"===e.getAttribute("rel"))return e.getAttribute("href")}function j(e,t){var u=e.revenue;return!u&&t&&t.match(/^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i)&&(u=e.total),function(e){if(e){if("number"==typeof e)return e;if("string"==typeof e)return e=e.replace(/\$/g,""),e=parseFloat(e),isNaN(e)?void 0:e}}(u)}function L(e){Object.keys(e).forEach((function(t){e.hasOwnProperty(t)&&(b[t]&&(e[b[t]]=e[t]),"All"!=t&&null!=b[t]&&b[t]!=t&&delete e[t])}))}function U(e,u){var n=[];if(!u||0==u.length)return n;var r=!0;return"string"==typeof u[0]?(null!=e.All&&(r=e.All),u.forEach((function(t){if(r){var u=!0;null!=e[t]&&0==e[t]&&(u=!1),u&&n.push(t)}else null!=e[t]&&1==e[t]&&n.push(t)})),n):"object"===t(u[0])?(null!=e.All&&(r=e.All),u.forEach((function(t){if(r){var u=!0;null!=e[t.name]&&0==e[t.name]&&(u=!1),u&&n.push(t)}else null!=e[t.name]&&1==e[t.name]&&n.push(t)})),n):void 0}function M(e,u){return u=u||z,"array"==function(e){switch(Object.prototype.toString.call(e)){case"[object Function]":return"function";case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array"}return null===e?"null":void 0===e?"undefined":e===Object(e)?"object":t(e)}(e)?N(e,u):q(e,u)}var N=function(e,t){for(var u=[],n=0;n=0},ee.bool=ee.boolean=function(e){return"[object Boolean]"===Y.call(e)},ee.false=function(e){return ee.bool(e)&&!1===Boolean(Number(e))},ee.true=function(e){return ee.bool(e)&&!0===Boolean(Number(e))},ee.date=function(e){return"[object Date]"===Y.call(e)},ee.date.valid=function(e){return ee.date(e)&&!isNaN(Number(e))},ee.element=function(e){return void 0!==e&&"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&1===e.nodeType},ee.error=function(e){return"[object Error]"===Y.call(e)},ee.fn=ee.function=function(e){if("undefined"!=typeof window&&e===window.alert)return!0;var t=Y.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t||"[object AsyncFunction]"===t},ee.number=function(e){return"[object Number]"===Y.call(e)},ee.infinite=function(e){return e===1/0||e===-1/0},ee.decimal=function(e){return ee.number(e)&&!$(e)&&!ee.infinite(e)&&e%1!=0},ee.divisibleBy=function(e,t){var u=ee.infinite(e),n=ee.infinite(t),r=ee.number(e)&&!$(e)&&ee.number(t)&&!$(t)&&0!==t;return u||n||r&&e%t==0},ee.integer=ee.int=function(e){return ee.number(e)&&!$(e)&&e%1==0},ee.maximum=function(e,t){if($(e))throw new TypeError("NaN is not a valid value");if(!ee.arraylike(t))throw new TypeError("second argument must be array-like");for(var u=t.length;--u>=0;)if(e=0;)if(e>t[u])return!1;return!0},ee.nan=function(e){return!ee.number(e)||e!=e},ee.even=function(e){return ee.infinite(e)||ee.number(e)&&e==e&&e%2==0},ee.odd=function(e){return ee.infinite(e)||ee.number(e)&&e==e&&e%2!=0},ee.ge=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e>=t},ee.gt=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e>t},ee.le=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e<=t},ee.lt=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e=t&&e<=u},ee.object=function(e){return"[object Object]"===Y.call(e)},ee.primitive=function(e){return!e||!("object"===t(e)||ee.object(e)||ee.fn(e)||ee.array(e))},ee.hash=function(e){return ee.object(e)&&e.constructor===Object&&!e.nodeType&&!e.setInterval},ee.regexp=function(e){return"[object RegExp]"===Y.call(e)},ee.string=function(e){return"[object String]"===Y.call(e)},ee.base64=function(e){return ee.string(e)&&(!e.length||Q.test(e))},ee.hex=function(e){return ee.string(e)&&(!e.length||X.test(e))},ee.symbol=function(e){return"function"==typeof Symbol&&"[object Symbol]"===Y.call(e)&&"symbol"===t(G.call(e))},ee.bigint=function(e){return"function"==typeof BigInt&&"[object BigInt]"===Y.call(e)&&"bigint"==typeof K.call(e)};var te,ue=ee,ne=Object.prototype.toString,re=function(e){switch(ne.call(e)){case"[object Function]":return"function";case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array";case"[object String]":return"string"}return null===e?"null":void 0===e?"undefined":e&&1===e.nodeType?"element":e===Object(e)?"object":t(e)},ie=/\b(Array|Date|Object|Math|JSON)\b/g,oe=function(e,t){var u=function(e){for(var t=[],u=0;u-1?u:t.map((function(e){return e.product_id})).indexOf(e.properties.product_id)+1}},{key:"extractCheckoutOptions",value:function(e){var t=M([e.message.properties.paymentMethod,e.message.properties.shippingMethod]);return t.length>0?t.join(", "):null}}]),e}(),ge=function(){function e(t){u(this,e),this.siteId=t.siteID,this.name="HOTJAR",this._ready=!1}return r(e,[{key:"init",value:function(){window.hotjarSiteId=this.siteId,function(e,t,u,n,r,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:e.hotjarSiteId,hjsv:6},r=t.getElementsByTagName("head")[0],(i=t.createElement("script")).async=1,i.src="https://static.hotjar.com/c/hotjar-"+e._hjSettings.hjid+".js?sv="+e._hjSettings.hjsv,r.appendChild(i)}(window,document),this._ready=!0,F("===in init Hotjar===")}},{key:"identify",value:function(e){if(e.message.userId||e.message.anonymousId){var t=e.message.context.traits;window.hj("identify",e.message.userId,t)}else F("[Hotjar] identify:: user id is required")}},{key:"track",value:function(e){F("[Hotjar] track:: method not supported")}},{key:"page",value:function(e){F("[Hotjar] page:: method not supported")}},{key:"isLoaded",value:function(){return this._ready}},{key:"isReady",value:function(){return this._ready}}]),e}(),me=function(){function e(t){u(this,e),this.conversionId=t.conversionID,this.pageLoadConversions=t.pageLoadConversions,this.clickEventConversions=t.clickEventConversions,this.defaultPageConversion=t.defaultPageConversion,this.name="GOOGLEADS"}return r(e,[{key:"init",value:function(){!function(e,t,u){F("in script loader=== ".concat(e));var n=u.createElement("script");n.src=t,n.async=1,n.type="text/javascript",n.id=e;var r=u.getElementsByTagName("head")[0];F("==script==",r),r.appendChild(n)}("googleAds-integration","https://www.googletagmanager.com/gtag/js?id=".concat(this.conversionId),document),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)},window.gtag("js",new Date),window.gtag("config",this.conversionId),F("===in init Google Ads===")}},{key:"identify",value:function(e){F("[GoogleAds] identify:: method not supported")}},{key:"track",value:function(e){F("in GoogleAdsAnalyticsManager track");var t=this.getConversionData(this.clickEventConversions,e.message.event);if(t.conversionLabel){var u=t.conversionLabel,n=t.eventName,r="".concat(this.conversionId,"/").concat(u),i={};e.properties&&(i.value=e.properties.revenue,i.currency=e.properties.currency,i.transaction_id=e.properties.order_id),i.send_to=r,window.gtag("event",n,i)}}},{key:"page",value:function(e){F("in GoogleAdsAnalyticsManager page");var t=this.getConversionData(this.pageLoadConversions,e.message.name);if(t.conversionLabel){var u=t.conversionLabel,n=t.eventName;window.gtag("event",n,{send_to:"".concat(this.conversionId,"/").concat(u)})}}},{key:"getConversionData",value:function(e,t){var u={};return e&&(t?e.forEach((function(e){e.name.toLowerCase()===t.toLowerCase()&&(u.conversionLabel=e.conversionLabel,u.eventName=e.name)})):this.defaultPageConversion&&(u.conversionLabel=this.defaultPageConversion,u.eventName="Viewed a Page")),u}},{key:"isLoaded",value:function(){return window.dataLayer.push!==Array.prototype.push}},{key:"isReady",value:function(){return window.dataLayer.push!==Array.prototype.push}}]),e}(),ye=function(){function e(t,n){u(this,e),this.accountId=t.accountId,this.settingsTolerance=t.settingsTolerance,this.isSPA=t.isSPA,this.libraryTolerance=t.libraryTolerance,this.useExistingJquery=t.useExistingJquery,this.sendExperimentTrack=t.sendExperimentTrack,this.sendExperimentIdentify=t.sendExperimentIdentify,this.name="VWO",this.analytics=n,F("Config ",t)}return r(e,[{key:"init",value:function(){F("===in init VWO===");var e=this.accountId,t=this.settingsTolerance,u=this.libraryTolerance,n=this.useExistingJquery,r=this.isSPA;window._vwo_code=function(){var i=!1,o=document;return{use_existing_jquery:function(){return n},library_tolerance:function(){return u},finish:function(){if(!i){i=!0;var e=o.getElementById("_vis_opt_path_hides");e&&e.parentNode.removeChild(e)}},finished:function(){return i},load:function(e){var t=o.createElement("script");t.src=e,t.type="text/javascript",t.innerText,t.onerror=function(){_vwo_code.finish()},o.getElementsByTagName("head")[0].appendChild(t)},init:function(){var u=setTimeout("_vwo_code.finish()",t),n=o.createElement("style"),i="body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}",s=o.getElementsByTagName("head")[0];return n.setAttribute("id","_vis_opt_path_hides"),n.setAttribute("type","text/css"),n.styleSheet?n.styleSheet.cssText=i:n.appendChild(o.createTextNode(i)),s.appendChild(n),this.load("//dev.visualwebsiteoptimizer.com/j.php?a=".concat(e,"&u=").concat(encodeURIComponent(o.URL),"&r=").concat(Math.random(),"&f=").concat(+r)),u}}}(),window._vwo_settings_timer=window._vwo_code.init(),(this.sendExperimentTrack||this.experimentViewedIdentify)&&this.experimentViewed()}},{key:"experimentViewed",value:function(){var e=this;window.VWO=window.VWO||[];var t=this;window.VWO.push(["onVariationApplied",function(u){if(u){F("Variation Applied");var n=u[1],r=u[2];if(F("experiment id:",n,"Variation Name:",_vwo_exp[n].comb_n[r]),void 0!==_vwo_exp[n].comb_n[r]&&["VISUAL_AB","VISUAL","SPLIT_URL","SURVEY"].indexOf(_vwo_exp[n].type)>-1){try{t.sendExperimentTrack&&(F("Tracking..."),e.analytics.track("Experiment Viewed",{experimentId:n,variationName:_vwo_exp[n].comb_n[r]}))}catch(e){w("[VWO] experimentViewed:: ",e)}try{t.sendExperimentIdentify&&(F("Identifying..."),e.analytics.identify(i({},"Experiment: ".concat(n),_vwo_exp[n].comb_n[r])))}catch(e){w("[VWO] experimentViewed:: ",e)}}}}])}},{key:"identify",value:function(e){F("method not supported")}},{key:"track",value:function(e){if("Order Completed"===e.message.event){var t=e.message.properties?e.message.properties.total||e.message.properties.revenue:0;F("Revenue",t),window.VWO=window.VWO||[],window.VWO.push(["track.revenueConversion",t])}}},{key:"page",value:function(e){F("method not supported")}},{key:"isLoaded",value:function(){return!!window._vwo_code}},{key:"isReady",value:function(){return!!window._vwo_code}}]),e}(),Ce=function(){function e(t){u(this,e),this.containerID=t.containerID,this.name="GOOGLETAGMANAGER"}return r(e,[{key:"init",value:function(){F("===in init GoogleTagManager==="),function(e,t,u,n,r){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var i=t.getElementsByTagName(u)[0],o=t.createElement(u);o.async=!0,o.src="https://www.googletagmanager.com/gtm.js?id=".concat(r).concat(""),i.parentNode.insertBefore(o,i)}(window,document,"script","dataLayer",this.containerID)}},{key:"identify",value:function(e){F("[GTM] identify:: method not supported")}},{key:"track",value:function(e){F("===in track GoogleTagManager===");var t=e.message,u=s({event:t.event,userId:t.userId,anonymousId:t.anonymousId},t.properties);this.sendToGTMDatalayer(u)}},{key:"page",value:function(e){F("===in page GoogleTagManager===");var t,u=e.message,n=u.name,r=u.properties?u.properties.category:void 0;n&&(t="Viewed ".concat(n," page")),r&&n&&(t="Viewed ".concat(r," ").concat(n," page")),t||(t="Viewed a Page");var i=s({event:t,userId:u.userId,anonymousId:u.anonymousId},u.properties);this.sendToGTMDatalayer(i)}},{key:"isLoaded",value:function(){return!(!window.dataLayer||Array.prototype.push===window.dataLayer.push)}},{key:"sendToGTMDatalayer",value:function(e){window.dataLayer.push(e)}},{key:"isReady",value:function(){return!(!window.dataLayer||Array.prototype.push===window.dataLayer.push)}}]),e}(),Ee=function(){function e(t,n){if(u(this,e),this.analytics=n,this.appKey=t.appKey,t.appKey||(this.appKey=""),this.endPoint="",t.dataCenter){var r=t.dataCenter.trim().split("-");"eu"===r[0].toLowerCase()?this.endPoint="sdk.fra-01.braze.eu":this.endPoint="sdk.iad-".concat(r[1],".braze.com")}this.name="BRAZE",F("Config ",t)}return r(e,[{key:"formatGender",value:function(e){if(e&&"string"==typeof e){return["woman","female","w","f"].indexOf(e.toLowerCase())>-1?window.appboy.ab.User.Genders.FEMALE:["man","male","m"].indexOf(e.toLowerCase())>-1?window.appboy.ab.User.Genders.MALE:["other","o"].indexOf(e.toLowerCase())>-1?window.appboy.ab.User.Genders.OTHER:void 0}}},{key:"init",value:function(){F("===in init Braze==="),function(e,t,u,n,r){e.appboy={},e.appboyQueue=[];for(var i="initialize destroy getDeviceId toggleAppboyLogging setLogger openSession changeUser requestImmediateDataFlush requestFeedRefresh subscribeToFeedUpdates requestContentCardsRefresh subscribeToContentCardsUpdates logCardImpressions logCardClick logCardDismissal logFeedDisplayed logContentCardsDisplayed logInAppMessageImpression logInAppMessageClick logInAppMessageButtonClick logInAppMessageHtmlClick subscribeToNewInAppMessages subscribeToInAppMessage removeSubscription removeAllSubscriptions logCustomEvent logPurchase isPushSupported isPushBlocked isPushGranted isPushPermissionGranted registerAppboyPushMessages unregisterAppboyPushMessages trackLocation stopWebTracking resumeWebTracking wipeData ab ab.DeviceProperties ab.User ab.User.Genders ab.User.NotificationSubscriptionTypes ab.User.prototype.getUserId ab.User.prototype.setFirstName ab.User.prototype.setLastName ab.User.prototype.setEmail ab.User.prototype.setGender ab.User.prototype.setDateOfBirth ab.User.prototype.setCountry ab.User.prototype.setHomeCity ab.User.prototype.setLanguage ab.User.prototype.setEmailNotificationSubscriptionType ab.User.prototype.setPushNotificationSubscriptionType ab.User.prototype.setPhoneNumber ab.User.prototype.setAvatarImageUrl ab.User.prototype.setLastKnownLocation ab.User.prototype.setUserAttribute ab.User.prototype.setCustomUserAttribute ab.User.prototype.addToCustomAttributeArray ab.User.prototype.removeFromCustomAttributeArray ab.User.prototype.incrementCustomUserAttribute ab.User.prototype.addAlias ab.User.prototype.setCustomLocationAttribute ab.InAppMessage ab.InAppMessage.SlideFrom ab.InAppMessage.ClickAction ab.InAppMessage.DismissType ab.InAppMessage.OpenTarget ab.InAppMessage.ImageStyle ab.InAppMessage.TextAlignment ab.InAppMessage.Orientation ab.InAppMessage.CropType ab.InAppMessage.prototype.subscribeToClickedEvent ab.InAppMessage.prototype.subscribeToDismissedEvent ab.InAppMessage.prototype.removeSubscription ab.InAppMessage.prototype.removeAllSubscriptions ab.InAppMessage.prototype.closeMessage ab.InAppMessage.Button ab.InAppMessage.Button.prototype.subscribeToClickedEvent ab.InAppMessage.Button.prototype.removeSubscription ab.InAppMessage.Button.prototype.removeAllSubscriptions ab.SlideUpMessage ab.ModalMessage ab.FullScreenMessage ab.HtmlMessage ab.ControlMessage ab.Feed ab.Feed.prototype.getUnreadCardCount ab.ContentCards ab.ContentCards.prototype.getUnviewedCardCount ab.Card ab.Card.prototype.dismissCard ab.ClassicCard ab.CaptionedImage ab.Banner ab.ControlCard ab.WindowUtils display display.automaticallyShowNewInAppMessages display.showInAppMessage display.showFeed display.destroyFeed display.toggleFeed display.showContentCards display.hideContentCards display.toggleContentCards sharedLib".split(" "),o=0;o>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&u.rotl(e,8)|4278255360&u.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],u=0,n=0;u>>5]|=e[u]<<24-n%32;return t},wordsToBytes:function(e){for(var t=[],u=0;u<32*e.length;u+=8)t.push(e[u>>>5]>>>24-u%32&255);return t},bytesToHex:function(e){for(var t=[],u=0;u>>4).toString(16)),t.push((15&e[u]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],u=0;u>>6*(3-i)&63)):u.push("=");return u.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var u=[],n=0,r=0;n>>6-2*r);return u}};e.exports=u}()})),ve={utf8:{stringToBytes:function(e){return ve.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(ve.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],u=0;u>>24)|4278255360&(s[D]<<24|s[D]>>>8);s[a>>>5]|=128<>>9<<4)]=a;var f=e._ff,h=e._gg,g=e._hh,m=e._ii;for(D=0;D>>0,l=l+C>>>0,d=d+E>>>0,p=p+A>>>0}return t.endian([c,l,d,p])};i._ff=function(e,t,u,n,r,i,o){var s=e+(t&u|~t&n)+(r>>>0)+o;return(s<>>32-i)+t},i._gg=function(e,t,u,n,r,i,o){var s=e+(t&n|u&~n)+(r>>>0)+o;return(s<>>32-i)+t},i._hh=function(e,t,u,n,r,i,o){var s=e+(t^u^n)+(r>>>0)+o;return(s<>>32-i)+t},i._ii=function(e,t,u,n,r,i,o){var s=e+(u^(t|~n))+(r>>>0)+o;return(s<>>32-i)+t},i._blocksize=16,i._digestsize=16,e.exports=function(e,u){if(null==e)throw new Error("Illegal argument "+e);var n=t.wordsToBytes(i(e,u));return u&&u.asBytes?n:u&&u.asString?r.bytesToString(n):t.bytesToHex(n)}}()})),ke=function(){function e(t){u(this,e),this.NAME="INTERCOM",this.API_KEY=t.apiKey,this.APP_ID=t.appId,this.MOBILE_APP_ID=t.mobileAppId,F("Config ",t)}return r(e,[{key:"init",value:function(){window.intercomSettings={app_id:this.APP_ID},function(){var e=window,t=e.Intercom;if("function"==typeof t)t("reattach_activator"),t("update",e.intercomSettings);else{var u=document,n=function e(){e.c(arguments)};n.q=[],n.c=function(e){n.q.push(e)},e.Intercom=n;var r=function(){var e=u.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://widget.intercom.io/widget/".concat(window.intercomSettings.app_id);var t=u.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)};"complete"===document.readyState?(r(),window.intercom_code=!0):e.attachEvent?(e.attachEvent("onload",r),window.intercom_code=!0):(e.addEventListener("load",r,!1),window.intercom_code=!0)}}()}},{key:"page",value:function(){window.Intercom("update")}},{key:"identify",value:function(e){var u={},n=e.message.context;if(null!=(n.Intercom?n.Intercom:null)){var r=n.Intercom.user_hash?n.Intercom.user_hash:null;null!=r&&(u.user_hash=r);var i=n.Intercom.hideDefaultLauncher?n.Intercom.hideDefaultLauncher:null;null!=i&&(u.hide_default_launcher=i)}Object.keys(n.traits).forEach((function(e){if(n.traits.hasOwnProperty(e)){var r=n.traits[e];if("company"===e){var i=[],o={};"string"==typeof n.traits[e]&&(o.company_id=Be(n.traits[e]));var s="object"===t(n.traits[e])&&Object.keys(n.traits[e])||[];s.forEach((function(t){s.hasOwnProperty(t)&&("id"!=t?o[t]=n.traits[e][t]:o.company_id=n.traits[e][t])})),"object"!==t(n.traits[e])||s.includes("id")||(o.company_id=Be(o.name)),i.push(o),u.companies=i}else u[e]=n.traits[e];switch(e){case"createdAt":u.created_at=r;break;case"anonymousId":u.user_id=r}}})),u.user_id=e.message.userId,window.Intercom("update",u)}},{key:"track",value:function(e){var t={},u=e.message;(u.properties?Object.keys(u.properties):null).forEach((function(e){var n=u.properties[e];t[e]=n})),u.event&&(t.event_name=u.event),t.user_id=u.userId?u.userId:u.anonymousId,t.created_at=Math.floor(new Date(u.originalTimestamp).getTime()/1e3),window.Intercom("trackEvent",t.event_name,t)}},{key:"isLoaded",value:function(){return!!window.intercom_code}},{key:"isReady",value:function(){return!!window.intercom_code}}]),e}(),_e=function(){function e(t){u(this,e),this.projectID=t.projectID,this.writeKey=t.writeKey,this.ipAddon=t.ipAddon,this.uaAddon=t.uaAddon,this.urlAddon=t.urlAddon,this.referrerAddon=t.referrerAddon,this.client=null,this.name="KEEN"}return r(e,[{key:"init",value:function(){F("===in init Keen==="),V("keen-integration","https://cdn.jsdelivr.net/npm/keen-tracking@4");var e=setInterval(function(){void 0!==window.KeenTracking&&void 0!==window.KeenTracking&&(this.client=function(e){return e.client=new window.KeenTracking({projectId:e.projectID,writeKey:e.writeKey}),e.client}(this),clearInterval(e))}.bind(this),1e3)}},{key:"identify",value:function(e){F("in Keen identify");var t=e.message.context.traits,u=e.message.userId?e.message.userId:e.message.anonymousId,n=e.message.properties?Object.assign(n,e.message.properties):{};n.user={userId:u,traits:t},n=this.getAddOn(n),this.client.extendEvents(n)}},{key:"track",value:function(e){F("in Keen track");var t=e.message.event,u=e.message.properties;u=this.getAddOn(u),this.client.recordEvent(t,u)}},{key:"page",value:function(e){F("in Keen page");var t=e.message.name,u=e.message.properties?e.message.properties.category:void 0,n="Loaded a Page";t&&(n="Viewed ".concat(t," page")),u&&t&&(n="Viewed ".concat(u," ").concat(t," page"));var r=e.message.properties;r=this.getAddOn(r),this.client.recordEvent(n,r)}},{key:"isLoaded",value:function(){return F("in Keen isLoaded"),!(null==this.client)}},{key:"isReady",value:function(){return!(null==this.client)}},{key:"getAddOn",value:function(e){var t=[];return this.ipAddon&&(e.ip_address="${keen.ip}",t.push({name:"keen:ip_to_geo",input:{ip:"ip_address"},output:"ip_geo_info"})),this.uaAddon&&(e.user_agent="${keen.user_agent}",t.push({name:"keen:ua_parser",input:{ua_string:"user_agent"},output:"parsed_user_agent"})),this.urlAddon&&(e.page_url=document.location.href,t.push({name:"keen:url_parser",input:{url:"page_url"},output:"parsed_page_url"})),this.referrerAddon&&(e.page_url=document.location.href,e.referrer_url=document.referrer,t.push({name:"keen:referrer_parser",input:{referrer_url:"referrer_url",page_url:"page_url"},output:"referrer_info"})),e.keen={addons:t},e}}]),e}(),Ie=Object.prototype.hasOwnProperty,Te=function(e){for(var t=Array.prototype.slice.call(arguments,1),u=0;u-1&&o.push([s,u[s]])}},{key:"initAfterPage",value:function(){var e,t=this;e=function(){var e,u,n=t.isVideo?"chartbeat_video.js":"chartbeat.js";e=document.createElement("script"),u=document.getElementsByTagName("script")[0],e.type="text/javascript",e.async=!0,e.src="//static.chartbeat.com/js/".concat(n),u.parentNode.insertBefore(e,u)},Pe?Le(e):Re.push(e),this._isReady(this).then((function(e){F("===replaying on chartbeat==="),e.replayEvents.forEach((function(t){e[t[0]](t[1])}))}))}},{key:"pause",value:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return new Promise((function(n){return t.isLoaded()?(t.failed=!1,F("===chartbeat loaded successfully==="),e.analytics.emit("ready"),n(e)):u>=1e4?(t.failed=!0,F("===chartbeat failed==="),n(e)):void t.pause(1e3).then((function(){return t._isReady(e,u+1e3).then(n)}))}))}}]),e}(),Me=function(){function e(t,n){u(this,e),this.c2ID=t.c2ID,this.analytics=n,this.comScoreBeaconParam=t.comScoreBeaconParam?t.comScoreBeaconParam:{},this.isFirstPageCallMade=!1,this.failed=!1,this.comScoreParams={},this.replayEvents=[],this.name="COMSCORE"}return r(e,[{key:"init",value:function(){F("===in init Comscore init===")}},{key:"identify",value:function(e){F("in Comscore identify")}},{key:"track",value:function(e){F("in Comscore track")}},{key:"page",value:function(e){if(F("in Comscore page"),this.loadConfig(e),this.isFirstPageCallMade){if(this.failed)return void(this.replayEvents=[]);if(!this.isLoaded()&&!this.failed)return void this.replayEvents.push(["page",e]);e.message.properties;window.COMSCORE.beacon(this.comScoreParams)}else this.isFirstPageCallMade=!0,this.initAfterPage()}},{key:"loadConfig",value:function(e){F("=====in loadConfig====="),this.comScoreParams=this.mapComscoreParams(e.message.properties),window._comscore=window._comscore||[],window._comscore.push(this.comScoreParams)}},{key:"initAfterPage",value:function(){F("=====in initAfterPage====="),function(){var e=document.createElement("script"),t=document.getElementsByTagName("script")[0];e.async=!0,e.src="".concat("https:"==document.location.protocol?"https://sb":"http://b",".scorecardresearch.com/beacon.js"),t.parentNode.insertBefore(e,t)}(),this._isReady(this).then((function(e){e.replayEvents.forEach((function(t){e[t[0]](t[1])}))}))}},{key:"pause",value:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return new Promise((function(n){return t.isLoaded()?(t.failed=!1,e.analytics.emit("ready"),n(e)):u>=1e4?(t.failed=!0,n(e)):void t.pause(1e3).then((function(){return t._isReady(e,u+1e3).then(n)}))}))}},{key:"mapComscoreParams",value:function(e){F("=====in mapComscoreParams=====");var t=this.comScoreBeaconParam,u={};return Object.keys(t).forEach((function(n){if(n in e){var r=t[n],i=e[n];u[r]=i}})),u.c1="2",u.c2=this.c2ID,F("=====in mapComscoreParams=====",u),u}},{key:"isLoaded",value:function(){return F("in Comscore isLoaded"),!this.isFirstPageCallMade||!!window.COMSCORE}},{key:"isReady",value:function(){return!!window.COMSCORE}}]),e}(),Ne=Object.prototype.hasOwnProperty,qe=String.prototype.charAt,ze=Object.prototype.toString,Ge=function(e,t){return qe.call(e,t)},Ke=function(e,t){return Ne.call(e,t)},Ve=function(e,t){t=t||Ke;for(var u=[],n=0,r=e.length;n=0&&ue.date(D))l[p]=D.toISOTring().split("T")[0];else if(s.hasOwnProperty(p))s[p]&&"string"==typeof D&&(l[p]=sha256(D));else{var f=n.indexOf(p)>=0,h=r.indexOf(p)>=0;f&&!h||(l[p]=D)}}return l}}]),e}(),et=d((function(e,t){var u;e.exports=(u=u||function(e,t){var u=Object.create||function(){function e(){}return function(t){var u;return e.prototype=t,u=new e,e.prototype=null,u}}(),n={},r=n.lib={},i=r.Base={extend:function(e){var t=u(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},o=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||a).stringify(this)},concat:function(e){var t=this.words,u=e.words,n=this.sigBytes,r=e.sigBytes;if(this.clamp(),n%4)for(var i=0;i>>2]>>>24-i%4*8&255;t[n+i>>>2]|=o<<24-(n+i)%4*8}else for(i=0;i>>2]=u[i>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,u=this.sigBytes;t[u>>>2]&=4294967295<<32-u%4*8,t.length=e.ceil(u/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var u,n=[],r=function(t){t=t;var u=987654321,n=4294967295;return function(){var r=((u=36969*(65535&u)+(u>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return r/=4294967296,(r+=.5)*(e.random()>.5?1:-1)}},i=0;i>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,u=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new o.init(u,t/2)}},c=s.Latin1={stringify:function(e){for(var t=e.words,u=e.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(i))}return n.join("")},parse:function(e){for(var t=e.length,u=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new o.init(u,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var u=this._data,n=u.words,r=u.sigBytes,i=this.blockSize,s=r/(4*i),a=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,c=e.min(4*a,r);if(a){for(var l=0;l>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var a=n.charAt(64);if(a)for(;r.length%4;)r.push(a);return r.join("")},parse:function(e){var t=e.length,u=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var i=0;i>>6-o%4*2;r[i>>>2]|=(s|a)<<24-i%4*8,i++}return n.create(r,i)}(e,t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},r.enc.Base64)})),d((function(e,t){var u;e.exports=(u=et,function(e){var t=u,n=t.lib,r=n.WordArray,i=n.Hasher,o=t.algo,s=[];!function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0}();var a=o.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var u=0;u<16;u++){var n=t+u,r=e[n];e[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var i=this._hash.words,o=e[t+0],a=e[t+1],D=e[t+2],f=e[t+3],h=e[t+4],g=e[t+5],m=e[t+6],y=e[t+7],C=e[t+8],E=e[t+9],A=e[t+10],v=e[t+11],F=e[t+12],w=e[t+13],b=e[t+14],B=e[t+15],k=i[0],_=i[1],I=i[2],T=i[3];k=c(k,_,I,T,o,7,s[0]),T=c(T,k,_,I,a,12,s[1]),I=c(I,T,k,_,D,17,s[2]),_=c(_,I,T,k,f,22,s[3]),k=c(k,_,I,T,h,7,s[4]),T=c(T,k,_,I,g,12,s[5]),I=c(I,T,k,_,m,17,s[6]),_=c(_,I,T,k,y,22,s[7]),k=c(k,_,I,T,C,7,s[8]),T=c(T,k,_,I,E,12,s[9]),I=c(I,T,k,_,A,17,s[10]),_=c(_,I,T,k,v,22,s[11]),k=c(k,_,I,T,F,7,s[12]),T=c(T,k,_,I,w,12,s[13]),I=c(I,T,k,_,b,17,s[14]),k=l(k,_=c(_,I,T,k,B,22,s[15]),I,T,a,5,s[16]),T=l(T,k,_,I,m,9,s[17]),I=l(I,T,k,_,v,14,s[18]),_=l(_,I,T,k,o,20,s[19]),k=l(k,_,I,T,g,5,s[20]),T=l(T,k,_,I,A,9,s[21]),I=l(I,T,k,_,B,14,s[22]),_=l(_,I,T,k,h,20,s[23]),k=l(k,_,I,T,E,5,s[24]),T=l(T,k,_,I,b,9,s[25]),I=l(I,T,k,_,f,14,s[26]),_=l(_,I,T,k,C,20,s[27]),k=l(k,_,I,T,w,5,s[28]),T=l(T,k,_,I,D,9,s[29]),I=l(I,T,k,_,y,14,s[30]),k=d(k,_=l(_,I,T,k,F,20,s[31]),I,T,g,4,s[32]),T=d(T,k,_,I,C,11,s[33]),I=d(I,T,k,_,v,16,s[34]),_=d(_,I,T,k,b,23,s[35]),k=d(k,_,I,T,a,4,s[36]),T=d(T,k,_,I,h,11,s[37]),I=d(I,T,k,_,y,16,s[38]),_=d(_,I,T,k,A,23,s[39]),k=d(k,_,I,T,w,4,s[40]),T=d(T,k,_,I,o,11,s[41]),I=d(I,T,k,_,f,16,s[42]),_=d(_,I,T,k,m,23,s[43]),k=d(k,_,I,T,E,4,s[44]),T=d(T,k,_,I,F,11,s[45]),I=d(I,T,k,_,B,16,s[46]),k=p(k,_=d(_,I,T,k,D,23,s[47]),I,T,o,6,s[48]),T=p(T,k,_,I,y,10,s[49]),I=p(I,T,k,_,b,15,s[50]),_=p(_,I,T,k,g,21,s[51]),k=p(k,_,I,T,F,6,s[52]),T=p(T,k,_,I,f,10,s[53]),I=p(I,T,k,_,A,15,s[54]),_=p(_,I,T,k,a,21,s[55]),k=p(k,_,I,T,C,6,s[56]),T=p(T,k,_,I,B,10,s[57]),I=p(I,T,k,_,m,15,s[58]),_=p(_,I,T,k,w,21,s[59]),k=p(k,_,I,T,h,6,s[60]),T=p(T,k,_,I,v,10,s[61]),I=p(I,T,k,_,D,15,s[62]),_=p(_,I,T,k,E,21,s[63]),i[0]=i[0]+k|0,i[1]=i[1]+_|0,i[2]=i[2]+I|0,i[3]=i[3]+T|0},_doFinalize:function(){var t=this._data,u=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;u[r>>>5]|=128<<24-r%32;var i=e.floor(n/4294967296),o=n;u[15+(r+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),u[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(u.length+1),this._process();for(var s=this._hash,a=s.words,c=0;c<4;c++){var l=a[c];a[c]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,t,u,n,r,i,o){var s=e+(t&u|~t&n)+r+o;return(s<>>32-i)+t}function l(e,t,u,n,r,i,o){var s=e+(t&n|u&~n)+r+o;return(s<>>32-i)+t}function d(e,t,u,n,r,i,o){var s=e+(t^u^n)+r+o;return(s<>>32-i)+t}function p(e,t,u,n,r,i,o){var s=e+(u^(t|~n))+r+o;return(s<>>32-i)+t}t.MD5=i._createHelper(a),t.HmacMD5=i._createHmacHelper(a)}(Math),u.MD5)})),d((function(e,t){var u,n,r,i,o,s,a,c;e.exports=(n=(u=c=et).lib,r=n.WordArray,i=n.Hasher,o=u.algo,s=[],a=o.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var u=this._hash.words,n=u[0],r=u[1],i=u[2],o=u[3],a=u[4],c=0;c<80;c++){if(c<16)s[c]=0|e[t+c];else{var l=s[c-3]^s[c-8]^s[c-14]^s[c-16];s[c]=l<<1|l>>>31}var d=(n<<5|n>>>27)+a+s[c];d+=c<20?1518500249+(r&i|~r&o):c<40?1859775393+(r^i^o):c<60?(r&i|r&o|i&o)-1894007588:(r^i^o)-899497514,a=o,o=i,i=r<<30|r>>>2,r=n,n=d}u[0]=u[0]+n|0,u[1]=u[1]+r|0,u[2]=u[2]+i|0,u[3]=u[3]+o|0,u[4]=u[4]+a|0},_doFinalize:function(){var e=this._data,t=e.words,u=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=Math.floor(u/4294967296),t[15+(n+64>>>9<<4)]=u,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}}),u.SHA1=i._createHelper(a),u.HmacSHA1=i._createHmacHelper(a),c.SHA1)})),d((function(e,t){var u,n,r;e.exports=(n=(u=et).lib.Base,r=u.enc.Utf8,void(u.algo.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=r.parse(t));var u=e.blockSize,n=4*u;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var i=this._oKey=t.clone(),o=this._iKey=t.clone(),s=i.words,a=o.words,c=0;c>>2];e.sigBytes-=t}},r.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:h}),reset:function(){d.reset.call(this);var e=this.cfg,t=e.iv,u=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=u.createEncryptor;else n=u.createDecryptor,this._minBufferSize=1;this._mode&&this._mode.__creator==n?this._mode.init(this,t&&t.words):(this._mode=n.call(u,this,t&&t.words),this._mode.__creator=n)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4}),g=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),m=(n.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext,u=e.salt;if(u)var n=o.create([1398893684,1701076831]).concat(u).concat(t);else n=t;return n.toString(c)},parse:function(e){var t=c.parse(e),u=t.words;if(1398893684==u[0]&&1701076831==u[1]){var n=o.create(u.slice(2,4));u.splice(0,4),t.sigBytes-=16}return g.create({ciphertext:t,salt:n})}},y=r.SerializableCipher=i.extend({cfg:i.extend({format:m}),encrypt:function(e,t,u,n){n=this.cfg.extend(n);var r=e.createEncryptor(u,n),i=r.finalize(t),o=r.cfg;return g.create({ciphertext:i,key:u,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,u,n){return n=this.cfg.extend(n),t=this._parse(t,n.format),e.createDecryptor(u,n).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),C=(n.kdf={}).OpenSSL={execute:function(e,t,u,n){n||(n=o.random(8));var r=l.create({keySize:t+u}).compute(e,n),i=o.create(r.words.slice(t),4*u);return r.sigBytes=4*t,g.create({key:r,iv:i,salt:n})}},E=r.PasswordBasedCipher=y.extend({cfg:y.cfg.extend({kdf:C}),encrypt:function(e,t,u,n){var r=(n=this.cfg.extend(n)).kdf.execute(u,e.keySize,e.ivSize);n.iv=r.iv;var i=y.encrypt.call(this,e,t,r.key,n);return i.mixIn(r),i},decrypt:function(e,t,u,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var r=n.kdf.execute(u,e.keySize,e.ivSize,t.salt);return n.iv=r.iv,y.decrypt.call(this,e,t,r.key,n)}})))})),d((function(e,t){var u;e.exports=(u=et,function(){var e=u,t=e.lib.BlockCipher,n=e.algo,r=[],i=[],o=[],s=[],a=[],c=[],l=[],d=[],p=[],D=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var u=0,n=0;for(t=0;t<256;t++){var f=n^n<<1^n<<2^n<<3^n<<4;f=f>>>8^255&f^99,r[u]=f,i[f]=u;var h=e[u],g=e[h],m=e[g],y=257*e[f]^16843008*f;o[u]=y<<24|y>>>8,s[u]=y<<16|y>>>16,a[u]=y<<8|y>>>24,c[u]=y,y=16843009*m^65537*g^257*h^16843008*u,l[f]=y<<24|y>>>8,d[f]=y<<16|y>>>16,p[f]=y<<8|y>>>24,D[f]=y,u?(u=h^e[e[e[m^h]]],n^=e[e[n]]):u=n=1}}();var f=[0,1,2,4,8,16,32,64,128,27,54],h=n.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,u=e.sigBytes/4,n=4*((this._nRounds=u+6)+1),i=this._keySchedule=[],o=0;o6&&o%u==4&&(s=r[s>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s]):(s=r[(s=s<<8|s>>>24)>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s],s^=f[o/u|0]<<24),i[o]=i[o-u]^s}for(var a=this._invKeySchedule=[],c=0;c>>24]]^d[r[s>>>16&255]]^p[r[s>>>8&255]]^D[r[255&s]]}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,s,a,c,r)},decryptBlock:function(e,t){var u=e[t+1];e[t+1]=e[t+3],e[t+3]=u,this._doCryptBlock(e,t,this._invKeySchedule,l,d,p,D,i),u=e[t+1],e[t+1]=e[t+3],e[t+3]=u},_doCryptBlock:function(e,t,u,n,r,i,o,s){for(var a=this._nRounds,c=e[t]^u[0],l=e[t+1]^u[1],d=e[t+2]^u[2],p=e[t+3]^u[3],D=4,f=1;f>>24]^r[l>>>16&255]^i[d>>>8&255]^o[255&p]^u[D++],g=n[l>>>24]^r[d>>>16&255]^i[p>>>8&255]^o[255&c]^u[D++],m=n[d>>>24]^r[p>>>16&255]^i[c>>>8&255]^o[255&l]^u[D++],y=n[p>>>24]^r[c>>>16&255]^i[l>>>8&255]^o[255&d]^u[D++];c=h,l=g,d=m,p=y}h=(s[c>>>24]<<24|s[l>>>16&255]<<16|s[d>>>8&255]<<8|s[255&p])^u[D++],g=(s[l>>>24]<<24|s[d>>>16&255]<<16|s[p>>>8&255]<<8|s[255&c])^u[D++],m=(s[d>>>24]<<24|s[p>>>16&255]<<16|s[c>>>8&255]<<8|s[255&l])^u[D++],y=(s[p>>>24]<<24|s[c>>>16&255]<<16|s[l>>>8&255]<<8|s[255&d])^u[D++],e[t]=h,e[t+1]=g,e[t+2]=m,e[t+3]=y},keySize:8});e.AES=t._createHelper(h)}(),u.AES)}))),ut=d((function(e,t){e.exports=et.enc.Utf8})),nt=Object.prototype.toString;var rt=function e(u){var n=function(e){switch(nt.call(e)){case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array";case"[object Error]":return"error"}return null===e?"null":void 0===e?"undefined":e!=e?"nan":e&&1===e.nodeType?"element":null!=(u=e)&&(u._isBuffer||u.constructor&&"function"==typeof u.constructor.isBuffer&&u.constructor.isBuffer(u))?"buffer":t(e=e.valueOf?e.valueOf():Object.prototype.valueOf.apply(e));var u}(u);if("object"===n){var r={};for(var i in u)u.hasOwnProperty(i)&&(r[i]=e(u[i]));return r}if("array"===n){r=new Array(u.length);for(var o=0,s=u.length;o1e4)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var u=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*u;case"days":case"day":case"d":return u*at;case"hours":case"hour":case"hrs":case"hr":case"h":return u*st;case"minutes":case"minute":case"mins":case"min":case"m":return u*ot;case"seconds":case"second":case"secs":case"sec":case"s":return u*it;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u}}(e):t.long?function(e){return lt(e,at,"day")||lt(e,st,"hour")||lt(e,ot,"minute")||lt(e,it,"second")||e+" ms"}(e):function(e){return e>=at?Math.round(e/at)+"d":e>=st?Math.round(e/st)+"h":e>=ot?Math.round(e/ot)+"m":e>=it?Math.round(e/it)+"s":e+"ms"}(e)};function lt(e,t,u){if(!(e=31},u.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),u.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],u.formatters.j=function(e){return JSON.stringify(e)},u.enable(n())}))),Dt=(pt.log,pt.formatArgs,pt.save,pt.load,pt.useColors,pt.storage,pt.colors,pt("cookie")),ft=function(e,t,u){switch(arguments.length){case 3:case 2:return ht(e,t,u);case 1:return mt(e);default:return gt()}};function ht(e,t,u){u=u||{};var n=yt(e)+"="+yt(t);null==t&&(u.maxage=-1),u.maxage&&(u.expires=new Date(+new Date+u.maxage)),u.path&&(n+="; path="+u.path),u.domain&&(n+="; domain="+u.domain),u.expires&&(n+="; expires="+u.expires.toUTCString()),u.samesite&&(n+="; samesite="+u.samesite),u.secure&&(n+="; secure"),document.cookie=n}function gt(){var e;try{e=document.cookie}catch(e){return"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e.stack||e),{}}return function(e){var t,u={},n=e.split(/ *; */);if(""==n[0])return u;for(var r=0;r1)))/4)-l((e-1901+t)/100)+l((e-1601+t)/400)};t=function(e){for(r=l(e/864e5),u=l(r/365.2425)+1970-1;D(u+1,0)<=r;u++);for(n=l((r-D(u,0))/30.42);D(u,n+1)<=r;n++);r=1+r-D(u,n),o=l((i=(e%864e5+864e5)%864e5)/36e5)%24,s=l(i/6e4)%60,a=l(i/1e3)%60,c=i%1e3}}return(w=function(e){return e>-1/0&&e<1/0?(t(e),e=(u<=0||u>=1e4?(u<0?"-":"+")+F(6,u<0?-u:u):F(4,u))+"-"+F(2,n+1)+"-"+F(2,r)+"T"+F(2,o)+":"+F(2,s)+":"+F(2,a)+"."+F(3,c)+"Z",u=n=r=o=s=a=c=null):e=null,e})(e)};if(C("json-stringify")&&!C("date-serialization")){var b=function(e){return w(this)},B=u.stringify;u.stringify=function(e,t,u){var n=c.prototype.toJSON;c.prototype.toJSON=b;var r=B(e,t,u);return c.prototype.toJSON=n,r}}else{var k=function(e){var t=e.charCodeAt(0),u=v[t];return u||"\\u00"+F(2,t.toString(16))},_=/[\x00-\x1f\x22\x5c]/g,I=function(e){return _.lastIndex=0,'"'+(_.test(e)?e.replace(_,k):e)+'"'};u.stringify=function(e,u,r){var i,o,s,a;if(n[t(u)]&&u)if("[object Function]"==(a=h.call(u)))o=u;else if("[object Array]"==a){s={};for(var l,p=0,D=u.length;p0)for(r>10&&(r=10),i="";i.length-1/0&&l<1/0?""+l:"null";case"string":case"[object String]":return I(""+l)}if("object"==t(l)){for(C=a.length;C--;)if(a[C]===l)throw d();if(a.push(l),f=[],E=s,s+=o,"[object Array]"==D){for(y=0,C=l.length;y=48&&r<=57||r>=97&&r<=102||r>=65&&r<=70||P();e+=O("0x"+i.slice(t,T));break;default:P()}else{if(34==r)break;for(r=i.charCodeAt(T),t=T;r>=32&&92!=r&&34!=r;)r=i.charCodeAt(++T);e+=i.slice(t,T)}if(34==i.charCodeAt(T))return T++,e;P();default:if(t=T,45==r&&(n=!0,r=i.charCodeAt(++T)),r>=48&&r<=57){for(48==r&&((r=i.charCodeAt(T+1))>=48&&r<=57)&&P(),n=!1;T=48&&r<=57);T++);if(46==i.charCodeAt(T)){for(u=++T;u57);u++);u==T&&P(),T=u}if(101==(r=i.charCodeAt(T))||69==r){for(43!=(r=i.charCodeAt(++T))&&45!=r||T++,u=T;u57);u++);u==T&&P(),T=u}return+i.slice(t,T)}n&&P();var s=i.slice(T,T+4);if("true"==s)return T+=4,!0;if("fals"==s&&101==i.charCodeAt(T+4))return T+=5,!1;if("null"==s)return T+=4,null;P()}return"$"},j=function(e,t,u){var n=L(e,t,u);void 0===n?delete e[t]:e[t]=n},L=function(e,u,n){var r,i=e[u];if("object"==t(i)&&i)if("[object Array]"==h.call(i))for(r=i.length;r--;)j(h,A,i);else A(i,(function(e){j(i,e,n)}));return n.call(e,u,i)};u.parse=function(e,t){var u,n;return T=0,S=""+e,u=function e(t){var u,n;if("$"==t&&P(),"string"==typeof t){if("@"==(E?t.charAt(0):t[0]))return t.slice(1);if("["==t){for(u=[];"]"!=(t=R());)n?","==t?"]"==(t=R())&&P():P():n=!0,","==t&&P(),u.push(e(t));return u}if("{"==t){for(u={};"}"!=(t=R());)n?","==t?"}"==(t=R())&&P():P():n=!0,","!=t&&"string"==typeof t&&"@"==(E?t.charAt(0):t[0])&&":"==R()||P(),u[t.slice(1)]=e(R());return u}P()}return t}(R()),"$"!=R()&&P(),T=S=null,t&&"[object Function]"==h.call(t)?L(((n={})[""]=u,n),"",t):u}}}return u.runInContext=s,u}if(!o||o.global!==o&&o.window!==o&&o.self!==o||(i=o),r)s(i,r);else{var a=i.JSON,c=i.JSON3,d=!1,p=s(i,i.JSON3={noConflict:function(){return d||(d=!0,i.JSON=a,i.JSON3=c,a=c=null),p}});i.JSON={parse:p.parse,stringify:p.stringify}}}).call(l)})),Rt=d((function(e,t){(t=e.exports=function(e){function n(){}function i(){var e=i,n=+new Date,o=n-(u||n);e.diff=o,e.prev=u,e.curr=n,u=n,null==e.useColors&&(e.useColors=t.useColors()),null==e.color&&e.useColors&&(e.color=r());var s=Array.prototype.slice.call(arguments);s[0]=t.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var a=0;s[0]=s[0].replace(/%([a-z%])/g,(function(u,n){if("%%"===u)return u;a++;var r=t.formatters[n];if("function"==typeof r){var i=s[a];u=r.call(e,i),s.splice(a,1),a--}return u})),"function"==typeof t.formatArgs&&(s=t.formatArgs.apply(e,s));var c=i.log||t.log||console.log.bind(console);c.apply(e,s)}n.enabled=!1,i.enabled=!0;var o=t.enabled(e)?i:n;return o.namespace=e,o}).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){t.save(e);for(var u=(e||"").split(/[\s,]+/),n=u.length,r=0;r=31},u.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),u.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],u.formatters.j=function(e){return JSON.stringify(e)},u.enable(n())}))),Lt=(jt.log,jt.formatArgs,jt.save,jt.load,jt.useColors,jt.storage,jt.colors,jt("cookie")),Ut=function(e,t,u){switch(arguments.length){case 3:case 2:return Mt(e,t,u);case 1:return qt(e);default:return Nt()}};function Mt(e,t,u){u=u||{};var n=zt(e)+"="+zt(t);null==t&&(u.maxage=-1),u.maxage&&(u.expires=new Date(+new Date+u.maxage)),u.path&&(n+="; path="+u.path),u.domain&&(n+="; domain="+u.domain),u.expires&&(n+="; expires="+u.expires.toUTCString()),u.secure&&(n+="; secure"),document.cookie=n}function Nt(){var e;try{e=document.cookie}catch(e){return"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e.stack||e),{}}return function(e){var t,u={},n=e.split(/ *; */);if(""==n[0])return u;for(var r=0;r=0;--i)r.push(t.slice(i).join("."));return r},n.cookie=Ut,t=e.exports=n})),Vt=new(function(){function e(t){u(this,e),this._options={},this.options(t)}return r(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;var t=".".concat(Kt(window.location.href));"."===t&&(t=null),this._options=Ot(e,{maxage:31536e6,path:"/",domain:t,samesite:"Lax"}),this.set("test_rudder",!0),this.get("test_rudder")||(this._options.domain=null),this.remove("test_rudder")}},{key:"set",value:function(e,t){try{return ft(e,t,rt(this._options)),!0}catch(e){return w(e),!1}}},{key:"get",value:function(e){return ft(e)}},{key:"remove",value:function(e){try{return ft(e,null,rt(this._options)),!0}catch(e){return!1}}}]),e}())({}),Ht=function(){var e,t={},u="undefined"!=typeof window?window:l,n=u.document;if(t.disabled=!1,t.version="1.3.20",t.set=function(e,t){},t.get=function(e,t){},t.has=function(e){return void 0!==t.get(e)},t.remove=function(e){},t.clear=function(){},t.transact=function(e,u,n){null==n&&(n=u,u=null),null==u&&(u={});var r=t.get(e,u);n(r),t.set(e,r)},t.getAll=function(){var e={};return t.forEach((function(t,u){e[t]=u})),e},t.forEach=function(){},t.serialize=function(e){return Pt.stringify(e)},t.deserialize=function(e){if("string"==typeof e)try{return Pt.parse(e)}catch(t){return e||void 0}},function(){try{return"localStorage"in u&&u.localStorage}catch(e){return!1}}())e=u.localStorage,t.set=function(u,n){return void 0===n?t.remove(u):(e.setItem(u,t.serialize(n)),n)},t.get=function(u,n){var r=t.deserialize(e.getItem(u));return void 0===r?n:r},t.remove=function(t){e.removeItem(t)},t.clear=function(){e.clear()},t.forEach=function(u){for(var n=0;ndocument.w=window<\/script>'),i.close(),r=i.w.frames[0].document,e=r.createElement("div")}catch(t){e=n.createElement("div"),r=n.body}var o=function(u){return function(){var n=Array.prototype.slice.call(arguments,0);n.unshift(e),r.appendChild(e),e.addBehavior("#default#userData"),e.load("localStorage");var i=u.apply(t,n);return r.removeChild(e),i}},s=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g"),a=function(e){return e.replace(/^d/,"___$&").replace(s,"___")};t.set=o((function(e,u,n){return u=a(u),void 0===n?t.remove(u):(e.setAttribute(u,t.serialize(n)),e.save("localStorage"),n)})),t.get=o((function(e,u,n){u=a(u);var r=t.deserialize(e.getAttribute(u));return void 0===r?n:r})),t.remove=o((function(e,t){t=a(t),e.removeAttribute(t),e.save("localStorage")})),t.clear=o((function(e){var t=e.XMLDocument.documentElement.attributes;e.load("localStorage");for(var u=t.length-1;u>=0;u--)e.removeAttribute(t[u].name);e.save("localStorage")})),t.forEach=o((function(e,u){for(var n,r=e.XMLDocument.documentElement.attributes,i=0;n=r[i];++i)u(n.name,t.deserialize(e.getAttribute(n.name)))}))}try{var c="__storejs__";t.set(c,c),t.get(c)!=c&&(t.disabled=!0),t.remove(c)}catch(e){t.disabled=!0}return t.enabled=!t.disabled,t}(),Wt=new(function(){function e(t){u(this,e),this._options={},this.enabled=!1,this.options(t)}return r(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;Ot(e,{enabled:!0}),this.enabled=e.enabled&&Ht.enabled,this._options=e}},{key:"set",value:function(e,t){return!!this.enabled&&Ht.set(e,t)}},{key:"get",value:function(e){return this.enabled?Ht.get(e):null}},{key:"remove",value:function(e){return!!this.enabled&&Ht.remove(e)}}]),e}())({}),Jt="rl_user_id",Yt="rl_trait",$t="rl_anonymous_id",Zt="rl_group_id",Qt="rl_group_trait",Xt="RudderEncrypt:",eu="Rudder",tu=new(function(){function e(){if(u(this,e),Vt.set("rudder_cookies",!0),Vt.get("rudder_cookies"))return Vt.remove("rudder_cookies"),void(this.storage=Vt);Wt.enabled&&(this.storage=Wt)}return r(e,[{key:"stringify",value:function(e){return JSON.stringify(e)}},{key:"parse",value:function(e){try{return e?JSON.parse(e):null}catch(t){return w(t),e||null}}},{key:"trim",value:function(e){return e.replace(/^\s+|\s+$/gm,"")}},{key:"encryptValue",value:function(e){return""==this.trim(e)?e:"".concat(Xt).concat(tt.encrypt(e,eu).toString())}},{key:"decryptValue",value:function(e){return!e||"string"==typeof e&&""==this.trim(e)?e:e.substring(0,Xt.length)==Xt?tt.decrypt(e.substring(Xt.length),eu).toString(ut):e}},{key:"setItem",value:function(e,t){this.storage.set(e,this.encryptValue(this.stringify(t)))}},{key:"setUserId",value:function(e){"string"==typeof e?this.storage.set(Jt,this.encryptValue(this.stringify(e))):w("[Storage] setUserId:: userId should be string")}},{key:"setUserTraits",value:function(e){this.storage.set(Yt,this.encryptValue(this.stringify(e)))}},{key:"setGroupId",value:function(e){"string"==typeof e?this.storage.set(Zt,this.encryptValue(this.stringify(e))):w("[Storage] setGroupId:: groupId should be string")}},{key:"setGroupTraits",value:function(e){this.storage.set(Qt,this.encryptValue(this.stringify(e)))}},{key:"setAnonymousId",value:function(e){"string"==typeof e?this.storage.set($t,this.encryptValue(this.stringify(e))):w("[Storage] setAnonymousId:: anonymousId should be string")}},{key:"getItem",value:function(e){return this.parse(this.decryptValue(this.storage.get(e)))}},{key:"getUserId",value:function(){return this.parse(this.decryptValue(this.storage.get(Jt)))}},{key:"getUserTraits",value:function(){return this.parse(this.decryptValue(this.storage.get(Yt)))}},{key:"getGroupId",value:function(){return this.parse(this.decryptValue(this.storage.get(Zt)))}},{key:"getGroupTraits",value:function(){return this.parse(this.decryptValue(this.storage.get(Qt)))}},{key:"getAnonymousId",value:function(){return this.parse(this.decryptValue(this.storage.get($t)))}},{key:"removeItem",value:function(e){return this.storage.remove(e)}},{key:"clear",value:function(){this.storage.remove(Jt),this.storage.remove(Yt),this.storage.remove(Zt),this.storage.remove(Qt)}}]),e}()),uu="lt_synch_timestamp",nu=new(function(){function e(){u(this,e),this.storage=tu}return r(e,[{key:"setLotameSynchTime",value:function(e){this.storage.setItem(uu,e)}},{key:"getLotameSynchTime",value:function(){return this.storage.getItem(uu)}}]),e}()),ru=function(){function e(t,n){var r=this;u(this,e),this.name="LOTAME",this.analytics=n,this.storage=nu,this.bcpUrlSettingsPixel=t.bcpUrlSettingsPixel,this.bcpUrlSettingsIframe=t.bcpUrlSettingsIframe,this.dspUrlSettingsPixel=t.dspUrlSettingsPixel,this.dspUrlSettingsIframe=t.dspUrlSettingsIframe,this.mappings={},t.mappings.forEach((function(e){var t=e.key,u=e.value;r.mappings[t]=u}))}return r(e,[{key:"init",value:function(){F("===in init Lotame==="),window.LOTAME_SYNCH_CALLBACK=function(){}}},{key:"addPixel",value:function(e,t,u){F("Adding pixel for :: ".concat(e));var n=document.createElement("img");n.src=e,n.setAttribute("width",t),n.setAttribute("height",u),F("Image Pixel :: ".concat(n)),document.getElementsByTagName("body")[0].appendChild(n)}},{key:"addIFrame",value:function(e){F("Adding iframe for :: ".concat(e));var t=document.createElement("iframe");t.src=e,t.title="empty",t.setAttribute("id","LOTCCFrame"),t.setAttribute("tabindex","-1"),t.setAttribute("role","presentation"),t.setAttribute("aria-hidden","true"),t.setAttribute("style","border: 0px; width: 0px; height: 0px; display: block;"),F("IFrame :: ".concat(t)),document.getElementsByTagName("body")[0].appendChild(t)}},{key:"syncPixel",value:function(e){var t=this;if(F("===== in syncPixel ======"),F("Firing DSP Pixel URLs"),this.dspUrlSettingsPixel&&this.dspUrlSettingsPixel.length>0){var u=Date.now();this.dspUrlSettingsPixel.forEach((function(n){var r=t.compileUrl(s(s({},t.mappings),{},{userId:e,random:u}),n.dspUrlTemplate);t.addPixel(r,"1","1")}))}if(F("Firing DSP IFrame URLs"),this.dspUrlSettingsIframe&&this.dspUrlSettingsIframe.length>0){var n=Date.now();this.dspUrlSettingsIframe.forEach((function(u){var r=t.compileUrl(s(s({},t.mappings),{},{userId:e,random:n}),u.dspUrlTemplate);t.addIFrame(r)}))}this.storage.setLotameSynchTime(Date.now()),this.analytics.methodToCallbackMapping.syncPixel&&this.analytics.emit("syncPixel",{destination:this.name})}},{key:"compileUrl",value:function(e,t){return Object.keys(e).forEach((function(u){if(e.hasOwnProperty(u)){var n="{{".concat(u,"}}"),r=new RegExp(n,"gi");t=t.replace(r,e[u])}})),t}},{key:"identify",value:function(e){F("in Lotame identify");var t=e.message.userId;this.syncPixel(t)}},{key:"track",value:function(e){F("track not supported for lotame")}},{key:"page",value:function(e){var t=this;if(F("in Lotame page"),F("Firing BCP Pixel URLs"),this.bcpUrlSettingsPixel&&this.bcpUrlSettingsPixel.length>0){var u=Date.now();this.bcpUrlSettingsPixel.forEach((function(e){var n=t.compileUrl(s(s({},t.mappings),{},{random:u}),e.bcpUrlTemplate);t.addPixel(n,"1","1")}))}if(F("Firing BCP IFrame URLs"),this.bcpUrlSettingsIframe&&this.bcpUrlSettingsIframe.length>0){var n=Date.now();this.bcpUrlSettingsIframe.forEach((function(e){var u=t.compileUrl(s(s({},t.mappings),{},{random:n}),e.bcpUrlTemplate);t.addIFrame(u)}))}e.message.userId&&this.isPixelToBeSynched()&&this.syncPixel(e.message.userId)}},{key:"isPixelToBeSynched",value:function(){var e=this.storage.getLotameSynchTime(),t=Date.now();return!e||Math.floor((t-e)/864e5)>=7}},{key:"isLoaded",value:function(){return F("in Lotame isLoaded"),!0}},{key:"isReady",value:function(){return!0}}]),e}(),iu=function(){function e(t,n){var r=this;u(this,e),this.referrerOverride=function(e){if(e)return window.optimizelyEffectiveReferrer=e,e},this.sendDataToRudder=function(e){F(e);var t=e.experiment,u=e.variation,n={integrations:{All:!0}},i=e.audiences,o={};i.forEach((function(e){o[e.id]=e.name}));var s=Object.keys(o).sort().join(),a=Object.values(o).sort().join(", ");if(r.sendExperimentTrack){var c={campaignName:e.campaignName,campaignId:e.id,experimentId:t.id,experimentName:t.name,variationName:u.name,variationId:u.id,audienceId:s,audienceName:a,isInCampaignHoldback:e.isInCampaignHoldback};if(t.referrer&&(c.referrer=t.referrer,n.page={referrer:t.referrer}),r.sendExperimentTrackAsNonInteractive&&(c.nonInteraction=1),e&&r.customCampaignProperties.length>0)for(var l=0;l1){var u=t.pop();switch(u){case"str":case"int":case"date":case"real":case"bool":case"strs":case"ints":case"dates":case"reals":case"bools":return"".concat(au(t.join("_")),"_").concat(u)}}return au(e)}}]),e}(),TVSQUARED:function(){function e(t){u(this,e),this.isLoaded=function(){return F("in TVSqaured isLoaded"),!(!window._tvq||window._tvq.push===Array.prototype.push)},this.isReady=function(){return F("in TVSqaured isReady"),!(!window._tvq||window._tvq.push===Array.prototype.push)},this.page=function(){window._tvq.push(["trackPageView"])},this.formatRevenue=function(e){var t=e;return t=parseFloat(t.toString().replace(/^[^\d.]*/,""))},this.brandId=t.brandId,this.clientId=t.clientId,this.eventWhiteList=t.eventWhiteList||[],this.customMetrics=t.customMetrics||[],this.name="TVSquared"}return r(e,[{key:"init",value:function(){F("===in init TVSquared==="),window._tvq=window._tvq||[];var e="https:"===document.location.protocol?"https://":"http://";e+="collector-".concat(this.clientId,".tvsquared.com/"),window._tvq.push(["setSiteId",this.brandId]),window._tvq.push(["setTrackerUrl","".concat(e,"tv2track.php")]),V("TVSquared-integration","".concat(e,"tv2track.js"))}},{key:"track",value:function(e){var t,u,n=e.message,r=n.event,i=n.userId,o=n.anonymousId,s=e.message.properties,a=s.revenue,c=s.productType,l=s.category,d=s.order_id,p=s.promotion_id,D=this.eventWhiteList.slice();for(D=D.filter((function(e){return""!==e.event})),t=0;t>>((3&t)<<3)&255;return n}}})),Eu=[],Au=0;Au<256;++Au)Eu[Au]=(Au+256).toString(16).substr(1);var vu,Fu,wu=function(e,t){var u=t||0,n=Eu;return[n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]]].join("")},bu=0,Bu=0;var ku=function(e,t,u){var n=t&&u||0,r=t||[],i=(e=e||{}).node||vu,o=void 0!==e.clockseq?e.clockseq:Fu;if(null==i||null==o){var s=Cu();null==i&&(i=vu=[1|s[0],s[1],s[2],s[3],s[4],s[5]]),null==o&&(o=Fu=16383&(s[6]<<8|s[7]))}var a=void 0!==e.msecs?e.msecs:(new Date).getTime(),c=void 0!==e.nsecs?e.nsecs:Bu+1,l=a-bu+(c-Bu)/1e4;if(l<0&&void 0===e.clockseq&&(o=o+1&16383),(l<0||a>bu)&&void 0===e.nsecs&&(c=0),c>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");bu=a,Bu=c,Fu=o;var d=(1e4*(268435455&(a+=122192928e5))+c)%4294967296;r[n++]=d>>>24&255,r[n++]=d>>>16&255,r[n++]=d>>>8&255,r[n++]=255&d;var p=a/4294967296*1e4&268435455;r[n++]=p>>>8&255,r[n++]=255&p,r[n++]=p>>>24&15|16,r[n++]=p>>>16&255,r[n++]=o>>>8|128,r[n++]=255&o;for(var D=0;D<6;++D)r[n+D]=i[D];return t||wu(r)};var _u=function(e,t,u){var n=t&&u||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var r=(e=e||{}).random||(e.rng||Cu)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t)for(var i=0;i<16;++i)t[n+i]=r[i];return t||wu(r)},Iu=_u;Iu.v1=ku,Iu.v4=_u;var Tu=Iu,Su=Tu.v4,Ou={_data:{},length:0,setItem:function(e,t){return this._data[e]=t,this.length=He(this._data).length,t},getItem:function(e){return e in this._data?this._data[e]:null},removeItem:function(e){return e in this._data&&delete this._data[e],this.length=He(this._data).length,null},clear:function(){this._data={},this.length=0},key:function(e){return He(this._data)[e]}};var xu={defaultEngine:function(){try{if(!window.localStorage)return!1;var e=Su();window.localStorage.setItem(e,"test_value");var t=window.localStorage.getItem(e);return window.localStorage.removeItem(e),"test_value"===t}catch(e){return!1}}()?window.localStorage:Ou,inMemoryEngine:Ou},Pu=xu.defaultEngine,Ru=xu.inMemoryEngine;function ju(e,t,u,n){this.id=t,this.name=e,this.keys=u||{},this.engine=n||Pu,this.originalEngine=this.engine}ju.prototype.set=function(e,t){var u=this._createValidKey(e);if(u)try{this.engine.setItem(u,Pt.stringify(t))}catch(u){(function(e){var t=!1;if(e.code)switch(e.code){case 22:t=!0;break;case 1014:"NS_ERROR_DOM_QUOTA_REACHED"===e.name&&(t=!0)}else-2147024882===e.number&&(t=!0);return t})(u)&&(this._swapEngine(),this.set(e,t))}},ju.prototype.get=function(e){try{var t=this.engine.getItem(this._createValidKey(e));return null===t?null:Pt.parse(t)}catch(e){return null}},ju.prototype.getOriginalEngine=function(){return this.originalEngine},ju.prototype.remove=function(e){this.engine.removeItem(this._createValidKey(e))},ju.prototype._createValidKey=function(e){var t,u=this.name,n=this.id;return He(this.keys).length?(Qe((function(r){r===e&&(t=[u,n,e].join("."))}),this.keys),t):[u,n,e].join(".")},ju.prototype._swapEngine=function(){var e=this;Qe((function(t){var u=e.get(t);Ru.setItem([e.name,e.id,t].join("."),u),e.remove(t)}),this.keys),this.engine=Ru};var Lu=ju;var Uu={setTimeout:function(e,t){return window.setTimeout(e,t)},clearTimeout:function(e){return window.clearTimeout(e)},Date:window.Date},Mu=Uu;function Nu(){this.tasks={},this.nextId=1}Nu.prototype.now=function(){return+new Mu.Date},Nu.prototype.run=function(e,t){var u=this.nextId++;return this.tasks[u]=Mu.setTimeout(this._handle(u,e),t),u},Nu.prototype.cancel=function(e){this.tasks[e]&&(Mu.clearTimeout(this.tasks[e]),delete this.tasks[e])},Nu.prototype.cancelAll=function(){Qe(Mu.clearTimeout,this.tasks),this.tasks={}},Nu.prototype._handle=function(e,t){var u=this;return function(){return delete u.tasks[e],t()}},Nu.setClock=function(e){Mu=e},Nu.resetClock=function(){Mu=Uu};var qu=Nu,zu=Gu;function Gu(e){return Gu.enabled(e)?function(t){t=Ku(t);var u=new Date,n=u-(Gu[e]||u);Gu[e]=u,t=e+" "+t+" +"+Gu.humanize(n),window.console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}:function(){}}function Ku(e){return e instanceof Error?e.stack||e.message:e}Gu.names=[],Gu.skips=[],Gu.enable=function(e){try{localStorage.debug=e}catch(e){}for(var t=(e||"").split(/[\s,]+/),u=t.length,n=0;n=36e5?(e/36e5).toFixed(1)+"h":e>=6e4?(e/6e4).toFixed(1)+"m":e>=1e3?(e/1e3|0)+"s":e+"ms"},Gu.enabled=function(e){for(var t=0,u=Gu.skips.length;tthis.maxAttempts)},Ju.prototype.getDelay=function(e){var t=this.backoff.MIN_RETRY_DELAY*Math.pow(this.backoff.FACTOR,e);if(this.backoff.JITTER){var u=Math.random(),n=Math.floor(u*this.backoff.JITTER*t);Math.floor(10*u)<5?t-=n:t+=n}return Number(Math.min(t,this.backoff.MAX_RETRY_DELAY).toPrecision(1))},Ju.prototype.addItem=function(e){this._enqueue({item:e,attemptNumber:0,time:this._schedule.now()})},Ju.prototype.requeue=function(e,t,u){this.shouldRetry(e,t,u)?this._enqueue({item:e,attemptNumber:t,time:this._schedule.now()+this.getDelay(t)}):this.emit("discard",e,t)},Ju.prototype._enqueue=function(e){var t=this._store.get(this.keys.QUEUE)||[];(t=t.slice(-(this.maxItems-1))).push(e),t=t.sort((function(e,t){return e.time-t.time})),this._store.set(this.keys.QUEUE,t),this._running&&this._processHead()},Ju.prototype._processHead=function(){var e=this,t=this._store;this._schedule.cancel(this._processId);var u=t.get(this.keys.QUEUE)||[],n=t.get(this.keys.IN_PROGRESS)||{},r=this._schedule.now(),i=[];function o(u,n){i.push({item:u.item,done:function(r,i){var o=t.get(e.keys.IN_PROGRESS)||{};delete o[n],t.set(e.keys.IN_PROGRESS,o),e.emit("processed",r,i,u.item),r&&e.requeue(u.item,u.attemptNumber+1,r)}})}for(var s=Object.keys(n).length;u.length&&u[0].time<=r&&s++0&&(this._processId=this._schedule.run(this._processHead,u[0].time-r))},Ju.prototype._ack=function(){this._store.set(this.keys.ACK,this._schedule.now()),this._store.set(this.keys.RECLAIM_START,null),this._store.set(this.keys.RECLAIM_END,null),this._schedule.run(this._ack,this.timeouts.ACK_TIMER)},Ju.prototype._checkReclaim=function(){var e=this;Qe((function(t){t.id!==e.id&&(e._schedule.now()-t.get(e.keys.ACK)=500&&i.status<600?(x(new Error("request failed with status: ".concat(i.status).concat(i.statusText," for url: ").concat(e))),r(new Error("request failed with status: ".concat(i.status).concat(i.statusText," for url: ").concat(e)))):(F("====== request processed successfully: ".concat(i.status)),r(null,i.status)))},i.send(JSON.stringify(u,T))}catch(e){r(e)}}},{key:"enqueue",value:function(e,t){var u=e.getElementContent(),n={"Content-Type":"application/json",Authorization:"Basic ".concat(btoa("".concat(this.writeKey,":"))),AnonymousId:btoa(u.anonymousId)};u.originalTimestamp=O(),u.sentAt=O(),JSON.stringify(u).length>32e3&&w("[EventRepository] enqueue:: message length greater 32 Kb ",u);var r="/"==this.url.slice(-1)?this.url.slice(0,-1):this.url;this.payloadQueue.addItem({url:"".concat(r,"/v1/").concat(t),headers:n,message:u})}}]),e}());function Xu(e){var t=function(t){var u=(t=t||window.event).target||t.srcElement;rn(u)&&(u=u.parentNode),tn(u,t)?F("to be tracked ",t.type):F("not to be tracked ",t.type),function(e,t){var u,n=e.target||e.srcElement;rn(n)&&(n=n.parentNode);if(tn(n,e)){if("form"==n.tagName.toLowerCase()){u={};for(var r=0;r=0)return!0;return!1}(l))return!1;for(;l.parentNode&&!un(l,"body");)on(l)&&c.push(l),l=l.parentNode;var d,p=[];if(c.forEach((function(e){"a"===e.tagName.toLowerCase()&&(d=an(d=e.getAttribute("href"))&&d),p.push(function(e,t){for(var u={classes:sn(e).split(" "),tag_name:e.tagName.toLowerCase()},n=e.attributes.length,r=0;r=0)return!1;t=t.parentNode}if(sn(e).split(" ").indexOf("rudder-include")>=0)return!0;if(un(e,"input")||un(e,"select")||un(e,"textarea")||"true"===e.getAttribute("contenteditable"))return!1;if("inherit"===e.getAttribute("contenteditable"))for(t=e.parentNode;t.parentNode&&!un(t,"body");t=t.parentNode)if("true"===t.getAttribute("contenteditable"))return!1;var u=e.type||"";if("string"==typeof u)switch(u.toLowerCase()){case"hidden":case"password":return!1}var n=e.name||e.id||"";if("string"==typeof n){if(/^adhar|cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pan|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(n.replace(/[^a-zA-Z0-9]/g,"")))return!1}return!0}function sn(e){switch(t(e.className)){case"string":return e.className;case"object":return e.className.baseVal||e.getAttribute("class")||"";default:return""}}function an(e){if(null==e)return!1;if("string"==typeof e){e=e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");if(/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((e||"").replace(/[- ]/g,"")))return!1;if(/(^\d{3}-?\d{2}-?\d{4}$)/.test(e))return!1;if(/(^\d{4}-?\d{4}-?\d{4}$)/.test(e))return!1;if(/(^\w{5}-?\d{4}-?\w{1}$)/.test(e))return!1}return!0}function cn(e,t){for(var u=e.attributes.length,n=0;n-1)return!0}return!1}function ln(e){if(e.previousElementSibling)return e.previousElementSibling;do{e=e.previousSibling}while(e&&!nn(e));return e}var dn="ajs_trait_",pn="ajs_prop_";function Dn(e,t){this.eventRepository||(this.eventRepository=Qu),this.eventRepository.enqueue(e,t)}var fn=new(function(){function e(){u(this,e),this.autoTrackHandlersRegistered=!1,this.autoTrackFeatureEnabled=!1,this.initialized=!1,this.trackValues=[],this.eventsBuffer=[],this.clientIntegrations=[],this.loadOnlyIntegrations={},this.clientIntegrationObjects=void 0,this.successfullyLoadedIntegration=[],this.failedToBeLoadedIntegration=[],this.toBeProcessedArray=[],this.toBeProcessedByIntegrationArray=[],this.storage=tu,this.eventRepository=Qu,this.sendAdblockPage=!1,this.sendAdblockPageOptions={},this.clientSuppliedCallbacks={},this.readyCallback=function(){},this.executeReadyCallback=void 0,this.methodToCallbackMapping={syncPixel:"syncPixelCallback"},this.loaded=!1}return r(e,[{key:"initializeUser",value:function(){this.userId=null!=this.storage.getUserId()?this.storage.getUserId():"",this.userTraits=null!=this.storage.getUserTraits()?this.storage.getUserTraits():{},this.groupId=null!=this.storage.getGroupId()?this.storage.getGroupId():"",this.groupTraits=null!=this.storage.getGroupTraits()?this.storage.getGroupTraits():{},this.anonymousId=this.getAnonymousId(),this.storage.setUserId(this.userId),this.storage.setAnonymousId(this.anonymousId),this.storage.setGroupId(this.groupId),this.storage.setUserTraits(this.userTraits),this.storage.setGroupTraits(this.groupTraits)}},{key:"processResponse",value:function(e,t){try{F("===in process response=== ".concat(e)),(t=JSON.parse(t)).source.useAutoTracking&&!this.autoTrackHandlersRegistered&&(this.autoTrackFeatureEnabled=!0,Xu(this),this.autoTrackHandlersRegistered=!0),t.source.destinations.forEach((function(e,t){F("Destination ".concat(t," Enabled? ").concat(e.enabled," Type: ").concat(e.destinationDefinition.name," Use Native SDK? ").concat(e.config.useNativeSDK)),e.enabled&&this.clientIntegrations.push({name:e.destinationDefinition.name,config:e.config})}),this),F("this.clientIntegrations: ",this.clientIntegrations),this.clientIntegrations=U(this.loadOnlyIntegrations,this.clientIntegrations),this.clientIntegrations=this.clientIntegrations.filter((function(e){return null!=lu[e.name]})),this.init(this.clientIntegrations)}catch(e){x(e),F("===handling config BE response processing error==="),F("autoTrackHandlersRegistered",this.autoTrackHandlersRegistered),this.autoTrackFeatureEnabled&&!this.autoTrackHandlersRegistered&&(Xu(this),this.autoTrackHandlersRegistered=!0)}}},{key:"init",value:function(e){var t=this,u=this;if(F("supported intgs ",lu),!e||0==e.length)return this.readyCallback&&this.readyCallback(),void(this.toBeProcessedByIntegrationArray=[]);e.forEach((function(e){try{F("[Analytics] init :: trying to initialize integration name:: ",e.name);var n=new(0,lu[e.name])(e.config,u);n.init(),F("initializing destination: ",e),t.isInitialized(n).then(t.replayEvents)}catch(t){w("[Analytics] initialize integration (integration.init()) failed :: ",e.name)}}))}},{key:"replayEvents",value:function(e){e.successfullyLoadedIntegration.length+e.failedToBeLoadedIntegration.length===e.clientIntegrations.length&&(F("===replay events called====",e.successfullyLoadedIntegration.length,e.failedToBeLoadedIntegration.length),e.clientIntegrationObjects=[],e.clientIntegrationObjects=e.successfullyLoadedIntegration,F("==registering after callback===",e.clientIntegrationObjects.length),e.executeReadyCallback=D(e.clientIntegrationObjects.length,e.readyCallback),F("==registering ready callback==="),e.on("ready",e.executeReadyCallback),e.clientIntegrationObjects.forEach((function(t){F("===looping over each successful integration===="),t.isReady&&!t.isReady()||(F("===letting know I am ready=====",t.name),e.emit("ready"))})),e.toBeProcessedByIntegrationArray.length>0&&(e.toBeProcessedByIntegrationArray.forEach((function(t){var u=t[0];t.shift(),Object.keys(t[0].message.integrations).length>0&&L(t[0].message.integrations);for(var n=U(t[0].message.integrations,e.clientIntegrationObjects),r=0;r1&&void 0!==arguments[1]?arguments[1]:0;return new Promise((function(n){return e.isLoaded()?(F("===integration loaded successfully====",e.name),t.successfullyLoadedIntegration.push(e),n(t)):u>=1e4?(F("====max wait over===="),t.failedToBeLoadedIntegration.push(e),n(t)):void t.pause(1e3).then((function(){return F("====after pause, again checking===="),t.isInitialized(e,u+1e3).then(n)}))}))}},{key:"page",value:function(e,u,n,r,i){this.loaded&&("function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=n=null),"function"==typeof u&&(i=u,r=n=u=null),"object"===t(e)&&null!=e&&null!=e&&(r=u,n=e,u=e=null),"object"===t(u)&&null!=u&&null!=u&&(r=n,n=u,u=null),"string"==typeof e&&"string"!=typeof u&&(u=e,e=null),this.sendAdblockPage&&"RudderJS-Initiated"!=e&&this.sendSampleRequest(),this.processPage(e,u,n,r,i))}},{key:"track",value:function(e,t,u,n){this.loaded&&("function"==typeof u&&(n=u,u=null),"function"==typeof t&&(n=t,u=null,t=null),this.processTrack(e,t,u,n))}},{key:"identify",value:function(e,u,n,r){this.loaded&&("function"==typeof n&&(r=n,n=null),"function"==typeof u&&(r=u,n=null,u=null),"object"===t(e)&&(n=u,u=e,e=this.userId),this.processIdentify(e,u,n,r))}},{key:"alias",value:function(e,u,n,r){if(this.loaded){"function"==typeof n&&(r=n,n=null),"function"==typeof u&&(r=u,n=null,u=null),"object"===t(u)&&(n=u,u=null);var i=(new yu).setType("alias").build();i.message.previousId=u||(this.userId?this.userId:this.getAnonymousId()),i.message.userId=e,this.processAndSendDataToDestinations("alias",i,n,r)}}},{key:"group",value:function(e,u,n,r){if(this.loaded&&arguments.length){"function"==typeof n&&(r=n,n=null),"function"==typeof u&&(r=u,n=null,u=null),"object"===t(e)&&(n=u,u=e,e=this.groupId),this.groupId=e,this.storage.setGroupId(this.groupId);var i=(new yu).setType("group").build();if(u)for(var o in u)this.groupTraits[o]=u[o];else this.groupTraits={};this.storage.setGroupTraits(this.groupTraits),this.processAndSendDataToDestinations("group",i,n,r)}}},{key:"processPage",value:function(e,t,u,n,r){var i=(new yu).setType("page").build();u||(u={}),t&&(i.message.name=t,u.name=t),e&&(i.message.category=e,u.category=e),i.message.properties=this.getPageProperties(u),this.trackPage(i,n,r)}},{key:"processTrack",value:function(e,t,u,n){var r=(new yu).setType("track").build();e&&r.setEventName(e),t?r.setProperty(t):r.setProperty({}),this.trackEvent(r,u,n)}},{key:"processIdentify",value:function(e,t,u,n){e&&this.userId&&e!==this.userId&&this.reset(),this.userId=e,this.storage.setUserId(this.userId);var r=(new yu).setType("identify").build();if(t){for(var i in t)this.userTraits[i]=t[i];this.storage.setUserTraits(this.userTraits)}this.identifyUser(r,u,n)}},{key:"identifyUser",value:function(e,t,u){e.message.userId&&(this.userId=e.message.userId,this.storage.setUserId(this.userId)),e&&e.message&&e.message.context&&e.message.context.traits&&(this.userTraits=s({},e.message.context.traits),this.storage.setUserTraits(this.userTraits)),this.processAndSendDataToDestinations("identify",e,t,u)}},{key:"trackPage",value:function(e,t,u){this.processAndSendDataToDestinations("page",e,t,u)}},{key:"trackEvent",value:function(e,t,u){this.processAndSendDataToDestinations("track",e,t,u)}},{key:"processAndSendDataToDestinations",value:function(e,t,u,n){try{this.anonymousId||this.setAnonymousId(),t.message.context.traits=s({},this.userTraits),F("anonymousId: ",this.anonymousId),t.message.anonymousId=this.anonymousId,t.message.userId=t.message.userId?t.message.userId:this.userId,"group"==e&&(this.groupId&&(t.message.groupId=this.groupId),this.groupTraits&&(t.message.traits=s({},this.groupTraits))),this.processOptionsParam(t,u),F(JSON.stringify(t)),Object.keys(t.message.integrations).length>0&&L(t.message.integrations);var r=U(t.message.integrations,this.clientIntegrationObjects);try{r.forEach((function(u){u.isFailed&&u.isFailed()||u[e]&&u[e](t)}))}catch(e){x({message:"[sendToNative]:".concat(e)})}this.clientIntegrationObjects||(F("pushing in replay queue"),this.toBeProcessedByIntegrationArray.push([e,t])),i=t.message.integrations,Object.keys(i).forEach((function(e){i.hasOwnProperty(e)&&(B[e]&&(i[B[e]]=i[e]),"All"!=e&&null!=B[e]&&B[e]!=e&&delete i[e])})),Dn.call(this,t,e),F("".concat(e," is called ")),n&&n()}catch(e){x(e)}var i}},{key:"processOptionsParam",value:function(e,t){var u=e.message,n=u.type,r=u.properties,i=["integrations","anonymousId","originalTimestamp"];for(var o in t)if(i.includes(o))e.message[o]=t[o];else if("context"!==o)e.message.context[o]=t[o];else for(var s in t[o])e.message.context[s]=t[o][s];e.message.context.page="page"==n?this.getContextPageProperties(t,r):this.getContextPageProperties(t)}},{key:"getPageProperties",value:function(e,t){var u=P(),n=t&&t.page?t.page:{};for(var r in u)void 0===e[r]&&(e[r]=n[r]||u[r]);return e}},{key:"getContextPageProperties",value:function(e,t){var u=P(),n=e&&e.page?e.page:{};for(var r in u)void 0===n[r]&&(n[r]=t&&t[r]?t[r]:u[r]);return n}},{key:"reset",value:function(){this.loaded&&(this.userId="",this.userTraits={},this.groupId="",this.groupTraits={},this.storage.clear())}},{key:"getAnonymousId",value:function(){return this.anonymousId=this.storage.getAnonymousId(),this.anonymousId||this.setAnonymousId(),this.anonymousId}},{key:"setAnonymousId",value:function(e){this.anonymousId=e||S(),this.storage.setAnonymousId(this.anonymousId)}},{key:"isValidWriteKey",value:function(e){return!(!e||"string"!=typeof e||0==e.trim().length)}},{key:"isValidServerUrl",value:function(e){return!(!e||"string"!=typeof e||0==e.trim().length)}},{key:"load",value:function(e,u,n){var r=this;if(F("inside load "),!this.loaded){var i=I;if(!this.isValidWriteKey(e)||!this.isValidServerUrl(u))throw x({message:"[Analytics] load:: Unable to load due to wrong writeKey or serverUrl"}),Error("failed to initialize");if(n&&n.logLevel&&v(n.logLevel),n&&n.integrations&&(Object.assign(this.loadOnlyIntegrations,n.integrations),L(this.loadOnlyIntegrations)),n&&n.configUrl&&(i=function(e){var t=e;return-1==e.indexOf("sourceConfig")&&(t="/"==t.slice(-1)?t.slice(0,-1):t,t="".concat(t,"/sourceConfig/")),(t="/"==t.slice(-1)?t:"".concat(t,"/")).indexOf("?")>-1?t.split("?")[1]!==I.split("?")[1]&&(t="".concat(t.split("?")[0],"?").concat(I.split("?")[1])):t="".concat(t,"?").concat(I.split("?")[1]),t}(n.configUrl)),n&&n.sendAdblockPage&&(this.sendAdblockPage=!0),n&&n.sendAdblockPageOptions&&"object"===t(n.sendAdblockPageOptions)&&(this.sendAdblockPageOptions=n.sendAdblockPageOptions),n&&n.clientSuppliedCallbacks){var o={};Object.keys(this.methodToCallbackMapping).forEach((function(e){r.methodToCallbackMapping.hasOwnProperty(e)&&n.clientSuppliedCallbacks[r.methodToCallbackMapping[e]]&&(o[e]=n.clientSuppliedCallbacks[r.methodToCallbackMapping[e]])})),Object.assign(this.clientSuppliedCallbacks,o),this.registerCallbacks(!0)}this.eventRepository.writeKey=e,u&&(this.eventRepository.url=u),this.initializeUser(),this.loaded=!0,n&&n.valTrackingList&&n.valTrackingList.push==Array.prototype.push&&(this.trackValues=n.valTrackingList),n&&n.useAutoTracking&&(this.autoTrackFeatureEnabled=!0,this.autoTrackFeatureEnabled&&!this.autoTrackHandlersRegistered&&(Xu(this),this.autoTrackHandlersRegistered=!0,F("autoTrackHandlersRegistered",this.autoTrackHandlersRegistered)));try{!function(e,t,u,n){var r=n.bind(e),i=new XMLHttpRequest;i.open("GET",t,!0),i.setRequestHeader("Authorization","Basic ".concat(btoa("".concat(u,":")))),i.onload=function(){var e=i.status;200==e?(F("status 200 calling callback"),r(200,i.responseText)):(x(new Error("request failed with status: ".concat(i.status," for url: ").concat(t))),r(e))},i.send()}(this,i,e,this.processResponse)}catch(e){x(e),this.autoTrackFeatureEnabled&&!this.autoTrackHandlersRegistered&&Xu(this)}}}},{key:"ready",value:function(e){this.loaded&&("function"!=typeof e?w("ready callback is not a function"):this.readyCallback=e)}},{key:"initializeCallbacks",value:function(){var e=this;Object.keys(this.methodToCallbackMapping).forEach((function(t){e.methodToCallbackMapping.hasOwnProperty(t)&&e.on(t,(function(){}))}))}},{key:"registerCallbacks",value:function(e){var t=this;e||Object.keys(this.methodToCallbackMapping).forEach((function(e){t.methodToCallbackMapping.hasOwnProperty(e)&&window.rudderanalytics&&"function"==typeof window.rudderanalytics[t.methodToCallbackMapping[e]]&&(t.clientSuppliedCallbacks[e]=window.rudderanalytics[t.methodToCallbackMapping[e]])})),Object.keys(this.clientSuppliedCallbacks).forEach((function(e){t.clientSuppliedCallbacks.hasOwnProperty(e)&&(F("registerCallbacks",e,t.clientSuppliedCallbacks[e]),t.on(e,t.clientSuppliedCallbacks[e]))}))}},{key:"sendSampleRequest",value:function(){V("ad-block","//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js")}},{key:"parseQueryString",value:function(e){var t,u,n={},r=y(e),i=(t=r,u={},Object.keys(t).forEach((function(e){e.substr(0,dn.length)==dn&&(u[e.substr(dn.length)]=t[e])})),u),o=function(e){var t={};return Object.keys(e).forEach((function(u){u.substr(0,pn.length)==pn&&(t[u.substr(pn.length)]=e[u])})),t}(r);return r.ajs_uid&&(n.userId=r.ajs_uid,n.traits=i),r.ajs_aid&&(n.anonymousId=r.ajs_aid),r.ajs_event&&(n.event=r.ajs_event,n.properties=o),n}}]),e}());p(fn),window.addEventListener("error",(function(e){x(e,fn)}),!0),fn.initializeCallbacks(),fn.registerCallbacks(!1);for(var hn=!!window.rudderanalytics&&window.rudderanalytics.push==Array.prototype.push,gn=window.rudderanalytics;gn&&gn[0]&&"load"!==gn[0][0];)gn.shift();if(gn&&gn.length>0&&"load"===gn[0][0]){var mn=gn[0][0];gn[0].shift(),F("=====from init, calling method:: ",mn),fn[mn].apply(fn,a(gn[0])),gn.shift()}if(function(e,t){t.anonymousId?t.userId?e.unshift(["setAnonymousId",t.anonymousId],["identify",t.userId,t.traits]):e.unshift(["setAnonymousId",t.anonymousId]):t.userId&&e.unshift(["identify",t.userId,t.traits]),t.event&&e.push(["track",t.event,t.properties])}(gn,fn.parseQueryString(window.location.search)),hn&&gn&&gn.length>0){for(var yn=0;yn e.length) && (t = e.length); - for (var n = 0, r = new Array(t); n < t; n++) r[n] = e[n]; - return r; - } - let l = 4; - const d = function (e) { - switch (e.toUpperCase()) { - case "INFO": - return void (l = 1); - case "DEBUG": - return void (l = 2); - case "WARN": - return void (l = 3); - } - }; - const p = function () { - let e; - l <= 2 && (e = console).debug.apply(e, arguments); - }; - const f = function () { - let e; - l <= 4 && (e = console).error.apply(e, arguments); - }; - const h = { - All: "All", - "Google Analytics": "GA", - GoogleAnalytics: "GA", - GA: "GA", - "Google Ads": "GOOGLEADS", - GoogleAds: "GOOGLEADS", - GOOGLEADS: "GOOGLEADS", - Braze: "BRAZE", - BRAZE: "BRAZE", - Chartbeat: "CHARTBEAT", - CHARTBEAT: "CHARTBEAT", - Comscore: "COMSCORE", - COMSCORE: "COMSCORE", - Customerio: "CUSTOMERIO", - "Customer.io": "CUSTOMERIO", - "FB Pixel": "FACEBOOK_PIXEL", - "Facebook Pixel": "FACEBOOK_PIXEL", - FB_PIXEL: "FACEBOOK_PIXEL", - "Google Tag Manager": "GOOGLETAGMANAGER", - GTM: "GTM", - Hotjar: "HOTJAR", - hotjar: "HOTJAR", - HOTJAR: "HOTJAR", - Hubspot: "HS", - HUBSPOT: "HS", - Intercom: "INTERCOM", - INTERCOM: "INTERCOM", - Keen: "KEEN", - "Keen.io": "KEEN", - KEEN: "KEEN", - Kissmetrics: "KISSMETRICS", - KISSMETRICS: "KISSMETRICS", - Lotame: "LOTAME", - LOTAME: "LOTAME", - "Visual Website Optimizer": "VWO", - VWO: "VWO", - }; - const g = { - All: "All", - GA: "Google Analytics", - GOOGLEADS: "Google Ads", - BRAZE: "Braze", - CHARTBEAT: "Chartbeat", - COMSCORE: "Comscore", - CUSTOMERIO: "Customer IO", - FACEBOOK_PIXEL: "Facebook Pixel", - GTM: "Google Tag Manager", - HOTJAR: "Hotjar", - HS: "HubSpot", - INTERCOM: "Intercom", - KEEN: "Keen", - KISSMETRICS: "Kiss Metrics", - LOTAME: "Lotame", - VWO: "VWO", - }; - function y(e, t) { - return t == null ? void 0 : t; - } - function m() { - let e = new Date().getTime(); - return ( - typeof performance !== "undefined" && - typeof performance.now === "function" && - (e += performance.now()), - "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (t) { - const n = (e + 16 * Math.random()) % 16 | 0; - return ( - (e = Math.floor(e / 16)), (t === "x" ? n : (3 & n) | 8).toString(16) - ); - }) - ); - } - function v() { - return new Date().toISOString(); - } - function b(e, t) { - let n = e.message ? e.message : void 0; - let r = void 0; - try { - e instanceof Event && - e.target && - e.target.localName == "script" && - ((n = `error in script loading:: src:: ${e.target.src} id:: ${e.target.id}`), - t && - e.target.src.includes("adsbygoogle") && - ((r = !0), - t.page( - "RudderJS-Initiated", - "ad-block page request", - { path: "/ad-blocked", title: n }, - t.sendAdblockPageOptions - ))), - n && !r && f("[Util] handleError:: ", n); - } catch (e) { - f("[Util] handleError:: ", e); - } - } - function w() { - const e = k(); - const t = e ? e.pathname : window.location.pathname; - const n = document.referrer; - const r = window.location.search; - return { - path: t, - referrer: n, - search: r, - title: document.title, - url: (function (e) { - const t = k(); - const n = t ? (t.indexOf("?") > -1 ? t : t + e) : window.location.href; - const r = n.indexOf("#"); - return r > -1 ? n.slice(0, r) : n; - })(r), - }; - } - function k() { - for ( - var e, t = document.getElementsByTagName("link"), n = 0; - (e = t[n]); - n++ - ) - if (e.getAttribute("rel") === "canonical") return e.getAttribute("href"); - } - function I(e, t) { - let n = e.revenue; - return ( - !n && - t && - t.match( - /^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i - ) && - (n = e.total), - (function (e) { - if (e) { - if (typeof e === "number") return e; - if (typeof e === "string") - return ( - (e = e.replace(/\$/g, "")), - (e = parseFloat(e)), - isNaN(e) ? void 0 : e - ); - } - })(n) - ); - } - function _(e) { - Object.keys(e).forEach(function (t) { - e.hasOwnProperty(t) && - (h[t] && (e[h[t]] = e[t]), - t != "All" && h[t] != null && h[t] != t && delete e[t]); - }); - } - function E(e, n) { - const r = []; - if (!n || n.length == 0) return r; - let i = !0; - return typeof n[0] === "string" - ? (e.All != null && (i = e.All), - n.forEach(function (t) { - if (i) { - let n = !0; - e[t] != null && e[t] == 0 && (n = !1), n && r.push(t); - } else e[t] != null && e[t] == 1 && r.push(t); - }), - r) - : t(n[0]) == "object" - ? (e.All != null && (i = e.All), - n.forEach(function (t) { - if (i) { - let n = !0; - e[t.name] != null && e[t.name] == 0 && (n = !1), n && r.push(t); - } else e[t.name] != null && e[t.name] == 1 && r.push(t); - }), - r) - : void 0; - } - const A = { TRACK: "track", PAGE: "page", IDENTIFY: "identify" }; - const C = { - PRODUCTS_SEARCHED: "Products Searched", - PRODUCT_LIST_VIEWED: "Product List Viewed", - PRODUCT_LIST_FILTERED: "Product List Filtered", - PROMOTION_VIEWED: "Promotion Viewed", - PROMOTION_CLICKED: "Promotion Clicked", - PRODUCT_CLICKED: "Product Clicked", - PRODUCT_VIEWED: "Product Viewed", - PRODUCT_ADDED: "Product Added", - PRODUCT_REMOVED: "Product Removed", - CART_VIEWED: "Cart Viewed", - CHECKOUT_STARTED: "Checkout Started", - CHECKOUT_STEP_VIEWED: "Checkout Step Viewed", - CHECKOUT_STEP_COMPLETED: "Checkout Step Completed", - PAYMENT_INFO_ENTERED: "Payment Info Entered", - ORDER_UPDATED: "Order Updated", - ORDER_COMPLETED: "Order Completed", - ORDER_REFUNDED: "Order Refunded", - ORDER_CANCELLED: "Order Cancelled", - COUPON_ENTERED: "Coupon Entered", - COUPON_APPLIED: "Coupon Applied", - COUPON_DENIED: "Coupon Denied", - COUPON_REMOVED: "Coupon Removed", - PRODUCT_ADDED_TO_WISHLIST: "Product Added to Wishlist", - PRODUCT_REMOVED_FROM_WISHLIST: "Product Removed from Wishlist", - WISH_LIST_PRODUCT_ADDED_TO_CART: "Wishlist Product Added to Cart", - PRODUCT_SHARED: "Product Shared", - CART_SHARED: "Cart Shared", - PRODUCT_REVIEWED: "Product Reviewed", - }; - function T(e, t) { - p(`in script loader=== ${e}`); - const n = document.createElement("script"); - (n.src = t), (n.async = !0), (n.type = "text/javascript"), (n.id = e); - const r = document.getElementsByTagName("script")[0]; - p("==script==", r), r.parentNode.insertBefore(n, r); - } - const O = (function () { - function e(t) { - n(this, e), (this.hubId = t.hubID), (this.name = "HS"); - } - return ( - i(e, [ - { - key: "init", - value() { - T( - "hubspot-integration", - `http://js.hs-scripts.com/${this.hubId}.js` - ), - p("===in init HS==="); - }, - }, - { - key: "identify", - value(e) { - p("in HubspotAnalyticsManager identify"); - const n = e.message.context.traits; - const r = {}; - for (const i in n) - if (Object.getOwnPropertyDescriptor(n, i) && n[i]) { - const o = i; - toString.call(n[i]) == "[object Date]" - ? (r[o] = n[i].getTime()) - : (r[o] = n[i]); - } - const s = e.message.context.user_properties; - for (const a in s) { - if (Object.getOwnPropertyDescriptor(s, a) && s[a]) r[a] = s[a]; - } - (p(r), - void 0 !== - (typeof window === "undefined" ? "undefined" : t(window))) && - (window._hsq = window._hsq || []).push(["identify", r]); - }, - }, - { - key: "track", - value(e) { - p("in HubspotAnalyticsManager track"); - const t = (window._hsq = window._hsq || []); - const n = {}; - (n.id = e.message.event), - e.message.properties && - (e.message.properties.revenue || e.message.properties.value) && - (n.value = - e.message.properties.revenue || e.message.properties.value), - t.push(["trackEvent", n]); - }, - }, - { - key: "page", - value(e) { - p("in HubspotAnalyticsManager page"); - const t = (window._hsq = window._hsq || []); - e.message.properties && - e.message.properties.path && - t.push(["setPath", e.message.properties.path]), - t.push(["trackPageView"]); - }, - }, - { - key: "isLoaded", - value() { - return ( - p("in hubspot isLoaded"), - !(!window._hsq || window._hsq.push === Array.prototype.push) - ); - }, - }, - { - key: "isReady", - value() { - return !(!window._hsq || window._hsq.push === Array.prototype.push); - }, - }, - ]), - e - ); - })(); - const S = Object.prototype.toString; - const P = function e(t) { - const n = (function (e) { - switch (S.call(e)) { - case "[object Date]": - return "date"; - case "[object RegExp]": - return "regexp"; - case "[object Arguments]": - return "arguments"; - case "[object Array]": - return "array"; - case "[object Error]": - return "error"; - } - return e === null - ? "null" - : void 0 === e - ? "undefined" - : e != e - ? "nan" - : e && e.nodeType === 1 - ? "element" - : (t = e) != null && - (t._isBuffer || - (t.constructor && - typeof t.constructor.isBuffer === "function" && - t.constructor.isBuffer(t))) - ? "buffer" - : typeof (e = e.valueOf - ? e.valueOf() - : Object.prototype.valueOf.apply(e)); - let t; - })(t); - if (n === "object") { - var r = {}; - for (const i in t) t.hasOwnProperty(i) && (r[i] = e(t[i])); - return r; - } - if (n === "array") { - r = new Array(t.length); - for (let o = 0, s = t.length; o < s; o++) r[o] = e(t[o]); - return r; - } - if (n === "regexp") { - let a = ""; - return ( - (a += t.multiline ? "m" : ""), - (a += t.global ? "g" : ""), - (a += t.ignoreCase ? "i" : ""), - new RegExp(t.source, a) - ); - } - return n === "date" ? new Date(t.getTime()) : t; - }; - const x = - typeof globalThis !== "undefined" - ? globalThis - : typeof window !== "undefined" - ? window - : typeof global !== "undefined" - ? global - : typeof self !== "undefined" - ? self - : {}; - function R(e, t) { - return e((t = { exports: {} }), t.exports), t.exports; - } - const j = 1e3; - const D = 6e4; - const U = 60 * D; - const L = 24 * U; - const M = function (e, t) { - return ( - (t = t || {}), - typeof e === "string" - ? (function (e) { - if ((e = `${e}`).length > 1e4) return; - const t = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - e - ); - if (!t) return; - const n = parseFloat(t[1]); - switch ((t[2] || "ms").toLowerCase()) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return 315576e5 * n; - case "days": - case "day": - case "d": - return n * L; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * U; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * D; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * j; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - } - })(e) - : t.long - ? (function (e) { - return ( - N(e, L, "day") || - N(e, U, "hour") || - N(e, D, "minute") || - N(e, j, "second") || - `${e} ms` - ); - })(e) - : (function (e) { - return e >= L - ? `${Math.round(e / L)}d` - : e >= U - ? `${Math.round(e / U)}h` - : e >= D - ? `${Math.round(e / D)}m` - : e >= j - ? `${Math.round(e / j)}s` - : `${e}ms`; - })(e) - ); - }; - function N(e, t, n) { - if (!(e < t)) - return e < 1.5 * t - ? `${Math.floor(e / t)} ${n}` - : `${Math.ceil(e / t)} ${n}s`; - } - const B = R(function (e, t) { - ((t = e.exports = function (e) { - function r() {} - function o() { - const e = o; - const r = +new Date(); - const s = r - (n || r); - (e.diff = s), - (e.prev = n), - (e.curr = r), - (n = r), - e.useColors == null && (e.useColors = t.useColors()), - e.color == null && e.useColors && (e.color = i()); - let a = Array.prototype.slice.call(arguments); - (a[0] = t.coerce(a[0])), - typeof a[0] !== "string" && (a = ["%o"].concat(a)); - let u = 0; - (a[0] = a[0].replace(/%([a-z%])/g, function (n, r) { - if (n === "%%") return n; - u++; - const i = t.formatters[r]; - if (typeof i === "function") { - const o = a[u]; - (n = i.call(e, o)), a.splice(u, 1), u--; - } - return n; - })), - typeof t.formatArgs === "function" && (a = t.formatArgs.apply(e, a)); - const c = o.log || t.log || console.log.bind(console); - c.apply(e, a); - } - (r.enabled = !1), (o.enabled = !0); - const s = t.enabled(e) ? o : r; - return (s.namespace = e), s; - }).coerce = function (e) { - return e instanceof Error ? e.stack || e.message : e; - }), - (t.disable = function () { - t.enable(""); - }), - (t.enable = function (e) { - t.save(e); - for (let n = (e || "").split(/[\s,]+/), r = n.length, i = 0; i < r; i++) - n[i] && - ((e = n[i].replace(/\*/g, ".*?"))[0] === "-" - ? t.skips.push(new RegExp(`^${e.substr(1)}$`)) - : t.names.push(new RegExp(`^${e}$`))); - }), - (t.enabled = function (e) { - let n; - let r; - for (n = 0, r = t.skips.length; n < r; n++) - if (t.skips[n].test(e)) return !1; - for (n = 0, r = t.names.length; n < r; n++) - if (t.names[n].test(e)) return !0; - return !1; - }), - (t.humanize = M), - (t.names = []), - (t.skips = []), - (t.formatters = {}); - let n; - let r = 0; - function i() { - return t.colors[r++ % t.colors.length]; - } - }); - const q = - (B.coerce, - B.disable, - B.enable, - B.enabled, - B.humanize, - B.names, - B.skips, - B.formatters, - R(function (e, t) { - function n() { - let e; - try { - e = t.storage.debug; - } catch (e) {} - return e; - } - ((t = e.exports = B).log = function () { - return ( - typeof console === "object" && - console.log && - Function.prototype.apply.call(console.log, console, arguments) - ); - }), - (t.formatArgs = function () { - let e = arguments; - const n = this.useColors; - if ( - ((e[0] = `${ - (n ? "%c" : "") + - this.namespace + - (n ? " %c" : " ") + - e[0] + - (n ? "%c " : " ") - }+${t.humanize(this.diff)}`), - !n) - ) - return e; - const r = `color: ${this.color}`; - e = [e[0], r, "color: inherit"].concat( - Array.prototype.slice.call(e, 1) - ); - let i = 0; - let o = 0; - return ( - e[0].replace(/%[a-z%]/g, function (e) { - e !== "%%" && (i++, e === "%c" && (o = i)); - }), - e.splice(o, 0, r), - e - ); - }), - (t.save = function (e) { - try { - e == null ? t.storage.removeItem("debug") : (t.storage.debug = e); - } catch (e) {} - }), - (t.load = n), - (t.useColors = function () { - return ( - "WebkitAppearance" in document.documentElement.style || - (window.console && - (console.firebug || (console.exception && console.table))) || - (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && - parseInt(RegExp.$1, 10) >= 31) - ); - }), - (t.storage = - typeof chrome !== "undefined" && void 0 !== chrome.storage - ? chrome.storage.local - : (function () { - try { - return window.localStorage; - } catch (e) {} - })()), - (t.colors = [ - "lightseagreen", - "forestgreen", - "goldenrod", - "dodgerblue", - "darkorchid", - "crimson", - ]), - (t.formatters.j = function (e) { - return JSON.stringify(e); - }), - t.enable(n()); - })); - const F = - (q.log, - q.formatArgs, - q.save, - q.load, - q.useColors, - q.storage, - q.colors, - q("cookie")); - const K = function (e, t, n) { - switch (arguments.length) { - case 3: - case 2: - return G(e, t, n); - case 1: - return V(e); - default: - return H(); - } - }; - function G(e, t, n) { - n = n || {}; - let r = `${z(e)}=${z(t)}`; - t == null && (n.maxage = -1), - n.maxage && (n.expires = new Date(+new Date() + n.maxage)), - n.path && (r += `; path=${n.path}`), - n.domain && (r += `; domain=${n.domain}`), - n.expires && (r += `; expires=${n.expires.toUTCString()}`), - n.samesite && (r += `; samesite=${n.samesite}`), - n.secure && (r += "; secure"), - (document.cookie = r); - } - function H() { - let e; - try { - e = document.cookie; - } catch (e) { - return ( - typeof console !== "undefined" && - typeof console.error === "function" && - console.error(e.stack || e), - {} - ); - } - return (function (e) { - let t; - const n = {}; - const r = e.split(/ *; */); - if (r[0] == "") return n; - for (let i = 0; i < r.length; ++i) - (t = r[i].split("=")), (n[J(t[0])] = J(t[1])); - return n; - })(e); - } - function V(e) { - return H()[e]; - } - function z(e) { - try { - return encodeURIComponent(e); - } catch (t) { - F("error `encode(%o)` - %o", e, t); - } - } - function J(e) { - try { - return decodeURIComponent(e); - } catch (t) { - F("error `decode(%o)` - %o", e, t); - } - } - const W = Math.max; - const $ = function (e, t) { - const n = t ? t.length : 0; - if (!n) return []; - for ( - var r = W(Number(e) || 0, 0), i = W(n - r, 0), o = new Array(i), s = 0; - s < i; - s += 1 - ) - o[s] = t[s + r]; - return o; - }; - const Y = Math.max; - const Q = function (e) { - if (e == null || !e.length) return []; - for (var t = new Array(Y(e.length - 2, 0)), n = 1; n < e.length; n += 1) - t[n - 1] = e[n]; - return t; - }; - const Z = Object.prototype.hasOwnProperty; - const X = Object.prototype.toString; - const ee = function (e) { - return Boolean(e) && typeof e === "object"; - }; - const te = function (e) { - return Boolean(e) && X.call(e) === "[object Object]"; - }; - const ne = function (e, t, n, r) { - return Z.call(t, r) && void 0 === e[r] && (e[r] = n), t; - }; - const re = function (e, t, n, r) { - return ( - Z.call(t, r) && - (te(e[r]) && te(n) - ? (e[r] = oe(e[r], n)) - : void 0 === e[r] && (e[r] = n)), - t - ); - }; - const ie = function (e, t) { - if (!ee(t)) return t; - e = e || ne; - for (let n = $(2, arguments), r = 0; r < n.length; r += 1) - for (const i in n[r]) e(t, n[r], n[r][i], i); - return t; - }; - var oe = function (e) { - return ie.apply(null, [re, e].concat(Q(arguments))); - }; - const se = function (e) { - return ie.apply(null, [null, e].concat(Q(arguments))); - }; - const ae = oe; - se.deep = ae; - const ue = R(function (e, t) { - (function () { - const n = { function: !0, object: !0 }; - const r = n.object && t && !t.nodeType && t; - let i = (n[typeof window] && window) || this; - const o = r && n.object && e && !e.nodeType && typeof x === "object" && x; - function s(e, t) { - e || (e = i.Object()), t || (t = i.Object()); - const r = e.Number || i.Number; - const o = e.String || i.String; - const a = e.Object || i.Object; - const u = e.Date || i.Date; - const c = e.SyntaxError || i.SyntaxError; - const l = e.TypeError || i.TypeError; - const d = e.Math || i.Math; - const p = e.JSON || i.JSON; - typeof p === "object" && - p && - ((t.stringify = p.stringify), (t.parse = p.parse)); - const f = a.prototype; - const h = f.toString; - const g = f.hasOwnProperty; - function y(e, t) { - try { - e(); - } catch (e) { - t && t(); - } - } - let m = new u(-0xc782b5b800cec); - function v(e) { - if (v[e] != null) return v[e]; - let n; - if (e == "bug-string-char-index") n = "a"[0] != "a"; - else if (e == "json") - n = - v("json-stringify") && v("date-serialization") && v("json-parse"); - else if (e == "date-serialization") { - if ((n = v("json-stringify") && m)) { - var i = t.stringify; - y(function () { - n = - i(new u(-864e13)) == '"-271821-04-20T00:00:00.000Z"' && - i(new u(864e13)) == '"+275760-09-13T00:00:00.000Z"' && - i(new u(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - i(new u(-1)) == '"1969-12-31T23:59:59.999Z"'; - }); - } - } else { - let s; - const a = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - if (e == "json-stringify") { - let c = typeof (i = t.stringify) === "function"; - c && - (((s = function () { - return 1; - }).toJSON = s), - y( - function () { - c = - i(0) === "0" && - i(new r()) === "0" && - i(new o()) == '""' && - void 0 === i(h) && - void 0 === i(void 0) && - void 0 === i() && - i(s) === "1" && - i([s]) == "[1]" && - i([void 0]) == "[null]" && - i(null) == "null" && - i([void 0, h, null]) == "[null,null,null]" && - i({ a: [s, !0, !1, null, "\0\b\n\f\r\t"] }) == a && - i(null, s) === "1" && - i([1, 2], null, 1) == "[\n 1,\n 2\n]"; - }, - function () { - c = !1; - } - )), - (n = c); - } - if (e == "json-parse") { - let l; - const d = t.parse; - typeof d === "function" && - y( - function () { - d("0") !== 0 || - d(!1) || - ((s = d(a)), - (l = s.a.length == 5 && s.a[0] === 1) && - (y(function () { - l = !d('"\t"'); - }), - l && - y(function () { - l = d("01") !== 1; - }), - l && - y(function () { - l = d("1.") !== 1; - }))); - }, - function () { - l = !1; - } - ), - (n = l); - } - } - return (v[e] = !!n); - } - if ( - (y(function () { - m = - m.getUTCFullYear() == -109252 && - m.getUTCMonth() === 0 && - m.getUTCDate() === 1 && - m.getUTCHours() == 10 && - m.getUTCMinutes() == 37 && - m.getUTCSeconds() == 6 && - m.getUTCMilliseconds() == 708; - }), - (v["bug-string-char-index"] = v["date-serialization"] = v.json = v[ - "json-stringify" - ] = v["json-parse"] = null), - !v("json")) - ) { - const b = v("bug-string-char-index"); - var w = function (e, t) { - let r; - let i; - let o; - let s = 0; - for (o in (((r = function () { - this.valueOf = 0; - }).prototype.valueOf = 0), - (i = new r()))) - g.call(i, o) && s++; - return ( - (r = i = null), - s - ? (w = function (e, t) { - let n; - let r; - const i = h.call(e) == "[object Function]"; - for (n in e) - (i && n == "prototype") || - !g.call(e, n) || - (r = n === "constructor") || - t(n); - (r || g.call(e, (n = "constructor"))) && t(n); - }) - : ((i = [ - "valueOf", - "toString", - "toLocaleString", - "propertyIsEnumerable", - "isPrototypeOf", - "hasOwnProperty", - "constructor", - ]), - (w = function (e, t) { - let r; - let o; - const s = h.call(e) == "[object Function]"; - const a = - (!s && - typeof e.constructor !== "function" && - n[typeof e.hasOwnProperty] && - e.hasOwnProperty) || - g; - for (r in e) - (s && r == "prototype") || !a.call(e, r) || t(r); - for (o = i.length; (r = i[--o]); ) a.call(e, r) && t(r); - })), - w(e, t) - ); - }; - if (!v("json-stringify") && !v("date-serialization")) { - const k = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t", - }; - const I = function (e, t) { - return `000000${t || 0}`.slice(-e); - }; - var _ = function (e) { - let t; - let n; - let r; - let i; - let o; - let s; - let a; - let u; - let c; - if (m) - t = function (e) { - (n = e.getUTCFullYear()), - (r = e.getUTCMonth()), - (i = e.getUTCDate()), - (s = e.getUTCHours()), - (a = e.getUTCMinutes()), - (u = e.getUTCSeconds()), - (c = e.getUTCMilliseconds()); - }; - else { - const l = d.floor; - const p = [ - 0, - 31, - 59, - 90, - 120, - 151, - 181, - 212, - 243, - 273, - 304, - 334, - ]; - const f = function (e, t) { - return ( - p[t] + - 365 * (e - 1970) + - l((e - 1969 + (t = +(t > 1))) / 4) - - l((e - 1901 + t) / 100) + - l((e - 1601 + t) / 400) - ); - }; - t = function (e) { - for ( - i = l(e / 864e5), n = l(i / 365.2425) + 1970 - 1; - f(n + 1, 0) <= i; - n++ - ); - for (r = l((i - f(n, 0)) / 30.42); f(n, r + 1) <= i; r++); - (i = 1 + i - f(n, r)), - (s = l((o = ((e % 864e5) + 864e5) % 864e5) / 36e5) % 24), - (a = l(o / 6e4) % 60), - (u = l(o / 1e3) % 60), - (c = o % 1e3); - }; - } - return (_ = function (e) { - return ( - e > -1 / 0 && e < 1 / 0 - ? (t(e), - (e = `${ - n <= 0 || n >= 1e4 - ? (n < 0 ? "-" : "+") + I(6, n < 0 ? -n : n) - : I(4, n) - }-${I(2, r + 1)}-${I(2, i)}T${I(2, s)}:${I(2, a)}:${I( - 2, - u - )}.${I(3, c)}Z`), - (n = r = i = s = a = u = c = null)) - : (e = null), - e - ); - })(e); - }; - if (v("json-stringify") && !v("date-serialization")) { - function E(e) { - return _(this); - } - const A = t.stringify; - t.stringify = function (e, t, n) { - const r = u.prototype.toJSON; - u.prototype.toJSON = E; - const i = A(e, t, n); - return (u.prototype.toJSON = r), i; - }; - } else { - const C = function (e) { - const t = e.charCodeAt(0); - const n = k[t]; - return n || `\\u00${I(2, t.toString(16))}`; - }; - const T = /[\x00-\x1f\x22\x5c]/g; - const O = function (e) { - return ( - (T.lastIndex = 0), `"${T.test(e) ? e.replace(T, C) : e}"` - ); - }; - var S = function (e, t, n, r, i, o, s) { - let a; - let c; - let d; - let p; - let f; - let g; - let m; - let v; - let b; - if ( - (y(function () { - a = t[e]; - }), - typeof a === "object" && - a && - (a.getUTCFullYear && - h.call(a) == "[object Date]" && - a.toJSON === u.prototype.toJSON - ? (a = _(a)) - : typeof a.toJSON === "function" && (a = a.toJSON(e))), - n && (a = n.call(t, e, a)), - a == null) - ) - return void 0 === a ? a : "null"; - switch ( - ((c = typeof a) == "object" && (d = h.call(a)), d || c) - ) { - case "boolean": - case "[object Boolean]": - return `${a}`; - case "number": - case "[object Number]": - return a > -1 / 0 && a < 1 / 0 ? `${a}` : "null"; - case "string": - case "[object String]": - return O(`${a}`); - } - if (typeof a === "object") { - for (m = s.length; m--; ) if (s[m] === a) throw l(); - if ( - (s.push(a), - (p = []), - (v = o), - (o += i), - d == "[object Array]") - ) { - for (g = 0, m = a.length; g < m; g++) - (f = S(g, a, n, r, i, o, s)), - p.push(void 0 === f ? "null" : f); - b = p.length - ? i - ? `[\n${o}${p.join(`,\n${o}`)}\n${v}]` - : `[${p.join(",")}]` - : "[]"; - } else - w(r || a, function (e) { - const t = S(e, a, n, r, i, o, s); - void 0 !== t && p.push(`${O(e)}:${i ? " " : ""}${t}`); - }), - (b = p.length - ? i - ? `{\n${o}${p.join(`,\n${o}`)}\n${v}}` - : `{${p.join(",")}}` - : "{}"); - return s.pop(), b; - } - }; - t.stringify = function (e, t, r) { - let i; - let o; - let s; - let a; - if (n[typeof t] && t) - if ((a = h.call(t)) == "[object Function]") o = t; - else if (a == "[object Array]") { - s = {}; - for (var u, c = 0, l = t.length; c < l; ) - (u = t[c++]), - ((a = h.call(u)) != "[object String]" && - a != "[object Number]") || - (s[u] = 1); - } - if (r) - if ((a = h.call(r)) == "[object Number]") { - if ((r -= r % 1) > 0) - for (r > 10 && (r = 10), i = ""; i.length < r; ) i += " "; - } else - a == "[object String]" && - (i = r.length <= 10 ? r : r.slice(0, 10)); - return S("", (((u = {})[""] = e), u), o, s, i, "", []); - }; - } - } - if (!v("json-parse")) { - let P; - let x; - const R = o.fromCharCode; - const j = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r", - }; - const D = function () { - throw ((P = x = null), c()); - }; - const U = function () { - for (var e, t, n, r, i, o = x, s = o.length; P < s; ) - switch ((i = o.charCodeAt(P))) { - case 9: - case 10: - case 13: - case 32: - P++; - break; - case 123: - case 125: - case 91: - case 93: - case 58: - case 44: - return (e = b ? o.charAt(P) : o[P]), P++, e; - case 34: - for (e = "@", P++; P < s; ) - if ((i = o.charCodeAt(P)) < 32) D(); - else if (i == 92) - switch ((i = o.charCodeAt(++P))) { - case 92: - case 34: - case 47: - case 98: - case 116: - case 110: - case 102: - case 114: - (e += j[i]), P++; - break; - case 117: - for (t = ++P, n = P + 4; P < n; P++) - ((i = o.charCodeAt(P)) >= 48 && i <= 57) || - (i >= 97 && i <= 102) || - (i >= 65 && i <= 70) || - D(); - e += R(`0x${o.slice(t, P)}`); - break; - default: - D(); - } - else { - if (i == 34) break; - for ( - i = o.charCodeAt(P), t = P; - i >= 32 && i != 92 && i != 34; - - ) - i = o.charCodeAt(++P); - e += o.slice(t, P); - } - if (o.charCodeAt(P) == 34) return P++, e; - D(); - default: - if ( - ((t = P), - i == 45 && ((r = !0), (i = o.charCodeAt(++P))), - i >= 48 && i <= 57) - ) { - for ( - i == 48 && - (i = o.charCodeAt(P + 1)) >= 48 && - i <= 57 && - D(), - r = !1; - P < s && (i = o.charCodeAt(P)) >= 48 && i <= 57; - P++ - ); - if (o.charCodeAt(P) == 46) { - for ( - n = ++P; - n < s && !((i = o.charCodeAt(n)) < 48 || i > 57); - n++ - ); - n == P && D(), (P = n); - } - if ((i = o.charCodeAt(P)) == 101 || i == 69) { - for ( - ((i = o.charCodeAt(++P)) != 43 && i != 45) || P++, - n = P; - n < s && !((i = o.charCodeAt(n)) < 48 || i > 57); - n++ - ); - n == P && D(), (P = n); - } - return +o.slice(t, P); - } - r && D(); - var a = o.slice(P, P + 4); - if (a == "true") return (P += 4), !0; - if (a == "fals" && o.charCodeAt(P + 4) == 101) - return (P += 5), !1; - if (a == "null") return (P += 4), null; - D(); - } - return "$"; - }; - var L = function (e) { - let t; - let n; - if ((e == "$" && D(), typeof e === "string")) { - if ((b ? e.charAt(0) : e[0]) == "@") return e.slice(1); - if (e == "[") { - for (t = []; (e = U()) != "]"; ) - n ? (e == "," ? (e = U()) == "]" && D() : D()) : (n = !0), - e == "," && D(), - t.push(L(e)); - return t; - } - if (e == "{") { - for (t = {}; (e = U()) != "}"; ) - n ? (e == "," ? (e = U()) == "}" && D() : D()) : (n = !0), - (e != "," && - typeof e === "string" && - (b ? e.charAt(0) : e[0]) == "@" && - U() == ":") || - D(), - (t[e.slice(1)] = L(U())); - return t; - } - D(); - } - return e; - }; - const M = function (e, t, n) { - const r = N(e, t, n); - void 0 === r ? delete e[t] : (e[t] = r); - }; - var N = function (e, t, n) { - let r; - const i = e[t]; - if (typeof i === "object" && i) - if (h.call(i) == "[object Array]") - for (r = i.length; r--; ) M(h, w, i); - else - w(i, function (e) { - M(i, e, n); - }); - return n.call(e, t, i); - }; - t.parse = function (e, t) { - let n; - let r; - return ( - (P = 0), - (x = `${e}`), - (n = L(U())), - U() != "$" && D(), - (P = x = null), - t && h.call(t) == "[object Function]" - ? N((((r = {})[""] = n), r), "", t) - : n - ); - }; - } - } - return (t.runInContext = s), t; - } - if ( - (!o || (o.global !== o && o.window !== o && o.self !== o) || (i = o), r) - ) - s(i, r); - else { - let a = i.JSON; - let u = i.JSON3; - let c = !1; - var l = s( - i, - (i.JSON3 = { - noConflict() { - return ( - c || ((c = !0), (i.JSON = a), (i.JSON3 = u), (a = u = null)), l - ); - }, - }) - ); - i.JSON = { parse: l.parse, stringify: l.stringify }; - } - }.call(x)); - }); - const ce = R(function (e, t) { - function n(e) { - switch (e) { - case "http:": - return 80; - case "https:": - return 443; - default: - return location.port; - } - } - (t.parse = function (e) { - const t = document.createElement("a"); - return ( - (t.href = e), - { - href: t.href, - host: t.host || location.host, - port: t.port === "0" || t.port === "" ? n(t.protocol) : t.port, - hash: t.hash, - hostname: t.hostname || location.hostname, - pathname: t.pathname.charAt(0) != "/" ? `/${t.pathname}` : t.pathname, - protocol: - t.protocol && t.protocol != ":" ? t.protocol : location.protocol, - search: t.search, - query: t.search.slice(1), - } - ); - }), - (t.isAbsolute = function (e) { - return e.indexOf("//") == 0 || !!~e.indexOf("://"); - }), - (t.isRelative = function (e) { - return !t.isAbsolute(e); - }), - (t.isCrossDomain = function (e) { - e = t.parse(e); - const n = t.parse(window.location.href); - return ( - e.hostname !== n.hostname || - e.port !== n.port || - e.protocol !== n.protocol - ); - }); - }); - const le = - (ce.parse, - ce.isAbsolute, - ce.isRelative, - ce.isCrossDomain, - R(function (e, t) { - ((t = e.exports = function (e) { - function r() {} - function o() { - const e = o; - const r = +new Date(); - const s = r - (n || r); - (e.diff = s), - (e.prev = n), - (e.curr = r), - (n = r), - e.useColors == null && (e.useColors = t.useColors()), - e.color == null && e.useColors && (e.color = i()); - let a = Array.prototype.slice.call(arguments); - (a[0] = t.coerce(a[0])), - typeof a[0] !== "string" && (a = ["%o"].concat(a)); - let u = 0; - (a[0] = a[0].replace(/%([a-z%])/g, function (n, r) { - if (n === "%%") return n; - u++; - const i = t.formatters[r]; - if (typeof i === "function") { - const o = a[u]; - (n = i.call(e, o)), a.splice(u, 1), u--; - } - return n; - })), - typeof t.formatArgs === "function" && - (a = t.formatArgs.apply(e, a)); - const c = o.log || t.log || console.log.bind(console); - c.apply(e, a); - } - (r.enabled = !1), (o.enabled = !0); - const s = t.enabled(e) ? o : r; - return (s.namespace = e), s; - }).coerce = function (e) { - return e instanceof Error ? e.stack || e.message : e; - }), - (t.disable = function () { - t.enable(""); - }), - (t.enable = function (e) { - t.save(e); - for ( - let n = (e || "").split(/[\s,]+/), r = n.length, i = 0; - i < r; - i++ - ) - n[i] && - ((e = n[i].replace(/\*/g, ".*?"))[0] === "-" - ? t.skips.push(new RegExp(`^${e.substr(1)}$`)) - : t.names.push(new RegExp(`^${e}$`))); - }), - (t.enabled = function (e) { - let n; - let r; - for (n = 0, r = t.skips.length; n < r; n++) - if (t.skips[n].test(e)) return !1; - for (n = 0, r = t.names.length; n < r; n++) - if (t.names[n].test(e)) return !0; - return !1; - }), - (t.humanize = M), - (t.names = []), - (t.skips = []), - (t.formatters = {}); - let n; - let r = 0; - function i() { - return t.colors[r++ % t.colors.length]; - } - })); - const de = - (le.coerce, - le.disable, - le.enable, - le.enabled, - le.humanize, - le.names, - le.skips, - le.formatters, - R(function (e, t) { - function n() { - let e; - try { - e = t.storage.debug; - } catch (e) {} - return e; - } - ((t = e.exports = le).log = function () { - return ( - typeof console === "object" && - console.log && - Function.prototype.apply.call(console.log, console, arguments) - ); - }), - (t.formatArgs = function () { - let e = arguments; - const n = this.useColors; - if ( - ((e[0] = `${ - (n ? "%c" : "") + - this.namespace + - (n ? " %c" : " ") + - e[0] + - (n ? "%c " : " ") - }+${t.humanize(this.diff)}`), - !n) - ) - return e; - const r = `color: ${this.color}`; - e = [e[0], r, "color: inherit"].concat( - Array.prototype.slice.call(e, 1) - ); - let i = 0; - let o = 0; - return ( - e[0].replace(/%[a-z%]/g, function (e) { - e !== "%%" && (i++, e === "%c" && (o = i)); - }), - e.splice(o, 0, r), - e - ); - }), - (t.save = function (e) { - try { - e == null ? t.storage.removeItem("debug") : (t.storage.debug = e); - } catch (e) {} - }), - (t.load = n), - (t.useColors = function () { - return ( - "WebkitAppearance" in document.documentElement.style || - (window.console && - (console.firebug || (console.exception && console.table))) || - (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && - parseInt(RegExp.$1, 10) >= 31) - ); - }), - (t.storage = - typeof chrome !== "undefined" && void 0 !== chrome.storage - ? chrome.storage.local - : (function () { - try { - return window.localStorage; - } catch (e) {} - })()), - (t.colors = [ - "lightseagreen", - "forestgreen", - "goldenrod", - "dodgerblue", - "darkorchid", - "crimson", - ]), - (t.formatters.j = function (e) { - return JSON.stringify(e); - }), - t.enable(n()); - })); - const pe = - (de.log, - de.formatArgs, - de.save, - de.load, - de.useColors, - de.storage, - de.colors, - de("cookie")); - const fe = function (e, t, n) { - switch (arguments.length) { - case 3: - case 2: - return he(e, t, n); - case 1: - return ye(e); - default: - return ge(); - } - }; - function he(e, t, n) { - n = n || {}; - let r = `${me(e)}=${me(t)}`; - t == null && (n.maxage = -1), - n.maxage && (n.expires = new Date(+new Date() + n.maxage)), - n.path && (r += `; path=${n.path}`), - n.domain && (r += `; domain=${n.domain}`), - n.expires && (r += `; expires=${n.expires.toUTCString()}`), - n.secure && (r += "; secure"), - (document.cookie = r); - } - function ge() { - let e; - try { - e = document.cookie; - } catch (e) { - return ( - typeof console !== "undefined" && - typeof console.error === "function" && - console.error(e.stack || e), - {} - ); - } - return (function (e) { - let t; - const n = {}; - const r = e.split(/ *; */); - if (r[0] == "") return n; - for (let i = 0; i < r.length; ++i) - (t = r[i].split("=")), (n[ve(t[0])] = ve(t[1])); - return n; - })(e); - } - function ye(e) { - return ge()[e]; - } - function me(e) { - try { - return encodeURIComponent(e); - } catch (t) { - pe("error `encode(%o)` - %o", e, t); - } - } - function ve(e) { - try { - return decodeURIComponent(e); - } catch (t) { - pe("error `decode(%o)` - %o", e, t); - } - } - const be = R(function (e, t) { - const n = ce.parse; - function r(e) { - for (let n = t.cookie, r = t.levels(e), i = 0; i < r.length; ++i) { - const o = r[i]; - const s = { domain: `.${o}` }; - if ((n("__tld__", 1, s), n("__tld__"))) return n("__tld__", null, s), o; - } - return ""; - } - (r.levels = function (e) { - const t = n(e).hostname.split("."); - const r = t[t.length - 1]; - const i = []; - if (t.length === 4 && r === parseInt(r, 10)) return i; - if (t.length <= 1) return i; - for (let o = t.length - 2; o >= 0; --o) i.push(t.slice(o).join(".")); - return i; - }), - (r.cookie = fe), - (t = e.exports = r); - }); - const we = new ((function () { - function e(t) { - n(this, e), (this._options = {}), this.options(t); - } - return ( - i(e, [ - { - key: "options", - value() { - const e = - arguments.length > 0 && void 0 !== arguments[0] - ? arguments[0] - : {}; - if (arguments.length === 0) return this._options; - let t = `.${be(window.location.href)}`; - t === "." && (t = null), - (this._options = se(e, { - maxage: 31536e6, - path: "/", - domain: t, - samesite: "Lax", - })), - this.set("test_rudder", !0), - this.get("test_rudder") || (this._options.domain = null), - this.remove("test_rudder"); - }, - }, - { - key: "set", - value(e, t) { - try { - return (t = ue.stringify(t)), K(e, t, P(this._options)), !0; - } catch (e) { - return !1; - } - }, - }, - { - key: "get", - value(e) { - let t; - try { - return (t = (t = K(e)) ? ue.parse(t) : null); - } catch (e) { - return t || null; - } - }, - }, - { - key: "remove", - value(e) { - try { - return K(e, null, P(this._options)), !0; - } catch (e) { - return !1; - } - }, - }, - ]), - e - ); - })())({}); - const ke = (function () { - let e; - const t = {}; - const n = typeof window !== "undefined" ? window : x; - const r = n.document; - if ( - ((t.disabled = !1), - (t.version = "1.3.20"), - (t.set = function (e, t) {}), - (t.get = function (e, t) {}), - (t.has = function (e) { - return void 0 !== t.get(e); - }), - (t.remove = function (e) {}), - (t.clear = function () {}), - (t.transact = function (e, n, r) { - r == null && ((r = n), (n = null)), n == null && (n = {}); - const i = t.get(e, n); - r(i), t.set(e, i); - }), - (t.getAll = function () { - const e = {}; - return ( - t.forEach(function (t, n) { - e[t] = n; - }), - e - ); - }), - (t.forEach = function () {}), - (t.serialize = function (e) { - return ue.stringify(e); - }), - (t.deserialize = function (e) { - if (typeof e === "string") - try { - return ue.parse(e); - } catch (t) { - return e || void 0; - } - }), - (function () { - try { - return "localStorage" in n && n.localStorage; - } catch (e) { - return !1; - } - })()) - ) - (e = n.localStorage), - (t.set = function (n, r) { - return void 0 === r ? t.remove(n) : (e.setItem(n, t.serialize(r)), r); - }), - (t.get = function (n, r) { - const i = t.deserialize(e.getItem(n)); - return void 0 === i ? r : i; - }), - (t.remove = function (t) { - e.removeItem(t); - }), - (t.clear = function () { - e.clear(); - }), - (t.forEach = function (n) { - for (let r = 0; r < e.length; r++) { - const i = e.key(r); - n(i, t.get(i)); - } - }); - else if (r && r.documentElement.addBehavior) { - let i; - let o; - try { - (o = new ActiveXObject("htmlfile")).open(), - o.write( - '' - ), - o.close(), - (i = o.w.frames[0].document), - (e = i.createElement("div")); - } catch (t) { - (e = r.createElement("div")), (i = r.body); - } - const s = function (n) { - return function () { - const r = Array.prototype.slice.call(arguments, 0); - r.unshift(e), - i.appendChild(e), - e.addBehavior("#default#userData"), - e.load("localStorage"); - const o = n.apply(t, r); - return i.removeChild(e), o; - }; - }; - const a = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g"); - const u = function (e) { - return e.replace(/^d/, "___$&").replace(a, "___"); - }; - (t.set = s(function (e, n, r) { - return ( - (n = u(n)), - void 0 === r - ? t.remove(n) - : (e.setAttribute(n, t.serialize(r)), e.save("localStorage"), r) - ); - })), - (t.get = s(function (e, n, r) { - n = u(n); - const i = t.deserialize(e.getAttribute(n)); - return void 0 === i ? r : i; - })), - (t.remove = s(function (e, t) { - (t = u(t)), e.removeAttribute(t), e.save("localStorage"); - })), - (t.clear = s(function (e) { - const t = e.XMLDocument.documentElement.attributes; - e.load("localStorage"); - for (let n = t.length - 1; n >= 0; n--) e.removeAttribute(t[n].name); - e.save("localStorage"); - })), - (t.forEach = s(function (e, n) { - for ( - var r, i = e.XMLDocument.documentElement.attributes, o = 0; - (r = i[o]); - ++o - ) - n(r.name, t.deserialize(e.getAttribute(r.name))); - })); - } - try { - const c = "__storejs__"; - t.set(c, c), t.get(c) != c && (t.disabled = !0), t.remove(c); - } catch (e) { - t.disabled = !0; - } - return (t.enabled = !t.disabled), t; - })(); - const Ie = new ((function () { - function e(t) { - n(this, e), (this._options = {}), (this.enabled = !1), this.options(t); - } - return ( - i(e, [ - { - key: "options", - value() { - const e = - arguments.length > 0 && void 0 !== arguments[0] - ? arguments[0] - : {}; - if (arguments.length === 0) return this._options; - se(e, { enabled: !0 }), - (this.enabled = e.enabled && ke.enabled), - (this._options = e); - }, - }, - { - key: "set", - value(e, t) { - return !!this.enabled && ke.set(e, t); - }, - }, - { - key: "get", - value(e) { - return this.enabled ? ke.get(e) : null; - }, - }, - { - key: "remove", - value(e) { - return !!this.enabled && ke.remove(e); - }, - }, - ]), - e - ); - })())({}); - const _e = "rl_user_id"; - const Ee = "rl_trait"; - const Ae = "rl_anonymous_id"; - const Ce = "rl_group_id"; - const Te = "rl_group_trait"; - const Oe = new ((function () { - function e() { - if ((n(this, e), we.set("rudder_cookies", !0), we.get("rudder_cookies"))) - return we.remove("rudder_cookies"), void (this.storage = we); - Ie.enabled && (this.storage = Ie); - } - return ( - i(e, [ - { - key: "setItem", - value(e, t) { - this.storage.set(e, t); - }, - }, - { - key: "setUserId", - value(e) { - typeof e === "string" - ? this.storage.set(_e, e) - : f("[Storage] setUserId:: userId should be string"); - }, - }, - { - key: "setUserTraits", - value(e) { - this.storage.set(Ee, e); - }, - }, - { - key: "setGroupId", - value(e) { - typeof e === "string" - ? this.storage.set(Ce, e) - : f("[Storage] setGroupId:: groupId should be string"); - }, - }, - { - key: "setGroupTraits", - value(e) { - this.storage.set(Te, e); - }, - }, - { - key: "setAnonymousId", - value(e) { - typeof e === "string" - ? this.storage.set(Ae, e) - : f("[Storage] setAnonymousId:: anonymousId should be string"); - }, - }, - { - key: "getItem", - value(e) { - return this.storage.get(e); - }, - }, - { - key: "getUserId", - value() { - return this.storage.get(_e); - }, - }, - { - key: "getUserTraits", - value() { - return this.storage.get(Ee); - }, - }, - { - key: "getGroupId", - value() { - return this.storage.get(Ce); - }, - }, - { - key: "getGroupTraits", - value() { - return this.storage.get(Te); - }, - }, - { - key: "getAnonymousId", - value() { - return this.storage.get(Ae); - }, - }, - { - key: "removeItem", - value(e) { - return this.storage.remove(e); - }, - }, - { - key: "clear", - value() { - this.storage.remove(_e), this.storage.remove(Ee); - }, - }, - ]), - e - ); - })())(); - const Se = (function () { - function e(t) { - n(this, e), - (this.trackingID = t.trackingID), - (this.allowLinker = t.allowLinker || !1), - (this.name = "GA"); - } - return ( - i(e, [ - { - key: "init", - value() { - !(function (e, t, n, r, i, o, s) { - (e.GoogleAnalyticsObject = i), - (e.ga = - e.ga || - function () { - (e.ga.q = e.ga.q || []).push(arguments); - }), - (e.ga.l = 1 * new Date()), - (o = t.createElement(n)), - (s = t.getElementsByTagName(n)[0]), - (o.async = 1), - (o.src = "https://www.google-analytics.com/analytics.js"), - s.parentNode.insertBefore(o, s); - })(window, document, "script", 0, "ga"), - ga("create", this.trackingID, "auto", "rudder_ga", { - allowLinker: this.allowLinker, - }); - const e = Oe.getUserId(); - e && e !== "" && ga("rudder_ga.set", "userId", e), - p("===in init GA==="); - }, - }, - { - key: "identify", - value(e) { - const t = - e.message.userId !== "" - ? e.message.userId - : e.message.anonymousId; - ga("rudder_ga.set", "userId", t), - p("in GoogleAnalyticsManager identify"); - }, - }, - { - key: "track", - value(e) { - let t = e.message.event; - const n = e.message.event; - let r = e.message.event; - let i = ""; - e.message.properties && - ((i = e.message.properties.value - ? e.message.properties.value - : e.message.properties.revenue), - (t = e.message.properties.category - ? e.message.properties.category - : t), - (r = e.message.properties.label - ? e.message.properties.label - : r)), - ga("rudder_ga.send", "event", { - hitType: "event", - eventCategory: t, - eventAction: n, - eventLabel: r, - eventValue: i, - }), - p("in GoogleAnalyticsManager track"); - }, - }, - { - key: "page", - value(e) { - p("in GoogleAnalyticsManager page"); - const t = - e.message.properties && e.message.properties.path - ? e.message.properties.path - : void 0; - const n = - e.message.properties && e.message.properties.title - ? e.message.properties.title - : void 0; - const r = - e.message.properties && e.message.properties.url - ? e.message.properties.url - : void 0; - t && ga("rudder_ga.set", "page", t), - n && ga("rudder_ga.set", "title", n), - r && ga("rudder_ga.set", "location", r), - ga("rudder_ga.send", "pageview"); - }, - }, - { - key: "isLoaded", - value() { - return p("in GA isLoaded"), !!window.gaplugins; - }, - }, - { - key: "isReady", - value() { - return !!window.gaplugins; - }, - }, - ]), - e - ); - })(); - const Pe = (function () { - function e(t) { - n(this, e), - (this.siteId = t.siteID), - (this.name = "HOTJAR"), - (this._ready = !1); - } - return ( - i(e, [ - { - key: "init", - value() { - (window.hotjarSiteId = this.siteId), - (function (e, t, n, r, i, o) { - (e.hj = - e.hj || - function () { - (e.hj.q = e.hj.q || []).push(arguments); - }), - (e._hjSettings = { hjid: e.hotjarSiteId, hjsv: 6 }), - (i = t.getElementsByTagName("head")[0]), - ((o = t.createElement("script")).async = 1), - (o.src = `https://static.hotjar.com/c/hotjar-${e._hjSettings.hjid}.js?sv=${e._hjSettings.hjsv}`), - i.appendChild(o); - })(window, document), - (this._ready = !0), - p("===in init Hotjar==="); - }, - }, - { - key: "identify", - value(e) { - if (e.message.userId || e.message.anonymousId) { - const t = e.message.context.traits; - window.hj("identify", e.message.userId, t); - } else p("[Hotjar] identify:: user id is required"); - }, - }, - { - key: "track", - value(e) { - p("[Hotjar] track:: method not supported"); - }, - }, - { - key: "page", - value(e) { - p("[Hotjar] page:: method not supported"); - }, - }, - { - key: "isLoaded", - value() { - return this._ready; - }, - }, - { - key: "isReady", - value() { - return this._ready; - }, - }, - ]), - e - ); - })(); - const xe = (function () { - function e(t) { - n(this, e), - (this.conversionId = t.conversionID), - (this.pageLoadConversions = t.pageLoadConversions), - (this.clickEventConversions = t.clickEventConversions), - (this.defaultPageConversion = t.defaultPageConversion), - (this.name = "GOOGLEADS"); - } - return ( - i(e, [ - { - key: "init", - value() { - !(function (e, t, n) { - p(`in script loader=== ${e}`); - const r = n.createElement("script"); - (r.src = t), - (r.async = 1), - (r.type = "text/javascript"), - (r.id = e); - const i = n.getElementsByTagName("head")[0]; - p("==script==", i), i.appendChild(r); - })( - "googleAds-integration", - `https://www.googletagmanager.com/gtag/js?id=${this.conversionId}`, - document - ), - (window.dataLayer = window.dataLayer || []), - (window.gtag = function () { - window.dataLayer.push(arguments); - }), - window.gtag("js", new Date()), - window.gtag("config", this.conversionId), - p("===in init Google Ads==="); - }, - }, - { - key: "identify", - value(e) { - p("[GoogleAds] identify:: method not supported"); - }, - }, - { - key: "track", - value(e) { - p("in GoogleAdsAnalyticsManager track"); - const t = this.getConversionData( - this.clickEventConversions, - e.message.event - ); - if (t.conversionLabel) { - const n = t.conversionLabel; - const r = t.eventName; - const i = `${this.conversionId}/${n}`; - const o = {}; - e.properties && - ((o.value = e.properties.revenue), - (o.currency = e.properties.currency), - (o.transaction_id = e.properties.order_id)), - (o.send_to = i), - window.gtag("event", r, o); - } - }, - }, - { - key: "page", - value(e) { - p("in GoogleAdsAnalyticsManager page"); - const t = this.getConversionData( - this.pageLoadConversions, - e.message.name - ); - if (t.conversionLabel) { - const n = t.conversionLabel; - const r = t.eventName; - window.gtag("event", r, { - send_to: `${this.conversionId}/${n}`, - }); - } - }, - }, - { - key: "getConversionData", - value(e, t) { - const n = {}; - return ( - e && - (t - ? e.forEach(function (e) { - if (e.name.toLowerCase() === t.toLowerCase()) - return ( - (n.conversionLabel = e.conversionLabel), - void (n.eventName = e.name) - ); - }) - : this.defaultPageConversion && - ((n.conversionLabel = this.defaultPageConversion), - (n.eventName = "Viewed a Page"))), - n - ); - }, - }, - { - key: "isLoaded", - value() { - return window.dataLayer.push !== Array.prototype.push; - }, - }, - { - key: "isReady", - value() { - return window.dataLayer.push !== Array.prototype.push; - }, - }, - ]), - e - ); - })(); - const Re = (function () { - function e(t, r) { - n(this, e), - (this.accountId = t.accountId), - (this.settingsTolerance = t.settingsTolerance), - (this.isSPA = t.isSPA), - (this.libraryTolerance = t.libraryTolerance), - (this.useExistingJquery = t.useExistingJquery), - (this.sendExperimentTrack = t.sendExperimentTrack), - (this.sendExperimentIdentify = t.sendExperimentIdentify), - (this.name = "VWO"), - (this.analytics = r), - p("Config ", t); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init VWO==="); - const e = this.accountId; - const t = this.settingsTolerance; - const n = this.libraryTolerance; - const r = this.useExistingJquery; - const i = this.isSPA; - (window._vwo_code = (function () { - let o = !1; - const s = document; - return { - use_existing_jquery() { - return r; - }, - library_tolerance() { - return n; - }, - finish() { - if (!o) { - o = !0; - const e = s.getElementById("_vis_opt_path_hides"); - e && e.parentNode.removeChild(e); - } - }, - finished() { - return o; - }, - load(e) { - const t = s.createElement("script"); - (t.src = e), - (t.type = "text/javascript"), - t.innerText, - (t.onerror = function () { - _vwo_code.finish(); - }), - s.getElementsByTagName("head")[0].appendChild(t); - }, - init() { - const n = setTimeout("_vwo_code.finish()", t); - const r = s.createElement("style"); - const o = - "body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}"; - const a = s.getElementsByTagName("head")[0]; - return ( - r.setAttribute("id", "_vis_opt_path_hides"), - r.setAttribute("type", "text/css"), - r.styleSheet - ? (r.styleSheet.cssText = o) - : r.appendChild(s.createTextNode(o)), - a.appendChild(r), - this.load( - `//dev.visualwebsiteoptimizer.com/j.php?a=${e}&u=${encodeURIComponent( - s.URL - )}&r=${Math.random()}&f=${+i}` - ), - n - ); - }, - }; - })()), - (window._vwo_settings_timer = window._vwo_code.init()), - (this.sendExperimentTrack || this.experimentViewedIdentify) && - this.experimentViewed(); - }, - }, - { - key: "experimentViewed", - value() { - const e = this; - window.VWO = window.VWO || []; - const t = this; - window.VWO.push([ - "onVariationApplied", - function (n) { - if (n) { - p("Variation Applied"); - const r = n[1]; - const i = n[2]; - if ( - (p( - "experiment id:", - r, - "Variation Name:", - _vwo_exp[r].comb_n[i] - ), - void 0 !== _vwo_exp[r].comb_n[i] && - ["VISUAL_AB", "VISUAL", "SPLIT_URL", "SURVEY"].indexOf( - _vwo_exp[r].type - ) > -1) - ) { - try { - t.sendExperimentTrack && - (p("Tracking..."), - e.analytics.track("Experiment Viewed", { - experimentId: r, - variationName: _vwo_exp[r].comb_n[i], - })); - } catch (e) { - f("[VWO] experimentViewed:: ", e); - } - try { - t.sendExperimentIdentify && - (p("Identifying..."), - e.analytics.identify( - o({}, "Experiment: ".concat(r), _vwo_exp[r].comb_n[i]) - )); - } catch (e) { - f("[VWO] experimentViewed:: ", e); - } - } - } - }, - ]); - }, - }, - { - key: "identify", - value(e) { - p("method not supported"); - }, - }, - { - key: "track", - value(e) { - if (e.message.event === "Order Completed") { - const t = e.message.properties - ? e.message.properties.total || e.message.properties.revenue - : 0; - p("Revenue", t), - (window.VWO = window.VWO || []), - window.VWO.push(["track.revenueConversion", t]); - } - }, - }, - { - key: "page", - value(e) { - p("method not supported"); - }, - }, - { - key: "isLoaded", - value() { - return !!window._vwo_code; - }, - }, - { - key: "isReady", - value() { - return !!window._vwo_code; - }, - }, - ]), - e - ); - })(); - const je = (function () { - function e(t) { - n(this, e), - (this.containerID = t.containerID), - (this.name = "GOOGLETAGMANAGER"); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init GoogleTagManager==="), - (function (e, t, n, r, i) { - (e[r] = e[r] || []), - e[r].push({ - "gtm.start": new Date().getTime(), - event: "gtm.js", - }); - const o = t.getElementsByTagName(n)[0]; - const s = t.createElement(n); - (s.async = !0), - (s.src = `https://www.googletagmanager.com/gtm.js?id=${i}`), - o.parentNode.insertBefore(s, o); - })(window, document, "script", "dataLayer", this.containerID); - }, - }, - { - key: "identify", - value(e) { - p("[GTM] identify:: method not supported"); - }, - }, - { - key: "track", - value(e) { - p("===in track GoogleTagManager==="); - const t = e.message; - const n = a( - { - event: t.event, - userId: t.userId, - anonymousId: t.anonymousId, - }, - t.properties - ); - this.sendToGTMDatalayer(n); - }, - }, - { - key: "page", - value(e) { - p("===in page GoogleTagManager==="); - let t; - const n = e.message; - const r = n.name; - const i = n.properties ? n.properties.category : void 0; - r && (t = `Viewed ${r} page`), - i && r && (t = `Viewed ${i} ${r} page`), - t || (t = "Viewed a Page"); - const o = a( - { event: t, userId: n.userId, anonymousId: n.anonymousId }, - n.properties - ); - this.sendToGTMDatalayer(o); - }, - }, - { - key: "isLoaded", - value() { - return !( - !window.dataLayer || - Array.prototype.push === window.dataLayer.push - ); - }, - }, - { - key: "sendToGTMDatalayer", - value(e) { - window.dataLayer.push(e); - }, - }, - { - key: "isReady", - value() { - return !( - !window.dataLayer || - Array.prototype.push === window.dataLayer.push - ); - }, - }, - ]), - e - ); - })(); - const De = (function () { - function e(t, r) { - if ( - (n(this, e), - (this.analytics = r), - (this.appKey = t.appKey), - t.appKey || (this.appKey = ""), - (this.endPoint = ""), - t.dataCenter) - ) { - const i = t.dataCenter.trim().split("-"); - i[0].toLowerCase() === "eu" - ? (this.endPoint = "sdk.fra-01.braze.eu") - : (this.endPoint = `sdk.iad-${i[1]}.braze.com`); - } - (this.name = "BRAZE"), p("Config ", t); - } - return ( - i(e, [ - { - key: "formatGender", - value(e) { - if (e && typeof e === "string") { - return ["woman", "female", "w", "f"].indexOf(e.toLowerCase()) > -1 - ? window.appboy.ab.User.Genders.FEMALE - : ["man", "male", "m"].indexOf(e.toLowerCase()) > -1 - ? window.appboy.ab.User.Genders.MALE - : ["other", "o"].indexOf(e.toLowerCase()) > -1 - ? window.appboy.ab.User.Genders.OTHER - : void 0; - } - }, - }, - { - key: "init", - value() { - p("===in init Braze==="), - (function (e, t, n, r, i) { - (e.appboy = {}), (e.appboyQueue = []); - for ( - let o = "initialize destroy getDeviceId toggleAppboyLogging setLogger openSession changeUser requestImmediateDataFlush requestFeedRefresh subscribeToFeedUpdates requestContentCardsRefresh subscribeToContentCardsUpdates logCardImpressions logCardClick logCardDismissal logFeedDisplayed logContentCardsDisplayed logInAppMessageImpression logInAppMessageClick logInAppMessageButtonClick logInAppMessageHtmlClick subscribeToNewInAppMessages subscribeToInAppMessage removeSubscription removeAllSubscriptions logCustomEvent logPurchase isPushSupported isPushBlocked isPushGranted isPushPermissionGranted registerAppboyPushMessages unregisterAppboyPushMessages trackLocation stopWebTracking resumeWebTracking wipeData ab ab.DeviceProperties ab.User ab.User.Genders ab.User.NotificationSubscriptionTypes ab.User.prototype.getUserId ab.User.prototype.setFirstName ab.User.prototype.setLastName ab.User.prototype.setEmail ab.User.prototype.setGender ab.User.prototype.setDateOfBirth ab.User.prototype.setCountry ab.User.prototype.setHomeCity ab.User.prototype.setLanguage ab.User.prototype.setEmailNotificationSubscriptionType ab.User.prototype.setPushNotificationSubscriptionType ab.User.prototype.setPhoneNumber ab.User.prototype.setAvatarImageUrl ab.User.prototype.setLastKnownLocation ab.User.prototype.setUserAttribute ab.User.prototype.setCustomUserAttribute ab.User.prototype.addToCustomAttributeArray ab.User.prototype.removeFromCustomAttributeArray ab.User.prototype.incrementCustomUserAttribute ab.User.prototype.addAlias ab.User.prototype.setCustomLocationAttribute ab.InAppMessage ab.InAppMessage.SlideFrom ab.InAppMessage.ClickAction ab.InAppMessage.DismissType ab.InAppMessage.OpenTarget ab.InAppMessage.ImageStyle ab.InAppMessage.TextAlignment ab.InAppMessage.Orientation ab.InAppMessage.CropType ab.InAppMessage.prototype.subscribeToClickedEvent ab.InAppMessage.prototype.subscribeToDismissedEvent ab.InAppMessage.prototype.removeSubscription ab.InAppMessage.prototype.removeAllSubscriptions ab.InAppMessage.prototype.closeMessage ab.InAppMessage.Button ab.InAppMessage.Button.prototype.subscribeToClickedEvent ab.InAppMessage.Button.prototype.removeSubscription ab.InAppMessage.Button.prototype.removeAllSubscriptions ab.SlideUpMessage ab.ModalMessage ab.FullScreenMessage ab.HtmlMessage ab.ControlMessage ab.Feed ab.Feed.prototype.getUnreadCardCount ab.ContentCards ab.ContentCards.prototype.getUnviewedCardCount ab.Card ab.Card.prototype.dismissCard ab.ClassicCard ab.CaptionedImage ab.Banner ab.ControlCard ab.WindowUtils display display.automaticallyShowNewInAppMessages display.showInAppMessage display.showFeed display.destroyFeed display.toggleFeed display.showContentCards display.hideContentCards display.toggleContentCards sharedLib".split( - " " - ), - s = 0; - s < o.length; - s++ - ) { - for ( - var a = o[s], u = e.appboy, c = a.split("."), l = 0; - l < c.length - 1; - l++ - ) - u = u[c[l]]; - u[c[l]] = new Function( - `return function ${a.replace( - /\./g, - "_" - )}(){window.appboyQueue.push(arguments); return true}` - )(); - } - (window.appboy.getUser = function () { - return new window.appboy.ab.User(); - }), - (window.appboy.getCachedFeed = function () { - return new window.appboy.ab.Feed(); - }), - (window.appboy.getCachedContentCards = function () { - return new window.appboy.ab.ContentCards(); - }), - ((i = t.createElement(n)).type = "text/javascript"), - (i.src = - "https://js.appboycdn.com/web-sdk/2.4/appboy.min.js"), - (i.async = 1), - (r = t.getElementsByTagName(n)[0]).parentNode.insertBefore( - i, - r - ); - })(window, document, "script"), - window.appboy.initialize(this.appKey, { - enableLogging: !0, - baseUrl: this.endPoint, - }), - window.appboy.display.automaticallyShowNewInAppMessages(); - const e = this.analytics.userId; - e && appboy.changeUser(e), window.appboy.openSession(); - }, - }, - { - key: "handleReservedProperties", - value(e) { - return ( - [ - "time", - "product_id", - "quantity", - "event_name", - "price", - "currency", - ].forEach(function (t) { - delete e[t]; - }), - e - ); - }, - }, - { - key: "identify", - value(e) { - const t = e.message.userId; - const n = e.message.context.traits.address; - const r = e.message.context.traits.avatar; - const i = e.message.context.traits.birthday; - const o = e.message.context.traits.email; - const s = e.message.context.traits.firstname; - const a = e.message.context.traits.gender; - const u = e.message.context.traits.lastname; - const c = e.message.context.traits.phone; - const l = JSON.parse(JSON.stringify(e.message.context.traits)); - window.appboy.changeUser(t), - window.appboy.getUser().setAvatarImageUrl(r), - o && window.appboy.getUser().setEmail(o), - s && window.appboy.getUser().setFirstName(s), - a && window.appboy.getUser().setGender(this.formatGender(a)), - u && window.appboy.getUser().setLastName(u), - c && window.appboy.getUser().setPhoneNumber(c), - n && - (window.appboy.getUser().setCountry(n.country), - window.appboy.getUser().setHomeCity(n.city)), - i && - window.appboy - .getUser() - .setDateOfBirth( - i.getUTCFullYear(), - i.getUTCMonth() + 1, - i.getUTCDate() - ); - [ - "avatar", - "address", - "birthday", - "email", - "id", - "firstname", - "gender", - "lastname", - "phone", - "facebook", - "twitter", - "first_name", - "last_name", - "dob", - "external_id", - "country", - "home_city", - "bio", - "gender", - "phone", - "email_subscribe", - "push_subscribe", - ].forEach(function (e) { - delete l[e]; - }), - Object.keys(l).forEach(function (e) { - window.appboy.getUser().setCustomUserAttribute(e, l[e]); - }); - }, - }, - { - key: "handlePurchase", - value(e, t) { - const n = e.products; - const r = e.currency; - window.appboy.changeUser(t), - del(e, "products"), - del(e, "currency"), - n.forEach(function (t) { - const n = t.product_id; - const i = t.price; - const o = t.quantity; - o && i && n && window.appboy.logPurchase(n, i, r, o, e); - }); - }, - }, - { - key: "track", - value(e) { - const t = e.message.userId; - const n = e.message.event; - let r = e.message.properties; - window.appboy.changeUser(t), - n.toLowerCase() === "order completed" - ? this.handlePurchase(r, t) - : ((r = this.handleReservedProperties(r)), - window.appboy.logCustomEvent(n, r)); - }, - }, - { - key: "page", - value(e) { - const t = e.message.userId; - const n = e.message.name; - let r = e.message.properties; - (r = this.handleReservedProperties(r)), - window.appboy.changeUser(t), - window.appboy.logCustomEvent(n, r); - }, - }, - { - key: "isLoaded", - value() { - return window.appboyQueue === null; - }, - }, - { - key: "isReady", - value() { - return window.appboyQueue === null; - }, - }, - ]), - e - ); - })(); - const Ue = R(function (e) { - !(function () { - const t = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var n = { - rotl(e, t) { - return (e << t) | (e >>> (32 - t)); - }, - rotr(e, t) { - return (e << (32 - t)) | (e >>> t); - }, - endian(e) { - if (e.constructor == Number) - return (16711935 & n.rotl(e, 8)) | (4278255360 & n.rotl(e, 24)); - for (let t = 0; t < e.length; t++) e[t] = n.endian(e[t]); - return e; - }, - randomBytes(e) { - for (var t = []; e > 0; e--) t.push(Math.floor(256 * Math.random())); - return t; - }, - bytesToWords(e) { - for (var t = [], n = 0, r = 0; n < e.length; n++, r += 8) - t[r >>> 5] |= e[n] << (24 - (r % 32)); - return t; - }, - wordsToBytes(e) { - for (var t = [], n = 0; n < 32 * e.length; n += 8) - t.push((e[n >>> 5] >>> (24 - (n % 32))) & 255); - return t; - }, - bytesToHex(e) { - for (var t = [], n = 0; n < e.length; n++) - t.push((e[n] >>> 4).toString(16)), t.push((15 & e[n]).toString(16)); - return t.join(""); - }, - hexToBytes(e) { - for (var t = [], n = 0; n < e.length; n += 2) - t.push(parseInt(e.substr(n, 2), 16)); - return t; - }, - bytesToBase64(e) { - for (var n = [], r = 0; r < e.length; r += 3) - for ( - let i = (e[r] << 16) | (e[r + 1] << 8) | e[r + 2], o = 0; - o < 4; - o++ - ) - 8 * r + 6 * o <= 8 * e.length - ? n.push(t.charAt((i >>> (6 * (3 - o))) & 63)) - : n.push("="); - return n.join(""); - }, - base64ToBytes(e) { - e = e.replace(/[^A-Z0-9+\/]/gi, ""); - for (var n = [], r = 0, i = 0; r < e.length; i = ++r % 4) - i != 0 && - n.push( - ((t.indexOf(e.charAt(r - 1)) & (Math.pow(2, -2 * i + 8) - 1)) << - (2 * i)) | - (t.indexOf(e.charAt(r)) >>> (6 - 2 * i)) - ); - return n; - }, - }; - e.exports = n; - })(); - }); - var Le = { - utf8: { - stringToBytes(e) { - return Le.bin.stringToBytes(unescape(encodeURIComponent(e))); - }, - bytesToString(e) { - return decodeURIComponent(escape(Le.bin.bytesToString(e))); - }, - }, - bin: { - stringToBytes(e) { - for (var t = [], n = 0; n < e.length; n++) - t.push(255 & e.charCodeAt(n)); - return t; - }, - bytesToString(e) { - for (var t = [], n = 0; n < e.length; n++) - t.push(String.fromCharCode(e[n])); - return t.join(""); - }, - }, - }; - const Me = Le; - const Ne = function (e) { - return ( - e != null && - (Be(e) || - (function (e) { - return ( - typeof e.readFloatLE === "function" && - typeof e.slice === "function" && - Be(e.slice(0, 0)) - ); - })(e) || - !!e._isBuffer) - ); - }; - function Be(e) { - return ( - !!e.constructor && - typeof e.constructor.isBuffer === "function" && - e.constructor.isBuffer(e) - ); - } - let qe; - let Fe; - const Ke = R(function (e) { - !(function () { - const t = Ue; - const n = Me.utf8; - const r = Ne; - const i = Me.bin; - var o = function (e, s) { - e.constructor == String - ? (e = - s && s.encoding === "binary" - ? i.stringToBytes(e) - : n.stringToBytes(e)) - : r(e) - ? (e = Array.prototype.slice.call(e, 0)) - : Array.isArray(e) || (e = e.toString()); - for ( - var a = t.bytesToWords(e), - u = 8 * e.length, - c = 1732584193, - l = -271733879, - d = -1732584194, - p = 271733878, - f = 0; - f < a.length; - f++ - ) - a[f] = - (16711935 & ((a[f] << 8) | (a[f] >>> 24))) | - (4278255360 & ((a[f] << 24) | (a[f] >>> 8))); - (a[u >>> 5] |= 128 << u % 32), (a[14 + (((u + 64) >>> 9) << 4)] = u); - const h = o._ff; - const g = o._gg; - const y = o._hh; - const m = o._ii; - for (f = 0; f < a.length; f += 16) { - const v = c; - const b = l; - const w = d; - const k = p; - (c = h(c, l, d, p, a[f + 0], 7, -680876936)), - (p = h(p, c, l, d, a[f + 1], 12, -389564586)), - (d = h(d, p, c, l, a[f + 2], 17, 606105819)), - (l = h(l, d, p, c, a[f + 3], 22, -1044525330)), - (c = h(c, l, d, p, a[f + 4], 7, -176418897)), - (p = h(p, c, l, d, a[f + 5], 12, 1200080426)), - (d = h(d, p, c, l, a[f + 6], 17, -1473231341)), - (l = h(l, d, p, c, a[f + 7], 22, -45705983)), - (c = h(c, l, d, p, a[f + 8], 7, 1770035416)), - (p = h(p, c, l, d, a[f + 9], 12, -1958414417)), - (d = h(d, p, c, l, a[f + 10], 17, -42063)), - (l = h(l, d, p, c, a[f + 11], 22, -1990404162)), - (c = h(c, l, d, p, a[f + 12], 7, 1804603682)), - (p = h(p, c, l, d, a[f + 13], 12, -40341101)), - (d = h(d, p, c, l, a[f + 14], 17, -1502002290)), - (c = g( - c, - (l = h(l, d, p, c, a[f + 15], 22, 1236535329)), - d, - p, - a[f + 1], - 5, - -165796510 - )), - (p = g(p, c, l, d, a[f + 6], 9, -1069501632)), - (d = g(d, p, c, l, a[f + 11], 14, 643717713)), - (l = g(l, d, p, c, a[f + 0], 20, -373897302)), - (c = g(c, l, d, p, a[f + 5], 5, -701558691)), - (p = g(p, c, l, d, a[f + 10], 9, 38016083)), - (d = g(d, p, c, l, a[f + 15], 14, -660478335)), - (l = g(l, d, p, c, a[f + 4], 20, -405537848)), - (c = g(c, l, d, p, a[f + 9], 5, 568446438)), - (p = g(p, c, l, d, a[f + 14], 9, -1019803690)), - (d = g(d, p, c, l, a[f + 3], 14, -187363961)), - (l = g(l, d, p, c, a[f + 8], 20, 1163531501)), - (c = g(c, l, d, p, a[f + 13], 5, -1444681467)), - (p = g(p, c, l, d, a[f + 2], 9, -51403784)), - (d = g(d, p, c, l, a[f + 7], 14, 1735328473)), - (c = y( - c, - (l = g(l, d, p, c, a[f + 12], 20, -1926607734)), - d, - p, - a[f + 5], - 4, - -378558 - )), - (p = y(p, c, l, d, a[f + 8], 11, -2022574463)), - (d = y(d, p, c, l, a[f + 11], 16, 1839030562)), - (l = y(l, d, p, c, a[f + 14], 23, -35309556)), - (c = y(c, l, d, p, a[f + 1], 4, -1530992060)), - (p = y(p, c, l, d, a[f + 4], 11, 1272893353)), - (d = y(d, p, c, l, a[f + 7], 16, -155497632)), - (l = y(l, d, p, c, a[f + 10], 23, -1094730640)), - (c = y(c, l, d, p, a[f + 13], 4, 681279174)), - (p = y(p, c, l, d, a[f + 0], 11, -358537222)), - (d = y(d, p, c, l, a[f + 3], 16, -722521979)), - (l = y(l, d, p, c, a[f + 6], 23, 76029189)), - (c = y(c, l, d, p, a[f + 9], 4, -640364487)), - (p = y(p, c, l, d, a[f + 12], 11, -421815835)), - (d = y(d, p, c, l, a[f + 15], 16, 530742520)), - (c = m( - c, - (l = y(l, d, p, c, a[f + 2], 23, -995338651)), - d, - p, - a[f + 0], - 6, - -198630844 - )), - (p = m(p, c, l, d, a[f + 7], 10, 1126891415)), - (d = m(d, p, c, l, a[f + 14], 15, -1416354905)), - (l = m(l, d, p, c, a[f + 5], 21, -57434055)), - (c = m(c, l, d, p, a[f + 12], 6, 1700485571)), - (p = m(p, c, l, d, a[f + 3], 10, -1894986606)), - (d = m(d, p, c, l, a[f + 10], 15, -1051523)), - (l = m(l, d, p, c, a[f + 1], 21, -2054922799)), - (c = m(c, l, d, p, a[f + 8], 6, 1873313359)), - (p = m(p, c, l, d, a[f + 15], 10, -30611744)), - (d = m(d, p, c, l, a[f + 6], 15, -1560198380)), - (l = m(l, d, p, c, a[f + 13], 21, 1309151649)), - (c = m(c, l, d, p, a[f + 4], 6, -145523070)), - (p = m(p, c, l, d, a[f + 11], 10, -1120210379)), - (d = m(d, p, c, l, a[f + 2], 15, 718787259)), - (l = m(l, d, p, c, a[f + 9], 21, -343485551)), - (c = (c + v) >>> 0), - (l = (l + b) >>> 0), - (d = (d + w) >>> 0), - (p = (p + k) >>> 0); - } - return t.endian([c, l, d, p]); - }; - (o._ff = function (e, t, n, r, i, o, s) { - const a = e + ((t & n) | (~t & r)) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._gg = function (e, t, n, r, i, o, s) { - const a = e + ((t & r) | (n & ~r)) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._hh = function (e, t, n, r, i, o, s) { - const a = e + (t ^ n ^ r) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._ii = function (e, t, n, r, i, o, s) { - const a = e + (n ^ (t | ~r)) + (i >>> 0) + s; - return ((a << o) | (a >>> (32 - o))) + t; - }), - (o._blocksize = 16), - (o._digestsize = 16), - (e.exports = function (e, n) { - if (e == null) throw new Error(`Illegal argument ${e}`); - const r = t.wordsToBytes(o(e, n)); - return n && n.asBytes - ? r - : n && n.asString - ? i.bytesToString(r) - : t.bytesToHex(r); - }); - })(); - }); - const Ge = (function () { - function e(t) { - n(this, e), - (this.NAME = "INTERCOM"), - (this.API_KEY = t.apiKey), - (this.APP_ID = t.appId), - (this.MOBILE_APP_ID = t.mobileAppId), - p("Config ", t); - } - return ( - i(e, [ - { - key: "init", - value() { - (window.intercomSettings = { app_id: this.APP_ID }), - (function () { - const e = window; - const t = e.Intercom; - if (typeof t === "function") - t("reattach_activator"), t("update", e.intercomSettings); - else { - const n = document; - const r = function e() { - e.c(arguments); - }; - (r.q = []), - (r.c = function (e) { - r.q.push(e); - }), - (e.Intercom = r); - const i = function () { - const e = n.createElement("script"); - (e.type = "text/javascript"), - (e.async = !0), - (e.src = `https://widget.intercom.io/widget/${window.intercomSettings.app_id}`); - const t = n.getElementsByTagName("script")[0]; - t.parentNode.insertBefore(e, t); - }; - document.readyState === "complete" - ? (i(), (window.intercom_code = !0)) - : e.attachEvent - ? (e.attachEvent("onload", i), (window.intercom_code = !0)) - : (e.addEventListener("load", i, !1), - (window.intercom_code = !0)); - } - })(); - }, - }, - { - key: "page", - value() { - window.Intercom("update"); - }, - }, - { - key: "identify", - value(e) { - const n = {}; - const r = e.message.context; - if ((r.Intercom ? r.Intercom : null) != null) { - const i = r.Intercom.user_hash ? r.Intercom.user_hash : null; - i != null && (n.user_hash = i); - const o = r.Intercom.hideDefaultLauncher - ? r.Intercom.hideDefaultLauncher - : null; - o != null && (n.hide_default_launcher = o); - } - Object.keys(r.traits).forEach(function (e) { - if (r.traits.hasOwnProperty(e)) { - const i = r.traits[e]; - if (e === "company") { - const o = []; - const s = {}; - typeof r.traits[e] === "string" && - (s.company_id = Ke(r.traits[e])); - const a = - (t(r.traits[e]) == "object" && Object.keys(r.traits[e])) || - []; - a.forEach(function (t) { - a.hasOwnProperty(t) && - (t != "id" - ? (s[t] = r.traits[e][t]) - : (s.company_id = r.traits[e][t])); - }), - t(r.traits[e]) != "object" || - a.includes("id") || - (s.company_id = Ke(s.name)), - o.push(s), - (n.companies = o); - } else n[e] = r.traits[e]; - switch (e) { - case "createdAt": - n.created_at = i; - break; - case "anonymousId": - n.user_id = i; - } - } - }), - (n.user_id = e.message.userId), - window.Intercom("update", n); - }, - }, - { - key: "track", - value(e) { - const t = {}; - const n = e.message; - (n.properties ? Object.keys(n.properties) : null).forEach(function ( - e - ) { - const r = n.properties[e]; - t[e] = r; - }), - n.event && (t.event_name = n.event), - (t.user_id = n.userId ? n.userId : n.anonymousId), - (t.created_at = Math.floor( - new Date(n.originalTimestamp).getTime() / 1e3 - )), - window.Intercom("trackEvent", t.event_name, t); - }, - }, - { - key: "isLoaded", - value() { - return !!window.intercom_code; - }, - }, - { - key: "isReady", - value() { - return !!window.intercom_code; - }, - }, - ]), - e - ); - })(); - const He = (function () { - function e(t) { - n(this, e), - (this.projectID = t.projectID), - (this.writeKey = t.writeKey), - (this.ipAddon = t.ipAddon), - (this.uaAddon = t.uaAddon), - (this.urlAddon = t.urlAddon), - (this.referrerAddon = t.referrerAddon), - (this.client = null), - (this.name = "KEEN"); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init Keen==="), - T( - "keen-integration", - "https://cdn.jsdelivr.net/npm/keen-tracking@4" - ); - var e = setInterval( - function () { - void 0 !== window.KeenTracking && - void 0 !== window.KeenTracking && - ((this.client = (function (e) { - return ( - (e.client = new window.KeenTracking({ - projectId: e.projectID, - writeKey: e.writeKey, - })), - e.client - ); - })(this)), - clearInterval(e)); - }.bind(this), - 1e3 - ); - }, - }, - { - key: "identify", - value(e) { - p("in Keen identify"); - const t = e.message.context.traits; - const n = e.message.userId - ? e.message.userId - : e.message.anonymousId; - var r = e.message.properties - ? Object.assign(r, e.message.properties) - : {}; - (r.user = { userId: n, traits: t }), - (r = this.getAddOn(r)), - this.client.extendEvents(r); - }, - }, - { - key: "track", - value(e) { - p("in Keen track"); - const t = e.message.event; - let n = e.message.properties; - (n = this.getAddOn(n)), this.client.recordEvent(t, n); - }, - }, - { - key: "page", - value(e) { - p("in Keen page"); - const t = e.message.name; - const n = e.message.properties - ? e.message.properties.category - : void 0; - let r = "Loaded a Page"; - t && (r = `Viewed ${t} page`), - n && t && (r = `Viewed ${n} ${t} page`); - let i = e.message.properties; - (i = this.getAddOn(i)), this.client.recordEvent(r, i); - }, - }, - { - key: "isLoaded", - value() { - return p("in Keen isLoaded"), !(this.client == null); - }, - }, - { - key: "isReady", - value() { - return !(this.client == null); - }, - }, - { - key: "getAddOn", - value(e) { - const t = []; - return ( - this.ipAddon && - ((e.ip_address = "${keen.ip}"), - t.push({ - name: "keen:ip_to_geo", - input: { ip: "ip_address" }, - output: "ip_geo_info", - })), - this.uaAddon && - ((e.user_agent = "${keen.user_agent}"), - t.push({ - name: "keen:ua_parser", - input: { ua_string: "user_agent" }, - output: "parsed_user_agent", - })), - this.urlAddon && - ((e.page_url = document.location.href), - t.push({ - name: "keen:url_parser", - input: { url: "page_url" }, - output: "parsed_page_url", - })), - this.referrerAddon && - ((e.page_url = document.location.href), - (e.referrer_url = document.referrer), - t.push({ - name: "keen:referrer_parser", - input: { - referrer_url: "referrer_url", - page_url: "page_url", - }, - output: "referrer_info", - })), - (e.keen = { addons: t }), - e - ); - }, - }, - ]), - e - ); - })(); - const Ve = Object.prototype; - const ze = Ve.hasOwnProperty; - const Je = Ve.toString; - typeof Symbol === "function" && (qe = Symbol.prototype.valueOf), - typeof BigInt === "function" && (Fe = BigInt.prototype.valueOf); - const We = function (e) { - return e != e; - }; - const $e = { boolean: 1, number: 1, string: 1, undefined: 1 }; - const Ye = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/; - const Qe = /^[A-Fa-f0-9]+$/; - const Ze = {}; - (Ze.a = Ze.type = function (e, t) { - return typeof e === t; - }), - (Ze.defined = function (e) { - return void 0 !== e; - }), - (Ze.empty = function (e) { - let t; - const n = Je.call(e); - if ( - n === "[object Array]" || - n === "[object Arguments]" || - n === "[object String]" - ) - return e.length === 0; - if (n === "[object Object]") { - for (t in e) if (ze.call(e, t)) return !1; - return !0; - } - return !e; - }), - (Ze.equal = function (e, t) { - if (e === t) return !0; - let n; - const r = Je.call(e); - if (r !== Je.call(t)) return !1; - if (r === "[object Object]") { - for (n in e) if (!Ze.equal(e[n], t[n]) || !(n in t)) return !1; - for (n in t) if (!Ze.equal(e[n], t[n]) || !(n in e)) return !1; - return !0; - } - if (r === "[object Array]") { - if ((n = e.length) !== t.length) return !1; - for (; n--; ) if (!Ze.equal(e[n], t[n])) return !1; - return !0; - } - return r === "[object Function]" - ? e.prototype === t.prototype - : r === "[object Date]" && e.getTime() === t.getTime(); - }), - (Ze.hosted = function (e, t) { - const n = typeof t[e]; - return n === "object" ? !!t[e] : !$e[n]; - }), - (Ze.instance = Ze.instanceof = function (e, t) { - return e instanceof t; - }), - (Ze.nil = Ze.null = function (e) { - return e === null; - }), - (Ze.undef = Ze.undefined = function (e) { - return void 0 === e; - }), - (Ze.args = Ze.arguments = function (e) { - const t = Je.call(e) === "[object Arguments]"; - const n = - !Ze.array(e) && Ze.arraylike(e) && Ze.object(e) && Ze.fn(e.callee); - return t || n; - }), - (Ze.array = - Array.isArray || - function (e) { - return Je.call(e) === "[object Array]"; - }), - (Ze.args.empty = function (e) { - return Ze.args(e) && e.length === 0; - }), - (Ze.array.empty = function (e) { - return Ze.array(e) && e.length === 0; - }), - (Ze.arraylike = function (e) { - return ( - !!e && - !Ze.bool(e) && - ze.call(e, "length") && - isFinite(e.length) && - Ze.number(e.length) && - e.length >= 0 - ); - }), - (Ze.bool = Ze.boolean = function (e) { - return Je.call(e) === "[object Boolean]"; - }), - (Ze.false = function (e) { - return Ze.bool(e) && !1 === Boolean(Number(e)); - }), - (Ze.true = function (e) { - return Ze.bool(e) && !0 === Boolean(Number(e)); - }), - (Ze.date = function (e) { - return Je.call(e) === "[object Date]"; - }), - (Ze.date.valid = function (e) { - return Ze.date(e) && !isNaN(Number(e)); - }), - (Ze.element = function (e) { - return ( - void 0 !== e && - typeof HTMLElement !== "undefined" && - e instanceof HTMLElement && - e.nodeType === 1 - ); - }), - (Ze.error = function (e) { - return Je.call(e) === "[object Error]"; - }), - (Ze.fn = Ze.function = function (e) { - if (typeof window !== "undefined" && e === window.alert) return !0; - const t = Je.call(e); - return ( - t === "[object Function]" || - t === "[object GeneratorFunction]" || - t === "[object AsyncFunction]" - ); - }), - (Ze.number = function (e) { - return Je.call(e) === "[object Number]"; - }), - (Ze.infinite = function (e) { - return e === 1 / 0 || e === -1 / 0; - }), - (Ze.decimal = function (e) { - return Ze.number(e) && !We(e) && !Ze.infinite(e) && e % 1 != 0; - }), - (Ze.divisibleBy = function (e, t) { - const n = Ze.infinite(e); - const r = Ze.infinite(t); - const i = Ze.number(e) && !We(e) && Ze.number(t) && !We(t) && t !== 0; - return n || r || (i && e % t == 0); - }), - (Ze.integer = Ze.int = function (e) { - return Ze.number(e) && !We(e) && e % 1 == 0; - }), - (Ze.maximum = function (e, t) { - if (We(e)) throw new TypeError("NaN is not a valid value"); - if (!Ze.arraylike(t)) - throw new TypeError("second argument must be array-like"); - for (let n = t.length; --n >= 0; ) if (e < t[n]) return !1; - return !0; - }), - (Ze.minimum = function (e, t) { - if (We(e)) throw new TypeError("NaN is not a valid value"); - if (!Ze.arraylike(t)) - throw new TypeError("second argument must be array-like"); - for (let n = t.length; --n >= 0; ) if (e > t[n]) return !1; - return !0; - }), - (Ze.nan = function (e) { - return !Ze.number(e) || e != e; - }), - (Ze.even = function (e) { - return Ze.infinite(e) || (Ze.number(e) && e == e && e % 2 == 0); - }), - (Ze.odd = function (e) { - return Ze.infinite(e) || (Ze.number(e) && e == e && e % 2 != 0); - }), - (Ze.ge = function (e, t) { - if (We(e) || We(t)) throw new TypeError("NaN is not a valid value"); - return !Ze.infinite(e) && !Ze.infinite(t) && e >= t; - }), - (Ze.gt = function (e, t) { - if (We(e) || We(t)) throw new TypeError("NaN is not a valid value"); - return !Ze.infinite(e) && !Ze.infinite(t) && e > t; - }), - (Ze.le = function (e, t) { - if (We(e) || We(t)) throw new TypeError("NaN is not a valid value"); - return !Ze.infinite(e) && !Ze.infinite(t) && e <= t; - }), - (Ze.lt = function (e, t) { - if (We(e) || We(t)) throw new TypeError("NaN is not a valid value"); - return !Ze.infinite(e) && !Ze.infinite(t) && e < t; - }), - (Ze.within = function (e, t, n) { - if (We(e) || We(t) || We(n)) - throw new TypeError("NaN is not a valid value"); - if (!Ze.number(e) || !Ze.number(t) || !Ze.number(n)) - throw new TypeError("all arguments must be numbers"); - return ( - Ze.infinite(e) || Ze.infinite(t) || Ze.infinite(n) || (e >= t && e <= n) - ); - }), - (Ze.object = function (e) { - return Je.call(e) === "[object Object]"; - }), - (Ze.primitive = function (e) { - return ( - !e || - !(typeof e === "object" || Ze.object(e) || Ze.fn(e) || Ze.array(e)) - ); - }), - (Ze.hash = function (e) { - return ( - Ze.object(e) && - e.constructor === Object && - !e.nodeType && - !e.setInterval - ); - }), - (Ze.regexp = function (e) { - return Je.call(e) === "[object RegExp]"; - }), - (Ze.string = function (e) { - return Je.call(e) === "[object String]"; - }), - (Ze.base64 = function (e) { - return Ze.string(e) && (!e.length || Ye.test(e)); - }), - (Ze.hex = function (e) { - return Ze.string(e) && (!e.length || Qe.test(e)); - }), - (Ze.symbol = function (e) { - return ( - typeof Symbol === "function" && - Je.call(e) === "[object Symbol]" && - typeof qe.call(e) === "symbol" - ); - }), - (Ze.bigint = function (e) { - return ( - typeof BigInt === "function" && - Je.call(e) === "[object BigInt]" && - typeof Fe.call(e) === "bigint" - ); - }); - let Xe; - const et = Ze; - const tt = Object.prototype.hasOwnProperty; - const nt = function (e) { - for ( - let t = Array.prototype.slice.call(arguments, 1), n = 0; - n < t.length; - n += 1 - ) - for (const r in t[n]) tt.call(t[n], r) && (e[r] = t[n][r]); - return e; - }; - const rt = R(function (e) { - function t(e) { - return function (t, n, r, o) { - let s; - (normalize = - o && - (function (e) { - return typeof e === "function"; - })(o.normalizer) - ? o.normalizer - : i), - (n = normalize(n)); - for (var a = !1; !a; ) u(); - function u() { - for (s in t) { - const e = normalize(s); - if (n.indexOf(e) === 0) { - const r = n.substr(e.length); - if (r.charAt(0) === "." || r.length === 0) { - n = r.substr(1); - const i = t[s]; - return i == null - ? void (a = !0) - : n.length - ? void (t = i) - : void (a = !0); - } - } - } - (s = void 0), (a = !0); - } - if (s) return t == null ? t : e(t, s, r); - }; - } - function n(e, t) { - return e.hasOwnProperty(t) && delete e[t], e; - } - function r(e, t, n) { - return e.hasOwnProperty(t) && (e[t] = n), e; - } - function i(e) { - return e.replace(/[^a-zA-Z0-9\.]+/g, "").toLowerCase(); - } - (e.exports = t(function (e, t) { - if (e.hasOwnProperty(t)) return e[t]; - })), - (e.exports.find = e.exports), - (e.exports.replace = function (e, n, i, o) { - return t(r).call(this, e, n, i, o), e; - }), - (e.exports.del = function (e, r, i) { - return t(n).call(this, e, r, null, i), e; - }); - }); - const it = (rt.find, rt.replace, rt.del, Object.prototype.toString); - const ot = function (e) { - switch (it.call(e)) { - case "[object Function]": - return "function"; - case "[object Date]": - return "date"; - case "[object RegExp]": - return "regexp"; - case "[object Arguments]": - return "arguments"; - case "[object Array]": - return "array"; - case "[object String]": - return "string"; - } - return e === null - ? "null" - : void 0 === e - ? "undefined" - : e && e.nodeType === 1 - ? "element" - : e === Object(e) - ? "object" - : typeof e; - }; - const st = /\b(Array|Date|Object|Math|JSON)\b/g; - const at = function (e, t) { - const n = (function (e) { - for (var t = [], n = 0; n < e.length; n++) - ~t.indexOf(e[n]) || t.push(e[n]); - return t; - })( - (function (e) { - return ( - e - .replace(/\.\w+|\w+ *\(|"[^"]*"|'[^']*'|\/([^/]+)\//g, "") - .replace(st, "") - .match(/[a-zA-Z_]\w*/g) || [] - ); - })(e) - ); - return ( - t && - typeof t === "string" && - (t = (function (e) { - return function (t) { - return e + t; - }; - })(t)), - t - ? (function (e, t, n) { - return e.replace( - /\.\w+|\w+ *\(|"[^"]*"|'[^']*'|\/([^/]+)\/|[a-zA-Z_]\w*/g, - function (e) { - return e[e.length - 1] == "(" || ~t.indexOf(e) ? n(e) : e; - } - ); - })(e, n, t) - : n - ); - }; - try { - Xe = at; - } catch (e) { - Xe = at; - } - const ut = ct; - function ct(e) { - switch ({}.toString.call(e)) { - case "[object Object]": - return (function (e) { - const t = {}; - for (const n in e) - t[n] = typeof e[n] === "string" ? lt(e[n]) : ct(e[n]); - return function (e) { - if (typeof e !== "object") return !1; - for (const n in t) { - if (!(n in e)) return !1; - if (!t[n](e[n])) return !1; - } - return !0; - }; - })(e); - case "[object Function]": - return e; - case "[object String]": - return /^ *\W+/.test((n = e)) - ? new Function("_", `return _ ${n}`) - : new Function( - "_", - `return ${(function (e) { - let t; - let n; - let r; - const i = Xe(e); - if (!i.length) return `_.${e}`; - for (n = 0; n < i.length; n++) - (r = i[n]), - (e = dt( - r, - e, - (t = `('function' == typeof ${(t = `_.${r}`)} ? ${t}() : ${t})`) - )); - return e; - })(n)}` - ); - case "[object RegExp]": - return ( - (t = e), - function (e) { - return t.test(e); - } - ); - default: - return lt(e); - } - let t; - let n; - } - function lt(e) { - return function (t) { - return e === t; - }; - } - function dt(e, t, n) { - return t.replace(new RegExp(`(\\.)?${e}`, "g"), function (e, t) { - return t ? e : n; - }); - } - try { - var pt = ot; - } catch (e) { - pt = ot; - } - const ft = Object.prototype.hasOwnProperty; - const ht = function (e, t, n) { - switch (((t = ut(t)), (n = n || this), pt(e))) { - case "array": - return gt(e, t, n); - case "object": - return typeof e.length === "number" - ? gt(e, t, n) - : (function (e, t, n) { - for (const r in e) ft.call(e, r) && t.call(n, r, e[r]); - })(e, t, n); - case "string": - return (function (e, t, n) { - for (let r = 0; r < e.length; ++r) t.call(n, e.charAt(r), r); - })(e, t, n); - } - }; - function gt(e, t, n) { - for (let r = 0; r < e.length; ++r) t.call(n, e[r], r); - } - const yt = (function () { - function e(t) { - n(this, e), - (this.apiKey = t.apiKey), - (this.prefixProperties = t.prefixProperties), - (this.name = "KISSMETRICS"); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init Kissmetrics==="), (window._kmq = window._kmq || []); - const e = window._kmk || this.apiKey; - function t(e) { - setTimeout(function () { - const t = document; - const n = t.getElementsByTagName("script")[0]; - const r = t.createElement("script"); - (r.type = "text/javascript"), - (r.async = !0), - (r.src = e), - n.parentNode.insertBefore(r, n); - }, 1); - } - t("//i.kissmetrics.com/i.js"), - t(`//scripts.kissmetrics.com/${e}.2.js`), - this.isEnvMobile() && - window._kmq.push(["set", { "Mobile Session": "Yes" }]); - }, - }, - { - key: "isEnvMobile", - value() { - return ( - navigator.userAgent.match(/Android/i) || - navigator.userAgent.match(/BlackBerry/i) || - navigator.userAgent.match(/IEMobile/i) || - navigator.userAgent.match(/Opera Mini/i) || - navigator.userAgent.match(/iPad/i) || - navigator.userAgent.match(/iPhone|iPod/i) - ); - }, - }, - { - key: "toUnixTimestamp", - value(e) { - return (e = new Date(e)), Math.floor(e.getTime() / 1e3); - }, - }, - { - key: "clean", - value(e) { - let t = {}; - for (const n in e) - if (e.hasOwnProperty(n)) { - const r = e[n]; - if (r == null) continue; - if (et.date(r)) { - t[n] = this.toUnixTimestamp(r); - continue; - } - if (et.bool(r)) { - t[n] = r; - continue; - } - if (et.number(r)) { - t[n] = r; - continue; - } - if ((p(r.toString()), r.toString() !== "[object Object]")) { - t[n] = r.toString(); - continue; - } - const i = {}; - i[n] = r; - const o = this.flatten(i, { safe: !0 }); - for (const s in o) et.array(o[s]) && (o[s] = o[s].toString()); - delete (t = nt(t, o))[n]; - } - return t; - }, - }, - { - key: "flatten", - value(e, t) { - const n = (t = t || {}).delimiter || "."; - let r = t.maxDepth; - let i = 1; - const o = {}; - return ( - (function e(s, a) { - for (const u in s) - if (s.hasOwnProperty(u)) { - const c = s[u]; - const l = t.safe && et.array(c); - const d = Object.prototype.toString.call(c); - const p = d === "[object Object]" || d === "[object Array]"; - const f = []; - const h = a ? a + n + u : u; - for (const g in (t.maxDepth || (r = i + 1), c)) - c.hasOwnProperty(g) && f.push(g); - if (!l && p && f.length && i < r) return ++i, e(c, h); - o[h] = c; - } - })(e), - o - ); - }, - }, - { - key: "prefix", - value(e, t) { - const n = {}; - return ( - ht(t, function (t, r) { - t === "Billing Amount" - ? (n[t] = r) - : t === "revenue" - ? ((n[`${e} - ${t}`] = r), (n["Billing Amount"] = r)) - : (n[`${e} - ${t}`] = r); - }), - n - ); - }, - }, - { - key: "identify", - value(e) { - p("in Kissmetrics identify"); - const t = this.clean(e.message.context.traits); - const n = - e.message.userId && e.message.userId != "" - ? e.message.userId - : void 0; - n && window._kmq.push(["identify", n]), - t && window._kmq.push(["set", t]); - }, - }, - { - key: "track", - value(e) { - p("in Kissmetrics track"); - const t = e.message.event; - let n = JSON.parse(JSON.stringify(e.message.properties)); - const r = this.toUnixTimestamp(new Date()); - const i = I(n); - i && (n.revenue = i); - const o = n.products; - o && delete n.products, - (n = this.clean(n)), - p(JSON.stringify(n)), - this.prefixProperties && (n = this.prefix(t, n)), - window._kmq.push(["record", t, n]); - const s = function (e, n) { - let i = e; - this.prefixProperties && (i = this.prefix(t, i)), - (i._t = r + n), - (i._d = 1), - window.KM.set(i); - }.bind(this); - o && - window._kmq.push(function () { - ht(o, s); - }); - }, - }, - { - key: "page", - value(e) { - p("in Kissmetrics page"); - const t = e.message.name; - const n = e.message.properties - ? e.message.properties.category - : void 0; - let r = "Loaded a Page"; - t && (r = `Viewed ${t} page`), - n && t && (r = `Viewed ${n} ${t} page`); - let i = e.message.properties; - this.prefixProperties && (i = this.prefix("Page", i)), - window._kmq.push(["record", r, i]); - }, - }, - { - key: "alias", - value(e) { - const t = e.message.previousId; - const n = e.message.userId; - window._kmq.push(["alias", n, t]); - }, - }, - { - key: "group", - value(e) { - const t = e.message.groupId; - let n = e.message.traits; - (n = this.prefix("Group", n)), - t && (n["Group - id"] = t), - window._kmq.push(["set", n]), - p("in Kissmetrics group"); - }, - }, - { - key: "isLoaded", - value() { - return et.object(window.KM); - }, - }, - { - key: "isReady", - value() { - return et.object(window.KM); - }, - }, - ]), - e - ); - })(); - const mt = (function () { - function e(t) { - n(this, e), - (this.siteID = t.siteID), - (this.apiKey = t.apiKey), - (this.name = "CUSTOMERIO"); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init Customer IO init==="), - (window._cio = window._cio || []); - const e = this.siteID; - !(function () { - let t; - let n; - let r; - for ( - t = function (e) { - return function () { - window._cio.push( - [e].concat(Array.prototype.slice.call(arguments, 0)) - ); - }; - }, - n = ["load", "identify", "sidentify", "track", "page"], - r = 0; - r < n.length; - r++ - ) - window._cio[n[r]] = t(n[r]); - const i = document.createElement("script"); - const o = document.getElementsByTagName("script")[0]; - (i.async = !0), - (i.id = "cio-tracker"), - i.setAttribute("data-site-id", e), - (i.src = "https://assets.customer.io/assets/track.js"), - o.parentNode.insertBefore(i, o); - })(); - }, - }, - { - key: "identify", - value(e) { - p("in Customer IO identify"); - const t = e.message.userId - ? e.message.userId - : e.message.anonymousId; - const n = e.message.context.traits ? e.message.context.traits : {}; - n.created_at || - (n.created_at = Math.floor(new Date().getTime() / 1e3)), - (n.id = t), - window._cio.identify(n); - }, - }, - { - key: "track", - value(e) { - p("in Customer IO track"); - const t = e.message.event; - const n = e.message.properties; - window._cio.track(t, n); - }, - }, - { - key: "page", - value(e) { - p("in Customer IO page"); - const t = e.message.name || e.message.properties.url; - window._cio.page(t, e.message.properties); - }, - }, - { - key: "isLoaded", - value() { - return !(!window._cio || window._cio.push === Array.prototype.push); - }, - }, - { - key: "isReady", - value() { - return !(!window._cio || window._cio.push === Array.prototype.push); - }, - }, - ]), - e - ); - })(); - let vt = !1; - const bt = []; - var wt = setInterval(function () { - document.body && ((vt = !0), ht(bt, kt), clearInterval(wt)); - }, 5); - function kt(e) { - e(document.body); - } - for ( - var It = (function () { - function e(t, r) { - n(this, e), - (this.analytics = r), - (this._sf_async_config = window._sf_async_config = - window._sf_async_config || {}), - (window._sf_async_config.useCanonical = !0), - (window._sf_async_config.uid = t.uid), - (window._sf_async_config.domain = t.domain), - (this.isVideo = !!t.video), - (this.sendNameAndCategoryAsTitle = - t.sendNameAndCategoryAsTitle || !0), - (this.subscriberEngagementKeys = t.subscriberEngagementKeys || []), - (this.replayEvents = []), - (this.failed = !1), - (this.isFirstPageCallMade = !1), - (this.name = "CHARTBEAT"); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init Chartbeat==="); - }, - }, - { - key: "identify", - value(e) { - p("in Chartbeat identify"); - }, - }, - { - key: "track", - value(e) { - p("in Chartbeat track"); - }, - }, - { - key: "page", - value(e) { - if ( - (p("in Chartbeat page"), - this.loadConfig(e), - this.isFirstPageCallMade) - ) { - if (this.failed) - return ( - p("===ignoring cause failed integration==="), - void (this.replayEvents = []) - ); - if (!this.isLoaded() && !this.failed) - return ( - p("===pushing to replay queue for chartbeat==="), - void this.replayEvents.push(["page", e]) - ); - p("===processing page event in chartbeat==="); - const t = e.message.properties; - window.pSUPERFLY.virtualPage(t.path); - } else (this.isFirstPageCallMade = !0), this.initAfterPage(); - }, - }, - { - key: "isLoaded", - value() { - return ( - p("in Chartbeat isLoaded"), - !this.isFirstPageCallMade || !!window.pSUPERFLY - ); - }, - }, - { - key: "isFailed", - value() { - return this.failed; - }, - }, - { - key: "isReady", - value() { - return !!window.pSUPERFLY; - }, - }, - { - key: "loadConfig", - value(e) { - let t; - const n = e.message.properties; - const r = n ? n.category : void 0; - const i = e.message.name; - const o = n ? n.author : void 0; - this.sendNameAndCategoryAsTitle && - (t = r && i ? `${r} ${i}` : i), - r && (window._sf_async_config.sections = r), - o && (window._sf_async_config.authors = o), - t && (window._sf_async_config.title = t); - const s = (window._cbq = window._cbq || []); - for (const a in n) - n.hasOwnProperty(a) && - this.subscriberEngagementKeys.indexOf(a) > -1 && - s.push([a, n[a]]); - }, - }, - { - key: "initAfterPage", - value() { - let e; - const t = this; - (e = function () { - let e; - let n; - const r = t.isVideo ? "chartbeat_video.js" : "chartbeat.js"; - (e = document.createElement("script")), - (n = document.getElementsByTagName("script")[0]), - (e.type = "text/javascript"), - (e.async = !0), - (e.src = `//static.chartbeat.com/js/${r}`), - n.parentNode.insertBefore(e, n); - }), - vt ? kt(e) : bt.push(e), - this._isReady(this).then(function (e) { - p("===replaying on chartbeat==="), - e.replayEvents.forEach(function (t) { - e[t[0]](t[1]); - }); - }); - }, - }, - { - key: "pause", - value(e) { - return new Promise(function (t) { - setTimeout(t, e); - }); - }, - }, - { - key: "_isReady", - value(e) { - const t = this; - const n = - arguments.length > 1 && void 0 !== arguments[1] - ? arguments[1] - : 0; - return new Promise(function (r) { - return t.isLoaded() - ? ((t.failed = !1), - p("===chartbeat loaded successfully==="), - e.analytics.emit("ready"), - r(e)) - : n >= 1e4 - ? ((t.failed = !0), p("===chartbeat failed==="), r(e)) - : void t.pause(1e3).then(function () { - return t._isReady(e, n + 1e3).then(r); - }); - }); - }, - }, - ]), - e - ); - })(), - _t = (function () { - function e(t, r) { - n(this, e), - (this.c2ID = t.c2ID), - (this.analytics = r), - (this.comScoreBeaconParam = t.comScoreBeaconParam - ? t.comScoreBeaconParam - : {}), - (this.isFirstPageCallMade = !1), - (this.failed = !1), - (this.comScoreParams = {}), - (this.replayEvents = []), - (this.name = "COMSCORE"); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init Comscore init==="); - }, - }, - { - key: "identify", - value(e) { - p("in Comscore identify"); - }, - }, - { - key: "track", - value(e) { - p("in Comscore track"); - }, - }, - { - key: "page", - value(e) { - if ( - (p("in Comscore page"), - this.loadConfig(e), - this.isFirstPageCallMade) - ) { - if (this.failed) return void (this.replayEvents = []); - if (!this.isLoaded() && !this.failed) - return void this.replayEvents.push(["page", e]); - e.message.properties; - window.COMSCORE.beacon(this.comScoreParams); - } else (this.isFirstPageCallMade = !0), this.initAfterPage(); - }, - }, - { - key: "loadConfig", - value(e) { - p("=====in loadConfig====="), - (this.comScoreParams = this.mapComscoreParams( - e.message.properties - )), - (window._comscore = window._comscore || []), - window._comscore.push(this.comScoreParams); - }, - }, - { - key: "initAfterPage", - value() { - p("=====in initAfterPage====="), - (function () { - const e = document.createElement("script"); - const t = document.getElementsByTagName("script")[0]; - (e.async = !0), - (e.src = `${ - document.location.protocol == "https:" - ? "https://sb" - : "http://b" - }.scorecardresearch.com/beacon.js`), - t.parentNode.insertBefore(e, t); - })(), - this._isReady(this).then(function (e) { - e.replayEvents.forEach(function (t) { - e[t[0]](t[1]); - }); - }); - }, - }, - { - key: "pause", - value(e) { - return new Promise(function (t) { - setTimeout(t, e); - }); - }, - }, - { - key: "_isReady", - value(e) { - const t = this; - const n = - arguments.length > 1 && void 0 !== arguments[1] - ? arguments[1] - : 0; - return new Promise(function (r) { - return t.isLoaded() - ? ((t.failed = !1), e.analytics.emit("ready"), r(e)) - : n >= 1e4 - ? ((t.failed = !0), r(e)) - : void t.pause(1e3).then(function () { - return t._isReady(e, n + 1e3).then(r); - }); - }); - }, - }, - { - key: "mapComscoreParams", - value(e) { - p("=====in mapComscoreParams====="); - const t = this.comScoreBeaconParam; - const n = {}; - return ( - Object.keys(t).forEach(function (r) { - if ((r in e)) { - const i = t[r]; - const o = e[r]; - n[i] = o; - } - }), - (n.c1 = "2"), - (n.c2 = this.c2ID), - p("=====in mapComscoreParams=====", n), - n - ); - }, - }, - { - key: "isLoaded", - value() { - return ( - p("in Comscore isLoaded"), - !this.isFirstPageCallMade || !!window.COMSCORE - ); - }, - }, - { - key: "isReady", - value() { - return !!window.COMSCORE; - }, - }, - ]), - e - ); - })(), - Et = Object.prototype.hasOwnProperty, - At = String.prototype.charAt, - Ct = Object.prototype.toString, - Tt = function (e, t) { - return At.call(e, t); - }, - Ot = function (e, t) { - return Et.call(e, t); - }, - St = function (e, t) { - t = t || Ot; - for (var n = [], r = 0, i = e.length; r < i; r += 1) - t(e, r) && n.push(String(r)); - return n; - }, - Pt = function (e) { - return e == null - ? [] - : ((t = e), - Ct.call(t) === "[object String]" - ? St(e, Tt) - : (function (e) { - return ( - e != null && - typeof e !== "function" && - typeof e.length === "number" - ); - })(e) - ? St(e, Ot) - : (function (e, t) { - t = t || Ot; - const n = []; - for (const r in e) t(e, r) && n.push(String(r)); - return n; - })(e)); - let t; - }, - xt = Object.prototype.toString, - Rt = - typeof Array.isArray === "function" - ? Array.isArray - : function (e) { - return xt.call(e) === "[object Array]"; - }, - jt = function (e) { - return ( - e != null && - (Rt(e) || - (e !== "function" && - (function (e) { - const t = typeof e; - return ( - t === "number" || - (t === "object" && xt.call(e) === "[object Number]") - ); - })(e.length))) - ); - }, - Dt = function (e, t) { - for (let n = 0; n < t.length && !1 !== e(t[n], n, t); n += 1); - }, - Ut = function (e, t) { - for ( - let n = Pt(t), r = 0; - r < n.length && !1 !== e(t[n[r]], n[r], t); - r += 1 - ); - }, - Lt = function (e, t) { - return (jt(t) ? Dt : Ut).call(this, e, t); - }, - Mt = (function () { - function e(t) { - n(this, e), - (this.blacklistPiiProperties = t.blacklistPiiProperties), - (this.categoryToContent = t.categoryToContent), - (this.pixelId = t.pixelId), - (this.eventsToEvents = t.eventsToEvents), - (this.eventCustomProperties = t.eventCustomProperties), - (this.valueFieldIdentifier = t.valueFieldIdentifier), - (this.advancedMapping = t.advancedMapping), - (this.traitKeyToExternalId = t.traitKeyToExternalId), - (this.legacyConversionPixelId = t.legacyConversionPixelId), - (this.userIdAsPixelId = t.userIdAsPixelId), - (this.whitelistPiiProperties = t.whitelistPiiProperties), - (this.name = "FB_PIXEL"); - } - return ( - i(e, [ - { - key: "init", - value() { - void 0 === this.categoryToContent && - (this.categoryToContent = []), - void 0 === this.legacyConversionPixelId && - (this.legacyConversionPixelId = []), - void 0 === this.userIdAsPixelId && - (this.userIdAsPixelId = []), - p("===in init FbPixel==="), - (window._fbq = function () { - window.fbq.callMethod - ? window.fbq.callMethod.apply(window.fbq, arguments) - : window.fbq.queue.push(arguments); - }), - (window.fbq = window.fbq || window._fbq), - (window.fbq.push = window.fbq), - (window.fbq.loaded = !0), - (window.fbq.disablePushState = !0), - (window.fbq.allowDuplicatePageViews = !0), - (window.fbq.version = "2.0"), - (window.fbq.queue = []), - window.fbq("init", this.pixelId), - T( - "fbpixel-integration", - "//connect.facebook.net/en_US/fbevents.js" - ); - }, - }, - { - key: "isLoaded", - value() { - return ( - p("in FBPixel isLoaded"), - !(!window.fbq || !window.fbq.callMethod) - ); - }, - }, - { - key: "isReady", - value() { - return ( - p("in FBPixel isReady"), - !(!window.fbq || !window.fbq.callMethod) - ); - }, - }, - { - key: "page", - value(e) { - window.fbq("track", "PageView"); - }, - }, - { - key: "identify", - value(e) { - this.advancedMapping && - window.fbq("init", this.pixelId, e.message.context.traits); - }, - }, - { - key: "track", - value(e) { - const t = this; - const n = this; - const r = e.message.event; - let i = this.formatRevenue(e.message.properties.revenue); - const o = this.buildPayLoad(e, !0); - void 0 === this.categoryToContent && - (this.categoryToContent = []), - void 0 === this.legacyConversionPixelId && - (this.legacyConversionPixelId = []), - void 0 === this.userIdAsPixelId && - (this.userIdAsPixelId = []), - (o.value = i); - let s; - let a; - const u = this.eventsToEvents; - const c = this.legacyConversionPixelId; - if ( - ((s = u.reduce(function (e, t) { - return t.from === r && e.push(t.to), e; - }, [])), - (a = c.reduce(function (e, t) { - return t.from === r && e.push(t.to), e; - }, [])), - Lt(function (t) { - (o.currency = e.message.properties.currency || "USD"), - window.fbq("trackSingle", n.pixelId, t, o, { - eventID: e.message.messageId, - }); - }, s), - Lt(function (t) { - window.fbq( - "trackSingle", - n.pixelId, - t, - { currency: e.message.properties.currency, value: i }, - { eventID: e.message.messageId } - ); - }, a), - r === "Product List Viewed") - ) { - var l = []; - var d = e.message.properties.products; - var p = this.buildPayLoad(e, !0); - Array.isArray(d) && - d.forEach(function (t) { - const n = t.product_id; - n && - (g.push(n), - l.push({ - id: n, - quantity: e.message.properties.quantity, - })); - }), - g.length - ? (h = ["product"]) - : (g.push(e.message.properties.category || ""), - l.push({ - id: e.message.properties.category || "", - quantity: 1, - }), - (h = ["product_group"])), - window.fbq( - "trackSingle", - n.pixelId, - "ViewContent", - this.merge( - { - content_ids: g, - content_type: this.getContentType(e, h), - contents: l, - }, - p - ), - { eventID: e.message.messageId } - ), - Lt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: t.formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Product Viewed") { - var f = this.valueFieldIdentifier === "properties.value"; - p = this.buildPayLoad(e, !0); - window.fbq( - "trackSingle", - n.pixelId, - "ViewContent", - this.merge( - { - content_ids: [ - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - ], - content_type: this.getContentType(e, ["product"]), - content_name: e.message.properties.product_name || "", - content_category: e.message.properties.category || "", - currency: e.message.properties.currency, - value: f - ? this.formatRevenue(e.message.properties.value) - : this.formatRevenue(e.message.properties.price), - contents: [ - { - id: - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }, - ], - }, - p - ), - { eventID: e.message.messageId } - ), - Lt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: f - ? t.formatRevenue(e.message.properties.value) - : t.formatRevenue(e.message.properties.price), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Product Added") { - (f = this.valueFieldIdentifier === "properties.value"), - (p = this.buildPayLoad(e, !0)); - window.fbq( - "trackSingle", - n.pixelId, - "AddToCart", - this.merge( - { - content_ids: [ - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - ], - content_type: this.getContentType(e, ["product"]), - content_name: e.message.properties.product_name || "", - content_category: e.message.properties.category || "", - currency: e.message.properties.currency, - value: f - ? this.formatRevenue(e.message.properties.value) - : this.formatRevenue(e.message.properties.price), - contents: [ - { - id: - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }, - ], - }, - p - ), - { eventID: e.message.messageId } - ), - Lt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: f - ? t.formatRevenue(e.message.properties.value) - : t.formatRevenue(e.message.properties.price), - }, - { eventID: e.message.messageId } - ); - }, a), - this.merge( - { - content_ids: [ - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - ], - content_type: this.getContentType(e, ["product"]), - content_name: e.message.properties.product_name || "", - content_category: e.message.properties.category || "", - currency: e.message.properties.currency, - value: f - ? this.formatRevenue(e.message.properties.value) - : this.formatRevenue(e.message.properties.price), - contents: [ - { - id: - e.message.properties.product_id || - e.message.properties.id || - e.message.properties.sku || - "", - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }, - ], - }, - p - ); - } else if (r === "Order Completed") { - (d = e.message.properties.products), - (p = this.buildPayLoad(e, !0)), - (i = this.formatRevenue(e.message.properties.revenue)); - for ( - var h = this.getContentType(e, ["product"]), - g = [], - y = ((l = []), 0); - y < d.length; - y++ - ) { - var m = product.product_id; - g.push(m); - var v = { id: m, quantity: e.message.properties.quantity }; - e.message.properties.price && - (v.item_price = e.message.properties.price), - l.push(v); - } - window.fbq( - "trackSingle", - n.pixelId, - "Purchase", - this.merge( - { - content_ids: g, - content_type: h, - currency: e.message.properties.currency, - value: i, - contents: l, - num_items: g.length, - }, - p - ), - { eventID: e.message.messageId } - ), - Lt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: t.formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Products Searched") { - p = this.buildPayLoad(e, !0); - window.fbq( - "trackSingle", - n.pixelId, - "Search", - this.merge( - { search_string: e.message.properties.query }, - p - ), - { eventID: e.message.messageId } - ), - Lt(function (t) { - window.fbq( - "trackSingle", - n.pixelId, - t, - { - currency: e.message.properties.currency, - value: formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } else if (r === "Checkout Started") { - (d = e.message.properties.products), - (p = this.buildPayLoad(e, !0)), - (i = this.formatRevenue(e.message.properties.revenue)); - let b = e.message.properties.category; - for (g = [], l = [], y = 0; y < d.length; y++) { - m = d[y].product_id; - g.push(m); - v = { - id: m, - quantity: e.message.properties.quantity, - item_price: e.message.properties.price, - }; - e.message.properties.price && - (v.item_price = e.message.properties.price), - l.push(v); - } - !b && d[0] && d[0].category && (b = d[0].category), - window.fbq( - "trackSingle", - n.pixelId, - "InitiateCheckout", - this.merge( - { - content_category: b, - content_ids: g, - content_type: this.getContentType(e, ["product"]), - currency: e.message.properties.currency, - value: i, - contents: l, - num_items: g.length, - }, - p - ), - { eventID: e.message.messageId } - ), - Lt(function (r) { - window.fbq( - "trackSingle", - n.pixelId, - r, - { - currency: e.message.properties.currency, - value: t.formatRevenue(e.message.properties.revenue), - }, - { eventID: e.message.messageId } - ); - }, a); - } - }, - }, - { - key: "getContentType", - value(e, t) { - const n = e.message.options; - if (n && n.contentType) return [n.contentType]; - let r; - let i = e.message.properties.category; - if (!i) { - const o = e.message.properties.products; - o && o.length && (i = o[0].category); - } - if ( - i && - (r = this.categoryToContent.reduce(function (e, t) { - return t.from == i && e.push(t.to), e; - }, [])).length - ) - return r; - return t; - }, - }, - { - key: "merge", - value(e, t) { - const n = {}; - for (const r in e) e.hasOwnProperty(r) && (n[r] = e[r]); - for (const i in t) - t.hasOwnProperty(i) && !n.hasOwnProperty(i) && (n[i] = t[i]); - return n; - }, - }, - { - key: "formatRevenue", - value(e) { - return Number(e || 0).toFixed(2); - }, - }, - { - key: "buildPayLoad", - value(e, t) { - for ( - var n = [ - "checkinDate", - "checkoutDate", - "departingArrivalDate", - "departingDepartureDate", - "returningArrivalDate", - "returningDepartureDate", - "travelEnd", - "travelStart", - ], - r = [ - "email", - "firstName", - "lastName", - "gender", - "city", - "country", - "phone", - "state", - "zip", - "birthday", - ], - i = this.whitelistPiiProperties || [], - o = this.blacklistPiiProperties || [], - s = this.eventCustomProperties || [], - a = {}, - u = 0; - u < o[u]; - u++ - ) { - const c = o[u]; - a[c.blacklistPiiProperties] = c.blacklistPiiHash; - } - const l = {}; - const d = e.message.properties; - for (const p in d) - if (d.hasOwnProperty(p) && !(t && s.indexOf(p) < 0)) { - const f = d[p]; - if (n.indexOf(d) >= 0 && et.date(f)) - l[p] = f.toISOTring().split("T")[0]; - else if (a.hasOwnProperty(p)) - a[p] && typeof f === "string" && (l[p] = sha256(f)); - else { - const h = r.indexOf(p) >= 0; - const g = i.indexOf(p) >= 0; - (h && !g) || (l[p] = f); - } - } - return l; - }, - }, - ]), - e - ); - })(), - Nt = "lt_synch_timestamp", - Bt = new ((function () { - function e() { - n(this, e), (this.storage = Oe); - } - return ( - i(e, [ - { - key: "setLotameSynchTime", - value(e) { - this.storage.setItem(Nt, e); - }, - }, - { - key: "getLotameSynchTime", - value() { - return this.storage.getItem(Nt); - }, - }, - ]), - e - ); - })())(), - qt = { - HS: O, - GA: Se, - HOTJAR: Pe, - GOOGLEADS: xe, - VWO: Re, - GTM: je, - BRAZE: De, - INTERCOM: Ge, - KEEN: He, - KISSMETRICS: yt, - CUSTOMERIO: mt, - CHARTBEAT: It, - COMSCORE: _t, - FACEBOOK_PIXEL: Mt, - LOTAME: (function () { - function e(t, r) { - const i = this; - n(this, e), - (this.name = "LOTAME"), - (this.analytics = r), - (this.storage = Bt), - (this.bcpUrlSettingsPixel = t.bcpUrlSettingsPixel), - (this.bcpUrlSettingsIframe = t.bcpUrlSettingsIframe), - (this.dspUrlSettingsPixel = t.dspUrlSettingsPixel), - (this.dspUrlSettingsIframe = t.dspUrlSettingsIframe), - (this.mappings = {}), - t.mappings.forEach(function (e) { - const t = e.key; - const n = e.value; - i.mappings[t] = n; - }); - } - return ( - i(e, [ - { - key: "init", - value() { - p("===in init Lotame==="), - (window.LOTAME_SYNCH_CALLBACK = function () {}); - }, - }, - { - key: "addPixel", - value(e, t, n) { - p(`Adding pixel for :: ${e}`); - const r = document.createElement("img"); - (r.src = e), - r.setAttribute("width", t), - r.setAttribute("height", n), - p(`Image Pixel :: ${r}`), - document.getElementsByTagName("body")[0].appendChild(r); - }, - }, - { - key: "addIFrame", - value(e) { - p(`Adding iframe for :: ${e}`); - const t = document.createElement("iframe"); - (t.src = e), - (t.title = "empty"), - t.setAttribute("id", "LOTCCFrame"), - t.setAttribute("tabindex", "-1"), - t.setAttribute("role", "presentation"), - t.setAttribute("aria-hidden", "true"), - t.setAttribute( - "style", - "border: 0px; width: 0px; height: 0px; display: block;" - ), - p(`IFrame :: ${t}`), - document.getElementsByTagName("body")[0].appendChild(t); - }, - }, - { - key: "syncPixel", - value(e) { - const t = this; - if ( - (p("===== in syncPixel ======"), - p("Firing DSP Pixel URLs"), - this.dspUrlSettingsPixel && - this.dspUrlSettingsPixel.length > 0) - ) { - const n = Date.now(); - this.dspUrlSettingsPixel.forEach(function (r) { - const i = t.compileUrl( - a({}, t.mappings, { userId: e, random: n }), - r.dspUrlTemplate - ); - t.addPixel(i, "1", "1"); - }); - } - if ( - (p("Firing DSP IFrame URLs"), - this.dspUrlSettingsIframe && - this.dspUrlSettingsIframe.length > 0) - ) { - const r = Date.now(); - this.dspUrlSettingsIframe.forEach(function (n) { - const i = t.compileUrl( - a({}, t.mappings, { userId: e, random: r }), - n.dspUrlTemplate - ); - t.addIFrame(i); - }); - } - this.storage.setLotameSynchTime(Date.now()), - this.analytics.methodToCallbackMapping.syncPixel && - this.analytics.emit("syncPixel", { - destination: this.name, - }); - }, - }, - { - key: "compileUrl", - value(e, t) { - return ( - Object.keys(e).forEach(function (n) { - if (e.hasOwnProperty(n)) { - const r = new RegExp(`{{${n}}}`, "gi"); - t = t.replace(r, e[n]); - } - }), - t - ); - }, - }, - { - key: "identify", - value(e) { - p("in Lotame identify"); - const t = e.message.userId; - this.syncPixel(t); - }, - }, - { - key: "track", - value(e) { - p("track not supported for lotame"); - }, - }, - { - key: "page", - value(e) { - const t = this; - if ( - (p("in Lotame page"), - p("Firing BCP Pixel URLs"), - this.bcpUrlSettingsPixel && - this.bcpUrlSettingsPixel.length > 0) - ) { - const n = Date.now(); - this.bcpUrlSettingsPixel.forEach(function (e) { - const r = t.compileUrl( - a({}, t.mappings, { random: n }), - e.bcpUrlTemplate - ); - t.addPixel(r, "1", "1"); - }); - } - if ( - (p("Firing BCP IFrame URLs"), - this.bcpUrlSettingsIframe && - this.bcpUrlSettingsIframe.length > 0) - ) { - const r = Date.now(); - this.bcpUrlSettingsIframe.forEach(function (e) { - const n = t.compileUrl( - a({}, t.mappings, { random: r }), - e.bcpUrlTemplate - ); - t.addIFrame(n); - }); - } - e.message.userId && - this.isPixelToBeSynched() && - this.syncPixel(e.message.userId); - }, - }, - { - key: "isPixelToBeSynched", - value() { - const e = this.storage.getLotameSynchTime(); - const t = Date.now(); - return !e || Math.floor((t - e) / 864e5) >= 7; - }, - }, - { - key: "isLoaded", - value() { - return p("in Lotame isLoaded"), !0; - }, - }, - { - key: "isReady", - value() { - return !0; - }, - }, - ]), - e - ); - })(), - }, - Ft = function e() { - n(this, e), - (this.build = "1.0.0"), - (this.name = "RudderLabs JavaScript SDK"), - (this.namespace = "com.rudderlabs.javascript"), - (this.version = "1.1.2"); - }, - Kt = function e() { - n(this, e), - (this.name = "RudderLabs JavaScript SDK"), - (this.version = "1.1.2"); - }, - Gt = function e() { - n(this, e), (this.name = ""), (this.version = ""); - }, - Ht = function e() { - n(this, e), (this.density = 0), (this.width = 0), (this.height = 0); - }, - Vt = function e() { - n(this, e), - (this.app = new Ft()), - (this.traits = null), - (this.library = new Kt()); - const t = new Gt(); - t.version = ""; - const r = new Ht(); - (r.width = window.width), - (r.height = window.height), - (r.density = window.devicePixelRatio), - (this.userAgent = navigator.userAgent), - (this.locale = navigator.language || navigator.browserLanguage), - (this.os = t), - (this.screen = r), - (this.device = null), - (this.network = null); - }, - zt = (function () { - function e() { - n(this, e), - (this.channel = "web"), - (this.context = new Vt()), - (this.type = null), - (this.action = null), - (this.messageId = m().toString()), - (this.originalTimestamp = new Date().toISOString()), - (this.anonymousId = null), - (this.userId = null), - (this.event = null), - (this.properties = {}), - (this.integrations = {}), - (this.integrations.All = !0); - } - return ( - i(e, [ - { - key: "getProperty", - value(e) { - return this.properties[e]; - }, - }, - { - key: "addProperty", - value(e, t) { - this.properties[e] = t; - }, - }, - { - key: "validateFor", - value(e) { - if (!this.properties) - throw new Error("Key properties is required"); - switch (e) { - case A.TRACK: - if (!this.event) - throw new Error("Key event is required for track event"); - if ((this.event in Object.values(C))) - switch (this.event) { - case C.CHECKOUT_STEP_VIEWED: - case C.CHECKOUT_STEP_COMPLETED: - case C.PAYMENT_INFO_ENTERED: - this.checkForKey("checkout_id"), - this.checkForKey("step"); - break; - case C.PROMOTION_VIEWED: - case C.PROMOTION_CLICKED: - this.checkForKey("promotion_id"); - break; - case C.ORDER_REFUNDED: - this.checkForKey("order_id"); - } - else - this.properties.category || - (this.properties.category = this.event); - break; - case A.PAGE: - break; - case A.SCREEN: - if (!this.properties.name) - throw new Error("Key 'name' is required in properties"); - } - }, - }, - { - key: "checkForKey", - value(e) { - if (!this.properties[e]) - throw new Error(`Key '${e}' is required in properties`); - }, - }, - ]), - e - ); - })(), - Jt = (function () { - function e() { - n(this, e), (this.message = new zt()); - } - return ( - i(e, [ - { - key: "setType", - value(e) { - this.message.type = e; - }, - }, - { - key: "setProperty", - value(e) { - this.message.properties = e; - }, - }, - { - key: "setUserProperty", - value(e) { - this.message.user_properties = e; - }, - }, - { - key: "setUserId", - value(e) { - this.message.userId = e; - }, - }, - { - key: "setEventName", - value(e) { - this.message.event = e; - }, - }, - { - key: "updateTraits", - value(e) { - this.message.context.traits = e; - }, - }, - { - key: "getElementContent", - value() { - return this.message; - }, - }, - ]), - e - ); - })(), - Wt = (function () { - function e() { - n(this, e), - (this.rudderProperty = null), - (this.rudderUserProperty = null), - (this.event = null), - (this.userId = null), - (this.channel = null), - (this.type = null); - } - return ( - i(e, [ - { - key: "setProperty", - value(e) { - return (this.rudderProperty = e), this; - }, - }, - { - key: "setPropertyBuilder", - value(e) { - return (this.rudderProperty = e.build()), this; - }, - }, - { - key: "setUserProperty", - value(e) { - return (this.rudderUserProperty = e), this; - }, - }, - { - key: "setUserPropertyBuilder", - value(e) { - return (this.rudderUserProperty = e.build()), this; - }, - }, - { - key: "setEvent", - value(e) { - return (this.event = e), this; - }, - }, - { - key: "setUserId", - value(e) { - return (this.userId = e), this; - }, - }, - { - key: "setChannel", - value(e) { - return (this.channel = e), this; - }, - }, - { - key: "setType", - value(e) { - return (this.type = e), this; - }, - }, - { - key: "build", - value() { - const e = new Jt(); - return ( - e.setUserId(this.userId), - e.setType(this.type), - e.setEventName(this.event), - e.setProperty(this.rudderProperty), - e.setUserProperty(this.rudderUserProperty), - e - ); - }, - }, - ]), - e - ); - })(), - $t = function e() { - n(this, e), (this.batch = null), (this.writeKey = null); - }, - Yt = R(function (e) { - const t = - (typeof crypto !== "undefined" && - crypto.getRandomValues && - crypto.getRandomValues.bind(crypto)) || - (typeof msCrypto !== "undefined" && - typeof window.msCrypto.getRandomValues === "function" && - msCrypto.getRandomValues.bind(msCrypto)); - if (t) { - const n = new Uint8Array(16); - e.exports = function () { - return t(n), n; - }; - } else { - const r = new Array(16); - e.exports = function () { - for (var e, t = 0; t < 16; t++) - (3 & t) == 0 && (e = 4294967296 * Math.random()), - (r[t] = (e >>> ((3 & t) << 3)) & 255); - return r; - }; - } - }), - Qt = [], - Zt = 0; - Zt < 256; - ++Zt - ) - Qt[Zt] = (Zt + 256).toString(16).substr(1); - let Xt; - let en; - const tn = function (e, t) { - let n = t || 0; - const r = Qt; - return [ - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - "-", - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - r[e[n++]], - ].join(""); - }; - let nn = 0; - let rn = 0; - const on = function (e, t, n) { - let r = (t && n) || 0; - const i = t || []; - let o = (e = e || {}).node || Xt; - let s = void 0 !== e.clockseq ? e.clockseq : en; - if (o == null || s == null) { - const a = Yt(); - o == null && (o = Xt = [1 | a[0], a[1], a[2], a[3], a[4], a[5]]), - s == null && (s = en = 16383 & ((a[6] << 8) | a[7])); - } - let u = void 0 !== e.msecs ? e.msecs : new Date().getTime(); - let c = void 0 !== e.nsecs ? e.nsecs : rn + 1; - const l = u - nn + (c - rn) / 1e4; - if ( - (l < 0 && void 0 === e.clockseq && (s = (s + 1) & 16383), - (l < 0 || u > nn) && void 0 === e.nsecs && (c = 0), - c >= 1e4) - ) - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - (nn = u), (rn = c), (en = s); - const d = (1e4 * (268435455 & (u += 122192928e5)) + c) % 4294967296; - (i[r++] = (d >>> 24) & 255), - (i[r++] = (d >>> 16) & 255), - (i[r++] = (d >>> 8) & 255), - (i[r++] = 255 & d); - const p = ((u / 4294967296) * 1e4) & 268435455; - (i[r++] = (p >>> 8) & 255), - (i[r++] = 255 & p), - (i[r++] = ((p >>> 24) & 15) | 16), - (i[r++] = (p >>> 16) & 255), - (i[r++] = (s >>> 8) | 128), - (i[r++] = 255 & s); - for (let f = 0; f < 6; ++f) i[r + f] = o[f]; - return t || tn(i); - }; - const sn = function (e, t, n) { - const r = (t && n) || 0; - typeof e === "string" && - ((t = e === "binary" ? new Array(16) : null), (e = null)); - const i = (e = e || {}).random || (e.rng || Yt)(); - if (((i[6] = (15 & i[6]) | 64), (i[8] = (63 & i[8]) | 128), t)) - for (let o = 0; o < 16; ++o) t[r + o] = i[o]; - return t || tn(i); - }; - const an = sn; - (an.v1 = on), (an.v4 = sn); - const un = an; - const cn = un.v4; - const ln = { - _data: {}, - length: 0, - setItem(e, t) { - return (this._data[e] = t), (this.length = Pt(this._data).length), t; - }, - getItem(e) { - return e in this._data ? this._data[e] : null; - }, - removeItem(e) { - return ( - e in this._data && delete this._data[e], - (this.length = Pt(this._data).length), - null - ); - }, - clear() { - (this._data = {}), (this.length = 0); - }, - key(e) { - return Pt(this._data)[e]; - }, - }; - const dn = { - defaultEngine: (function () { - try { - if (!window.localStorage) return !1; - const e = cn(); - window.localStorage.setItem(e, "test_value"); - const t = window.localStorage.getItem(e); - return window.localStorage.removeItem(e), t === "test_value"; - } catch (e) { - return !1; - } - })() - ? window.localStorage - : ln, - inMemoryEngine: ln, - }; - const pn = dn.defaultEngine; - const fn = dn.inMemoryEngine; - function hn(e, t, n, r) { - (this.id = t), - (this.name = e), - (this.keys = n || {}), - (this.engine = r || pn); - } - (hn.prototype.set = function (e, t) { - const n = this._createValidKey(e); - if (n) - try { - this.engine.setItem(n, ue.stringify(t)); - } catch (n) { - (function (e) { - let t = !1; - if (e.code) - switch (e.code) { - case 22: - t = !0; - break; - case 1014: - e.name === "NS_ERROR_DOM_QUOTA_REACHED" && (t = !0); - } - else e.number === -2147024882 && (t = !0); - return t; - })(n) && (this._swapEngine(), this.set(e, t)); - } - }), - (hn.prototype.get = function (e) { - try { - const t = this.engine.getItem(this._createValidKey(e)); - return t === null ? null : ue.parse(t); - } catch (e) { - return null; - } - }), - (hn.prototype.remove = function (e) { - this.engine.removeItem(this._createValidKey(e)); - }), - (hn.prototype._createValidKey = function (e) { - let t; - const n = this.name; - const r = this.id; - return Pt(this.keys).length - ? (Lt(function (i) { - i === e && (t = [n, r, e].join(".")); - }, this.keys), - t) - : [n, r, e].join("."); - }), - (hn.prototype._swapEngine = function () { - const e = this; - Lt(function (t) { - const n = e.get(t); - fn.setItem([e.name, e.id, t].join("."), n), e.remove(t); - }, this.keys), - (this.engine = fn); - }); - const gn = hn; - const yn = { - setTimeout(e, t) { - return window.setTimeout(e, t); - }, - clearTimeout(e) { - return window.clearTimeout(e); - }, - Date: window.Date, - }; - let mn = yn; - function vn() { - (this.tasks = {}), (this.nextId = 1); - } - (vn.prototype.now = function () { - return +new mn.Date(); - }), - (vn.prototype.run = function (e, t) { - const n = this.nextId++; - return (this.tasks[n] = mn.setTimeout(this._handle(n, e), t)), n; - }), - (vn.prototype.cancel = function (e) { - this.tasks[e] && (mn.clearTimeout(this.tasks[e]), delete this.tasks[e]); - }), - (vn.prototype.cancelAll = function () { - Lt(mn.clearTimeout, this.tasks), (this.tasks = {}); - }), - (vn.prototype._handle = function (e, t) { - const n = this; - return function () { - return delete n.tasks[e], t(); - }; - }), - (vn.setClock = function (e) { - mn = e; - }), - (vn.resetClock = function () { - mn = yn; - }); - const bn = vn; - const wn = kn; - function kn(e) { - return kn.enabled(e) - ? function (t) { - t = In(t); - const n = new Date(); - const r = n - (kn[e] || n); - (kn[e] = n), - (t = `${e} ${t} +${kn.humanize(r)}`), - window.console && - console.log && - Function.prototype.apply.call(console.log, console, arguments); - } - : function () {}; - } - function In(e) { - return e instanceof Error ? e.stack || e.message : e; - } - (kn.names = []), - (kn.skips = []), - (kn.enable = function (e) { - try { - localStorage.debug = e; - } catch (e) {} - for (let t = (e || "").split(/[\s,]+/), n = t.length, r = 0; r < n; r++) - (e = t[r].replace("*", ".*?"))[0] === "-" - ? kn.skips.push(new RegExp(`^${e.substr(1)}$`)) - : kn.names.push(new RegExp(`^${e}$`)); - }), - (kn.disable = function () { - kn.enable(""); - }), - (kn.humanize = function (e) { - return e >= 36e5 - ? `${(e / 36e5).toFixed(1)}h` - : e >= 6e4 - ? `${(e / 6e4).toFixed(1)}m` - : e >= 1e3 - ? `${(e / 1e3) | 0}s` - : `${e}ms`; - }), - (kn.enabled = function (e) { - for (var t = 0, n = kn.skips.length; t < n; t++) - if (kn.skips[t].test(e)) return !1; - for (t = 0, n = kn.names.length; t < n; t++) - if (kn.names[t].test(e)) return !0; - return !1; - }); - try { - window.localStorage && kn.enable(localStorage.debug); - } catch (e) {} - const _n = R(function (e) { - function t(e) { - if (e) - return (function (e) { - for (const n in t.prototype) e[n] = t.prototype[n]; - return e; - })(e); - } - (e.exports = t), - (t.prototype.on = t.prototype.addEventListener = function (e, t) { - return ( - (this._callbacks = this._callbacks || {}), - (this._callbacks[`$${e}`] = this._callbacks[`$${e}`] || []).push(t), - this - ); - }), - (t.prototype.once = function (e, t) { - function n() { - this.off(e, n), t.apply(this, arguments); - } - return (n.fn = t), this.on(e, n), this; - }), - (t.prototype.off = t.prototype.removeListener = t.prototype.removeAllListeners = t.prototype.removeEventListener = function ( - e, - t - ) { - if (((this._callbacks = this._callbacks || {}), arguments.length == 0)) - return (this._callbacks = {}), this; - let n; - const r = this._callbacks[`$${e}`]; - if (!r) return this; - if (arguments.length == 1) return delete this._callbacks[`$${e}`], this; - for (let i = 0; i < r.length; i++) - if ((n = r[i]) === t || n.fn === t) { - r.splice(i, 1); - break; - } - return r.length === 0 && delete this._callbacks[`$${e}`], this; - }), - (t.prototype.emit = function (e) { - this._callbacks = this._callbacks || {}; - for ( - var t = new Array(arguments.length - 1), - n = this._callbacks[`$${e}`], - r = 1; - r < arguments.length; - r++ - ) - t[r - 1] = arguments[r]; - if (n) { - r = 0; - for (let i = (n = n.slice(0)).length; r < i; ++r) n[r].apply(this, t); - } - return this; - }), - (t.prototype.listeners = function (e) { - return ( - (this._callbacks = this._callbacks || {}), - this._callbacks[`$${e}`] || [] - ); - }), - (t.prototype.hasListeners = function (e) { - return !!this.listeners(e).length; - }); - }); - const En = un.v4; - const An = wn("localstorage-retry"); - function Cn(e, t) { - return function () { - return e.apply(t, arguments); - }; - } - function Tn(e, t, n) { - typeof t === "function" && (n = t), - (this.name = e), - (this.id = En()), - (this.fn = n), - (this.maxItems = t.maxItems || 1 / 0), - (this.maxAttempts = t.maxAttempts || 1 / 0), - (this.backoff = { - MIN_RETRY_DELAY: t.minRetryDelay || 1e3, - MAX_RETRY_DELAY: t.maxRetryDelay || 3e4, - FACTOR: t.backoffFactor || 2, - JITTER: t.backoffJitter || 0, - }), - (this.timeouts = { - ACK_TIMER: 1e3, - RECLAIM_TIMER: 3e3, - RECLAIM_TIMEOUT: 1e4, - RECLAIM_WAIT: 500, - }), - (this.keys = { - IN_PROGRESS: "inProgress", - QUEUE: "queue", - ACK: "ack", - RECLAIM_START: "reclaimStart", - RECLAIM_END: "reclaimEnd", - }), - (this._schedule = new bn()), - (this._processId = 0), - (this._store = new gn(this.name, this.id, this.keys)), - this._store.set(this.keys.IN_PROGRESS, {}), - this._store.set(this.keys.QUEUE, []), - (this._ack = Cn(this._ack, this)), - (this._checkReclaim = Cn(this._checkReclaim, this)), - (this._processHead = Cn(this._processHead, this)), - (this._running = !1); - } - _n(Tn.prototype), - (Tn.prototype.start = function () { - this._running && this.stop(), - (this._running = !0), - this._ack(), - this._checkReclaim(), - this._processHead(); - }), - (Tn.prototype.stop = function () { - this._schedule.cancelAll(), (this._running = !1); - }), - (Tn.prototype.shouldRetry = function (e, t) { - return !(t > this.maxAttempts); - }), - (Tn.prototype.getDelay = function (e) { - let t = this.backoff.MIN_RETRY_DELAY * Math.pow(this.backoff.FACTOR, e); - if (this.backoff.JITTER) { - const n = Math.random(); - const r = Math.floor(n * this.backoff.JITTER * t); - Math.floor(10 * n) < 5 ? (t -= r) : (t += r); - } - return Number(Math.min(t, this.backoff.MAX_RETRY_DELAY).toPrecision(1)); - }), - (Tn.prototype.addItem = function (e) { - this._enqueue({ item: e, attemptNumber: 0, time: this._schedule.now() }); - }), - (Tn.prototype.requeue = function (e, t, n) { - this.shouldRetry(e, t, n) - ? this._enqueue({ - item: e, - attemptNumber: t, - time: this._schedule.now() + this.getDelay(t), - }) - : this.emit("discard", e, t); - }), - (Tn.prototype._enqueue = function (e) { - let t = this._store.get(this.keys.QUEUE) || []; - (t = t.slice(-(this.maxItems - 1))).push(e), - (t = t.sort(function (e, t) { - return e.time - t.time; - })), - this._store.set(this.keys.QUEUE, t), - this._running && this._processHead(); - }), - (Tn.prototype._processHead = function () { - const e = this; - const t = this._store; - this._schedule.cancel(this._processId); - let n = t.get(this.keys.QUEUE) || []; - const r = t.get(this.keys.IN_PROGRESS) || {}; - const i = this._schedule.now(); - const o = []; - function s(n, r) { - o.push({ - item: n.item, - done(i, o) { - const s = t.get(e.keys.IN_PROGRESS) || {}; - delete s[r], - t.set(e.keys.IN_PROGRESS, s), - e.emit("processed", i, o, n.item), - i && e.requeue(n.item, n.attemptNumber + 1, i); - }, - }); - } - for ( - let a = Object.keys(r).length; - n.length && n[0].time <= i && a++ < e.maxItems; - - ) { - const u = n.shift(); - const c = En(); - (r[c] = { - item: u.item, - attemptNumber: u.attemptNumber, - time: e._schedule.now(), - }), - s(u, c); - } - t.set(this.keys.QUEUE, n), - t.set(this.keys.IN_PROGRESS, r), - Lt(function (t) { - try { - e.fn(t.item, t.done); - } catch (e) { - An(`Process function threw error: ${e}`); - } - }, o), - (n = t.get(this.keys.QUEUE) || []), - this._schedule.cancel(this._processId), - n.length > 0 && - (this._processId = this._schedule.run( - this._processHead, - n[0].time - i - )); - }), - (Tn.prototype._ack = function () { - this._store.set(this.keys.ACK, this._schedule.now()), - this._store.set(this.keys.RECLAIM_START, null), - this._store.set(this.keys.RECLAIM_END, null), - this._schedule.run(this._ack, this.timeouts.ACK_TIMER); - }), - (Tn.prototype._checkReclaim = function () { - const e = this; - Lt( - function (t) { - t.id !== e.id && - (e._schedule.now() - t.get(e.keys.ACK) < - e.timeouts.RECLAIM_TIMEOUT || - (function (t) { - t.set(e.keys.RECLAIM_START, e.id), - t.set(e.keys.ACK, e._schedule.now()), - e._schedule.run(function () { - t.get(e.keys.RECLAIM_START) === e.id && - (t.set(e.keys.RECLAIM_END, e.id), - e._schedule.run(function () { - t.get(e.keys.RECLAIM_END) === e.id && - t.get(e.keys.RECLAIM_START) === e.id && - e._reclaim(t.id); - }, e.timeouts.RECLAIM_WAIT)); - }, e.timeouts.RECLAIM_WAIT); - })(t)); - }, - (function (t) { - for (var n = [], r = e._store.engine, i = 0; i < r.length; i++) { - const o = r.key(i).split("."); - o.length === 3 && - o[0] === t && - o[2] === "ack" && - n.push(new gn(t, o[1], e.keys)); - } - return n; - })(this.name) - ), - this._schedule.run(this._checkReclaim, this.timeouts.RECLAIM_TIMER); - }), - (Tn.prototype._reclaim = function (e) { - const t = this; - const n = new gn(this.name, e, this.keys); - const r = { queue: this._store.get(this.keys.QUEUE) || [] }; - const i = { - inProgress: n.get(this.keys.IN_PROGRESS) || {}, - queue: n.get(this.keys.QUEUE) || [], - }; - Lt(function (e) { - r.queue.push({ - item: e.item, - attemptNumber: e.attemptNumber, - time: t._schedule.now(), - }); - }, i.queue), - Lt(function (e) { - r.queue.push({ - item: e.item, - attemptNumber: e.attemptNumber + 1, - time: t._schedule.now(), - }); - }, i.inProgress), - (r.queue = r.queue.sort(function (e, t) { - return e.time - t.time; - })), - this._store.set(this.keys.QUEUE, r.queue), - n.remove(this.keys.ACK), - n.remove(this.keys.RECLAIM_START), - n.remove(this.keys.RECLAIM_END), - n.remove(this.keys.IN_PROGRESS), - n.remove(this.keys.QUEUE), - this._processHead(); - }); - const On = Tn; - const Sn = { - maxRetryDelay: 36e4, - minRetryDelay: 1e3, - backoffFactor: 2, - maxAttempts: 10, - maxItems: 100, - }; - var Pn = new ((function () { - function e() { - n(this, e), - (this.eventsBuffer = []), - (this.writeKey = ""), - (this.url = "https://hosted.rudderlabs.com"), - (this.state = "READY"), - (this.batchSize = 0), - (this.payloadQueue = new On("rudder", Sn, function (e, t) { - (e.message.sentAt = v()), - Pn.processQueueElement(e.url, e.headers, e.message, 1e4, function ( - e, - n - ) { - if (e) return t(e); - t(null, n); - }); - })), - this.payloadQueue.start(); - } - return ( - i(e, [ - { - key: "preaparePayloadAndFlush", - value(e) { - if ( - (p(`==== in preaparePayloadAndFlush with state: ${e.state}`), - p(e.eventsBuffer), - e.eventsBuffer.length != 0 && e.state !== "PROCESSING") - ) { - const t = e.eventsBuffer; - const n = new $t(); - (n.batch = t), - (n.writeKey = e.writeKey), - (n.sentAt = v()), - n.batch.forEach(function (e) { - e.sentAt = n.sentAt; - }), - (e.batchSize = e.eventsBuffer.length); - const r = new XMLHttpRequest(); - p("==== in flush sending to Rudder BE ===="), - p(JSON.stringify(n, y)), - r.open("POST", e.url, !0), - r.setRequestHeader("Content-Type", "application/json"), - r.setRequestHeader( - "Authorization", - `Basic ${btoa(`${n.writeKey}:`)}` - ), - (r.onreadystatechange = function () { - r.readyState === 4 && r.status === 200 - ? (p(`====== request processed successfully: ${r.status}`), - (e.eventsBuffer = e.eventsBuffer.slice(e.batchSize)), - p(e.eventsBuffer.length)) - : r.readyState === 4 && - r.status !== 200 && - b( - new Error( - `request failed with status: ${r.status} for url: ${e.url}` - ) - ), - (e.state = "READY"); - }), - r.send(JSON.stringify(n, y)), - (e.state = "PROCESSING"); - } - }, - }, - { - key: "processQueueElement", - value(e, t, n, r, i) { - try { - const o = new XMLHttpRequest(); - for (const s in (o.open("POST", e, !0), t)) - o.setRequestHeader(s, t[s]); - (o.timeout = r), - (o.ontimeout = i), - (o.onerror = i), - (o.onreadystatechange = function () { - o.readyState === 4 && - (o.status === 429 || (o.status >= 500 && o.status < 600) - ? (b( - new Error( - `request failed with status: ${o.status}${o.statusText} for url: ${e}` - ) - ), - i( - new Error( - `request failed with status: ${o.status}${o.statusText} for url: ${e}` - ) - )) - : (p( - `====== request processed successfully: ${o.status}` - ), - i(null, o.status))); - }), - o.send(JSON.stringify(n, y)); - } catch (e) { - i(e); - } - }, - }, - { - key: "enqueue", - value(e, t) { - const n = e.getElementContent(); - const r = { - "Content-Type": "application/json", - Authorization: `Basic ${btoa(`${this.writeKey}:`)}`, - AnonymousId: btoa(n.anonymousId), - }; - (n.originalTimestamp = v()), - (n.sentAt = v()), - JSON.stringify(n).length > 32e3 && - f( - "[EventRepository] enqueue:: message length greater 32 Kb ", - n - ); - const i = - this.url.slice(-1) == "/" ? this.url.slice(0, -1) : this.url; - this.payloadQueue.addItem({ - url: `${i}/v1/${t}`, - headers: r, - message: n, - }); - }, - }, - ]), - e - ); - })())(); - function xn(e) { - const t = function (t) { - let n = (t = t || window.event).target || t.srcElement; - Ln(n) && (n = n.parentNode), - jn(n, t) - ? p("to be tracked ", t.type) - : p("not to be tracked ", t.type), - (function (e, t) { - let n = e.target || e.srcElement; - let r = void 0; - Ln(n) && (n = n.parentNode); - if (jn(n, e)) { - if (n.tagName.toLowerCase() == "form") { - r = {}; - for (let i = 0; i < n.elements.length; i++) { - const o = n.elements[i]; - if (Bn(o) && Nn(o, t.trackValues)) { - const s = o.id ? o.id : o.name; - if (s && typeof s === "string") { - const a = o.id ? o.id : o.name; - let u = o.id - ? document.getElementById(o.id).value - : document.getElementsByName(o.name)[0].value; - (o.type !== "checkbox" && o.type !== "radio") || - (u = o.checked), - a.trim() !== "" && - (r[encodeURIComponent(a)] = encodeURIComponent(u)); - } - } - } - } - for (var c = [n], l = n; l.parentNode && !Dn(l, "body"); ) - c.push(l.parentNode), (l = l.parentNode); - let d; - const f = []; - let h = !1; - if ( - (c.forEach(function (e) { - const n = (function (e) { - return !(!e.parentNode || Dn(e, "body")); - })(e); - e.tagName.toLowerCase() === "a" && - ((d = e.getAttribute("href")), (d = n && d)), - (h = h || !Bn(e)), - f.push( - (function (e, t) { - for ( - var n = { - classes: Mn(e).split(" "), - tag_name: e.tagName.toLowerCase(), - }, - r = e.attributes.length, - i = 0; - i < r; - i++ - ) { - const o = e.attributes[i].name; - const s = e.attributes[i].value; - s && (n[`attr__${o}`] = s), - (o != "name" && o != "id") || - !Nn(e, t.trackValues) || - ((n.field_value = - o == "id" - ? document.getElementById(s).value - : document.getElementsByName(s)[0].value), - (e.type !== "checkbox" && e.type !== "radio") || - (n.field_value = e.checked)); - } - let a = 1; - let u = 1; - let c = e; - for (; (c = qn(c)); ) a++, c.tagName === e.tagName && u++; - return (n.nth_child = a), (n.nth_of_type = u), n; - })(e, t) - ); - }), - h) - ) - return !1; - let g = ""; - const y = (function (e) { - let t = ""; - return ( - e.childNodes.forEach(function (e) { - e.nodeType === Node.TEXT_NODE && (t += e.nodeValue); - }), - t.trim() - ); - })(n); - y && y.length && (g = y); - const m = { - event_type: e.type, - page: w(), - elements: f, - el_attr_href: d, - el_text: g, - }; - r && (m.form_values = r), - p("web_event", m), - t.track("autotrack", m); - } - })(t, e); - }; - Rn(document, "submit", t, !0), - Rn(document, "change", t, !0), - Rn(document, "click", t, !0), - e.page(); - } - function Rn(e, t, n, r) { - e - ? e.addEventListener(t, n, !!r) - : f( - "[Autotrack] register_event:: No valid element provided to register_event" - ); - } - function jn(e, t) { - if (!e || Dn(e, "html") || !Un(e)) return !1; - switch (e.tagName.toLowerCase()) { - case "html": - return !1; - case "form": - return t.type === "submit"; - case "input": - return ["button", "submit"].indexOf(e.getAttribute("type")) === -1 - ? t.type === "change" - : t.type === "click"; - case "select": - case "textarea": - return t.type === "change"; - default: - return t.type === "click"; - } - } - function Dn(e, t) { - return e && e.tagName && e.tagName.toLowerCase() === t.toLowerCase(); - } - function Un(e) { - return e && e.nodeType === 1; - } - function Ln(e) { - return e && e.nodeType === 3; - } - function Mn(e) { - switch (t(e.className)) { - case "string": - return e.className; - case "object": - return e.className.baseVal || e.getAttribute("class") || ""; - default: - return ""; - } - } - function Nn(e, t) { - for (let n = e.attributes.length, r = 0; r < n; r++) { - const i = e.attributes[r].value; - if (t.indexOf(i) > -1) return !0; - } - return !1; - } - function Bn(e) { - return !(Mn(e).split(" ").indexOf("rudder-no-track") >= 0); - } - function qn(e) { - if (e.previousElementSibling) return e.previousElementSibling; - do { - e = e.previousSibling; - } while (e && !Un(e)); - return e; - } - const Fn = function (e, t, n) { - let r = !1; - return (n = n || Kn), (i.count = e), e === 0 ? t() : i; - function i(e, o) { - if (i.count <= 0) throw new Error("after called too many times"); - --i.count, - e ? ((r = !0), t(e), (t = n)) : i.count !== 0 || r || t(null, o); - } - }; - function Kn() {} - function Gn(e, t) { - this.eventRepository || (this.eventRepository = Pn), - this.eventRepository.enqueue(e, t); - } - var Hn = new ((function () { - function e() { - n(this, e), - (this.autoTrackHandlersRegistered = !1), - (this.autoTrackFeatureEnabled = !1), - (this.initialized = !1), - (this.trackValues = []), - (this.eventsBuffer = []), - (this.clientIntegrations = []), - (this.loadOnlyIntegrations = {}), - (this.clientIntegrationObjects = void 0), - (this.successfullyLoadedIntegration = []), - (this.failedToBeLoadedIntegration = []), - (this.toBeProcessedArray = []), - (this.toBeProcessedByIntegrationArray = []), - (this.storage = Oe), - (this.userId = - this.storage.getUserId() != null ? this.storage.getUserId() : ""), - (this.userTraits = - this.storage.getUserTraits() != null - ? this.storage.getUserTraits() - : {}), - (this.groupId = - this.storage.getGroupId() != null ? this.storage.getGroupId() : ""), - (this.groupTraits = - this.storage.getGroupTraits() != null - ? this.storage.getGroupTraits() - : {}), - (this.anonymousId = this.getAnonymousId()), - this.storage.setUserId(this.userId), - (this.eventRepository = Pn), - (this.sendAdblockPage = !1), - (this.sendAdblockPageOptions = {}), - (this.clientSuppliedCallbacks = {}), - (this.readyCallback = function () {}), - (this.executeReadyCallback = void 0), - (this.methodToCallbackMapping = { syncPixel: "syncPixelCallback" }); - } - return ( - i(e, [ - { - key: "processResponse", - value(e, t) { - try { - p(`===in process response=== ${e}`), - (t = JSON.parse(t)).source.useAutoTracking && - !this.autoTrackHandlersRegistered && - ((this.autoTrackFeatureEnabled = !0), - xn(this), - (this.autoTrackHandlersRegistered = !0)), - t.source.destinations.forEach(function (e, t) { - p( - `Destination ${t} Enabled? ${e.enabled} Type: ${e.destinationDefinition.name} Use Native SDK? ${e.config.useNativeSDK}` - ), - e.enabled && - this.clientIntegrations.push({ - name: e.destinationDefinition.name, - config: e.config, - }); - }, this), - (this.clientIntegrations = E( - this.loadOnlyIntegrations, - this.clientIntegrations - )), - (this.clientIntegrations = this.clientIntegrations.filter( - function (e) { - return qt[e.name] != null; - } - )), - this.init(this.clientIntegrations); - } catch (e) { - b(e), - p("===handling config BE response processing error==="), - p( - "autoTrackHandlersRegistered", - this.autoTrackHandlersRegistered - ), - this.autoTrackFeatureEnabled && - !this.autoTrackHandlersRegistered && - (xn(this), (this.autoTrackHandlersRegistered = !0)); - } - }, - }, - { - key: "init", - value(e) { - const t = this; - const n = this; - if ((p("supported intgs ", qt), !e || e.length == 0)) - return ( - this.readyCallback && this.readyCallback(), - void (this.toBeProcessedByIntegrationArray = []) - ); - e.forEach(function (e) { - try { - p( - "[Analytics] init :: trying to initialize integration name:: ", - e.name - ); - const r = new (0, qt[e.name])(e.config, n); - r.init(), - p("initializing destination: ", e), - t.isInitialized(r).then(t.replayEvents); - } catch (t) { - f( - "[Analytics] initialize integration (integration.init()) failed :: ", - e.name - ); - } - }); - }, - }, - { - key: "replayEvents", - value(e) { - e.successfullyLoadedIntegration.length + - e.failedToBeLoadedIntegration.length == - e.clientIntegrations.length && - e.toBeProcessedByIntegrationArray.length > 0 && - (p( - "===replay events called====", - e.successfullyLoadedIntegration.length, - e.failedToBeLoadedIntegration.length - ), - (e.clientIntegrationObjects = []), - (e.clientIntegrationObjects = e.successfullyLoadedIntegration), - p( - "==registering after callback===", - e.clientIntegrationObjects.length - ), - (e.executeReadyCallback = Fn( - e.clientIntegrationObjects.length, - e.readyCallback - )), - p("==registering ready callback==="), - e.on("ready", e.executeReadyCallback), - e.clientIntegrationObjects.forEach(function (t) { - p("===looping over each successful integration===="), - (t.isReady && !t.isReady()) || - (p("===letting know I am ready=====", t.name), - e.emit("ready")); - }), - e.toBeProcessedByIntegrationArray.forEach(function (t) { - const n = t[0]; - t.shift(), - Object.keys(t[0].message.integrations).length > 0 && - _(t[0].message.integrations); - for ( - let r = E( - t[0].message.integrations, - e.clientIntegrationObjects - ), - i = 0; - i < r.length; - i++ - ) - try { - var o; - if (!r[i].isFailed || !r[i].isFailed()) - if (r[i][n]) (o = r[i])[n].apply(o, u(t)); - } catch (e) { - b(e); - } - }), - (e.toBeProcessedByIntegrationArray = [])); - }, - }, - { - key: "pause", - value(e) { - return new Promise(function (t) { - setTimeout(t, e); - }); - }, - }, - { - key: "isInitialized", - value(e) { - const t = this; - const n = - arguments.length > 1 && void 0 !== arguments[1] - ? arguments[1] - : 0; - return new Promise(function (r) { - return e.isLoaded() - ? (p("===integration loaded successfully====", e.name), - t.successfullyLoadedIntegration.push(e), - r(t)) - : n >= 1e4 - ? (p("====max wait over===="), - t.failedToBeLoadedIntegration.push(e), - r(t)) - : void t.pause(1e3).then(function () { - return ( - p("====after pause, again checking===="), - t.isInitialized(e, n + 1e3).then(r) - ); - }); - }); - }, - }, - { - key: "page", - value(e, n, r, i, o) { - typeof i === "function" && ((o = i), (i = null)), - typeof r === "function" && ((o = r), (i = r = null)), - typeof n === "function" && ((o = n), (i = r = n = null)), - t(e) === "object" && ((i = n), (r = e), (n = e = null)), - t(n) === "object" && ((i = r), (r = n), (n = null)), - typeof e === "string" && - typeof n !== "string" && - ((n = e), (e = null)), - this.sendAdblockPage && - e != "RudderJS-Initiated" && - this.sendSampleRequest(), - this.processPage(e, n, r, i, o); - }, - }, - { - key: "track", - value(e, t, n, r) { - typeof n === "function" && ((r = n), (n = null)), - typeof t === "function" && ((r = t), (n = null), (t = null)), - this.processTrack(e, t, n, r); - }, - }, - { - key: "identify", - value(e, n, r, i) { - typeof r === "function" && ((i = r), (r = null)), - typeof n === "function" && ((i = n), (r = null), (n = null)), - t(e) == "object" && ((r = n), (n = e), (e = this.userId)), - this.processIdentify(e, n, r, i); - }, - }, - { - key: "alias", - value(e, n, r, i) { - typeof r === "function" && ((i = r), (r = null)), - typeof n === "function" && ((i = n), (r = null), (n = null)), - t(n) == "object" && ((r = n), (n = null)); - const o = new Wt().setType("alias").build(); - (o.message.previousId = - n || (this.userId ? this.userId : this.getAnonymousId())), - (o.message.userId = e), - this.processAndSendDataToDestinations("alias", o, r, i); - }, - }, - { - key: "group", - value(e, n, r, i) { - if (arguments.length) { - typeof r === "function" && ((i = r), (r = null)), - typeof n === "function" && ((i = n), (r = null), (n = null)), - t(e) == "object" && ((r = n), (n = e), (e = this.groupId)), - (this.groupId = e), - this.storage.setGroupId(this.groupId); - const o = new Wt().setType("group").build(); - if (n) for (const s in n) this.groupTraits[s] = n[s]; - else this.groupTraits = {}; - this.storage.setGroupTraits(this.groupTraits), - this.processAndSendDataToDestinations("group", o, r, i); - } - }, - }, - { - key: "processPage", - value(e, t, n, r, i) { - const o = new Wt().setType("page").build(); - t && (o.message.name = t), - n || (n = {}), - e && (n.category = e), - n && (o.message.properties = this.getPageProperties(n)), - this.trackPage(o, r, i); - }, - }, - { - key: "processTrack", - value(e, t, n, r) { - const i = new Wt().setType("track").build(); - e && i.setEventName(e), - t ? i.setProperty(t) : i.setProperty({}), - this.trackEvent(i, n, r); - }, - }, - { - key: "processIdentify", - value(e, t, n, r) { - e && this.userId && e !== this.userId && this.reset(), - (this.userId = e), - this.storage.setUserId(this.userId); - const i = new Wt().setType("identify").build(); - if (t) { - for (const o in t) this.userTraits[o] = t[o]; - this.storage.setUserTraits(this.userTraits); - } - this.identifyUser(i, n, r); - }, - }, - { - key: "identifyUser", - value(e, t, n) { - e.message.userId && - ((this.userId = e.message.userId), - this.storage.setUserId(this.userId)), - e && - e.message && - e.message.context && - e.message.context.traits && - ((this.userTraits = { - ...e.message.context.traits, - }), - this.storage.setUserTraits(this.userTraits)), - this.processAndSendDataToDestinations("identify", e, t, n); - }, - }, - { - key: "trackPage", - value(e, t, n) { - this.processAndSendDataToDestinations("page", e, t, n); - }, - }, - { - key: "trackEvent", - value(e, t, n) { - this.processAndSendDataToDestinations("track", e, t, n); - }, - }, - { - key: "processAndSendDataToDestinations", - value(e, t, n, r) { - try { - this.anonymousId || this.setAnonymousId(), - (t.message.context.page = w()), - (t.message.context.traits = { ...this.userTraits }), - p("anonymousId: ", this.anonymousId), - (t.message.anonymousId = this.anonymousId), - (t.message.userId = t.message.userId - ? t.message.userId - : this.userId), - e == "group" && - (this.groupId && (t.message.groupId = this.groupId), - this.groupTraits && - (t.message.traits = { ...this.groupTraits })), - n && this.processOptionsParam(t, n), - p(JSON.stringify(t)), - Object.keys(t.message.integrations).length > 0 && - _(t.message.integrations), - E( - t.message.integrations, - this.clientIntegrationObjects - ).forEach(function (n) { - (n.isFailed && n.isFailed()) || (n[e] && n[e](t)); - }), - this.clientIntegrationObjects || - (p("pushing in replay queue"), - this.toBeProcessedByIntegrationArray.push([e, t])), - (i = t.message.integrations), - Object.keys(i).forEach(function (e) { - i.hasOwnProperty(e) && - (g[e] && (i[g[e]] = i[e]), - e != "All" && g[e] != null && g[e] != e && delete i[e]); - }), - Gn.call(this, t, e), - p(`${e} is called `), - r && r(); - } catch (e) { - b(e); - } - let i; - }, - }, - { - key: "processOptionsParam", - value(e, t) { - const n = ["integrations", "anonymousId", "originalTimestamp"]; - for (const r in t) - if (n.includes(r)) e.message[r] = t[r]; - else if (r !== "context") e.message.context[r] = t[r]; - else for (const i in t[r]) e.message.context[i] = t[r][i]; - }, - }, - { - key: "getPageProperties", - value(e) { - const t = w(); - for (const n in t) void 0 === e[n] && (e[n] = t[n]); - return e; - }, - }, - { - key: "reset", - value() { - (this.userId = ""), (this.userTraits = {}), this.storage.clear(); - }, - }, - { - key: "getAnonymousId", - value() { - return ( - (this.anonymousId = this.storage.getAnonymousId()), - this.anonymousId || this.setAnonymousId(), - this.anonymousId - ); - }, - }, - { - key: "setAnonymousId", - value(e) { - (this.anonymousId = e || m()), - this.storage.setAnonymousId(this.anonymousId); - }, - }, - { - key: "load", - value(e, n, r) { - const i = this; - p("inside load "); - let o = "https://api.rudderlabs.com/sourceConfig/?p=web&v=1.1.2"; - if (!e || !n || n.length == 0) - throw ( - (b({ - message: - "[Analytics] load:: Unable to load due to wrong writeKey or serverUrl", - }), - Error("failed to initialize")) - ); - if ( - (r && r.logLevel && d(r.logLevel), - r && - r.integrations && - (Object.assign(this.loadOnlyIntegrations, r.integrations), - _(this.loadOnlyIntegrations)), - r && r.configUrl && (o = r.configUrl), - r && r.sendAdblockPage && (this.sendAdblockPage = !0), - r && - r.sendAdblockPageOptions && - t(r.sendAdblockPageOptions) == "object" && - (this.sendAdblockPageOptions = r.sendAdblockPageOptions), - r && r.clientSuppliedCallbacks) - ) { - const s = {}; - Object.keys(this.methodToCallbackMapping).forEach(function (e) { - i.methodToCallbackMapping.hasOwnProperty(e) && - r.clientSuppliedCallbacks[i.methodToCallbackMapping[e]] && - (s[e] = - r.clientSuppliedCallbacks[i.methodToCallbackMapping[e]]); - }), - Object.assign(this.clientSuppliedCallbacks, s), - this.registerCallbacks(!0); - } - (this.eventRepository.writeKey = e), - n && (this.eventRepository.url = n), - r && - r.valTrackingList && - r.valTrackingList.push == Array.prototype.push && - (this.trackValues = r.valTrackingList), - r && - r.useAutoTracking && - ((this.autoTrackFeatureEnabled = !0), - this.autoTrackFeatureEnabled && - !this.autoTrackHandlersRegistered && - (xn(this), - (this.autoTrackHandlersRegistered = !0), - p( - "autoTrackHandlersRegistered", - this.autoTrackHandlersRegistered - ))); - try { - !(function (e, t, n, r) { - let i; - const o = r.bind(e); - (i = new XMLHttpRequest()).open("GET", t, !0), - i.setRequestHeader("Authorization", `Basic ${btoa(`${n}:`)}`), - (i.onload = function () { - const e = i.status; - e == 200 - ? (p("status 200 calling callback"), - o(200, i.responseText)) - : (b( - new Error( - `request failed with status: ${i.status} for url: ${t}` - ) - ), - o(e)); - }), - i.send(); - })(this, o, e, this.processResponse); - } catch (e) { - b(e), - this.autoTrackFeatureEnabled && - !this.autoTrackHandlersRegistered && - xn(Hn); - } - }, - }, - { - key: "ready", - value(e) { - typeof e !== "function" - ? f("ready callback is not a function") - : (this.readyCallback = e); - }, - }, - { - key: "initializeCallbacks", - value() { - const e = this; - Object.keys(this.methodToCallbackMapping).forEach(function (t) { - e.methodToCallbackMapping.hasOwnProperty(t) && - e.on(t, function () {}); - }); - }, - }, - { - key: "registerCallbacks", - value(e) { - const t = this; - e || - Object.keys(this.methodToCallbackMapping).forEach(function (e) { - t.methodToCallbackMapping.hasOwnProperty(e) && - window.rudderanalytics && - typeof window.rudderanalytics[ - t.methodToCallbackMapping[e] - ] === "function" && - (t.clientSuppliedCallbacks[e] = - window.rudderanalytics[t.methodToCallbackMapping[e]]); - }), - Object.keys(this.clientSuppliedCallbacks).forEach(function (e) { - t.clientSuppliedCallbacks.hasOwnProperty(e) && - (p("registerCallbacks", e, t.clientSuppliedCallbacks[e]), - t.on(e, t.clientSuppliedCallbacks[e])); - }); - }, - }, - { - key: "sendSampleRequest", - value() { - T( - "ad-block", - "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" - ); - }, - }, - ]), - e - ); - })())(); - _n(Hn), - window.addEventListener( - "error", - function (e) { - b(e, Hn); - }, - !0 - ), - Hn.initializeCallbacks(), - Hn.registerCallbacks(!1); - const Vn = - !!window.rudderanalytics && - window.rudderanalytics.push == Array.prototype.push; - const zn = window.rudderanalytics ? window.rudderanalytics[0] : []; - if (zn.length > 0 && zn[0] == "load") { - const Jn = zn[0]; - zn.shift(), - p("=====from init, calling method:: ", Jn), - Hn[Jn].apply(Hn, u(zn)); - } - if (Vn) { - for (let Wn = 1; Wn < window.rudderanalytics.length; Wn++) - Hn.toBeProcessedArray.push(window.rudderanalytics[Wn]); - for (let $n = 0; $n < Hn.toBeProcessedArray.length; $n++) { - const Yn = u(Hn.toBeProcessedArray[$n]); - const Qn = Yn[0]; - Yn.shift(), - p("=====from init, calling method:: ", Qn), - Hn[Qn].apply(Hn, u(Yn)); - } - Hn.toBeProcessedArray = []; - } - const Zn = Hn.ready.bind(Hn); - const Xn = Hn.identify.bind(Hn); - const er = Hn.page.bind(Hn); - const tr = Hn.track.bind(Hn); - const nr = Hn.alias.bind(Hn); - const rr = Hn.group.bind(Hn); - const ir = Hn.reset.bind(Hn); - const or = Hn.load.bind(Hn); - const sr = (Hn.initialized = !0); - const ar = Hn.getAnonymousId.bind(Hn); - const ur = Hn.setAnonymousId.bind(Hn); - return ( - (e.alias = nr), - (e.getAnonymousId = ar), - (e.group = rr), - (e.identify = Xn), - (e.initialized = sr), - (e.load = or), - (e.page = er), - (e.ready = Zn), - (e.reset = ir), - (e.setAnonymousId = ur), - (e.track = tr), - e - ); -})({}); -// # sourceMappingURL=https://cdn.rudderlabs.com/v1/rudder-analytics.min.js.map +var rudderanalytics=function(e){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var u=0;ue.length)&&(t=e.length);for(var u=0,n=new Array(t);u-1?t:t+e:window.location.href,n=u.indexOf("#");return n>-1?u.slice(0,n):u}(n)}}function R(){for(var e,t=document.getElementsByTagName("link"),u=0;e=t[u];u++)if("canonical"===e.getAttribute("rel"))return e.getAttribute("href")}function j(e,t){var u=e.revenue;return!u&&t&&t.match(/^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i)&&(u=e.total),function(e){if(e){if("number"==typeof e)return e;if("string"==typeof e)return e=e.replace(/\$/g,""),e=parseFloat(e),isNaN(e)?void 0:e}}(u)}function L(e){Object.keys(e).forEach((function(t){e.hasOwnProperty(t)&&(b[t]&&(e[b[t]]=e[t]),"All"!=t&&null!=b[t]&&b[t]!=t&&delete e[t])}))}function U(e,u){var n=[];if(!u||0==u.length)return n;var r=!0;return"string"==typeof u[0]?(null!=e.All&&(r=e.All),u.forEach((function(t){if(r){var u=!0;null!=e[t]&&0==e[t]&&(u=!1),u&&n.push(t)}else null!=e[t]&&1==e[t]&&n.push(t)})),n):"object"===t(u[0])?(null!=e.All&&(r=e.All),u.forEach((function(t){if(r){var u=!0;null!=e[t.name]&&0==e[t.name]&&(u=!1),u&&n.push(t)}else null!=e[t.name]&&1==e[t.name]&&n.push(t)})),n):void 0}function M(e,u){return u=u||z,"array"==function(e){switch(Object.prototype.toString.call(e)){case"[object Function]":return"function";case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array"}return null===e?"null":void 0===e?"undefined":e===Object(e)?"object":t(e)}(e)?N(e,u):q(e,u)}var N=function(e,t){for(var u=[],n=0;n=0},ee.bool=ee.boolean=function(e){return"[object Boolean]"===Y.call(e)},ee.false=function(e){return ee.bool(e)&&!1===Boolean(Number(e))},ee.true=function(e){return ee.bool(e)&&!0===Boolean(Number(e))},ee.date=function(e){return"[object Date]"===Y.call(e)},ee.date.valid=function(e){return ee.date(e)&&!isNaN(Number(e))},ee.element=function(e){return void 0!==e&&"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&1===e.nodeType},ee.error=function(e){return"[object Error]"===Y.call(e)},ee.fn=ee.function=function(e){if("undefined"!=typeof window&&e===window.alert)return!0;var t=Y.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t||"[object AsyncFunction]"===t},ee.number=function(e){return"[object Number]"===Y.call(e)},ee.infinite=function(e){return e===1/0||e===-1/0},ee.decimal=function(e){return ee.number(e)&&!$(e)&&!ee.infinite(e)&&e%1!=0},ee.divisibleBy=function(e,t){var u=ee.infinite(e),n=ee.infinite(t),r=ee.number(e)&&!$(e)&&ee.number(t)&&!$(t)&&0!==t;return u||n||r&&e%t==0},ee.integer=ee.int=function(e){return ee.number(e)&&!$(e)&&e%1==0},ee.maximum=function(e,t){if($(e))throw new TypeError("NaN is not a valid value");if(!ee.arraylike(t))throw new TypeError("second argument must be array-like");for(var u=t.length;--u>=0;)if(e=0;)if(e>t[u])return!1;return!0},ee.nan=function(e){return!ee.number(e)||e!=e},ee.even=function(e){return ee.infinite(e)||ee.number(e)&&e==e&&e%2==0},ee.odd=function(e){return ee.infinite(e)||ee.number(e)&&e==e&&e%2!=0},ee.ge=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e>=t},ee.gt=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e>t},ee.le=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e<=t},ee.lt=function(e,t){if($(e)||$(t))throw new TypeError("NaN is not a valid value");return!ee.infinite(e)&&!ee.infinite(t)&&e=t&&e<=u},ee.object=function(e){return"[object Object]"===Y.call(e)},ee.primitive=function(e){return!e||!("object"===t(e)||ee.object(e)||ee.fn(e)||ee.array(e))},ee.hash=function(e){return ee.object(e)&&e.constructor===Object&&!e.nodeType&&!e.setInterval},ee.regexp=function(e){return"[object RegExp]"===Y.call(e)},ee.string=function(e){return"[object String]"===Y.call(e)},ee.base64=function(e){return ee.string(e)&&(!e.length||Q.test(e))},ee.hex=function(e){return ee.string(e)&&(!e.length||X.test(e))},ee.symbol=function(e){return"function"==typeof Symbol&&"[object Symbol]"===Y.call(e)&&"symbol"===t(G.call(e))},ee.bigint=function(e){return"function"==typeof BigInt&&"[object BigInt]"===Y.call(e)&&"bigint"==typeof K.call(e)};var te,ue=ee,ne=Object.prototype.toString,re=function(e){switch(ne.call(e)){case"[object Function]":return"function";case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array";case"[object String]":return"string"}return null===e?"null":void 0===e?"undefined":e&&1===e.nodeType?"element":e===Object(e)?"object":t(e)},ie=/\b(Array|Date|Object|Math|JSON)\b/g,oe=function(e,t){var u=function(e){for(var t=[],u=0;u-1?u:t.map((function(e){return e.product_id})).indexOf(e.properties.product_id)+1}},{key:"extractCheckoutOptions",value:function(e){var t=M([e.message.properties.paymentMethod,e.message.properties.shippingMethod]);return t.length>0?t.join(", "):null}}]),e}(),ge=function(){function e(t){u(this,e),this.siteId=t.siteID,this.name="HOTJAR",this._ready=!1}return r(e,[{key:"init",value:function(){window.hotjarSiteId=this.siteId,function(e,t,u,n,r,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:e.hotjarSiteId,hjsv:6},r=t.getElementsByTagName("head")[0],(i=t.createElement("script")).async=1,i.src="https://static.hotjar.com/c/hotjar-"+e._hjSettings.hjid+".js?sv="+e._hjSettings.hjsv,r.appendChild(i)}(window,document),this._ready=!0,F("===in init Hotjar===")}},{key:"identify",value:function(e){if(e.message.userId||e.message.anonymousId){var t=e.message.context.traits;window.hj("identify",e.message.userId,t)}else F("[Hotjar] identify:: user id is required")}},{key:"track",value:function(e){F("[Hotjar] track:: method not supported")}},{key:"page",value:function(e){F("[Hotjar] page:: method not supported")}},{key:"isLoaded",value:function(){return this._ready}},{key:"isReady",value:function(){return this._ready}}]),e}(),me=function(){function e(t){u(this,e),this.conversionId=t.conversionID,this.pageLoadConversions=t.pageLoadConversions,this.clickEventConversions=t.clickEventConversions,this.defaultPageConversion=t.defaultPageConversion,this.name="GOOGLEADS"}return r(e,[{key:"init",value:function(){!function(e,t,u){F("in script loader=== ".concat(e));var n=u.createElement("script");n.src=t,n.async=1,n.type="text/javascript",n.id=e;var r=u.getElementsByTagName("head")[0];F("==script==",r),r.appendChild(n)}("googleAds-integration","https://www.googletagmanager.com/gtag/js?id=".concat(this.conversionId),document),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)},window.gtag("js",new Date),window.gtag("config",this.conversionId),F("===in init Google Ads===")}},{key:"identify",value:function(e){F("[GoogleAds] identify:: method not supported")}},{key:"track",value:function(e){F("in GoogleAdsAnalyticsManager track");var t=this.getConversionData(this.clickEventConversions,e.message.event);if(t.conversionLabel){var u=t.conversionLabel,n=t.eventName,r="".concat(this.conversionId,"/").concat(u),i={};e.properties&&(i.value=e.properties.revenue,i.currency=e.properties.currency,i.transaction_id=e.properties.order_id),i.send_to=r,window.gtag("event",n,i)}}},{key:"page",value:function(e){F("in GoogleAdsAnalyticsManager page");var t=this.getConversionData(this.pageLoadConversions,e.message.name);if(t.conversionLabel){var u=t.conversionLabel,n=t.eventName;window.gtag("event",n,{send_to:"".concat(this.conversionId,"/").concat(u)})}}},{key:"getConversionData",value:function(e,t){var u={};return e&&(t?e.forEach((function(e){e.name.toLowerCase()===t.toLowerCase()&&(u.conversionLabel=e.conversionLabel,u.eventName=e.name)})):this.defaultPageConversion&&(u.conversionLabel=this.defaultPageConversion,u.eventName="Viewed a Page")),u}},{key:"isLoaded",value:function(){return window.dataLayer.push!==Array.prototype.push}},{key:"isReady",value:function(){return window.dataLayer.push!==Array.prototype.push}}]),e}(),ye=function(){function e(t,n){u(this,e),this.accountId=t.accountId,this.settingsTolerance=t.settingsTolerance,this.isSPA=t.isSPA,this.libraryTolerance=t.libraryTolerance,this.useExistingJquery=t.useExistingJquery,this.sendExperimentTrack=t.sendExperimentTrack,this.sendExperimentIdentify=t.sendExperimentIdentify,this.name="VWO",this.analytics=n,F("Config ",t)}return r(e,[{key:"init",value:function(){F("===in init VWO===");var e=this.accountId,t=this.settingsTolerance,u=this.libraryTolerance,n=this.useExistingJquery,r=this.isSPA;window._vwo_code=function(){var i=!1,o=document;return{use_existing_jquery:function(){return n},library_tolerance:function(){return u},finish:function(){if(!i){i=!0;var e=o.getElementById("_vis_opt_path_hides");e&&e.parentNode.removeChild(e)}},finished:function(){return i},load:function(e){var t=o.createElement("script");t.src=e,t.type="text/javascript",t.innerText,t.onerror=function(){_vwo_code.finish()},o.getElementsByTagName("head")[0].appendChild(t)},init:function(){var u=setTimeout("_vwo_code.finish()",t),n=o.createElement("style"),i="body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}",s=o.getElementsByTagName("head")[0];return n.setAttribute("id","_vis_opt_path_hides"),n.setAttribute("type","text/css"),n.styleSheet?n.styleSheet.cssText=i:n.appendChild(o.createTextNode(i)),s.appendChild(n),this.load("//dev.visualwebsiteoptimizer.com/j.php?a=".concat(e,"&u=").concat(encodeURIComponent(o.URL),"&r=").concat(Math.random(),"&f=").concat(+r)),u}}}(),window._vwo_settings_timer=window._vwo_code.init(),(this.sendExperimentTrack||this.experimentViewedIdentify)&&this.experimentViewed()}},{key:"experimentViewed",value:function(){var e=this;window.VWO=window.VWO||[];var t=this;window.VWO.push(["onVariationApplied",function(u){if(u){F("Variation Applied");var n=u[1],r=u[2];if(F("experiment id:",n,"Variation Name:",_vwo_exp[n].comb_n[r]),void 0!==_vwo_exp[n].comb_n[r]&&["VISUAL_AB","VISUAL","SPLIT_URL","SURVEY"].indexOf(_vwo_exp[n].type)>-1){try{t.sendExperimentTrack&&(F("Tracking..."),e.analytics.track("Experiment Viewed",{experimentId:n,variationName:_vwo_exp[n].comb_n[r]}))}catch(e){w("[VWO] experimentViewed:: ",e)}try{t.sendExperimentIdentify&&(F("Identifying..."),e.analytics.identify(i({},"Experiment: ".concat(n),_vwo_exp[n].comb_n[r])))}catch(e){w("[VWO] experimentViewed:: ",e)}}}}])}},{key:"identify",value:function(e){F("method not supported")}},{key:"track",value:function(e){if("Order Completed"===e.message.event){var t=e.message.properties?e.message.properties.total||e.message.properties.revenue:0;F("Revenue",t),window.VWO=window.VWO||[],window.VWO.push(["track.revenueConversion",t])}}},{key:"page",value:function(e){F("method not supported")}},{key:"isLoaded",value:function(){return!!window._vwo_code}},{key:"isReady",value:function(){return!!window._vwo_code}}]),e}(),Ce=function(){function e(t){u(this,e),this.containerID=t.containerID,this.name="GOOGLETAGMANAGER"}return r(e,[{key:"init",value:function(){F("===in init GoogleTagManager==="),function(e,t,u,n,r){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var i=t.getElementsByTagName(u)[0],o=t.createElement(u);o.async=!0,o.src="https://www.googletagmanager.com/gtm.js?id=".concat(r).concat(""),i.parentNode.insertBefore(o,i)}(window,document,"script","dataLayer",this.containerID)}},{key:"identify",value:function(e){F("[GTM] identify:: method not supported")}},{key:"track",value:function(e){F("===in track GoogleTagManager===");var t=e.message,u=s({event:t.event,userId:t.userId,anonymousId:t.anonymousId},t.properties);this.sendToGTMDatalayer(u)}},{key:"page",value:function(e){F("===in page GoogleTagManager===");var t,u=e.message,n=u.name,r=u.properties?u.properties.category:void 0;n&&(t="Viewed ".concat(n," page")),r&&n&&(t="Viewed ".concat(r," ").concat(n," page")),t||(t="Viewed a Page");var i=s({event:t,userId:u.userId,anonymousId:u.anonymousId},u.properties);this.sendToGTMDatalayer(i)}},{key:"isLoaded",value:function(){return!(!window.dataLayer||Array.prototype.push===window.dataLayer.push)}},{key:"sendToGTMDatalayer",value:function(e){window.dataLayer.push(e)}},{key:"isReady",value:function(){return!(!window.dataLayer||Array.prototype.push===window.dataLayer.push)}}]),e}(),Ee=function(){function e(t,n){if(u(this,e),this.analytics=n,this.appKey=t.appKey,t.appKey||(this.appKey=""),this.endPoint="",t.dataCenter){var r=t.dataCenter.trim().split("-");"eu"===r[0].toLowerCase()?this.endPoint="sdk.fra-01.braze.eu":this.endPoint="sdk.iad-".concat(r[1],".braze.com")}this.name="BRAZE",F("Config ",t)}return r(e,[{key:"formatGender",value:function(e){if(e&&"string"==typeof e){return["woman","female","w","f"].indexOf(e.toLowerCase())>-1?window.appboy.ab.User.Genders.FEMALE:["man","male","m"].indexOf(e.toLowerCase())>-1?window.appboy.ab.User.Genders.MALE:["other","o"].indexOf(e.toLowerCase())>-1?window.appboy.ab.User.Genders.OTHER:void 0}}},{key:"init",value:function(){F("===in init Braze==="),function(e,t,u,n,r){e.appboy={},e.appboyQueue=[];for(var i="initialize destroy getDeviceId toggleAppboyLogging setLogger openSession changeUser requestImmediateDataFlush requestFeedRefresh subscribeToFeedUpdates requestContentCardsRefresh subscribeToContentCardsUpdates logCardImpressions logCardClick logCardDismissal logFeedDisplayed logContentCardsDisplayed logInAppMessageImpression logInAppMessageClick logInAppMessageButtonClick logInAppMessageHtmlClick subscribeToNewInAppMessages subscribeToInAppMessage removeSubscription removeAllSubscriptions logCustomEvent logPurchase isPushSupported isPushBlocked isPushGranted isPushPermissionGranted registerAppboyPushMessages unregisterAppboyPushMessages trackLocation stopWebTracking resumeWebTracking wipeData ab ab.DeviceProperties ab.User ab.User.Genders ab.User.NotificationSubscriptionTypes ab.User.prototype.getUserId ab.User.prototype.setFirstName ab.User.prototype.setLastName ab.User.prototype.setEmail ab.User.prototype.setGender ab.User.prototype.setDateOfBirth ab.User.prototype.setCountry ab.User.prototype.setHomeCity ab.User.prototype.setLanguage ab.User.prototype.setEmailNotificationSubscriptionType ab.User.prototype.setPushNotificationSubscriptionType ab.User.prototype.setPhoneNumber ab.User.prototype.setAvatarImageUrl ab.User.prototype.setLastKnownLocation ab.User.prototype.setUserAttribute ab.User.prototype.setCustomUserAttribute ab.User.prototype.addToCustomAttributeArray ab.User.prototype.removeFromCustomAttributeArray ab.User.prototype.incrementCustomUserAttribute ab.User.prototype.addAlias ab.User.prototype.setCustomLocationAttribute ab.InAppMessage ab.InAppMessage.SlideFrom ab.InAppMessage.ClickAction ab.InAppMessage.DismissType ab.InAppMessage.OpenTarget ab.InAppMessage.ImageStyle ab.InAppMessage.TextAlignment ab.InAppMessage.Orientation ab.InAppMessage.CropType ab.InAppMessage.prototype.subscribeToClickedEvent ab.InAppMessage.prototype.subscribeToDismissedEvent ab.InAppMessage.prototype.removeSubscription ab.InAppMessage.prototype.removeAllSubscriptions ab.InAppMessage.prototype.closeMessage ab.InAppMessage.Button ab.InAppMessage.Button.prototype.subscribeToClickedEvent ab.InAppMessage.Button.prototype.removeSubscription ab.InAppMessage.Button.prototype.removeAllSubscriptions ab.SlideUpMessage ab.ModalMessage ab.FullScreenMessage ab.HtmlMessage ab.ControlMessage ab.Feed ab.Feed.prototype.getUnreadCardCount ab.ContentCards ab.ContentCards.prototype.getUnviewedCardCount ab.Card ab.Card.prototype.dismissCard ab.ClassicCard ab.CaptionedImage ab.Banner ab.ControlCard ab.WindowUtils display display.automaticallyShowNewInAppMessages display.showInAppMessage display.showFeed display.destroyFeed display.toggleFeed display.showContentCards display.hideContentCards display.toggleContentCards sharedLib".split(" "),o=0;o>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&u.rotl(e,8)|4278255360&u.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],u=0,n=0;u>>5]|=e[u]<<24-n%32;return t},wordsToBytes:function(e){for(var t=[],u=0;u<32*e.length;u+=8)t.push(e[u>>>5]>>>24-u%32&255);return t},bytesToHex:function(e){for(var t=[],u=0;u>>4).toString(16)),t.push((15&e[u]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],u=0;u>>6*(3-i)&63)):u.push("=");return u.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var u=[],n=0,r=0;n>>6-2*r);return u}};e.exports=u}()})),ve={utf8:{stringToBytes:function(e){return ve.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(ve.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],u=0;u>>24)|4278255360&(s[D]<<24|s[D]>>>8);s[a>>>5]|=128<>>9<<4)]=a;var f=e._ff,h=e._gg,g=e._hh,m=e._ii;for(D=0;D>>0,l=l+C>>>0,d=d+E>>>0,p=p+A>>>0}return t.endian([c,l,d,p])};i._ff=function(e,t,u,n,r,i,o){var s=e+(t&u|~t&n)+(r>>>0)+o;return(s<>>32-i)+t},i._gg=function(e,t,u,n,r,i,o){var s=e+(t&n|u&~n)+(r>>>0)+o;return(s<>>32-i)+t},i._hh=function(e,t,u,n,r,i,o){var s=e+(t^u^n)+(r>>>0)+o;return(s<>>32-i)+t},i._ii=function(e,t,u,n,r,i,o){var s=e+(u^(t|~n))+(r>>>0)+o;return(s<>>32-i)+t},i._blocksize=16,i._digestsize=16,e.exports=function(e,u){if(null==e)throw new Error("Illegal argument "+e);var n=t.wordsToBytes(i(e,u));return u&&u.asBytes?n:u&&u.asString?r.bytesToString(n):t.bytesToHex(n)}}()})),ke=function(){function e(t){u(this,e),this.NAME="INTERCOM",this.API_KEY=t.apiKey,this.APP_ID=t.appId,this.MOBILE_APP_ID=t.mobileAppId,F("Config ",t)}return r(e,[{key:"init",value:function(){window.intercomSettings={app_id:this.APP_ID},function(){var e=window,t=e.Intercom;if("function"==typeof t)t("reattach_activator"),t("update",e.intercomSettings);else{var u=document,n=function e(){e.c(arguments)};n.q=[],n.c=function(e){n.q.push(e)},e.Intercom=n;var r=function(){var e=u.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://widget.intercom.io/widget/".concat(window.intercomSettings.app_id);var t=u.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)};"complete"===document.readyState?(r(),window.intercom_code=!0):e.attachEvent?(e.attachEvent("onload",r),window.intercom_code=!0):(e.addEventListener("load",r,!1),window.intercom_code=!0)}}()}},{key:"page",value:function(){window.Intercom("update")}},{key:"identify",value:function(e){var u={},n=e.message.context;if(null!=(n.Intercom?n.Intercom:null)){var r=n.Intercom.user_hash?n.Intercom.user_hash:null;null!=r&&(u.user_hash=r);var i=n.Intercom.hideDefaultLauncher?n.Intercom.hideDefaultLauncher:null;null!=i&&(u.hide_default_launcher=i)}Object.keys(n.traits).forEach((function(e){if(n.traits.hasOwnProperty(e)){var r=n.traits[e];if("company"===e){var i=[],o={};"string"==typeof n.traits[e]&&(o.company_id=Be(n.traits[e]));var s="object"===t(n.traits[e])&&Object.keys(n.traits[e])||[];s.forEach((function(t){s.hasOwnProperty(t)&&("id"!=t?o[t]=n.traits[e][t]:o.company_id=n.traits[e][t])})),"object"!==t(n.traits[e])||s.includes("id")||(o.company_id=Be(o.name)),i.push(o),u.companies=i}else u[e]=n.traits[e];switch(e){case"createdAt":u.created_at=r;break;case"anonymousId":u.user_id=r}}})),u.user_id=e.message.userId,window.Intercom("update",u)}},{key:"track",value:function(e){var t={},u=e.message;(u.properties?Object.keys(u.properties):null).forEach((function(e){var n=u.properties[e];t[e]=n})),u.event&&(t.event_name=u.event),t.user_id=u.userId?u.userId:u.anonymousId,t.created_at=Math.floor(new Date(u.originalTimestamp).getTime()/1e3),window.Intercom("trackEvent",t.event_name,t)}},{key:"isLoaded",value:function(){return!!window.intercom_code}},{key:"isReady",value:function(){return!!window.intercom_code}}]),e}(),_e=function(){function e(t){u(this,e),this.projectID=t.projectID,this.writeKey=t.writeKey,this.ipAddon=t.ipAddon,this.uaAddon=t.uaAddon,this.urlAddon=t.urlAddon,this.referrerAddon=t.referrerAddon,this.client=null,this.name="KEEN"}return r(e,[{key:"init",value:function(){F("===in init Keen==="),V("keen-integration","https://cdn.jsdelivr.net/npm/keen-tracking@4");var e=setInterval(function(){void 0!==window.KeenTracking&&void 0!==window.KeenTracking&&(this.client=function(e){return e.client=new window.KeenTracking({projectId:e.projectID,writeKey:e.writeKey}),e.client}(this),clearInterval(e))}.bind(this),1e3)}},{key:"identify",value:function(e){F("in Keen identify");var t=e.message.context.traits,u=e.message.userId?e.message.userId:e.message.anonymousId,n=e.message.properties?Object.assign(n,e.message.properties):{};n.user={userId:u,traits:t},n=this.getAddOn(n),this.client.extendEvents(n)}},{key:"track",value:function(e){F("in Keen track");var t=e.message.event,u=e.message.properties;u=this.getAddOn(u),this.client.recordEvent(t,u)}},{key:"page",value:function(e){F("in Keen page");var t=e.message.name,u=e.message.properties?e.message.properties.category:void 0,n="Loaded a Page";t&&(n="Viewed ".concat(t," page")),u&&t&&(n="Viewed ".concat(u," ").concat(t," page"));var r=e.message.properties;r=this.getAddOn(r),this.client.recordEvent(n,r)}},{key:"isLoaded",value:function(){return F("in Keen isLoaded"),!(null==this.client)}},{key:"isReady",value:function(){return!(null==this.client)}},{key:"getAddOn",value:function(e){var t=[];return this.ipAddon&&(e.ip_address="${keen.ip}",t.push({name:"keen:ip_to_geo",input:{ip:"ip_address"},output:"ip_geo_info"})),this.uaAddon&&(e.user_agent="${keen.user_agent}",t.push({name:"keen:ua_parser",input:{ua_string:"user_agent"},output:"parsed_user_agent"})),this.urlAddon&&(e.page_url=document.location.href,t.push({name:"keen:url_parser",input:{url:"page_url"},output:"parsed_page_url"})),this.referrerAddon&&(e.page_url=document.location.href,e.referrer_url=document.referrer,t.push({name:"keen:referrer_parser",input:{referrer_url:"referrer_url",page_url:"page_url"},output:"referrer_info"})),e.keen={addons:t},e}}]),e}(),Ie=Object.prototype.hasOwnProperty,Te=function(e){for(var t=Array.prototype.slice.call(arguments,1),u=0;u-1&&o.push([s,u[s]])}},{key:"initAfterPage",value:function(){var e,t=this;e=function(){var e,u,n=t.isVideo?"chartbeat_video.js":"chartbeat.js";e=document.createElement("script"),u=document.getElementsByTagName("script")[0],e.type="text/javascript",e.async=!0,e.src="//static.chartbeat.com/js/".concat(n),u.parentNode.insertBefore(e,u)},Pe?Le(e):Re.push(e),this._isReady(this).then((function(e){F("===replaying on chartbeat==="),e.replayEvents.forEach((function(t){e[t[0]](t[1])}))}))}},{key:"pause",value:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return new Promise((function(n){return t.isLoaded()?(t.failed=!1,F("===chartbeat loaded successfully==="),e.analytics.emit("ready"),n(e)):u>=1e4?(t.failed=!0,F("===chartbeat failed==="),n(e)):void t.pause(1e3).then((function(){return t._isReady(e,u+1e3).then(n)}))}))}}]),e}(),Me=function(){function e(t,n){u(this,e),this.c2ID=t.c2ID,this.analytics=n,this.comScoreBeaconParam=t.comScoreBeaconParam?t.comScoreBeaconParam:{},this.isFirstPageCallMade=!1,this.failed=!1,this.comScoreParams={},this.replayEvents=[],this.name="COMSCORE"}return r(e,[{key:"init",value:function(){F("===in init Comscore init===")}},{key:"identify",value:function(e){F("in Comscore identify")}},{key:"track",value:function(e){F("in Comscore track")}},{key:"page",value:function(e){if(F("in Comscore page"),this.loadConfig(e),this.isFirstPageCallMade){if(this.failed)return void(this.replayEvents=[]);if(!this.isLoaded()&&!this.failed)return void this.replayEvents.push(["page",e]);e.message.properties;window.COMSCORE.beacon(this.comScoreParams)}else this.isFirstPageCallMade=!0,this.initAfterPage()}},{key:"loadConfig",value:function(e){F("=====in loadConfig====="),this.comScoreParams=this.mapComscoreParams(e.message.properties),window._comscore=window._comscore||[],window._comscore.push(this.comScoreParams)}},{key:"initAfterPage",value:function(){F("=====in initAfterPage====="),function(){var e=document.createElement("script"),t=document.getElementsByTagName("script")[0];e.async=!0,e.src="".concat("https:"==document.location.protocol?"https://sb":"http://b",".scorecardresearch.com/beacon.js"),t.parentNode.insertBefore(e,t)}(),this._isReady(this).then((function(e){e.replayEvents.forEach((function(t){e[t[0]](t[1])}))}))}},{key:"pause",value:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return new Promise((function(n){return t.isLoaded()?(t.failed=!1,e.analytics.emit("ready"),n(e)):u>=1e4?(t.failed=!0,n(e)):void t.pause(1e3).then((function(){return t._isReady(e,u+1e3).then(n)}))}))}},{key:"mapComscoreParams",value:function(e){F("=====in mapComscoreParams=====");var t=this.comScoreBeaconParam,u={};return Object.keys(t).forEach((function(n){if(n in e){var r=t[n],i=e[n];u[r]=i}})),u.c1="2",u.c2=this.c2ID,F("=====in mapComscoreParams=====",u),u}},{key:"isLoaded",value:function(){return F("in Comscore isLoaded"),!this.isFirstPageCallMade||!!window.COMSCORE}},{key:"isReady",value:function(){return!!window.COMSCORE}}]),e}(),Ne=Object.prototype.hasOwnProperty,qe=String.prototype.charAt,ze=Object.prototype.toString,Ge=function(e,t){return qe.call(e,t)},Ke=function(e,t){return Ne.call(e,t)},Ve=function(e,t){t=t||Ke;for(var u=[],n=0,r=e.length;n=0&&ue.date(D))l[p]=D.toISOTring().split("T")[0];else if(s.hasOwnProperty(p))s[p]&&"string"==typeof D&&(l[p]=sha256(D));else{var f=n.indexOf(p)>=0,h=r.indexOf(p)>=0;f&&!h||(l[p]=D)}}return l}}]),e}(),et=d((function(e,t){var u;e.exports=(u=u||function(e,t){var u=Object.create||function(){function e(){}return function(t){var u;return e.prototype=t,u=new e,e.prototype=null,u}}(),n={},r=n.lib={},i=r.Base={extend:function(e){var t=u(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},o=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||a).stringify(this)},concat:function(e){var t=this.words,u=e.words,n=this.sigBytes,r=e.sigBytes;if(this.clamp(),n%4)for(var i=0;i>>2]>>>24-i%4*8&255;t[n+i>>>2]|=o<<24-(n+i)%4*8}else for(i=0;i>>2]=u[i>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,u=this.sigBytes;t[u>>>2]&=4294967295<<32-u%4*8,t.length=e.ceil(u/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var u,n=[],r=function(t){t=t;var u=987654321,n=4294967295;return function(){var r=((u=36969*(65535&u)+(u>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return r/=4294967296,(r+=.5)*(e.random()>.5?1:-1)}},i=0;i>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,u=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new o.init(u,t/2)}},c=s.Latin1={stringify:function(e){for(var t=e.words,u=e.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(i))}return n.join("")},parse:function(e){for(var t=e.length,u=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new o.init(u,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},d=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var u=this._data,n=u.words,r=u.sigBytes,i=this.blockSize,s=r/(4*i),a=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,c=e.min(4*a,r);if(a){for(var l=0;l>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var a=n.charAt(64);if(a)for(;r.length%4;)r.push(a);return r.join("")},parse:function(e){var t=e.length,u=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var i=0;i>>6-o%4*2;r[i>>>2]|=(s|a)<<24-i%4*8,i++}return n.create(r,i)}(e,t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},r.enc.Base64)})),d((function(e,t){var u;e.exports=(u=et,function(e){var t=u,n=t.lib,r=n.WordArray,i=n.Hasher,o=t.algo,s=[];!function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0}();var a=o.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var u=0;u<16;u++){var n=t+u,r=e[n];e[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var i=this._hash.words,o=e[t+0],a=e[t+1],D=e[t+2],f=e[t+3],h=e[t+4],g=e[t+5],m=e[t+6],y=e[t+7],C=e[t+8],E=e[t+9],A=e[t+10],v=e[t+11],F=e[t+12],w=e[t+13],b=e[t+14],B=e[t+15],k=i[0],_=i[1],I=i[2],T=i[3];k=c(k,_,I,T,o,7,s[0]),T=c(T,k,_,I,a,12,s[1]),I=c(I,T,k,_,D,17,s[2]),_=c(_,I,T,k,f,22,s[3]),k=c(k,_,I,T,h,7,s[4]),T=c(T,k,_,I,g,12,s[5]),I=c(I,T,k,_,m,17,s[6]),_=c(_,I,T,k,y,22,s[7]),k=c(k,_,I,T,C,7,s[8]),T=c(T,k,_,I,E,12,s[9]),I=c(I,T,k,_,A,17,s[10]),_=c(_,I,T,k,v,22,s[11]),k=c(k,_,I,T,F,7,s[12]),T=c(T,k,_,I,w,12,s[13]),I=c(I,T,k,_,b,17,s[14]),k=l(k,_=c(_,I,T,k,B,22,s[15]),I,T,a,5,s[16]),T=l(T,k,_,I,m,9,s[17]),I=l(I,T,k,_,v,14,s[18]),_=l(_,I,T,k,o,20,s[19]),k=l(k,_,I,T,g,5,s[20]),T=l(T,k,_,I,A,9,s[21]),I=l(I,T,k,_,B,14,s[22]),_=l(_,I,T,k,h,20,s[23]),k=l(k,_,I,T,E,5,s[24]),T=l(T,k,_,I,b,9,s[25]),I=l(I,T,k,_,f,14,s[26]),_=l(_,I,T,k,C,20,s[27]),k=l(k,_,I,T,w,5,s[28]),T=l(T,k,_,I,D,9,s[29]),I=l(I,T,k,_,y,14,s[30]),k=d(k,_=l(_,I,T,k,F,20,s[31]),I,T,g,4,s[32]),T=d(T,k,_,I,C,11,s[33]),I=d(I,T,k,_,v,16,s[34]),_=d(_,I,T,k,b,23,s[35]),k=d(k,_,I,T,a,4,s[36]),T=d(T,k,_,I,h,11,s[37]),I=d(I,T,k,_,y,16,s[38]),_=d(_,I,T,k,A,23,s[39]),k=d(k,_,I,T,w,4,s[40]),T=d(T,k,_,I,o,11,s[41]),I=d(I,T,k,_,f,16,s[42]),_=d(_,I,T,k,m,23,s[43]),k=d(k,_,I,T,E,4,s[44]),T=d(T,k,_,I,F,11,s[45]),I=d(I,T,k,_,B,16,s[46]),k=p(k,_=d(_,I,T,k,D,23,s[47]),I,T,o,6,s[48]),T=p(T,k,_,I,y,10,s[49]),I=p(I,T,k,_,b,15,s[50]),_=p(_,I,T,k,g,21,s[51]),k=p(k,_,I,T,F,6,s[52]),T=p(T,k,_,I,f,10,s[53]),I=p(I,T,k,_,A,15,s[54]),_=p(_,I,T,k,a,21,s[55]),k=p(k,_,I,T,C,6,s[56]),T=p(T,k,_,I,B,10,s[57]),I=p(I,T,k,_,m,15,s[58]),_=p(_,I,T,k,w,21,s[59]),k=p(k,_,I,T,h,6,s[60]),T=p(T,k,_,I,v,10,s[61]),I=p(I,T,k,_,D,15,s[62]),_=p(_,I,T,k,E,21,s[63]),i[0]=i[0]+k|0,i[1]=i[1]+_|0,i[2]=i[2]+I|0,i[3]=i[3]+T|0},_doFinalize:function(){var t=this._data,u=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;u[r>>>5]|=128<<24-r%32;var i=e.floor(n/4294967296),o=n;u[15+(r+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),u[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(u.length+1),this._process();for(var s=this._hash,a=s.words,c=0;c<4;c++){var l=a[c];a[c]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,t,u,n,r,i,o){var s=e+(t&u|~t&n)+r+o;return(s<>>32-i)+t}function l(e,t,u,n,r,i,o){var s=e+(t&n|u&~n)+r+o;return(s<>>32-i)+t}function d(e,t,u,n,r,i,o){var s=e+(t^u^n)+r+o;return(s<>>32-i)+t}function p(e,t,u,n,r,i,o){var s=e+(u^(t|~n))+r+o;return(s<>>32-i)+t}t.MD5=i._createHelper(a),t.HmacMD5=i._createHmacHelper(a)}(Math),u.MD5)})),d((function(e,t){var u,n,r,i,o,s,a,c;e.exports=(n=(u=c=et).lib,r=n.WordArray,i=n.Hasher,o=u.algo,s=[],a=o.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var u=this._hash.words,n=u[0],r=u[1],i=u[2],o=u[3],a=u[4],c=0;c<80;c++){if(c<16)s[c]=0|e[t+c];else{var l=s[c-3]^s[c-8]^s[c-14]^s[c-16];s[c]=l<<1|l>>>31}var d=(n<<5|n>>>27)+a+s[c];d+=c<20?1518500249+(r&i|~r&o):c<40?1859775393+(r^i^o):c<60?(r&i|r&o|i&o)-1894007588:(r^i^o)-899497514,a=o,o=i,i=r<<30|r>>>2,r=n,n=d}u[0]=u[0]+n|0,u[1]=u[1]+r|0,u[2]=u[2]+i|0,u[3]=u[3]+o|0,u[4]=u[4]+a|0},_doFinalize:function(){var e=this._data,t=e.words,u=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=Math.floor(u/4294967296),t[15+(n+64>>>9<<4)]=u,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}}),u.SHA1=i._createHelper(a),u.HmacSHA1=i._createHmacHelper(a),c.SHA1)})),d((function(e,t){var u,n,r;e.exports=(n=(u=et).lib.Base,r=u.enc.Utf8,void(u.algo.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=r.parse(t));var u=e.blockSize,n=4*u;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var i=this._oKey=t.clone(),o=this._iKey=t.clone(),s=i.words,a=o.words,c=0;c>>2];e.sigBytes-=t}},r.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:h}),reset:function(){d.reset.call(this);var e=this.cfg,t=e.iv,u=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=u.createEncryptor;else n=u.createDecryptor,this._minBufferSize=1;this._mode&&this._mode.__creator==n?this._mode.init(this,t&&t.words):(this._mode=n.call(u,this,t&&t.words),this._mode.__creator=n)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4}),g=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),m=(n.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext,u=e.salt;if(u)var n=o.create([1398893684,1701076831]).concat(u).concat(t);else n=t;return n.toString(c)},parse:function(e){var t=c.parse(e),u=t.words;if(1398893684==u[0]&&1701076831==u[1]){var n=o.create(u.slice(2,4));u.splice(0,4),t.sigBytes-=16}return g.create({ciphertext:t,salt:n})}},y=r.SerializableCipher=i.extend({cfg:i.extend({format:m}),encrypt:function(e,t,u,n){n=this.cfg.extend(n);var r=e.createEncryptor(u,n),i=r.finalize(t),o=r.cfg;return g.create({ciphertext:i,key:u,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,u,n){return n=this.cfg.extend(n),t=this._parse(t,n.format),e.createDecryptor(u,n).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),C=(n.kdf={}).OpenSSL={execute:function(e,t,u,n){n||(n=o.random(8));var r=l.create({keySize:t+u}).compute(e,n),i=o.create(r.words.slice(t),4*u);return r.sigBytes=4*t,g.create({key:r,iv:i,salt:n})}},E=r.PasswordBasedCipher=y.extend({cfg:y.cfg.extend({kdf:C}),encrypt:function(e,t,u,n){var r=(n=this.cfg.extend(n)).kdf.execute(u,e.keySize,e.ivSize);n.iv=r.iv;var i=y.encrypt.call(this,e,t,r.key,n);return i.mixIn(r),i},decrypt:function(e,t,u,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var r=n.kdf.execute(u,e.keySize,e.ivSize,t.salt);return n.iv=r.iv,y.decrypt.call(this,e,t,r.key,n)}})))})),d((function(e,t){var u;e.exports=(u=et,function(){var e=u,t=e.lib.BlockCipher,n=e.algo,r=[],i=[],o=[],s=[],a=[],c=[],l=[],d=[],p=[],D=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var u=0,n=0;for(t=0;t<256;t++){var f=n^n<<1^n<<2^n<<3^n<<4;f=f>>>8^255&f^99,r[u]=f,i[f]=u;var h=e[u],g=e[h],m=e[g],y=257*e[f]^16843008*f;o[u]=y<<24|y>>>8,s[u]=y<<16|y>>>16,a[u]=y<<8|y>>>24,c[u]=y,y=16843009*m^65537*g^257*h^16843008*u,l[f]=y<<24|y>>>8,d[f]=y<<16|y>>>16,p[f]=y<<8|y>>>24,D[f]=y,u?(u=h^e[e[e[m^h]]],n^=e[e[n]]):u=n=1}}();var f=[0,1,2,4,8,16,32,64,128,27,54],h=n.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,u=e.sigBytes/4,n=4*((this._nRounds=u+6)+1),i=this._keySchedule=[],o=0;o6&&o%u==4&&(s=r[s>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s]):(s=r[(s=s<<8|s>>>24)>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s],s^=f[o/u|0]<<24),i[o]=i[o-u]^s}for(var a=this._invKeySchedule=[],c=0;c>>24]]^d[r[s>>>16&255]]^p[r[s>>>8&255]]^D[r[255&s]]}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,s,a,c,r)},decryptBlock:function(e,t){var u=e[t+1];e[t+1]=e[t+3],e[t+3]=u,this._doCryptBlock(e,t,this._invKeySchedule,l,d,p,D,i),u=e[t+1],e[t+1]=e[t+3],e[t+3]=u},_doCryptBlock:function(e,t,u,n,r,i,o,s){for(var a=this._nRounds,c=e[t]^u[0],l=e[t+1]^u[1],d=e[t+2]^u[2],p=e[t+3]^u[3],D=4,f=1;f>>24]^r[l>>>16&255]^i[d>>>8&255]^o[255&p]^u[D++],g=n[l>>>24]^r[d>>>16&255]^i[p>>>8&255]^o[255&c]^u[D++],m=n[d>>>24]^r[p>>>16&255]^i[c>>>8&255]^o[255&l]^u[D++],y=n[p>>>24]^r[c>>>16&255]^i[l>>>8&255]^o[255&d]^u[D++];c=h,l=g,d=m,p=y}h=(s[c>>>24]<<24|s[l>>>16&255]<<16|s[d>>>8&255]<<8|s[255&p])^u[D++],g=(s[l>>>24]<<24|s[d>>>16&255]<<16|s[p>>>8&255]<<8|s[255&c])^u[D++],m=(s[d>>>24]<<24|s[p>>>16&255]<<16|s[c>>>8&255]<<8|s[255&l])^u[D++],y=(s[p>>>24]<<24|s[c>>>16&255]<<16|s[l>>>8&255]<<8|s[255&d])^u[D++],e[t]=h,e[t+1]=g,e[t+2]=m,e[t+3]=y},keySize:8});e.AES=t._createHelper(h)}(),u.AES)}))),ut=d((function(e,t){e.exports=et.enc.Utf8})),nt=Object.prototype.toString;var rt=function e(u){var n=function(e){switch(nt.call(e)){case"[object Date]":return"date";case"[object RegExp]":return"regexp";case"[object Arguments]":return"arguments";case"[object Array]":return"array";case"[object Error]":return"error"}return null===e?"null":void 0===e?"undefined":e!=e?"nan":e&&1===e.nodeType?"element":null!=(u=e)&&(u._isBuffer||u.constructor&&"function"==typeof u.constructor.isBuffer&&u.constructor.isBuffer(u))?"buffer":t(e=e.valueOf?e.valueOf():Object.prototype.valueOf.apply(e));var u}(u);if("object"===n){var r={};for(var i in u)u.hasOwnProperty(i)&&(r[i]=e(u[i]));return r}if("array"===n){r=new Array(u.length);for(var o=0,s=u.length;o1e4)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var u=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*u;case"days":case"day":case"d":return u*at;case"hours":case"hour":case"hrs":case"hr":case"h":return u*st;case"minutes":case"minute":case"mins":case"min":case"m":return u*ot;case"seconds":case"second":case"secs":case"sec":case"s":return u*it;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u}}(e):t.long?function(e){return lt(e,at,"day")||lt(e,st,"hour")||lt(e,ot,"minute")||lt(e,it,"second")||e+" ms"}(e):function(e){return e>=at?Math.round(e/at)+"d":e>=st?Math.round(e/st)+"h":e>=ot?Math.round(e/ot)+"m":e>=it?Math.round(e/it)+"s":e+"ms"}(e)};function lt(e,t,u){if(!(e=31},u.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),u.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],u.formatters.j=function(e){return JSON.stringify(e)},u.enable(n())}))),Dt=(pt.log,pt.formatArgs,pt.save,pt.load,pt.useColors,pt.storage,pt.colors,pt("cookie")),ft=function(e,t,u){switch(arguments.length){case 3:case 2:return ht(e,t,u);case 1:return mt(e);default:return gt()}};function ht(e,t,u){u=u||{};var n=yt(e)+"="+yt(t);null==t&&(u.maxage=-1),u.maxage&&(u.expires=new Date(+new Date+u.maxage)),u.path&&(n+="; path="+u.path),u.domain&&(n+="; domain="+u.domain),u.expires&&(n+="; expires="+u.expires.toUTCString()),u.samesite&&(n+="; samesite="+u.samesite),u.secure&&(n+="; secure"),document.cookie=n}function gt(){var e;try{e=document.cookie}catch(e){return"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e.stack||e),{}}return function(e){var t,u={},n=e.split(/ *; */);if(""==n[0])return u;for(var r=0;r1)))/4)-l((e-1901+t)/100)+l((e-1601+t)/400)};t=function(e){for(r=l(e/864e5),u=l(r/365.2425)+1970-1;D(u+1,0)<=r;u++);for(n=l((r-D(u,0))/30.42);D(u,n+1)<=r;n++);r=1+r-D(u,n),o=l((i=(e%864e5+864e5)%864e5)/36e5)%24,s=l(i/6e4)%60,a=l(i/1e3)%60,c=i%1e3}}return(w=function(e){return e>-1/0&&e<1/0?(t(e),e=(u<=0||u>=1e4?(u<0?"-":"+")+F(6,u<0?-u:u):F(4,u))+"-"+F(2,n+1)+"-"+F(2,r)+"T"+F(2,o)+":"+F(2,s)+":"+F(2,a)+"."+F(3,c)+"Z",u=n=r=o=s=a=c=null):e=null,e})(e)};if(C("json-stringify")&&!C("date-serialization")){var b=function(e){return w(this)},B=u.stringify;u.stringify=function(e,t,u){var n=c.prototype.toJSON;c.prototype.toJSON=b;var r=B(e,t,u);return c.prototype.toJSON=n,r}}else{var k=function(e){var t=e.charCodeAt(0),u=v[t];return u||"\\u00"+F(2,t.toString(16))},_=/[\x00-\x1f\x22\x5c]/g,I=function(e){return _.lastIndex=0,'"'+(_.test(e)?e.replace(_,k):e)+'"'};u.stringify=function(e,u,r){var i,o,s,a;if(n[t(u)]&&u)if("[object Function]"==(a=h.call(u)))o=u;else if("[object Array]"==a){s={};for(var l,p=0,D=u.length;p0)for(r>10&&(r=10),i="";i.length-1/0&&l<1/0?""+l:"null";case"string":case"[object String]":return I(""+l)}if("object"==t(l)){for(C=a.length;C--;)if(a[C]===l)throw d();if(a.push(l),f=[],E=s,s+=o,"[object Array]"==D){for(y=0,C=l.length;y=48&&r<=57||r>=97&&r<=102||r>=65&&r<=70||P();e+=O("0x"+i.slice(t,T));break;default:P()}else{if(34==r)break;for(r=i.charCodeAt(T),t=T;r>=32&&92!=r&&34!=r;)r=i.charCodeAt(++T);e+=i.slice(t,T)}if(34==i.charCodeAt(T))return T++,e;P();default:if(t=T,45==r&&(n=!0,r=i.charCodeAt(++T)),r>=48&&r<=57){for(48==r&&((r=i.charCodeAt(T+1))>=48&&r<=57)&&P(),n=!1;T=48&&r<=57);T++);if(46==i.charCodeAt(T)){for(u=++T;u57);u++);u==T&&P(),T=u}if(101==(r=i.charCodeAt(T))||69==r){for(43!=(r=i.charCodeAt(++T))&&45!=r||T++,u=T;u57);u++);u==T&&P(),T=u}return+i.slice(t,T)}n&&P();var s=i.slice(T,T+4);if("true"==s)return T+=4,!0;if("fals"==s&&101==i.charCodeAt(T+4))return T+=5,!1;if("null"==s)return T+=4,null;P()}return"$"},j=function(e,t,u){var n=L(e,t,u);void 0===n?delete e[t]:e[t]=n},L=function(e,u,n){var r,i=e[u];if("object"==t(i)&&i)if("[object Array]"==h.call(i))for(r=i.length;r--;)j(h,A,i);else A(i,(function(e){j(i,e,n)}));return n.call(e,u,i)};u.parse=function(e,t){var u,n;return T=0,S=""+e,u=function e(t){var u,n;if("$"==t&&P(),"string"==typeof t){if("@"==(E?t.charAt(0):t[0]))return t.slice(1);if("["==t){for(u=[];"]"!=(t=R());)n?","==t?"]"==(t=R())&&P():P():n=!0,","==t&&P(),u.push(e(t));return u}if("{"==t){for(u={};"}"!=(t=R());)n?","==t?"}"==(t=R())&&P():P():n=!0,","!=t&&"string"==typeof t&&"@"==(E?t.charAt(0):t[0])&&":"==R()||P(),u[t.slice(1)]=e(R());return u}P()}return t}(R()),"$"!=R()&&P(),T=S=null,t&&"[object Function]"==h.call(t)?L(((n={})[""]=u,n),"",t):u}}}return u.runInContext=s,u}if(!o||o.global!==o&&o.window!==o&&o.self!==o||(i=o),r)s(i,r);else{var a=i.JSON,c=i.JSON3,d=!1,p=s(i,i.JSON3={noConflict:function(){return d||(d=!0,i.JSON=a,i.JSON3=c,a=c=null),p}});i.JSON={parse:p.parse,stringify:p.stringify}}}).call(l)})),Rt=d((function(e,t){(t=e.exports=function(e){function n(){}function i(){var e=i,n=+new Date,o=n-(u||n);e.diff=o,e.prev=u,e.curr=n,u=n,null==e.useColors&&(e.useColors=t.useColors()),null==e.color&&e.useColors&&(e.color=r());var s=Array.prototype.slice.call(arguments);s[0]=t.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var a=0;s[0]=s[0].replace(/%([a-z%])/g,(function(u,n){if("%%"===u)return u;a++;var r=t.formatters[n];if("function"==typeof r){var i=s[a];u=r.call(e,i),s.splice(a,1),a--}return u})),"function"==typeof t.formatArgs&&(s=t.formatArgs.apply(e,s));var c=i.log||t.log||console.log.bind(console);c.apply(e,s)}n.enabled=!1,i.enabled=!0;var o=t.enabled(e)?i:n;return o.namespace=e,o}).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){t.save(e);for(var u=(e||"").split(/[\s,]+/),n=u.length,r=0;r=31},u.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),u.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],u.formatters.j=function(e){return JSON.stringify(e)},u.enable(n())}))),Lt=(jt.log,jt.formatArgs,jt.save,jt.load,jt.useColors,jt.storage,jt.colors,jt("cookie")),Ut=function(e,t,u){switch(arguments.length){case 3:case 2:return Mt(e,t,u);case 1:return qt(e);default:return Nt()}};function Mt(e,t,u){u=u||{};var n=zt(e)+"="+zt(t);null==t&&(u.maxage=-1),u.maxage&&(u.expires=new Date(+new Date+u.maxage)),u.path&&(n+="; path="+u.path),u.domain&&(n+="; domain="+u.domain),u.expires&&(n+="; expires="+u.expires.toUTCString()),u.secure&&(n+="; secure"),document.cookie=n}function Nt(){var e;try{e=document.cookie}catch(e){return"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e.stack||e),{}}return function(e){var t,u={},n=e.split(/ *; */);if(""==n[0])return u;for(var r=0;r=0;--i)r.push(t.slice(i).join("."));return r},n.cookie=Ut,t=e.exports=n})),Vt=new(function(){function e(t){u(this,e),this._options={},this.options(t)}return r(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;var t=".".concat(Kt(window.location.href));"."===t&&(t=null),this._options=Ot(e,{maxage:31536e6,path:"/",domain:t,samesite:"Lax"}),this.set("test_rudder",!0),this.get("test_rudder")||(this._options.domain=null),this.remove("test_rudder")}},{key:"set",value:function(e,t){try{return ft(e,t,rt(this._options)),!0}catch(e){return w(e),!1}}},{key:"get",value:function(e){return ft(e)}},{key:"remove",value:function(e){try{return ft(e,null,rt(this._options)),!0}catch(e){return!1}}}]),e}())({}),Ht=function(){var e,t={},u="undefined"!=typeof window?window:l,n=u.document;if(t.disabled=!1,t.version="1.3.20",t.set=function(e,t){},t.get=function(e,t){},t.has=function(e){return void 0!==t.get(e)},t.remove=function(e){},t.clear=function(){},t.transact=function(e,u,n){null==n&&(n=u,u=null),null==u&&(u={});var r=t.get(e,u);n(r),t.set(e,r)},t.getAll=function(){var e={};return t.forEach((function(t,u){e[t]=u})),e},t.forEach=function(){},t.serialize=function(e){return Pt.stringify(e)},t.deserialize=function(e){if("string"==typeof e)try{return Pt.parse(e)}catch(t){return e||void 0}},function(){try{return"localStorage"in u&&u.localStorage}catch(e){return!1}}())e=u.localStorage,t.set=function(u,n){return void 0===n?t.remove(u):(e.setItem(u,t.serialize(n)),n)},t.get=function(u,n){var r=t.deserialize(e.getItem(u));return void 0===r?n:r},t.remove=function(t){e.removeItem(t)},t.clear=function(){e.clear()},t.forEach=function(u){for(var n=0;ndocument.w=window<\/script>'),i.close(),r=i.w.frames[0].document,e=r.createElement("div")}catch(t){e=n.createElement("div"),r=n.body}var o=function(u){return function(){var n=Array.prototype.slice.call(arguments,0);n.unshift(e),r.appendChild(e),e.addBehavior("#default#userData"),e.load("localStorage");var i=u.apply(t,n);return r.removeChild(e),i}},s=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g"),a=function(e){return e.replace(/^d/,"___$&").replace(s,"___")};t.set=o((function(e,u,n){return u=a(u),void 0===n?t.remove(u):(e.setAttribute(u,t.serialize(n)),e.save("localStorage"),n)})),t.get=o((function(e,u,n){u=a(u);var r=t.deserialize(e.getAttribute(u));return void 0===r?n:r})),t.remove=o((function(e,t){t=a(t),e.removeAttribute(t),e.save("localStorage")})),t.clear=o((function(e){var t=e.XMLDocument.documentElement.attributes;e.load("localStorage");for(var u=t.length-1;u>=0;u--)e.removeAttribute(t[u].name);e.save("localStorage")})),t.forEach=o((function(e,u){for(var n,r=e.XMLDocument.documentElement.attributes,i=0;n=r[i];++i)u(n.name,t.deserialize(e.getAttribute(n.name)))}))}try{var c="__storejs__";t.set(c,c),t.get(c)!=c&&(t.disabled=!0),t.remove(c)}catch(e){t.disabled=!0}return t.enabled=!t.disabled,t}(),Wt=new(function(){function e(t){u(this,e),this._options={},this.enabled=!1,this.options(t)}return r(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;Ot(e,{enabled:!0}),this.enabled=e.enabled&&Ht.enabled,this._options=e}},{key:"set",value:function(e,t){return!!this.enabled&&Ht.set(e,t)}},{key:"get",value:function(e){return this.enabled?Ht.get(e):null}},{key:"remove",value:function(e){return!!this.enabled&&Ht.remove(e)}}]),e}())({}),Jt="rl_user_id",Yt="rl_trait",$t="rl_anonymous_id",Zt="rl_group_id",Qt="rl_group_trait",Xt="RudderEncrypt:",eu="Rudder",tu=new(function(){function e(){if(u(this,e),Vt.set("rudder_cookies",!0),Vt.get("rudder_cookies"))return Vt.remove("rudder_cookies"),void(this.storage=Vt);Wt.enabled&&(this.storage=Wt)}return r(e,[{key:"stringify",value:function(e){return JSON.stringify(e)}},{key:"parse",value:function(e){try{return e?JSON.parse(e):null}catch(t){return w(t),e||null}}},{key:"trim",value:function(e){return e.replace(/^\s+|\s+$/gm,"")}},{key:"encryptValue",value:function(e){return""==this.trim(e)?e:"".concat(Xt).concat(tt.encrypt(e,eu).toString())}},{key:"decryptValue",value:function(e){return!e||"string"==typeof e&&""==this.trim(e)?e:e.substring(0,Xt.length)==Xt?tt.decrypt(e.substring(Xt.length),eu).toString(ut):e}},{key:"setItem",value:function(e,t){this.storage.set(e,this.encryptValue(this.stringify(t)))}},{key:"setUserId",value:function(e){"string"==typeof e?this.storage.set(Jt,this.encryptValue(this.stringify(e))):w("[Storage] setUserId:: userId should be string")}},{key:"setUserTraits",value:function(e){this.storage.set(Yt,this.encryptValue(this.stringify(e)))}},{key:"setGroupId",value:function(e){"string"==typeof e?this.storage.set(Zt,this.encryptValue(this.stringify(e))):w("[Storage] setGroupId:: groupId should be string")}},{key:"setGroupTraits",value:function(e){this.storage.set(Qt,this.encryptValue(this.stringify(e)))}},{key:"setAnonymousId",value:function(e){"string"==typeof e?this.storage.set($t,this.encryptValue(this.stringify(e))):w("[Storage] setAnonymousId:: anonymousId should be string")}},{key:"getItem",value:function(e){return this.parse(this.decryptValue(this.storage.get(e)))}},{key:"getUserId",value:function(){return this.parse(this.decryptValue(this.storage.get(Jt)))}},{key:"getUserTraits",value:function(){return this.parse(this.decryptValue(this.storage.get(Yt)))}},{key:"getGroupId",value:function(){return this.parse(this.decryptValue(this.storage.get(Zt)))}},{key:"getGroupTraits",value:function(){return this.parse(this.decryptValue(this.storage.get(Qt)))}},{key:"getAnonymousId",value:function(){return this.parse(this.decryptValue(this.storage.get($t)))}},{key:"removeItem",value:function(e){return this.storage.remove(e)}},{key:"clear",value:function(){this.storage.remove(Jt),this.storage.remove(Yt),this.storage.remove(Zt),this.storage.remove(Qt)}}]),e}()),uu="lt_synch_timestamp",nu=new(function(){function e(){u(this,e),this.storage=tu}return r(e,[{key:"setLotameSynchTime",value:function(e){this.storage.setItem(uu,e)}},{key:"getLotameSynchTime",value:function(){return this.storage.getItem(uu)}}]),e}()),ru=function(){function e(t,n){var r=this;u(this,e),this.name="LOTAME",this.analytics=n,this.storage=nu,this.bcpUrlSettingsPixel=t.bcpUrlSettingsPixel,this.bcpUrlSettingsIframe=t.bcpUrlSettingsIframe,this.dspUrlSettingsPixel=t.dspUrlSettingsPixel,this.dspUrlSettingsIframe=t.dspUrlSettingsIframe,this.mappings={},t.mappings.forEach((function(e){var t=e.key,u=e.value;r.mappings[t]=u}))}return r(e,[{key:"init",value:function(){F("===in init Lotame==="),window.LOTAME_SYNCH_CALLBACK=function(){}}},{key:"addPixel",value:function(e,t,u){F("Adding pixel for :: ".concat(e));var n=document.createElement("img");n.src=e,n.setAttribute("width",t),n.setAttribute("height",u),F("Image Pixel :: ".concat(n)),document.getElementsByTagName("body")[0].appendChild(n)}},{key:"addIFrame",value:function(e){F("Adding iframe for :: ".concat(e));var t=document.createElement("iframe");t.src=e,t.title="empty",t.setAttribute("id","LOTCCFrame"),t.setAttribute("tabindex","-1"),t.setAttribute("role","presentation"),t.setAttribute("aria-hidden","true"),t.setAttribute("style","border: 0px; width: 0px; height: 0px; display: block;"),F("IFrame :: ".concat(t)),document.getElementsByTagName("body")[0].appendChild(t)}},{key:"syncPixel",value:function(e){var t=this;if(F("===== in syncPixel ======"),F("Firing DSP Pixel URLs"),this.dspUrlSettingsPixel&&this.dspUrlSettingsPixel.length>0){var u=Date.now();this.dspUrlSettingsPixel.forEach((function(n){var r=t.compileUrl(s(s({},t.mappings),{},{userId:e,random:u}),n.dspUrlTemplate);t.addPixel(r,"1","1")}))}if(F("Firing DSP IFrame URLs"),this.dspUrlSettingsIframe&&this.dspUrlSettingsIframe.length>0){var n=Date.now();this.dspUrlSettingsIframe.forEach((function(u){var r=t.compileUrl(s(s({},t.mappings),{},{userId:e,random:n}),u.dspUrlTemplate);t.addIFrame(r)}))}this.storage.setLotameSynchTime(Date.now()),this.analytics.methodToCallbackMapping.syncPixel&&this.analytics.emit("syncPixel",{destination:this.name})}},{key:"compileUrl",value:function(e,t){return Object.keys(e).forEach((function(u){if(e.hasOwnProperty(u)){var n="{{".concat(u,"}}"),r=new RegExp(n,"gi");t=t.replace(r,e[u])}})),t}},{key:"identify",value:function(e){F("in Lotame identify");var t=e.message.userId;this.syncPixel(t)}},{key:"track",value:function(e){F("track not supported for lotame")}},{key:"page",value:function(e){var t=this;if(F("in Lotame page"),F("Firing BCP Pixel URLs"),this.bcpUrlSettingsPixel&&this.bcpUrlSettingsPixel.length>0){var u=Date.now();this.bcpUrlSettingsPixel.forEach((function(e){var n=t.compileUrl(s(s({},t.mappings),{},{random:u}),e.bcpUrlTemplate);t.addPixel(n,"1","1")}))}if(F("Firing BCP IFrame URLs"),this.bcpUrlSettingsIframe&&this.bcpUrlSettingsIframe.length>0){var n=Date.now();this.bcpUrlSettingsIframe.forEach((function(e){var u=t.compileUrl(s(s({},t.mappings),{},{random:n}),e.bcpUrlTemplate);t.addIFrame(u)}))}e.message.userId&&this.isPixelToBeSynched()&&this.syncPixel(e.message.userId)}},{key:"isPixelToBeSynched",value:function(){var e=this.storage.getLotameSynchTime(),t=Date.now();return!e||Math.floor((t-e)/864e5)>=7}},{key:"isLoaded",value:function(){return F("in Lotame isLoaded"),!0}},{key:"isReady",value:function(){return!0}}]),e}(),iu=function(){function e(t,n){var r=this;u(this,e),this.referrerOverride=function(e){if(e)return window.optimizelyEffectiveReferrer=e,e},this.sendDataToRudder=function(e){F(e);var t=e.experiment,u=e.variation,n={integrations:{All:!0}},i=e.audiences,o={};i.forEach((function(e){o[e.id]=e.name}));var s=Object.keys(o).sort().join(),a=Object.values(o).sort().join(", ");if(r.sendExperimentTrack){var c={campaignName:e.campaignName,campaignId:e.id,experimentId:t.id,experimentName:t.name,variationName:u.name,variationId:u.id,audienceId:s,audienceName:a,isInCampaignHoldback:e.isInCampaignHoldback};if(t.referrer&&(c.referrer=t.referrer,n.page={referrer:t.referrer}),r.sendExperimentTrackAsNonInteractive&&(c.nonInteraction=1),e&&r.customCampaignProperties.length>0)for(var l=0;l1){var u=t.pop();switch(u){case"str":case"int":case"date":case"real":case"bool":case"strs":case"ints":case"dates":case"reals":case"bools":return"".concat(au(t.join("_")),"_").concat(u)}}return au(e)}}]),e}(),TVSQUARED:function(){function e(t){u(this,e),this.isLoaded=function(){return F("in TVSqaured isLoaded"),!(!window._tvq||window._tvq.push===Array.prototype.push)},this.isReady=function(){return F("in TVSqaured isReady"),!(!window._tvq||window._tvq.push===Array.prototype.push)},this.page=function(){window._tvq.push(["trackPageView"])},this.formatRevenue=function(e){var t=e;return t=parseFloat(t.toString().replace(/^[^\d.]*/,""))},this.brandId=t.brandId,this.clientId=t.clientId,this.eventWhiteList=t.eventWhiteList||[],this.customMetrics=t.customMetrics||[],this.name="TVSquared"}return r(e,[{key:"init",value:function(){F("===in init TVSquared==="),window._tvq=window._tvq||[];var e="https:"===document.location.protocol?"https://":"http://";e+="collector-".concat(this.clientId,".tvsquared.com/"),window._tvq.push(["setSiteId",this.brandId]),window._tvq.push(["setTrackerUrl","".concat(e,"tv2track.php")]),V("TVSquared-integration","".concat(e,"tv2track.js"))}},{key:"track",value:function(e){var t,u,n=e.message,r=n.event,i=n.userId,o=n.anonymousId,s=e.message.properties,a=s.revenue,c=s.productType,l=s.category,d=s.order_id,p=s.promotion_id,D=this.eventWhiteList.slice();for(D=D.filter((function(e){return""!==e.event})),t=0;t>>((3&t)<<3)&255;return n}}})),Eu=[],Au=0;Au<256;++Au)Eu[Au]=(Au+256).toString(16).substr(1);var vu,Fu,wu=function(e,t){var u=t||0,n=Eu;return[n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],"-",n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]],n[e[u++]]].join("")},bu=0,Bu=0;var ku=function(e,t,u){var n=t&&u||0,r=t||[],i=(e=e||{}).node||vu,o=void 0!==e.clockseq?e.clockseq:Fu;if(null==i||null==o){var s=Cu();null==i&&(i=vu=[1|s[0],s[1],s[2],s[3],s[4],s[5]]),null==o&&(o=Fu=16383&(s[6]<<8|s[7]))}var a=void 0!==e.msecs?e.msecs:(new Date).getTime(),c=void 0!==e.nsecs?e.nsecs:Bu+1,l=a-bu+(c-Bu)/1e4;if(l<0&&void 0===e.clockseq&&(o=o+1&16383),(l<0||a>bu)&&void 0===e.nsecs&&(c=0),c>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");bu=a,Bu=c,Fu=o;var d=(1e4*(268435455&(a+=122192928e5))+c)%4294967296;r[n++]=d>>>24&255,r[n++]=d>>>16&255,r[n++]=d>>>8&255,r[n++]=255&d;var p=a/4294967296*1e4&268435455;r[n++]=p>>>8&255,r[n++]=255&p,r[n++]=p>>>24&15|16,r[n++]=p>>>16&255,r[n++]=o>>>8|128,r[n++]=255&o;for(var D=0;D<6;++D)r[n+D]=i[D];return t||wu(r)};var _u=function(e,t,u){var n=t&&u||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var r=(e=e||{}).random||(e.rng||Cu)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t)for(var i=0;i<16;++i)t[n+i]=r[i];return t||wu(r)},Iu=_u;Iu.v1=ku,Iu.v4=_u;var Tu=Iu,Su=Tu.v4,Ou={_data:{},length:0,setItem:function(e,t){return this._data[e]=t,this.length=He(this._data).length,t},getItem:function(e){return e in this._data?this._data[e]:null},removeItem:function(e){return e in this._data&&delete this._data[e],this.length=He(this._data).length,null},clear:function(){this._data={},this.length=0},key:function(e){return He(this._data)[e]}};var xu={defaultEngine:function(){try{if(!window.localStorage)return!1;var e=Su();window.localStorage.setItem(e,"test_value");var t=window.localStorage.getItem(e);return window.localStorage.removeItem(e),"test_value"===t}catch(e){return!1}}()?window.localStorage:Ou,inMemoryEngine:Ou},Pu=xu.defaultEngine,Ru=xu.inMemoryEngine;function ju(e,t,u,n){this.id=t,this.name=e,this.keys=u||{},this.engine=n||Pu,this.originalEngine=this.engine}ju.prototype.set=function(e,t){var u=this._createValidKey(e);if(u)try{this.engine.setItem(u,Pt.stringify(t))}catch(u){(function(e){var t=!1;if(e.code)switch(e.code){case 22:t=!0;break;case 1014:"NS_ERROR_DOM_QUOTA_REACHED"===e.name&&(t=!0)}else-2147024882===e.number&&(t=!0);return t})(u)&&(this._swapEngine(),this.set(e,t))}},ju.prototype.get=function(e){try{var t=this.engine.getItem(this._createValidKey(e));return null===t?null:Pt.parse(t)}catch(e){return null}},ju.prototype.getOriginalEngine=function(){return this.originalEngine},ju.prototype.remove=function(e){this.engine.removeItem(this._createValidKey(e))},ju.prototype._createValidKey=function(e){var t,u=this.name,n=this.id;return He(this.keys).length?(Qe((function(r){r===e&&(t=[u,n,e].join("."))}),this.keys),t):[u,n,e].join(".")},ju.prototype._swapEngine=function(){var e=this;Qe((function(t){var u=e.get(t);Ru.setItem([e.name,e.id,t].join("."),u),e.remove(t)}),this.keys),this.engine=Ru};var Lu=ju;var Uu={setTimeout:function(e,t){return window.setTimeout(e,t)},clearTimeout:function(e){return window.clearTimeout(e)},Date:window.Date},Mu=Uu;function Nu(){this.tasks={},this.nextId=1}Nu.prototype.now=function(){return+new Mu.Date},Nu.prototype.run=function(e,t){var u=this.nextId++;return this.tasks[u]=Mu.setTimeout(this._handle(u,e),t),u},Nu.prototype.cancel=function(e){this.tasks[e]&&(Mu.clearTimeout(this.tasks[e]),delete this.tasks[e])},Nu.prototype.cancelAll=function(){Qe(Mu.clearTimeout,this.tasks),this.tasks={}},Nu.prototype._handle=function(e,t){var u=this;return function(){return delete u.tasks[e],t()}},Nu.setClock=function(e){Mu=e},Nu.resetClock=function(){Mu=Uu};var qu=Nu,zu=Gu;function Gu(e){return Gu.enabled(e)?function(t){t=Ku(t);var u=new Date,n=u-(Gu[e]||u);Gu[e]=u,t=e+" "+t+" +"+Gu.humanize(n),window.console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}:function(){}}function Ku(e){return e instanceof Error?e.stack||e.message:e}Gu.names=[],Gu.skips=[],Gu.enable=function(e){try{localStorage.debug=e}catch(e){}for(var t=(e||"").split(/[\s,]+/),u=t.length,n=0;n=36e5?(e/36e5).toFixed(1)+"h":e>=6e4?(e/6e4).toFixed(1)+"m":e>=1e3?(e/1e3|0)+"s":e+"ms"},Gu.enabled=function(e){for(var t=0,u=Gu.skips.length;tthis.maxAttempts)},Ju.prototype.getDelay=function(e){var t=this.backoff.MIN_RETRY_DELAY*Math.pow(this.backoff.FACTOR,e);if(this.backoff.JITTER){var u=Math.random(),n=Math.floor(u*this.backoff.JITTER*t);Math.floor(10*u)<5?t-=n:t+=n}return Number(Math.min(t,this.backoff.MAX_RETRY_DELAY).toPrecision(1))},Ju.prototype.addItem=function(e){this._enqueue({item:e,attemptNumber:0,time:this._schedule.now()})},Ju.prototype.requeue=function(e,t,u){this.shouldRetry(e,t,u)?this._enqueue({item:e,attemptNumber:t,time:this._schedule.now()+this.getDelay(t)}):this.emit("discard",e,t)},Ju.prototype._enqueue=function(e){var t=this._store.get(this.keys.QUEUE)||[];(t=t.slice(-(this.maxItems-1))).push(e),t=t.sort((function(e,t){return e.time-t.time})),this._store.set(this.keys.QUEUE,t),this._running&&this._processHead()},Ju.prototype._processHead=function(){var e=this,t=this._store;this._schedule.cancel(this._processId);var u=t.get(this.keys.QUEUE)||[],n=t.get(this.keys.IN_PROGRESS)||{},r=this._schedule.now(),i=[];function o(u,n){i.push({item:u.item,done:function(r,i){var o=t.get(e.keys.IN_PROGRESS)||{};delete o[n],t.set(e.keys.IN_PROGRESS,o),e.emit("processed",r,i,u.item),r&&e.requeue(u.item,u.attemptNumber+1,r)}})}for(var s=Object.keys(n).length;u.length&&u[0].time<=r&&s++0&&(this._processId=this._schedule.run(this._processHead,u[0].time-r))},Ju.prototype._ack=function(){this._store.set(this.keys.ACK,this._schedule.now()),this._store.set(this.keys.RECLAIM_START,null),this._store.set(this.keys.RECLAIM_END,null),this._schedule.run(this._ack,this.timeouts.ACK_TIMER)},Ju.prototype._checkReclaim=function(){var e=this;Qe((function(t){t.id!==e.id&&(e._schedule.now()-t.get(e.keys.ACK)=500&&i.status<600?(x(new Error("request failed with status: ".concat(i.status).concat(i.statusText," for url: ").concat(e))),r(new Error("request failed with status: ".concat(i.status).concat(i.statusText," for url: ").concat(e)))):(F("====== request processed successfully: ".concat(i.status)),r(null,i.status)))},i.send(JSON.stringify(u,T))}catch(e){r(e)}}},{key:"enqueue",value:function(e,t){var u=e.getElementContent(),n={"Content-Type":"application/json",Authorization:"Basic ".concat(btoa("".concat(this.writeKey,":"))),AnonymousId:btoa(u.anonymousId)};u.originalTimestamp=O(),u.sentAt=O(),JSON.stringify(u).length>32e3&&w("[EventRepository] enqueue:: message length greater 32 Kb ",u);var r="/"==this.url.slice(-1)?this.url.slice(0,-1):this.url;this.payloadQueue.addItem({url:"".concat(r,"/v1/").concat(t),headers:n,message:u})}}]),e}());function Xu(e){var t=function(t){var u=(t=t||window.event).target||t.srcElement;rn(u)&&(u=u.parentNode),tn(u,t)?F("to be tracked ",t.type):F("not to be tracked ",t.type),function(e,t){var u,n=e.target||e.srcElement;rn(n)&&(n=n.parentNode);if(tn(n,e)){if("form"==n.tagName.toLowerCase()){u={};for(var r=0;r=0)return!0;return!1}(l))return!1;for(;l.parentNode&&!un(l,"body");)on(l)&&c.push(l),l=l.parentNode;var d,p=[];if(c.forEach((function(e){"a"===e.tagName.toLowerCase()&&(d=an(d=e.getAttribute("href"))&&d),p.push(function(e,t){for(var u={classes:sn(e).split(" "),tag_name:e.tagName.toLowerCase()},n=e.attributes.length,r=0;r=0)return!1;t=t.parentNode}if(sn(e).split(" ").indexOf("rudder-include")>=0)return!0;if(un(e,"input")||un(e,"select")||un(e,"textarea")||"true"===e.getAttribute("contenteditable"))return!1;if("inherit"===e.getAttribute("contenteditable"))for(t=e.parentNode;t.parentNode&&!un(t,"body");t=t.parentNode)if("true"===t.getAttribute("contenteditable"))return!1;var u=e.type||"";if("string"==typeof u)switch(u.toLowerCase()){case"hidden":case"password":return!1}var n=e.name||e.id||"";if("string"==typeof n){if(/^adhar|cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pan|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(n.replace(/[^a-zA-Z0-9]/g,"")))return!1}return!0}function sn(e){switch(t(e.className)){case"string":return e.className;case"object":return e.className.baseVal||e.getAttribute("class")||"";default:return""}}function an(e){if(null==e)return!1;if("string"==typeof e){e=e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");if(/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test((e||"").replace(/[- ]/g,"")))return!1;if(/(^\d{3}-?\d{2}-?\d{4}$)/.test(e))return!1;if(/(^\d{4}-?\d{4}-?\d{4}$)/.test(e))return!1;if(/(^\w{5}-?\d{4}-?\w{1}$)/.test(e))return!1}return!0}function cn(e,t){for(var u=e.attributes.length,n=0;n-1)return!0}return!1}function ln(e){if(e.previousElementSibling)return e.previousElementSibling;do{e=e.previousSibling}while(e&&!nn(e));return e}var dn="ajs_trait_",pn="ajs_prop_";function Dn(e,t){this.eventRepository||(this.eventRepository=Qu),this.eventRepository.enqueue(e,t)}var fn=new(function(){function e(){u(this,e),this.autoTrackHandlersRegistered=!1,this.autoTrackFeatureEnabled=!1,this.initialized=!1,this.trackValues=[],this.eventsBuffer=[],this.clientIntegrations=[],this.loadOnlyIntegrations={},this.clientIntegrationObjects=void 0,this.successfullyLoadedIntegration=[],this.failedToBeLoadedIntegration=[],this.toBeProcessedArray=[],this.toBeProcessedByIntegrationArray=[],this.storage=tu,this.eventRepository=Qu,this.sendAdblockPage=!1,this.sendAdblockPageOptions={},this.clientSuppliedCallbacks={},this.readyCallback=function(){},this.executeReadyCallback=void 0,this.methodToCallbackMapping={syncPixel:"syncPixelCallback"},this.loaded=!1}return r(e,[{key:"initializeUser",value:function(){this.userId=null!=this.storage.getUserId()?this.storage.getUserId():"",this.userTraits=null!=this.storage.getUserTraits()?this.storage.getUserTraits():{},this.groupId=null!=this.storage.getGroupId()?this.storage.getGroupId():"",this.groupTraits=null!=this.storage.getGroupTraits()?this.storage.getGroupTraits():{},this.anonymousId=this.getAnonymousId(),this.storage.setUserId(this.userId),this.storage.setAnonymousId(this.anonymousId),this.storage.setGroupId(this.groupId),this.storage.setUserTraits(this.userTraits),this.storage.setGroupTraits(this.groupTraits)}},{key:"processResponse",value:function(e,t){try{F("===in process response=== ".concat(e)),(t=JSON.parse(t)).source.useAutoTracking&&!this.autoTrackHandlersRegistered&&(this.autoTrackFeatureEnabled=!0,Xu(this),this.autoTrackHandlersRegistered=!0),t.source.destinations.forEach((function(e,t){F("Destination ".concat(t," Enabled? ").concat(e.enabled," Type: ").concat(e.destinationDefinition.name," Use Native SDK? ").concat(e.config.useNativeSDK)),e.enabled&&this.clientIntegrations.push({name:e.destinationDefinition.name,config:e.config})}),this),F("this.clientIntegrations: ",this.clientIntegrations),this.clientIntegrations=U(this.loadOnlyIntegrations,this.clientIntegrations),this.clientIntegrations=this.clientIntegrations.filter((function(e){return null!=lu[e.name]})),this.init(this.clientIntegrations)}catch(e){x(e),F("===handling config BE response processing error==="),F("autoTrackHandlersRegistered",this.autoTrackHandlersRegistered),this.autoTrackFeatureEnabled&&!this.autoTrackHandlersRegistered&&(Xu(this),this.autoTrackHandlersRegistered=!0)}}},{key:"init",value:function(e){var t=this,u=this;if(F("supported intgs ",lu),!e||0==e.length)return this.readyCallback&&this.readyCallback(),void(this.toBeProcessedByIntegrationArray=[]);e.forEach((function(e){try{F("[Analytics] init :: trying to initialize integration name:: ",e.name);var n=new(0,lu[e.name])(e.config,u);n.init(),F("initializing destination: ",e),t.isInitialized(n).then(t.replayEvents)}catch(t){w("[Analytics] initialize integration (integration.init()) failed :: ",e.name)}}))}},{key:"replayEvents",value:function(e){e.successfullyLoadedIntegration.length+e.failedToBeLoadedIntegration.length===e.clientIntegrations.length&&(F("===replay events called====",e.successfullyLoadedIntegration.length,e.failedToBeLoadedIntegration.length),e.clientIntegrationObjects=[],e.clientIntegrationObjects=e.successfullyLoadedIntegration,F("==registering after callback===",e.clientIntegrationObjects.length),e.executeReadyCallback=D(e.clientIntegrationObjects.length,e.readyCallback),F("==registering ready callback==="),e.on("ready",e.executeReadyCallback),e.clientIntegrationObjects.forEach((function(t){F("===looping over each successful integration===="),t.isReady&&!t.isReady()||(F("===letting know I am ready=====",t.name),e.emit("ready"))})),e.toBeProcessedByIntegrationArray.length>0&&(e.toBeProcessedByIntegrationArray.forEach((function(t){var u=t[0];t.shift(),Object.keys(t[0].message.integrations).length>0&&L(t[0].message.integrations);for(var n=U(t[0].message.integrations,e.clientIntegrationObjects),r=0;r1&&void 0!==arguments[1]?arguments[1]:0;return new Promise((function(n){return e.isLoaded()?(F("===integration loaded successfully====",e.name),t.successfullyLoadedIntegration.push(e),n(t)):u>=1e4?(F("====max wait over===="),t.failedToBeLoadedIntegration.push(e),n(t)):void t.pause(1e3).then((function(){return F("====after pause, again checking===="),t.isInitialized(e,u+1e3).then(n)}))}))}},{key:"page",value:function(e,u,n,r,i){this.loaded&&("function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=n=null),"function"==typeof u&&(i=u,r=n=u=null),"object"===t(e)&&null!=e&&null!=e&&(r=u,n=e,u=e=null),"object"===t(u)&&null!=u&&null!=u&&(r=n,n=u,u=null),"string"==typeof e&&"string"!=typeof u&&(u=e,e=null),this.sendAdblockPage&&"RudderJS-Initiated"!=e&&this.sendSampleRequest(),this.processPage(e,u,n,r,i))}},{key:"track",value:function(e,t,u,n){this.loaded&&("function"==typeof u&&(n=u,u=null),"function"==typeof t&&(n=t,u=null,t=null),this.processTrack(e,t,u,n))}},{key:"identify",value:function(e,u,n,r){this.loaded&&("function"==typeof n&&(r=n,n=null),"function"==typeof u&&(r=u,n=null,u=null),"object"===t(e)&&(n=u,u=e,e=this.userId),this.processIdentify(e,u,n,r))}},{key:"alias",value:function(e,u,n,r){if(this.loaded){"function"==typeof n&&(r=n,n=null),"function"==typeof u&&(r=u,n=null,u=null),"object"===t(u)&&(n=u,u=null);var i=(new yu).setType("alias").build();i.message.previousId=u||(this.userId?this.userId:this.getAnonymousId()),i.message.userId=e,this.processAndSendDataToDestinations("alias",i,n,r)}}},{key:"group",value:function(e,u,n,r){if(this.loaded&&arguments.length){"function"==typeof n&&(r=n,n=null),"function"==typeof u&&(r=u,n=null,u=null),"object"===t(e)&&(n=u,u=e,e=this.groupId),this.groupId=e,this.storage.setGroupId(this.groupId);var i=(new yu).setType("group").build();if(u)for(var o in u)this.groupTraits[o]=u[o];else this.groupTraits={};this.storage.setGroupTraits(this.groupTraits),this.processAndSendDataToDestinations("group",i,n,r)}}},{key:"processPage",value:function(e,t,u,n,r){var i=(new yu).setType("page").build();u||(u={}),t&&(i.message.name=t,u.name=t),e&&(i.message.category=e,u.category=e),i.message.properties=this.getPageProperties(u),this.trackPage(i,n,r)}},{key:"processTrack",value:function(e,t,u,n){var r=(new yu).setType("track").build();e&&r.setEventName(e),t?r.setProperty(t):r.setProperty({}),this.trackEvent(r,u,n)}},{key:"processIdentify",value:function(e,t,u,n){e&&this.userId&&e!==this.userId&&this.reset(),this.userId=e,this.storage.setUserId(this.userId);var r=(new yu).setType("identify").build();if(t){for(var i in t)this.userTraits[i]=t[i];this.storage.setUserTraits(this.userTraits)}this.identifyUser(r,u,n)}},{key:"identifyUser",value:function(e,t,u){e.message.userId&&(this.userId=e.message.userId,this.storage.setUserId(this.userId)),e&&e.message&&e.message.context&&e.message.context.traits&&(this.userTraits=s({},e.message.context.traits),this.storage.setUserTraits(this.userTraits)),this.processAndSendDataToDestinations("identify",e,t,u)}},{key:"trackPage",value:function(e,t,u){this.processAndSendDataToDestinations("page",e,t,u)}},{key:"trackEvent",value:function(e,t,u){this.processAndSendDataToDestinations("track",e,t,u)}},{key:"processAndSendDataToDestinations",value:function(e,t,u,n){try{this.anonymousId||this.setAnonymousId(),t.message.context.traits=s({},this.userTraits),F("anonymousId: ",this.anonymousId),t.message.anonymousId=this.anonymousId,t.message.userId=t.message.userId?t.message.userId:this.userId,"group"==e&&(this.groupId&&(t.message.groupId=this.groupId),this.groupTraits&&(t.message.traits=s({},this.groupTraits))),this.processOptionsParam(t,u),F(JSON.stringify(t)),Object.keys(t.message.integrations).length>0&&L(t.message.integrations);var r=U(t.message.integrations,this.clientIntegrationObjects);try{r.forEach((function(u){u.isFailed&&u.isFailed()||u[e]&&u[e](t)}))}catch(e){x({message:"[sendToNative]:".concat(e)})}this.clientIntegrationObjects||(F("pushing in replay queue"),this.toBeProcessedByIntegrationArray.push([e,t])),i=t.message.integrations,Object.keys(i).forEach((function(e){i.hasOwnProperty(e)&&(B[e]&&(i[B[e]]=i[e]),"All"!=e&&null!=B[e]&&B[e]!=e&&delete i[e])})),Dn.call(this,t,e),F("".concat(e," is called ")),n&&n()}catch(e){x(e)}var i}},{key:"processOptionsParam",value:function(e,t){var u=e.message,n=u.type,r=u.properties,i=["integrations","anonymousId","originalTimestamp"];for(var o in t)if(i.includes(o))e.message[o]=t[o];else if("context"!==o)e.message.context[o]=t[o];else for(var s in t[o])e.message.context[s]=t[o][s];e.message.context.page="page"==n?this.getContextPageProperties(t,r):this.getContextPageProperties(t)}},{key:"getPageProperties",value:function(e,t){var u=P(),n=t&&t.page?t.page:{};for(var r in u)void 0===e[r]&&(e[r]=n[r]||u[r]);return e}},{key:"getContextPageProperties",value:function(e,t){var u=P(),n=e&&e.page?e.page:{};for(var r in u)void 0===n[r]&&(n[r]=t&&t[r]?t[r]:u[r]);return n}},{key:"reset",value:function(){this.loaded&&(this.userId="",this.userTraits={},this.groupId="",this.groupTraits={},this.storage.clear())}},{key:"getAnonymousId",value:function(){return this.anonymousId=this.storage.getAnonymousId(),this.anonymousId||this.setAnonymousId(),this.anonymousId}},{key:"setAnonymousId",value:function(e){this.anonymousId=e||S(),this.storage.setAnonymousId(this.anonymousId)}},{key:"isValidWriteKey",value:function(e){return!(!e||"string"!=typeof e||0==e.trim().length)}},{key:"isValidServerUrl",value:function(e){return!(!e||"string"!=typeof e||0==e.trim().length)}},{key:"load",value:function(e,u,n){var r=this;if(F("inside load "),!this.loaded){var i=I;if(!this.isValidWriteKey(e)||!this.isValidServerUrl(u))throw x({message:"[Analytics] load:: Unable to load due to wrong writeKey or serverUrl"}),Error("failed to initialize");if(n&&n.logLevel&&v(n.logLevel),n&&n.integrations&&(Object.assign(this.loadOnlyIntegrations,n.integrations),L(this.loadOnlyIntegrations)),n&&n.configUrl&&(i=function(e){var t=e;return-1==e.indexOf("sourceConfig")&&(t="/"==t.slice(-1)?t.slice(0,-1):t,t="".concat(t,"/sourceConfig/")),(t="/"==t.slice(-1)?t:"".concat(t,"/")).indexOf("?")>-1?t.split("?")[1]!==I.split("?")[1]&&(t="".concat(t.split("?")[0],"?").concat(I.split("?")[1])):t="".concat(t,"?").concat(I.split("?")[1]),t}(n.configUrl)),n&&n.sendAdblockPage&&(this.sendAdblockPage=!0),n&&n.sendAdblockPageOptions&&"object"===t(n.sendAdblockPageOptions)&&(this.sendAdblockPageOptions=n.sendAdblockPageOptions),n&&n.clientSuppliedCallbacks){var o={};Object.keys(this.methodToCallbackMapping).forEach((function(e){r.methodToCallbackMapping.hasOwnProperty(e)&&n.clientSuppliedCallbacks[r.methodToCallbackMapping[e]]&&(o[e]=n.clientSuppliedCallbacks[r.methodToCallbackMapping[e]])})),Object.assign(this.clientSuppliedCallbacks,o),this.registerCallbacks(!0)}this.eventRepository.writeKey=e,u&&(this.eventRepository.url=u),this.initializeUser(),this.loaded=!0,n&&n.valTrackingList&&n.valTrackingList.push==Array.prototype.push&&(this.trackValues=n.valTrackingList),n&&n.useAutoTracking&&(this.autoTrackFeatureEnabled=!0,this.autoTrackFeatureEnabled&&!this.autoTrackHandlersRegistered&&(Xu(this),this.autoTrackHandlersRegistered=!0,F("autoTrackHandlersRegistered",this.autoTrackHandlersRegistered)));try{!function(e,t,u,n){var r=n.bind(e),i=new XMLHttpRequest;i.open("GET",t,!0),i.setRequestHeader("Authorization","Basic ".concat(btoa("".concat(u,":")))),i.onload=function(){var e=i.status;200==e?(F("status 200 calling callback"),r(200,i.responseText)):(x(new Error("request failed with status: ".concat(i.status," for url: ").concat(t))),r(e))},i.send()}(this,i,e,this.processResponse)}catch(e){x(e),this.autoTrackFeatureEnabled&&!this.autoTrackHandlersRegistered&&Xu(this)}}}},{key:"ready",value:function(e){this.loaded&&("function"!=typeof e?w("ready callback is not a function"):this.readyCallback=e)}},{key:"initializeCallbacks",value:function(){var e=this;Object.keys(this.methodToCallbackMapping).forEach((function(t){e.methodToCallbackMapping.hasOwnProperty(t)&&e.on(t,(function(){}))}))}},{key:"registerCallbacks",value:function(e){var t=this;e||Object.keys(this.methodToCallbackMapping).forEach((function(e){t.methodToCallbackMapping.hasOwnProperty(e)&&window.rudderanalytics&&"function"==typeof window.rudderanalytics[t.methodToCallbackMapping[e]]&&(t.clientSuppliedCallbacks[e]=window.rudderanalytics[t.methodToCallbackMapping[e]])})),Object.keys(this.clientSuppliedCallbacks).forEach((function(e){t.clientSuppliedCallbacks.hasOwnProperty(e)&&(F("registerCallbacks",e,t.clientSuppliedCallbacks[e]),t.on(e,t.clientSuppliedCallbacks[e]))}))}},{key:"sendSampleRequest",value:function(){V("ad-block","//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js")}},{key:"parseQueryString",value:function(e){var t,u,n={},r=y(e),i=(t=r,u={},Object.keys(t).forEach((function(e){e.substr(0,dn.length)==dn&&(u[e.substr(dn.length)]=t[e])})),u),o=function(e){var t={};return Object.keys(e).forEach((function(u){u.substr(0,pn.length)==pn&&(t[u.substr(pn.length)]=e[u])})),t}(r);return r.ajs_uid&&(n.userId=r.ajs_uid,n.traits=i),r.ajs_aid&&(n.anonymousId=r.ajs_aid),r.ajs_event&&(n.event=r.ajs_event,n.properties=o),n}}]),e}());p(fn),window.addEventListener("error",(function(e){x(e,fn)}),!0),fn.initializeCallbacks(),fn.registerCallbacks(!1);for(var hn=!!window.rudderanalytics&&window.rudderanalytics.push==Array.prototype.push,gn=window.rudderanalytics;gn&&gn[0]&&"load"!==gn[0][0];)gn.shift();if(gn&&gn.length>0&&"load"===gn[0][0]){var mn=gn[0][0];gn[0].shift(),F("=====from init, calling method:: ",mn),fn[mn].apply(fn,a(gn[0])),gn.shift()}if(function(e,t){t.anonymousId?t.userId?e.unshift(["setAnonymousId",t.anonymousId],["identify",t.userId,t.traits]):e.unshift(["setAnonymousId",t.anonymousId]):t.userId&&e.unshift(["identify",t.userId,t.traits]),t.event&&e.push(["track",t.event,t.properties])}(gn,fn.parseQueryString(window.location.search)),hn&&gn&&gn.length>0){for(var yn=0;yn -1\n ? canonicalUrl\n : canonicalUrl + search\n : window.location.href;\n let hashIndex = url.indexOf(\"#\");\n return hashIndex > -1 ? url.slice(0, hashIndex) : url;\n}\n\nfunction getCanonicalUrl() {\n var tags = document.getElementsByTagName(\"link\");\n for (var i = 0, tag; (tag = tags[i]); i++) {\n if (tag.getAttribute(\"rel\") === \"canonical\") {\n return tag.getAttribute(\"href\");\n }\n }\n}\n\nfunction getCurrency(val) {\n if (!val) return;\n if (typeof val === \"number\") {\n return val;\n }\n if (typeof val !== \"string\") {\n return;\n }\n\n val = val.replace(/\\$/g, \"\");\n val = parseFloat(val);\n\n if (!isNaN(val)) {\n return val;\n }\n}\n\nfunction getRevenue(properties, eventName) {\n var revenue = properties.revenue;\n var orderCompletedRegExp = /^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i;\n\n // it's always revenue, unless it's called during an order completion.\n if (!revenue && eventName && eventName.match(orderCompletedRegExp)) {\n revenue = properties.total;\n }\n\n return getCurrency(revenue);\n}\n\n/**\n *\n *\n * @param {*} integrationObject\n */\nfunction tranformToRudderNames(integrationObject) {\n Object.keys(integrationObject).forEach(key => {\n if(integrationObject.hasOwnProperty(key)) {\n if(commonNames[key]) {\n integrationObject[commonNames[key]] = integrationObject[key]\n }\n if(key != \"All\") {\n // delete user supplied keys except All and if except those where oldkeys are not present or oldkeys are same as transformed keys \n if(commonNames[key] != undefined && commonNames[key] != key) {\n delete integrationObject[key]\n }\n }\n \n }\n })\n}\n\nfunction transformToServerNames(integrationObject) {\n Object.keys(integrationObject).forEach(key => {\n if(integrationObject.hasOwnProperty(key)) {\n if(clientToServerNames[key]) {\n integrationObject[clientToServerNames[key]] = integrationObject[key]\n }\n if(key != \"All\") {\n // delete user supplied keys except All and if except those where oldkeys are not present or oldkeys are same as transformed keys \n if(clientToServerNames[key] != undefined && clientToServerNames[key] != key) {\n delete integrationObject[key]\n }\n }\n \n }\n })\n}\n\n/**\n * \n * @param {*} sdkSuppliedIntegrations \n * @param {*} configPlaneEnabledIntegrations \n */\nfunction findAllEnabledDestinations(sdkSuppliedIntegrations, configPlaneEnabledIntegrations) {\n let enabledList = []\n if(!configPlaneEnabledIntegrations || configPlaneEnabledIntegrations.length == 0) {\n return enabledList\n }\n let allValue = true\n if(typeof configPlaneEnabledIntegrations[0] == \"string\") {\n if(sdkSuppliedIntegrations[\"All\"] != undefined) {\n allValue = sdkSuppliedIntegrations[\"All\"]\n }\n configPlaneEnabledIntegrations.forEach(intg => {\n if(!allValue) {\n // All false ==> check if intg true supplied\n if(sdkSuppliedIntegrations[intg]!= undefined && sdkSuppliedIntegrations[intg] == true) {\n enabledList.push(intg)\n }\n } else {\n // All true ==> intg true by default\n let intgValue = true\n // check if intg false supplied\n if(sdkSuppliedIntegrations[intg] != undefined && sdkSuppliedIntegrations[intg] == false) {\n intgValue = false\n }\n if(intgValue) {\n enabledList.push(intg)\n }\n }\n })\n\n return enabledList\n }\n\n if(typeof configPlaneEnabledIntegrations[0] == \"object\") {\n if(sdkSuppliedIntegrations[\"All\"] != undefined) {\n allValue = sdkSuppliedIntegrations[\"All\"]\n }\n configPlaneEnabledIntegrations.forEach(intg => {\n if(!allValue) {\n // All false ==> check if intg true supplied\n if(sdkSuppliedIntegrations[intg.name]!= undefined && sdkSuppliedIntegrations[intg.name] == true) {\n enabledList.push(intg)\n }\n } else {\n // All true ==> intg true by default\n let intgValue = true\n // check if intg false supplied\n if(sdkSuppliedIntegrations[intg.name] != undefined && sdkSuppliedIntegrations[intg.name] == false) {\n intgValue = false\n }\n if(intgValue) {\n enabledList.push(intg)\n }\n }\n })\n\n return enabledList\n }\n\n}\n\nexport {\n replacer,\n generateUUID,\n getCurrentTimeFormatted,\n getJSONTrimmed,\n getJSON,\n getRevenue,\n getDefaultPageProperties,\n findAllEnabledDestinations,\n tranformToRudderNames,\n transformToServerNames,\n handleError\n};\n","import { version } from \"../package.json\";\n//Message Type enumeration\nlet MessageType = {\n TRACK: \"track\",\n PAGE: \"page\",\n //SCREEN: \"screen\",\n IDENTIFY: \"identify\"\n};\n\n//ECommerce Parameter Names Enumeration\nlet ECommerceParamNames = {\n QUERY: \"query\",\n PRICE: \"price\",\n PRODUCT_ID: \"product_id\",\n CATEGORY: \"category\",\n CURRENCY: \"currency\",\n LIST_ID: \"list_id\",\n PRODUCTS: \"products\",\n WISHLIST_ID: \"wishlist_id\",\n WISHLIST_NAME: \"wishlist_name\",\n QUANTITY: \"quantity\",\n CART_ID: \"cart_id\",\n CHECKOUT_ID: \"checkout_id\",\n TOTAL: \"total\",\n REVENUE: \"revenue\",\n ORDER_ID: \"order_id\",\n FILTERS: \"filters\",\n SORTS: \"sorts\",\n SHARE_VIA: \"share_via\",\n SHARE_MESSAGE: \"share_message\",\n RECIPIENT: \"recipient\"\n};\n//ECommerce Events Enumeration\nlet ECommerceEvents = {\n PRODUCTS_SEARCHED: \"Products Searched\",\n PRODUCT_LIST_VIEWED: \"Product List Viewed\",\n PRODUCT_LIST_FILTERED: \"Product List Filtered\",\n PROMOTION_VIEWED: \"Promotion Viewed\",\n PROMOTION_CLICKED: \"Promotion Clicked\",\n PRODUCT_CLICKED: \"Product Clicked\",\n PRODUCT_VIEWED: \"Product Viewed\",\n PRODUCT_ADDED: \"Product Added\",\n PRODUCT_REMOVED: \"Product Removed\",\n CART_VIEWED: \"Cart Viewed\",\n CHECKOUT_STARTED: \"Checkout Started\",\n CHECKOUT_STEP_VIEWED: \"Checkout Step Viewed\",\n CHECKOUT_STEP_COMPLETED: \"Checkout Step Completed\",\n PAYMENT_INFO_ENTERED: \"Payment Info Entered\",\n ORDER_UPDATED: \"Order Updated\",\n ORDER_COMPLETED: \"Order Completed\",\n ORDER_REFUNDED: \"Order Refunded\",\n ORDER_CANCELLED: \"Order Cancelled\",\n COUPON_ENTERED: \"Coupon Entered\",\n COUPON_APPLIED: \"Coupon Applied\",\n COUPON_DENIED: \"Coupon Denied\",\n COUPON_REMOVED: \"Coupon Removed\",\n PRODUCT_ADDED_TO_WISHLIST: \"Product Added to Wishlist\",\n PRODUCT_REMOVED_FROM_WISHLIST: \"Product Removed from Wishlist\",\n WISH_LIST_PRODUCT_ADDED_TO_CART: \"Wishlist Product Added to Cart\",\n PRODUCT_SHARED: \"Product Shared\",\n CART_SHARED: \"Cart Shared\",\n PRODUCT_REVIEWED: \"Product Reviewed\"\n};\n\n//Enumeration for integrations supported\nlet RudderIntegrationPlatform = {\n RUDDERLABS: \"rudderlabs\",\n GA: \"ga\",\n AMPLITUDE: \"amplitude\"\n};\n\nlet BASE_URL = \"https://hosted.rudderlabs.com\"; // default to RudderStack\nlet CONFIG_URL = \"https://api.rudderlabs.com/sourceConfig/?p=web&v=\" + version;\n\nlet FLUSH_QUEUE_SIZE = 30;\n\nlet FLUSH_INTERVAL_DEFAULT = 5000;\n\nconst MAX_WAIT_FOR_INTEGRATION_LOAD = 10000;\nconst INTEGRATION_LOAD_CHECK_INTERVAL = 1000;\n\nexport {\n MessageType,\n ECommerceParamNames,\n ECommerceEvents,\n RudderIntegrationPlatform,\n BASE_URL,\n CONFIG_URL,\n FLUSH_QUEUE_SIZE,\n FLUSH_INTERVAL_DEFAULT,\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL\n};\n/* module.exports = {\n MessageType: MessageType,\n ECommerceParamNames: ECommerceParamNames,\n ECommerceEvents: ECommerceEvents,\n RudderIntegrationPlatform: RudderIntegrationPlatform,\n BASE_URL: BASE_URL,\n CONFIG_URL: CONFIG_URL,\n FLUSH_QUEUE_SIZE: FLUSH_QUEUE_SIZE\n}; */\n","import logger from \"../utils/logUtil\";\nfunction ScriptLoader(id, src) {\n logger.debug(\"in script loader=== \" + id);\n let js = document.createElement(\"script\");\n js.src = src;\n js.async = true;\n js.type = \"text/javascript\";\n js.id = id;\n let e = document.getElementsByTagName(\"script\")[0];\n logger.debug(\"==script==\", e);\n e.parentNode.insertBefore(js, e);\n}\n\nexport { ScriptLoader };\n","import { ScriptLoader } from \"../ScriptLoader\";\nimport logger from \"../../utils/logUtil\";\n\nclass HubSpot {\n constructor(config) {\n this.hubId = config.hubID; //6405167\n this.name = \"HS\";\n }\n\n init() {\n let hubspotJs = \"http://js.hs-scripts.com/\" + this.hubId + \".js\";\n ScriptLoader(\"hubspot-integration\", hubspotJs);\n\n logger.debug(\"===in init HS===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"in HubspotAnalyticsManager identify\");\n\n let traits = rudderElement.message.context.traits;\n let traitsValue = {};\n\n for (let k in traits) {\n if (!!Object.getOwnPropertyDescriptor(traits, k) && traits[k]) {\n let hubspotkey = k; //k.startsWith(\"rl_\") ? k.substring(3, k.length) : k;\n if (toString.call(traits[k]) == \"[object Date]\") {\n traitsValue[hubspotkey] = traits[k].getTime();\n } else {\n traitsValue[hubspotkey] = traits[k];\n }\n }\n }\n /* if (traitsValue[\"address\"]) {\n let address = traitsValue[\"address\"];\n //traitsValue.delete(address)\n delete traitsValue[\"address\"];\n for (let k in address) {\n if (!!Object.getOwnPropertyDescriptor(address, k) && address[k]) {\n let hubspotkey = k;//k.startsWith(\"rl_\") ? k.substring(3, k.length) : k;\n hubspotkey = hubspotkey == \"street\" ? \"address\" : hubspotkey;\n traitsValue[hubspotkey] = address[k];\n }\n }\n } */\n let userProperties = rudderElement.message.context.user_properties;\n for (let k in userProperties) {\n if (\n !!Object.getOwnPropertyDescriptor(userProperties, k) &&\n userProperties[k]\n ) {\n let hubspotkey = k; //k.startsWith(\"rl_\") ? k.substring(3, k.length) : k;\n traitsValue[hubspotkey] = userProperties[k];\n }\n }\n\n logger.debug(traitsValue);\n\n if (typeof window !== undefined) {\n let _hsq = (window._hsq = window._hsq || []);\n _hsq.push([\"identify\", traitsValue]);\n }\n }\n\n track(rudderElement) {\n logger.debug(\"in HubspotAnalyticsManager track\");\n let _hsq = (window._hsq = window._hsq || []);\n let eventValue = {};\n eventValue[\"id\"] = rudderElement.message.event;\n if (\n rudderElement.message.properties &&\n (rudderElement.message.properties.revenue ||\n rudderElement.message.properties.value)\n ) {\n eventValue[\"value\"] =\n rudderElement.message.properties.revenue ||\n rudderElement.message.properties.value;\n }\n _hsq.push([\"trackEvent\", eventValue]);\n }\n\n page(rudderElement) {\n logger.debug(\"in HubspotAnalyticsManager page\");\n let _hsq = (window._hsq = window._hsq || []);\n //logger.debug(\"path: \" + rudderElement.message.properties.path);\n //_hsq.push([\"setPath\", rudderElement.message.properties.path]);\n /* _hsq.push([\"identify\",{\n email: \"testtrackpage@email.com\"\n }]); */\n if (\n rudderElement.message.properties &&\n rudderElement.message.properties.path\n ) {\n _hsq.push([\"setPath\", rudderElement.message.properties.path]);\n }\n _hsq.push([\"trackPageView\"]);\n }\n\n isLoaded() {\n logger.debug(\"in hubspot isLoaded\");\n return !!(window._hsq && window._hsq.push !== Array.prototype.push);\n }\n\n isReady() {\n return !!(window._hsq && window._hsq.push !== Array.prototype.push);\n }\n}\n\nexport { HubSpot };\n","/**\n * toString ref.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n *\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nmodule.exports = function(val){\n switch (toString.call(val)) {\n case '[object Date]': return 'date';\n case '[object RegExp]': return 'regexp';\n case '[object Arguments]': return 'arguments';\n case '[object Array]': return 'array';\n case '[object Error]': return 'error';\n }\n\n if (val === null) return 'null';\n if (val === undefined) return 'undefined';\n if (val !== val) return 'nan';\n if (val && val.nodeType === 1) return 'element';\n\n if (isBuffer(val)) return 'buffer';\n\n val = val.valueOf\n ? val.valueOf()\n : Object.prototype.valueOf.apply(val);\n\n return typeof val;\n};\n\n// code borrowed from https://github.com/feross/is-buffer/blob/master/index.js\nfunction isBuffer(obj) {\n return !!(obj != null &&\n (obj._isBuffer || // For Safari 5-7 (missing Object.prototype.constructor)\n (obj.constructor &&\n typeof obj.constructor.isBuffer === 'function' &&\n obj.constructor.isBuffer(obj))\n ))\n}\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar type = require('component-type');\n\n/**\n * Deeply clone an object.\n *\n * @param {*} obj Any object.\n */\n\nvar clone = function clone(obj) {\n var t = type(obj);\n\n if (t === 'object') {\n var copy = {};\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n copy[key] = clone(obj[key]);\n }\n }\n return copy;\n }\n\n if (t === 'array') {\n var copy = new Array(obj.length);\n for (var i = 0, l = obj.length; i < l; i++) {\n copy[i] = clone(obj[i]);\n }\n return copy;\n }\n\n if (t === 'regexp') {\n // from millermedeiros/amd-utils - MIT\n var flags = '';\n flags += obj.multiline ? 'm' : '';\n flags += obj.global ? 'g' : '';\n flags += obj.ignoreCase ? 'i' : '';\n return new RegExp(obj.source, flags);\n }\n\n if (t === 'date') {\n return new Date(obj.getTime());\n }\n\n // string, number, boolean, etc.\n return obj;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = clone;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options){\n options = options || {};\n if ('string' == typeof val) return parse(val);\n return options.long\n ? long(val)\n : short(val);\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = '' + str;\n if (str.length > 10000) return;\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n if (!match) return;\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction short(ms) {\n if (ms >= d) return Math.round(ms / d) + 'd';\n if (ms >= h) return Math.round(ms / h) + 'h';\n if (ms >= m) return Math.round(ms / m) + 'm';\n if (ms >= s) return Math.round(ms / s) + 's';\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction long(ms) {\n return plural(ms, d, 'day')\n || plural(ms, h, 'hour')\n || plural(ms, m, 'minute')\n || plural(ms, s, 'second')\n || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) return;\n if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n // define the `disabled` version\n function disabled() {\n }\n disabled.enabled = false;\n\n // define the `enabled` version\n function enabled() {\n\n var self = enabled;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // add the `color` if not set\n if (null == self.useColors) self.useColors = exports.useColors();\n if (null == self.color && self.useColors) self.color = selectColor();\n\n var args = Array.prototype.slice.call(arguments);\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %o\n args = ['%o'].concat(args);\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n if ('function' === typeof exports.formatArgs) {\n args = exports.formatArgs.apply(self, args);\n }\n var logFn = enabled.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n enabled.enabled = true;\n\n var fn = exports.enabled(namespace) ? enabled : disabled;\n\n fn.namespace = namespace;\n\n return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n var split = (namespaces || '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // is webkit? http://stackoverflow.com/a/16459606/376773\n return ('WebkitAppearance' in document.documentElement.style) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (window.console && (console.firebug || (console.exception && console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n var args = arguments;\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return args;\n\n var c = 'color: ' + this.color;\n args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('cookie');\n\n/**\n * Set or get cookie `name` with `value` and `options` object.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {Mixed}\n * @api public\n */\n\nmodule.exports = function(name, value, options){\n switch (arguments.length) {\n case 3:\n case 2:\n return set(name, value, options);\n case 1:\n return get(name);\n default:\n return all();\n }\n};\n\n/**\n * Set cookie `name` to `value`.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @api private\n */\n\nfunction set(name, value, options) {\n options = options || {};\n var str = encode(name) + '=' + encode(value);\n\n if (null == value) options.maxage = -1;\n\n if (options.maxage) {\n options.expires = new Date(+new Date + options.maxage);\n }\n\n if (options.path) str += '; path=' + options.path;\n if (options.domain) str += '; domain=' + options.domain;\n if (options.expires) str += '; expires=' + options.expires.toUTCString();\n if (options.samesite) str += '; samesite=' + options.samesite;\n if (options.secure) str += '; secure';\n\n document.cookie = str;\n}\n\n/**\n * Return all cookies.\n *\n * @return {Object}\n * @api private\n */\n\nfunction all() {\n var str;\n try {\n str = document.cookie;\n } catch (err) {\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err.stack || err);\n }\n return {};\n }\n return parse(str);\n}\n\n/**\n * Get cookie `name`.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction get(name) {\n return all()[name];\n}\n\n/**\n * Parse cookie `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parse(str) {\n var obj = {};\n var pairs = str.split(/ *; */);\n var pair;\n if ('' == pairs[0]) return obj;\n for (var i = 0; i < pairs.length; ++i) {\n pair = pairs[i].split('=');\n obj[decode(pair[0])] = decode(pair[1]);\n }\n return obj;\n}\n\n/**\n * Encode.\n */\n\nfunction encode(value){\n try {\n return encodeURIComponent(value);\n } catch (e) {\n debug('error `encode(%o)` - %o', value, e)\n }\n}\n\n/**\n * Decode.\n */\n\nfunction decode(value) {\n try {\n return decodeURIComponent(value);\n } catch (e) {\n debug('error `decode(%o)` - %o', value, e)\n }\n}\n","'use strict';\n\nvar max = Math.max;\n\n/**\n * Produce a new array composed of all but the first `n` elements of an input `collection`.\n *\n * @name drop\n * @api public\n * @param {number} count The number of elements to drop.\n * @param {Array} collection The collection to iterate over.\n * @return {Array} A new array containing all but the first element from `collection`.\n * @example\n * drop(0, [1, 2, 3]); // => [1, 2, 3]\n * drop(1, [1, 2, 3]); // => [2, 3]\n * drop(2, [1, 2, 3]); // => [3]\n * drop(3, [1, 2, 3]); // => []\n * drop(4, [1, 2, 3]); // => []\n */\nvar drop = function drop(count, collection) {\n var length = collection ? collection.length : 0;\n\n if (!length) {\n return [];\n }\n\n // Preallocating an array *significantly* boosts performance when dealing with\n // `arguments` objects on v8. For a summary, see:\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var toDrop = max(Number(count) || 0, 0);\n var resultsLength = max(length - toDrop, 0);\n var results = new Array(resultsLength);\n\n for (var i = 0; i < resultsLength; i += 1) {\n results[i] = collection[i + toDrop];\n }\n\n return results;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = drop;\n","'use strict';\n\nvar max = Math.max;\n\n/**\n * Produce a new array by passing each value in the input `collection` through a transformative\n * `iterator` function. The `iterator` function is passed three arguments:\n * `(value, index, collection)`.\n *\n * @name rest\n * @api public\n * @param {Array} collection The collection to iterate over.\n * @return {Array} A new array containing all but the first element from `collection`.\n * @example\n * rest([1, 2, 3]); // => [2, 3]\n */\nvar rest = function rest(collection) {\n if (collection == null || !collection.length) {\n return [];\n }\n\n // Preallocating an array *significantly* boosts performance when dealing with\n // `arguments` objects on v8. For a summary, see:\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var results = new Array(max(collection.length - 2, 0));\n\n for (var i = 1; i < collection.length; i += 1) {\n results[i - 1] = collection[i];\n }\n\n return results;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = rest;\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar drop = require('@ndhoule/drop');\nvar rest = require('@ndhoule/rest');\n\nvar has = Object.prototype.hasOwnProperty;\nvar objToString = Object.prototype.toString;\n\n/**\n * Returns `true` if a value is an object, otherwise `false`.\n *\n * @name isObject\n * @api private\n * @param {*} val The value to test.\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isObject = function isObject(value) {\n return Boolean(value) && typeof value === 'object';\n};\n\n/**\n * Returns `true` if a value is a plain object, otherwise `false`.\n *\n * @name isPlainObject\n * @api private\n * @param {*} val The value to test.\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isPlainObject = function isPlainObject(value) {\n return Boolean(value) && objToString.call(value) === '[object Object]';\n};\n\n/**\n * Assigns a key-value pair to a target object when the value assigned is owned,\n * and where target[key] is undefined.\n *\n * @name shallowCombiner\n * @api private\n * @param {Object} target\n * @param {Object} source\n * @param {*} value\n * @param {string} key\n */\nvar shallowCombiner = function shallowCombiner(target, source, value, key) {\n if (has.call(source, key) && target[key] === undefined) {\n target[key] = value;\n }\n return source;\n};\n\n/**\n * Assigns a key-value pair to a target object when the value assigned is owned,\n * and where target[key] is undefined; also merges objects recursively.\n *\n * @name deepCombiner\n * @api private\n * @param {Object} target\n * @param {Object} source\n * @param {*} value\n * @param {string} key\n * @return {Object}\n */\nvar deepCombiner = function(target, source, value, key) {\n if (has.call(source, key)) {\n if (isPlainObject(target[key]) && isPlainObject(value)) {\n target[key] = defaultsDeep(target[key], value);\n } else if (target[key] === undefined) {\n target[key] = value;\n }\n }\n\n return source;\n};\n\n/**\n * TODO: Document\n *\n * @name defaultsWith\n * @api private\n * @param {Function} combiner\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object} Return the input `target`.\n */\nvar defaultsWith = function(combiner, target /*, ...sources */) {\n if (!isObject(target)) {\n return target;\n }\n\n combiner = combiner || shallowCombiner;\n var sources = drop(2, arguments);\n\n for (var i = 0; i < sources.length; i += 1) {\n for (var key in sources[i]) {\n combiner(target, sources[i], sources[i][key], key);\n }\n }\n\n return target;\n};\n\n/**\n * Copies owned, enumerable properties from a source object(s) to a target\n * object when the value of that property on the source object is `undefined`.\n * Recurses on objects.\n *\n * @name defaultsDeep\n * @api public\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object} The input `target`.\n */\nvar defaultsDeep = function defaultsDeep(target /*, sources */) {\n // TODO: Replace with `partial` call?\n return defaultsWith.apply(null, [deepCombiner, target].concat(rest(arguments)));\n};\n\n/**\n * Copies owned, enumerable properties from a source object(s) to a target\n * object when the value of that property on the source object is `undefined`.\n *\n * @name defaults\n * @api public\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object}\n * @example\n * var a = { a: 1 };\n * var b = { a: 2, b: 2 };\n *\n * defaults(a, b);\n * console.log(a); //=> { a: 1, b: 2 }\n */\nvar defaults = function(target /*, ...sources */) {\n // TODO: Replace with `partial` call?\n return defaultsWith.apply(null, [null, target].concat(rest(arguments)));\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = defaults;\nmodule.exports.deep = defaultsDeep;\n","/*! JSON v3.3.2 | https://bestiejs.github.io/json3 | Copyright 2012-2015, Kit Cambridge, Benjamin Tan | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root.Object());\n exports || (exports = root.Object());\n\n // Native constructor aliases.\n var Number = context.Number || root.Number,\n String = context.String || root.String,\n Object = context.Object || root.Object,\n Date = context.Date || root.Date,\n SyntaxError = context.SyntaxError || root.SyntaxError,\n TypeError = context.TypeError || root.TypeError,\n Math = context.Math || root.Math,\n nativeJSON = context.JSON || root.JSON;\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty = objectProto.hasOwnProperty,\n undefined;\n\n // Internal: Contains `try...catch` logic used by other functions.\n // This prevents other functions from being deoptimized.\n function attempt(func, errorFunc) {\n try {\n func();\n } catch (exception) {\n if (errorFunc) {\n errorFunc();\n }\n }\n }\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n attempt(function () {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n });\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] != null) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"date-serialization\") && has(\"json-parse\");\n } else if (name == \"date-serialization\") {\n // Indicates whether `Date`s can be serialized accurately by `JSON.stringify`.\n isSupported = has(\"json-stringify\") && isExtended;\n if (isSupported) {\n var stringify = exports.stringify;\n attempt(function () {\n isSupported =\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n });\n }\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\";\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n attempt(function () {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undefined &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undefined) === undefined &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undefined &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undefined]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undefined, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\";\n }, function () {\n stringifySupported = false;\n });\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse, parseSupported;\n if (typeof parse == \"function\") {\n attempt(function () {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n attempt(function () {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n });\n if (parseSupported) {\n attempt(function () {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n });\n }\n if (parseSupported) {\n attempt(function () {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n });\n }\n }\n }\n }, function () {\n parseSupported = false;\n });\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n has[\"bug-string-char-index\"] = has[\"date-serialization\"] = has[\"json\"] = has[\"json-stringify\"] = has[\"json-parse\"] = null;\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n var forOwn = function (object, callback) {\n var size = 0, Properties, dontEnums, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n dontEnums = new Properties();\n for (property in dontEnums) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(dontEnums, property)) {\n size++;\n }\n }\n Properties = dontEnums = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n dontEnums = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forOwn = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = dontEnums.length; property = dontEnums[--length];) {\n if (hasProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forOwn = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forOwn(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\") && !has(\"date-serialization\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Serializes a date object.\n var serializeDate = function (value) {\n var getData, year, month, date, time, hours, minutes, seconds, milliseconds;\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n getData = function (value) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n };\n } else {\n getData = function (value) {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n };\n }\n serializeDate = function (value) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n getData(value);\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n year = month = date = hours = minutes = seconds = milliseconds = null;\n } else {\n value = null;\n }\n return value;\n };\n return serializeDate(value);\n };\n\n // For environments with `JSON.stringify` but buggy date serialization,\n // we override the native `Date#toJSON` implementation with a\n // spec-compliant one.\n if (has(\"json-stringify\") && !has(\"date-serialization\")) {\n // Internal: the `Date#toJSON` implementation used to override the native one.\n function dateToJSON (key) {\n return serializeDate(this);\n }\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n var nativeStringify = exports.stringify;\n exports.stringify = function (source, filter, width) {\n var nativeToJSON = Date.prototype.toJSON;\n Date.prototype.toJSON = dateToJSON;\n var result = nativeStringify(source, filter, width);\n Date.prototype.toJSON = nativeToJSON;\n return result;\n }\n } else {\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var escapeChar = function (character) {\n var charCode = character.charCodeAt(0), escaped = Escapes[charCode];\n if (escaped) {\n return escaped;\n }\n return unicodePrefix + toPaddedString(2, charCode.toString(16));\n };\n var reEscape = /[\\x00-\\x1f\\x22\\x5c]/g;\n var quote = function (value) {\n reEscape.lastIndex = 0;\n return '\"' +\n (\n reEscape.test(value)\n ? value.replace(reEscape, escapeChar)\n : value\n ) +\n '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, type, className, results, element, index, length, prefix, result;\n attempt(function () {\n // Necessary for host object support.\n value = object[property];\n });\n if (typeof value == \"object\" && value) {\n if (value.getUTCFullYear && getClass.call(value) == dateClass && value.toJSON === Date.prototype.toJSON) {\n value = serializeDate(value);\n } else if (typeof value.toJSON == \"function\") {\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n // Exit early if value is `undefined` or `null`.\n if (value == undefined) {\n return value === undefined ? value : \"null\";\n }\n type = typeof value;\n // Only call `getClass` if the value is an object.\n if (type == \"object\") {\n className = getClass.call(value);\n }\n switch (className || type) {\n case \"boolean\":\n case booleanClass:\n // Booleans are represented literally.\n return \"\" + value;\n case \"number\":\n case numberClass:\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n case \"string\":\n case stringClass:\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undefined ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forOwn(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undefined) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n className = getClass.call(filter);\n if (className == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length;) {\n value = filter[index++];\n className = getClass.call(value);\n if (className == \"[object String]\" || className == \"[object Number]\") {\n properties[value] = 1;\n }\n }\n }\n }\n if (width) {\n className = getClass.call(width);\n if (className == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n if (width > 10) {\n width = 10;\n }\n for (whitespace = \"\"; whitespace.length < width;) {\n whitespace += \" \";\n }\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length; position++) {\n charCode = source.charCodeAt(position);\n if (charCode < 48 || charCode > 57) {\n break;\n }\n }\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length; position++) {\n charCode = source.charCodeAt(position);\n if (charCode < 48 || charCode > 57) {\n break;\n }\n }\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n var temp = source.slice(Index, Index + 4);\n if (temp == \"true\") {\n Index += 4;\n return true;\n } else if (temp == \"fals\" && source.charCodeAt(Index + 4 ) == 101) {\n Index += 5;\n return false;\n } else if (temp == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;;) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n } else {\n hasMembers = true;\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;;) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n } else {\n hasMembers = true;\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undefined) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forOwn` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(getClass, forOwn, value, length, callback);\n }\n } else {\n forOwn(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports.runInContext = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root.JSON3,\n isRestored = false;\n\n var JSON3 = runInContext(root, (root.JSON3 = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root.JSON3 = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","\n/**\n * Parse the given `url`.\n *\n * @param {String} str\n * @return {Object}\n * @api public\n */\n\nexports.parse = function(url){\n var a = document.createElement('a');\n a.href = url;\n return {\n href: a.href,\n host: a.host || location.host,\n port: ('0' === a.port || '' === a.port) ? port(a.protocol) : a.port,\n hash: a.hash,\n hostname: a.hostname || location.hostname,\n pathname: a.pathname.charAt(0) != '/' ? '/' + a.pathname : a.pathname,\n protocol: !a.protocol || ':' == a.protocol ? location.protocol : a.protocol,\n search: a.search,\n query: a.search.slice(1)\n };\n};\n\n/**\n * Check if `url` is absolute.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isAbsolute = function(url){\n return 0 == url.indexOf('//') || !!~url.indexOf('://');\n};\n\n/**\n * Check if `url` is relative.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isRelative = function(url){\n return !exports.isAbsolute(url);\n};\n\n/**\n * Check if `url` is cross domain.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isCrossDomain = function(url){\n url = exports.parse(url);\n var location = exports.parse(window.location.href);\n return url.hostname !== location.hostname\n || url.port !== location.port\n || url.protocol !== location.protocol;\n};\n\n/**\n * Return default port for `protocol`.\n *\n * @param {String} protocol\n * @return {String}\n * @api private\n */\nfunction port (protocol){\n switch (protocol) {\n case 'http:':\n return 80;\n case 'https:':\n return 443;\n default:\n return location.port;\n }\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n // define the `disabled` version\n function disabled() {\n }\n disabled.enabled = false;\n\n // define the `enabled` version\n function enabled() {\n\n var self = enabled;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // add the `color` if not set\n if (null == self.useColors) self.useColors = exports.useColors();\n if (null == self.color && self.useColors) self.color = selectColor();\n\n var args = Array.prototype.slice.call(arguments);\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %o\n args = ['%o'].concat(args);\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n if ('function' === typeof exports.formatArgs) {\n args = exports.formatArgs.apply(self, args);\n }\n var logFn = enabled.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n enabled.enabled = true;\n\n var fn = exports.enabled(namespace) ? enabled : disabled;\n\n fn.namespace = namespace;\n\n return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n var split = (namespaces || '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // is webkit? http://stackoverflow.com/a/16459606/376773\n return ('WebkitAppearance' in document.documentElement.style) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (window.console && (console.firebug || (console.exception && console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n var args = arguments;\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return args;\n\n var c = 'color: ' + this.color;\n args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('cookie');\n\n/**\n * Set or get cookie `name` with `value` and `options` object.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {Mixed}\n * @api public\n */\n\nmodule.exports = function(name, value, options){\n switch (arguments.length) {\n case 3:\n case 2:\n return set(name, value, options);\n case 1:\n return get(name);\n default:\n return all();\n }\n};\n\n/**\n * Set cookie `name` to `value`.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @api private\n */\n\nfunction set(name, value, options) {\n options = options || {};\n var str = encode(name) + '=' + encode(value);\n\n if (null == value) options.maxage = -1;\n\n if (options.maxage) {\n options.expires = new Date(+new Date + options.maxage);\n }\n\n if (options.path) str += '; path=' + options.path;\n if (options.domain) str += '; domain=' + options.domain;\n if (options.expires) str += '; expires=' + options.expires.toUTCString();\n if (options.secure) str += '; secure';\n\n document.cookie = str;\n}\n\n/**\n * Return all cookies.\n *\n * @return {Object}\n * @api private\n */\n\nfunction all() {\n var str;\n try {\n str = document.cookie;\n } catch (err) {\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err.stack || err);\n }\n return {};\n }\n return parse(str);\n}\n\n/**\n * Get cookie `name`.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction get(name) {\n return all()[name];\n}\n\n/**\n * Parse cookie `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parse(str) {\n var obj = {};\n var pairs = str.split(/ *; */);\n var pair;\n if ('' == pairs[0]) return obj;\n for (var i = 0; i < pairs.length; ++i) {\n pair = pairs[i].split('=');\n obj[decode(pair[0])] = decode(pair[1]);\n }\n return obj;\n}\n\n/**\n * Encode.\n */\n\nfunction encode(value){\n try {\n return encodeURIComponent(value);\n } catch (e) {\n debug('error `encode(%o)` - %o', value, e)\n }\n}\n\n/**\n * Decode.\n */\n\nfunction decode(value) {\n try {\n return decodeURIComponent(value);\n } catch (e) {\n debug('error `decode(%o)` - %o', value, e)\n }\n}\n","'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar parse = require('component-url').parse;\nvar cookie = require('component-cookie');\n\n/**\n * Get the top domain.\n *\n * The function constructs the levels of domain and attempts to set a global\n * cookie on each one when it succeeds it returns the top level domain.\n *\n * The method returns an empty string when the hostname is an ip or `localhost`.\n *\n * Example levels:\n *\n * domain.levels('http://www.google.co.uk');\n * // => [\"co.uk\", \"google.co.uk\", \"www.google.co.uk\"]\n *\n * Example:\n *\n * domain('http://localhost:3000/baz');\n * // => ''\n * domain('http://dev:3000/baz');\n * // => ''\n * domain('http://127.0.0.1:3000/baz');\n * // => ''\n * domain('http://segment.io/baz');\n * // => 'segment.io'\n *\n * @param {string} url\n * @return {string}\n * @api public\n */\nfunction domain(url) {\n var cookie = exports.cookie;\n var levels = exports.levels(url);\n\n // Lookup the real top level one.\n for (var i = 0; i < levels.length; ++i) {\n var cname = '__tld__';\n var domain = levels[i];\n var opts = { domain: '.' + domain };\n\n cookie(cname, 1, opts);\n if (cookie(cname)) {\n cookie(cname, null, opts);\n return domain;\n }\n }\n\n return '';\n}\n\n/**\n * Levels returns all levels of the given url.\n *\n * @param {string} url\n * @return {Array}\n * @api public\n */\ndomain.levels = function(url) {\n var host = parse(url).hostname;\n var parts = host.split('.');\n var last = parts[parts.length - 1];\n var levels = [];\n\n // Ip address.\n if (parts.length === 4 && last === parseInt(last, 10)) {\n return levels;\n }\n\n // Localhost.\n if (parts.length <= 1) {\n return levels;\n }\n\n // Create levels.\n for (var i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n\n return levels;\n};\n\n/**\n * Expose cookie on domain.\n */\ndomain.cookie = cookie;\n\n/*\n * Exports.\n */\n\nexports = module.exports = domain;\n","import clone from \"@ndhoule/clone\";\nimport cookie from \"rudder-component-cookie\";\nimport defaults from \"@ndhoule/defaults\";\nimport json from \"json3\";\nimport topDomain from \"@segment/top-domain\";\n\n/**\n * An object utility to persist values in cookies\n */\nclass CookieLocal {\n constructor(options) {\n this._options = {};\n this.options(options);\n }\n\n /**\n *\n * @param {*} options\n */\n options(options = {}) {\n if (arguments.length === 0) return this._options;\n\n let domain = \".\" + topDomain(window.location.href);\n if (domain === \".\") domain = null;\n\n // the default maxage and path\n this._options = defaults(options, {\n maxage: 31536000000,\n path: \"/\",\n domain: domain,\n samesite: \"Lax\"\n });\n\n //try setting a cookie first\n this.set(\"test_rudder\", true);\n if (!this.get(\"test_rudder\")) {\n this._options.domain = null;\n }\n this.remove(\"test_rudder\");\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n set(key, value) {\n try {\n value = json.stringify(value);\n cookie(key, value, clone(this._options));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n *\n * @param {*} key\n */\n get(key) {\n // if not parseable, return as is without json parse\n let value;\n try {\n value = cookie(key);\n value = value ? json.parse(value) : null;\n return value;\n } catch (e) {\n if(value) {\n return value\n }\n return null;\n }\n }\n\n /**\n *\n * @param {*} key\n */\n remove(key) {\n try {\n cookie(key, null, clone(this._options));\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\n// Exporting only the instance\nlet Cookie = new CookieLocal({});\n\nexport { Cookie };\n","\"use strict\"\n\nvar JSON = require('json3');\n\nmodule.exports = (function() {\n\t// Store.js\n\tvar store = {},\n\t\twin = (typeof window != 'undefined' ? window : global),\n\t\tdoc = win.document,\n\t\tlocalStorageName = 'localStorage',\n\t\tscriptTag = 'script',\n\t\tstorage\n\n\tstore.disabled = false\n\tstore.version = '1.3.20'\n\tstore.set = function(key, value) {}\n\tstore.get = function(key, defaultVal) {}\n\tstore.has = function(key) { return store.get(key) !== undefined }\n\tstore.remove = function(key) {}\n\tstore.clear = function() {}\n\tstore.transact = function(key, defaultVal, transactionFn) {\n\t\tif (transactionFn == null) {\n\t\t\ttransactionFn = defaultVal\n\t\t\tdefaultVal = null\n\t\t}\n\t\tif (defaultVal == null) {\n\t\t\tdefaultVal = {}\n\t\t}\n\t\tvar val = store.get(key, defaultVal)\n\t\ttransactionFn(val)\n\t\tstore.set(key, val)\n\t}\n\tstore.getAll = function() {\n\t\tvar ret = {}\n\t\tstore.forEach(function(key, val) {\n\t\t\tret[key] = val\n\t\t})\n\t\treturn ret\n\t}\n\tstore.forEach = function() {}\n\tstore.serialize = function(value) {\n\t\treturn JSON.stringify(value)\n\t}\n\tstore.deserialize = function(value) {\n\t\tif (typeof value != 'string') { return undefined }\n\t\ttry { return JSON.parse(value) }\n\t\tcatch(e) { return value || undefined }\n\t}\n\n\t// Functions to encapsulate questionable FireFox 3.6.13 behavior\n\t// when about.config::dom.storage.enabled === false\n\t// See https://github.com/marcuswestin/store.js/issues#issue/13\n\tfunction isLocalStorageNameSupported() {\n\t\ttry { return (localStorageName in win && win[localStorageName]) }\n\t\tcatch(err) { return false }\n\t}\n\n\tif (isLocalStorageNameSupported()) {\n\t\tstorage = win[localStorageName]\n\t\tstore.set = function(key, val) {\n\t\t\tif (val === undefined) { return store.remove(key) }\n\t\t\tstorage.setItem(key, store.serialize(val))\n\t\t\treturn val\n\t\t}\n\t\tstore.get = function(key, defaultVal) {\n\t\t\tvar val = store.deserialize(storage.getItem(key))\n\t\t\treturn (val === undefined ? defaultVal : val)\n\t\t}\n\t\tstore.remove = function(key) { storage.removeItem(key) }\n\t\tstore.clear = function() { storage.clear() }\n\t\tstore.forEach = function(callback) {\n\t\t\tfor (var i=0; idocument.w=window')\n\t\t\tstorageContainer.close()\n\t\t\tstorageOwner = storageContainer.w.frames[0].document\n\t\t\tstorage = storageOwner.createElement('div')\n\t\t} catch(e) {\n\t\t\t// somehow ActiveXObject instantiation failed (perhaps some special\n\t\t\t// security settings or otherwse), fall back to per-path storage\n\t\t\tstorage = doc.createElement('div')\n\t\t\tstorageOwner = doc.body\n\t\t}\n\t\tvar withIEStorage = function(storeFunction) {\n\t\t\treturn function() {\n\t\t\t\tvar args = Array.prototype.slice.call(arguments, 0)\n\t\t\t\targs.unshift(storage)\n\t\t\t\t// See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx\n\t\t\t\t// and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx\n\t\t\t\tstorageOwner.appendChild(storage)\n\t\t\t\tstorage.addBehavior('#default#userData')\n\t\t\t\tstorage.load(localStorageName)\n\t\t\t\tvar result = storeFunction.apply(store, args)\n\t\t\t\tstorageOwner.removeChild(storage)\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\n\t\t// In IE7, keys cannot start with a digit or contain certain chars.\n\t\t// See https://github.com/marcuswestin/store.js/issues/40\n\t\t// See https://github.com/marcuswestin/store.js/issues/83\n\t\tvar forbiddenCharsRegex = new RegExp(\"[!\\\"#$%&'()*+,/\\\\\\\\:;<=>?@[\\\\]^`{|}~]\", \"g\")\n\t\tvar ieKeyFix = function(key) {\n\t\t\treturn key.replace(/^d/, '___$&').replace(forbiddenCharsRegex, '___')\n\t\t}\n\t\tstore.set = withIEStorage(function(storage, key, val) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tif (val === undefined) { return store.remove(key) }\n\t\t\tstorage.setAttribute(key, store.serialize(val))\n\t\t\tstorage.save(localStorageName)\n\t\t\treturn val\n\t\t})\n\t\tstore.get = withIEStorage(function(storage, key, defaultVal) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tvar val = store.deserialize(storage.getAttribute(key))\n\t\t\treturn (val === undefined ? defaultVal : val)\n\t\t})\n\t\tstore.remove = withIEStorage(function(storage, key) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tstorage.removeAttribute(key)\n\t\t\tstorage.save(localStorageName)\n\t\t})\n\t\tstore.clear = withIEStorage(function(storage) {\n\t\t\tvar attributes = storage.XMLDocument.documentElement.attributes\n\t\t\tstorage.load(localStorageName)\n\t\t\tfor (var i=attributes.length-1; i>=0; i--) {\n\t\t\t\tstorage.removeAttribute(attributes[i].name)\n\t\t\t}\n\t\t\tstorage.save(localStorageName)\n\t\t})\n\t\tstore.forEach = withIEStorage(function(storage, callback) {\n\t\t\tvar attributes = storage.XMLDocument.documentElement.attributes\n\t\t\tfor (var i=0, attr; attr=attributes[i]; ++i) {\n\t\t\t\tcallback(attr.name, store.deserialize(storage.getAttribute(attr.name)))\n\t\t\t}\n\t\t})\n\t}\n\n\ttry {\n\t\tvar testKey = '__storejs__'\n\t\tstore.set(testKey, testKey)\n\t\tif (store.get(testKey) != testKey) { store.disabled = true }\n\t\tstore.remove(testKey)\n\t} catch(e) {\n\t\tstore.disabled = true\n\t}\n\tstore.enabled = !store.disabled\n\t\n\treturn store\n}())\n","import defaults from \"@ndhoule/defaults\";\nimport store from \"@segment/store\";\n\n/**\n * An object utility to persist user and other values in localstorage\n */\nclass StoreLocal {\n constructor(options) {\n this._options = {};\n this.enabled = false;\n this.options(options);\n }\n\n /**\n *\n * @param {*} options\n */\n options(options = {}) {\n if (arguments.length === 0) return this._options;\n\n defaults(options, { enabled: true });\n\n this.enabled = options.enabled && store.enabled;\n this._options = options;\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n set(key, value) {\n if (!this.enabled) return false;\n return store.set(key, value);\n }\n\n /**\n *\n * @param {*} key\n */\n get(key) {\n if (!this.enabled) return null;\n return store.get(key);\n }\n\n /**\n *\n * @param {*} key\n */\n remove(key) {\n if (!this.enabled) return false;\n return store.remove(key);\n }\n}\n\n// Exporting only the instance\nlet Store = new StoreLocal({});\n\nexport { Store };\n","import logger from \"../logUtil\";\nimport { Cookie } from \"./cookie\";\nimport { Store } from \"./store\";\nlet defaults = {\n user_storage_key: \"rl_user_id\",\n user_storage_trait: \"rl_trait\",\n user_storage_anonymousId: \"rl_anonymous_id\",\n group_storage_key: \"rl_group_id\",\n group_storage_trait: \"rl_group_trait\"\n};\n\n/**\n * An object that handles persisting key-val from Analytics\n */\nclass Storage {\n constructor() {\n // First try setting the storage to cookie else to localstorage\n Cookie.set(\"rudder_cookies\", true);\n\n if (Cookie.get(\"rudder_cookies\")) {\n Cookie.remove(\"rudder_cookies\");\n this.storage = Cookie;\n return;\n }\n\n // localStorage is enabled.\n if (Store.enabled) {\n this.storage = Store;\n return;\n }\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n setItem(key, value) {\n this.storage.set(key, value);\n }\n\n /**\n *\n * @param {*} value\n */\n setUserId(value) {\n if (typeof value != \"string\") {\n logger.error(\"[Storage] setUserId:: userId should be string\");\n return;\n }\n this.storage.set(defaults.user_storage_key, value);\n return;\n }\n\n /**\n *\n * @param {*} value\n */\n setUserTraits(value) {\n this.storage.set(defaults.user_storage_trait, value);\n return;\n }\n\n /**\n *\n * @param {*} value\n */\n setGroupId(value) {\n if (typeof value != \"string\") {\n logger.error(\"[Storage] setGroupId:: groupId should be string\");\n return;\n }\n this.storage.set(defaults.group_storage_key, value);\n return;\n }\n\n /**\n *\n * @param {*} value\n */\n setGroupTraits(value) {\n this.storage.set(defaults.group_storage_trait, value);\n return;\n }\n\n /**\n *\n * @param {*} value\n */\n setAnonymousId(value) {\n if (typeof value != \"string\") {\n logger.error(\"[Storage] setAnonymousId:: anonymousId should be string\");\n return;\n }\n this.storage.set(defaults.user_storage_anonymousId, value);\n return;\n }\n\n /**\n *\n * @param {*} key\n */\n getItem(key) {\n return this.storage.get(key);\n }\n\n /**\n * get the stored userId\n */\n getUserId() {\n return this.storage.get(defaults.user_storage_key);\n }\n\n /**\n * get the stored user traits\n */\n getUserTraits() {\n return this.storage.get(defaults.user_storage_trait);\n }\n\n /**\n * get the stored userId\n */\n getGroupId() {\n return this.storage.get(defaults.group_storage_key);\n }\n\n /**\n * get the stored user traits\n */\n getGroupTraits() {\n return this.storage.get(defaults.group_storage_trait);\n }\n\n /**\n * get stored anonymous id\n */\n getAnonymousId() {\n return this.storage.get(defaults.user_storage_anonymousId);\n }\n\n /**\n *\n * @param {*} key\n */\n removeItem(key) {\n return this.storage.remove(key);\n }\n\n /**\n * remove stored keys\n */\n clear() {\n this.storage.remove(defaults.user_storage_key);\n this.storage.remove(defaults.user_storage_trait);\n // this.storage.remove(defaults.user_storage_anonymousId);\n }\n}\n\nexport { Storage };\n","import { Storage } from \"./storage\";\nimport { StorageNode } from \"./storage_node\";\nexport default process.browser ? new Storage() : StorageNode;\n","import logger from \"../../utils/logUtil\";\nimport Storage from \"../../utils/storage\";\n\nclass GA {\n constructor(config) {\n this.trackingID = config.trackingID;\n // config.allowLinker = true;\n this.allowLinker = config.allowLinker || false;\n this.name = \"GA\";\n }\n\n init() {\n (function(i, s, o, g, r, a, m) {\n i[\"GoogleAnalyticsObject\"] = r;\n (i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n }),\n (i[r].l = 1 * new Date());\n (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(\n window,\n document,\n \"script\",\n \"https://www.google-analytics.com/analytics.js\",\n \"ga\"\n );\n\n // use analytics_debug.js for debugging\n\n ga(\"create\", this.trackingID, \"auto\", \"rudder_ga\", {\n allowLinker: this.allowLinker,\n });\n\n var userId = Storage.getUserId()\n if (userId && userId !== '') {\n ga(\"rudder_ga.set\", \"userId\", userId);\n }\n //ga(\"send\", \"pageview\");\n\n logger.debug(\"===in init GA===\");\n }\n\n identify(rudderElement) {\n var userId = rudderElement.message.userId !== ''\n ? rudderElement.message.userId\n : rudderElement.message.anonymousId\n ga(\"rudder_ga.set\", \"userId\", userId);\n logger.debug(\"in GoogleAnalyticsManager identify\");\n }\n\n track(rudderElement) {\n var eventCategory = rudderElement.message.event;\n var eventAction = rudderElement.message.event;\n var eventLabel = rudderElement.message.event;\n var eventValue = \"\";\n if (rudderElement.message.properties) {\n eventValue = rudderElement.message.properties.value\n ? rudderElement.message.properties.value\n : rudderElement.message.properties.revenue;\n eventCategory = rudderElement.message.properties.category\n ? rudderElement.message.properties.category\n : eventCategory;\n eventLabel = rudderElement.message.properties.label\n ? rudderElement.message.properties.label\n : eventLabel;\n }\n\n var payLoad = {\n hitType: \"event\",\n eventCategory: eventCategory,\n eventAction: eventAction,\n eventLabel: eventLabel,\n eventValue: eventValue\n };\n ga(\"rudder_ga.send\", \"event\", payLoad);\n logger.debug(\"in GoogleAnalyticsManager track\");\n }\n\n page(rudderElement) {\n logger.debug(\"in GoogleAnalyticsManager page\");\n var path =\n rudderElement.message.properties && rudderElement.message.properties.path\n ? rudderElement.message.properties.path\n : undefined;\n var title = rudderElement.message.properties && rudderElement.message.properties.title\n ? rudderElement.message.properties.title\n : undefined;\n var location = rudderElement.message.properties && rudderElement.message.properties.url\n ? rudderElement.message.properties.url\n : undefined;\n\n if (path) {\n ga(\"rudder_ga.set\", \"page\", path);\n }\n\n if (title) {\n ga(\"rudder_ga.set\", \"title\", title);\n }\n\n if (location) {\n ga(\"rudder_ga.set\", \"location\", location);\n }\n ga(\"rudder_ga.send\", \"pageview\");\n \n }\n\n isLoaded() {\n logger.debug(\"in GA isLoaded\");\n return !!window.gaplugins;\n }\n\n isReady() {\n return !!window.gaplugins;\n }\n}\n\nexport { GA };","import logger from \"../../utils/logUtil\";\nclass Hotjar {\n constructor(config) {\n this.siteId = config.siteID; //1549611\n this.name = \"HOTJAR\";\n this._ready = false;\n }\n\n init() {\n window.hotjarSiteId = this.siteId;\n (function(h, o, t, j, a, r) {\n h.hj =\n h.hj ||\n function() {\n (h.hj.q = h.hj.q || []).push(arguments);\n };\n h._hjSettings = { hjid: h.hotjarSiteId, hjsv: 6 };\n a = o.getElementsByTagName(\"head\")[0];\n r = o.createElement(\"script\");\n r.async = 1;\n r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;\n a.appendChild(r);\n })(window, document, \"https://static.hotjar.com/c/hotjar-\", \".js?sv=\");\n this._ready = true;\n\n logger.debug(\"===in init Hotjar===\");\n }\n\n identify(rudderElement) {\n let userId = rudderElement.message.userId || rudderElement.message.anonymousId;\n if (!userId){\n logger.debug('[Hotjar] identify:: user id is required');\n return;\n }\n \n var traits = rudderElement.message.context.traits;\n \n window.hj('identify', rudderElement.message.userId, traits);\n }\n\n track(rudderElement) {\n logger.debug(\"[Hotjar] track:: method not supported\");\n }\n\n page(rudderElement) {\n logger.debug(\"[Hotjar] page:: method not supported\");\n }\n\n isLoaded() {\n return this._ready;\n }\n\n isReady() {\n return this._ready;\n }\n}\n\nexport { Hotjar };\n","import logger from \"../../utils/logUtil\";\nclass GoogleAds {\n constructor(config) {\n //this.accountId = config.accountId;//AW-696901813\n this.conversionId = config.conversionID;\n this.pageLoadConversions = config.pageLoadConversions;\n this.clickEventConversions = config.clickEventConversions;\n this.defaultPageConversion = config.defaultPageConversion;\n\n this.name = \"GOOGLEADS\";\n }\n\n init() {\n let sourceUrl =\n \"https://www.googletagmanager.com/gtag/js?id=\" + this.conversionId;\n (function(id, src, document) {\n logger.debug(\"in script loader=== \" + id);\n let js = document.createElement(\"script\");\n js.src = src;\n js.async = 1;\n js.type = \"text/javascript\";\n js.id = id;\n let e = document.getElementsByTagName(\"head\")[0];\n logger.debug(\"==script==\", e);\n e.appendChild(js);\n })(\"googleAds-integration\", sourceUrl, document);\n\n window.dataLayer = window.dataLayer || [];\n window.gtag = function() {\n window.dataLayer.push(arguments);\n };\n window.gtag(\"js\", new Date());\n window.gtag(\"config\", this.conversionId);\n\n logger.debug(\"===in init Google Ads===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"[GoogleAds] identify:: method not supported\");\n }\n\n //https://developers.google.com/gtagjs/reference/event\n track(rudderElement) {\n logger.debug(\"in GoogleAdsAnalyticsManager track\");\n let conversionData = this.getConversionData(\n this.clickEventConversions,\n rudderElement.message.event\n );\n if (conversionData[\"conversionLabel\"]) {\n let conversionLabel = conversionData[\"conversionLabel\"];\n let eventName = conversionData[\"eventName\"];\n let sendToValue = this.conversionId + \"/\" + conversionLabel;\n let properties = {};\n if (rudderElement.properties) {\n properties[\"value\"] = rudderElement.properties[\"revenue\"];\n properties[\"currency\"] = rudderElement.properties[\"currency\"];\n properties[\"transaction_id\"] = rudderElement.properties[\"order_id\"];\n }\n properties[\"send_to\"] = sendToValue;\n window.gtag(\"event\", eventName, properties);\n }\n }\n\n page(rudderElement) {\n logger.debug(\"in GoogleAdsAnalyticsManager page\");\n let conversionData = this.getConversionData(\n this.pageLoadConversions,\n rudderElement.message.name\n );\n if (conversionData[\"conversionLabel\"]) {\n let conversionLabel = conversionData[\"conversionLabel\"];\n let eventName = conversionData[\"eventName\"];\n window.gtag(\"event\", eventName, {\n send_to: this.conversionId + \"/\" + conversionLabel\n });\n }\n }\n\n getConversionData(eventTypeConversions, eventName) {\n let conversionData = {};\n if (eventTypeConversions) {\n if (eventName) {\n eventTypeConversions.forEach(eventTypeConversion => {\n if (\n eventTypeConversion.name.toLowerCase() === eventName.toLowerCase()\n ) {\n //rudderElement[\"message\"][\"name\"]\n conversionData[\"conversionLabel\"] =\n eventTypeConversion.conversionLabel;\n conversionData[\"eventName\"] = eventTypeConversion.name;\n return;\n }\n });\n } else {\n if (this.defaultPageConversion) {\n conversionData[\"conversionLabel\"] = this.defaultPageConversion;\n conversionData[\"eventName\"] = \"Viewed a Page\";\n }\n }\n }\n return conversionData;\n }\n\n isLoaded() {\n return window.dataLayer.push !== Array.prototype.push;\n }\n\n isReady() {\n return window.dataLayer.push !== Array.prototype.push;\n }\n}\n\nexport { GoogleAds };\n","import logger from \"../../utils/logUtil\";\nclass VWO {\n constructor(config, analytics) {\n this.accountId = config.accountId; //1549611\n this.settingsTolerance = config.settingsTolerance;\n this.isSPA = config.isSPA;\n this.libraryTolerance = config.libraryTolerance;\n this.useExistingJquery = config.useExistingJquery;\n this.sendExperimentTrack = config.sendExperimentTrack;\n this.sendExperimentIdentify = config.sendExperimentIdentify;\n this.name = \"VWO\";\n this.analytics = analytics;\n logger.debug(\"Config \", config);\n }\n\n init() {\n logger.debug(\"===in init VWO===\");\n var account_id = this.accountId;\n var settings_tolerance = this.settingsTolerance;\n var library_tolerance = this.libraryTolerance;\n var use_existing_jquery = this.useExistingJquery;\n var isSPA = this.isSPA;\n window._vwo_code = (function() {\n var f = false;\n var d = document;\n return {\n use_existing_jquery: function() {\n return use_existing_jquery;\n },\n library_tolerance: function() {\n return library_tolerance;\n },\n finish: function() {\n if (!f) {\n f = true;\n var a = d.getElementById(\"_vis_opt_path_hides\");\n if (a) a.parentNode.removeChild(a);\n }\n },\n finished: function() {\n return f;\n },\n load: function(a) {\n var b = d.createElement(\"script\");\n b.src = a;\n b.type = \"text/javascript\";\n b.innerText;\n b.onerror = function() {\n _vwo_code.finish();\n };\n d.getElementsByTagName(\"head\")[0].appendChild(b);\n },\n init: function() {\n var settings_timer = setTimeout(\n \"_vwo_code.finish()\",\n settings_tolerance\n );\n var a = d.createElement(\"style\"),\n b =\n \"body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}\",\n h = d.getElementsByTagName(\"head\")[0];\n a.setAttribute(\"id\", \"_vis_opt_path_hides\");\n a.setAttribute(\"type\", \"text/css\");\n if (a.styleSheet) a.styleSheet.cssText = b;\n else a.appendChild(d.createTextNode(b));\n h.appendChild(a);\n this.load(\n \"//dev.visualwebsiteoptimizer.com/j.php?a=\" +\n account_id +\n \"&u=\" +\n encodeURIComponent(d.URL) +\n \"&r=\" +\n Math.random() +\n \"&f=\" +\n +isSPA\n );\n return settings_timer;\n }\n };\n })();\n window._vwo_settings_timer = window._vwo_code.init();\n\n //Send track or iddentify when\n if (this.sendExperimentTrack || this.experimentViewedIdentify) {\n this.experimentViewed();\n }\n }\n\n experimentViewed() {\n window.VWO = window.VWO || [];\n var self = this;\n window.VWO.push([\n \"onVariationApplied\",\n (data) => {\n if (!data) {\n return;\n }\n logger.debug(\"Variation Applied\");\n var expId = data[1],\n variationId = data[2];\n logger.debug(\n \"experiment id:\",\n expId,\n \"Variation Name:\",\n _vwo_exp[expId].comb_n[variationId]\n );\n if (\n typeof _vwo_exp[expId].comb_n[variationId] !== \"undefined\" &&\n [\"VISUAL_AB\", \"VISUAL\", \"SPLIT_URL\", \"SURVEY\"].indexOf(\n _vwo_exp[expId].type\n ) > -1\n ) {\n try {\n if (self.sendExperimentTrack) {\n logger.debug(\"Tracking...\");\n this.analytics.track(\"Experiment Viewed\", {\n experimentId: expId,\n variationName: _vwo_exp[expId].comb_n[variationId]\n });\n }\n } catch (error) {\n logger.error(\"[VWO] experimentViewed:: \", error);\n }\n try {\n if (self.sendExperimentIdentify) {\n logger.debug(\"Identifying...\");\n this.analytics.identify({\n [`Experiment: ${expId}`]: _vwo_exp[expId].comb_n[variationId]\n });\n }\n } catch (error) {\n logger.error(\"[VWO] experimentViewed:: \" , error);\n }\n }\n }\n ]);\n }\n\n identify(rudderElement) {\n logger.debug(\"method not supported\");\n }\n\n track(rudderElement) {\n var eventName = rudderElement.message.event;\n if (eventName === \"Order Completed\") {\n var total = rudderElement.message.properties\n ? rudderElement.message.properties.total ||\n rudderElement.message.properties.revenue\n : 0;\n logger.debug(\"Revenue\", total);\n window.VWO = window.VWO || [];\n window.VWO.push([\"track.revenueConversion\", total]);\n }\n }\n\n page(rudderElement) {\n logger.debug(\"method not supported\");\n }\n\n isLoaded() {\n return !!window._vwo_code;\n }\n\n isReady() {\n return !!window._vwo_code;\n }\n}\n\nexport { VWO };\n","import logger from \"../../utils/logUtil\";\nclass GoogleTagManager {\n constructor(config) {\n this.containerID = config.containerID;\n this.name = \"GOOGLETAGMANAGER\";\n }\n\n init() {\n logger.debug(\"===in init GoogleTagManager===\");\n (function(w, d, s, l, i) {\n w[l] = w[l] || [];\n w[l].push({ \"gtm.start\": new Date().getTime(), event: \"gtm.js\" });\n var f = d.getElementsByTagName(s)[0],\n j = d.createElement(s),\n dl = l != \"dataLayer\" ? \"&l=\" + l : \"\";\n j.async = true;\n j.src = \"https://www.googletagmanager.com/gtm.js?id=\" + i + dl;\n f.parentNode.insertBefore(j, f);\n })(window, document, \"script\", \"dataLayer\", this.containerID);\n }\n\n identify(rudderElement) {\n logger.debug(\"[GTM] identify:: method not supported\");\n }\n\n track(rudderElement) {\n logger.debug(\"===in track GoogleTagManager===\");\n let rudderMessage = rudderElement.message;\n let props = {\n event: rudderMessage.event,\n userId: rudderMessage.userId,\n anonymousId: rudderMessage.anonymousId,\n ...rudderMessage.properties\n };\n this.sendToGTMDatalayer(props);\n }\n\n page(rudderElement) {\n logger.debug(\"===in page GoogleTagManager===\");\n let rudderMessage = rudderElement.message;\n let pageName = rudderMessage.name;\n let pageCategory = rudderMessage.properties\n ? rudderMessage.properties.category\n : undefined;\n\n let eventName;\n\n if (pageName) {\n eventName = \"Viewed \" + pageName + \" page\";\n }\n\n if (pageCategory && pageName) {\n eventName = \"Viewed \" + pageCategory + \" \" + pageName + \" page\";\n }\n\n if(!eventName) {\n eventName = \"Viewed a Page\";\n }\n \n let props = {\n event: eventName,\n userId: rudderMessage.userId,\n anonymousId: rudderMessage.anonymousId,\n ...rudderMessage.properties\n };\n\n this.sendToGTMDatalayer(props);\n }\n\n isLoaded() {\n return !!(\n window.dataLayer && Array.prototype.push !== window.dataLayer.push\n );\n }\n\n sendToGTMDatalayer(props) {\n window.dataLayer.push(props);\n }\n\n isReady() {\n return !!(\n window.dataLayer && Array.prototype.push !== window.dataLayer.push\n );\n }\n}\n\nexport { GoogleTagManager };\n","import logger from \"../../utils/logUtil\";\n\n/*\nE-commerce support required for logPurchase support & other e-commerce events as track with productId changed\n*/\nclass Braze {\n constructor(config, analytics) {\n this.analytics = analytics;\n this.appKey = config.appKey;\n if (!config.appKey) this.appKey = \"\";\n this.endPoint = \"\";\n if (config.dataCenter) {\n let dataCenterArr = config.dataCenter.trim().split(\"-\");\n if (dataCenterArr[0].toLowerCase() === \"eu\") {\n this.endPoint = \"sdk.fra-01.braze.eu\";\n } else {\n this.endPoint = \"sdk.iad-\" + dataCenterArr[1] + \".braze.com\";\n }\n }\n\n this.name = \"BRAZE\";\n\n logger.debug(\"Config \", config);\n }\n\n /** https://js.appboycdn.com/web-sdk/latest/doc/ab.User.html#toc4\n */\n\n formatGender(gender) {\n if (!gender) return;\n if (typeof gender !== \"string\") return;\n\n var femaleGenders = [\"woman\", \"female\", \"w\", \"f\"];\n var maleGenders = [\"man\", \"male\", \"m\"];\n var otherGenders = [\"other\", \"o\"];\n\n if (femaleGenders.indexOf(gender.toLowerCase()) > -1)\n return window.appboy.ab.User.Genders.FEMALE;\n if (maleGenders.indexOf(gender.toLowerCase()) > -1)\n return window.appboy.ab.User.Genders.MALE;\n if (otherGenders.indexOf(gender.toLowerCase()) > -1)\n return window.appboy.ab.User.Genders.OTHER;\n }\n\n init() {\n logger.debug(\"===in init Braze===\");\n\n //load appboy\n +(function(a, p, P, b, y) {\n a.appboy = {};\n a.appboyQueue = [];\n for (\n var s = \"initialize destroy getDeviceId toggleAppboyLogging setLogger openSession changeUser requestImmediateDataFlush requestFeedRefresh subscribeToFeedUpdates requestContentCardsRefresh subscribeToContentCardsUpdates logCardImpressions logCardClick logCardDismissal logFeedDisplayed logContentCardsDisplayed logInAppMessageImpression logInAppMessageClick logInAppMessageButtonClick logInAppMessageHtmlClick subscribeToNewInAppMessages subscribeToInAppMessage removeSubscription removeAllSubscriptions logCustomEvent logPurchase isPushSupported isPushBlocked isPushGranted isPushPermissionGranted registerAppboyPushMessages unregisterAppboyPushMessages trackLocation stopWebTracking resumeWebTracking wipeData ab ab.DeviceProperties ab.User ab.User.Genders ab.User.NotificationSubscriptionTypes ab.User.prototype.getUserId ab.User.prototype.setFirstName ab.User.prototype.setLastName ab.User.prototype.setEmail ab.User.prototype.setGender ab.User.prototype.setDateOfBirth ab.User.prototype.setCountry ab.User.prototype.setHomeCity ab.User.prototype.setLanguage ab.User.prototype.setEmailNotificationSubscriptionType ab.User.prototype.setPushNotificationSubscriptionType ab.User.prototype.setPhoneNumber ab.User.prototype.setAvatarImageUrl ab.User.prototype.setLastKnownLocation ab.User.prototype.setUserAttribute ab.User.prototype.setCustomUserAttribute ab.User.prototype.addToCustomAttributeArray ab.User.prototype.removeFromCustomAttributeArray ab.User.prototype.incrementCustomUserAttribute ab.User.prototype.addAlias ab.User.prototype.setCustomLocationAttribute ab.InAppMessage ab.InAppMessage.SlideFrom ab.InAppMessage.ClickAction ab.InAppMessage.DismissType ab.InAppMessage.OpenTarget ab.InAppMessage.ImageStyle ab.InAppMessage.TextAlignment ab.InAppMessage.Orientation ab.InAppMessage.CropType ab.InAppMessage.prototype.subscribeToClickedEvent ab.InAppMessage.prototype.subscribeToDismissedEvent ab.InAppMessage.prototype.removeSubscription ab.InAppMessage.prototype.removeAllSubscriptions ab.InAppMessage.prototype.closeMessage ab.InAppMessage.Button ab.InAppMessage.Button.prototype.subscribeToClickedEvent ab.InAppMessage.Button.prototype.removeSubscription ab.InAppMessage.Button.prototype.removeAllSubscriptions ab.SlideUpMessage ab.ModalMessage ab.FullScreenMessage ab.HtmlMessage ab.ControlMessage ab.Feed ab.Feed.prototype.getUnreadCardCount ab.ContentCards ab.ContentCards.prototype.getUnviewedCardCount ab.Card ab.Card.prototype.dismissCard ab.ClassicCard ab.CaptionedImage ab.Banner ab.ControlCard ab.WindowUtils display display.automaticallyShowNewInAppMessages display.showInAppMessage display.showFeed display.destroyFeed display.toggleFeed display.showContentCards display.hideContentCards display.toggleContentCards sharedLib\".split(\n \" \"\n ),\n i = 0;\n i < s.length;\n i++\n ) {\n for (\n var m = s[i], k = a.appboy, l = m.split(\".\"), j = 0;\n j < l.length - 1;\n j++\n )\n k = k[l[j]];\n k[l[j]] = new Function(\n \"return function \" +\n m.replace(/\\./g, \"_\") +\n \"(){window.appboyQueue.push(arguments); return true}\"\n )();\n }\n window.appboy.getUser = function() {\n return new window.appboy.ab.User();\n };\n window.appboy.getCachedFeed = function() {\n return new window.appboy.ab.Feed();\n };\n window.appboy.getCachedContentCards = function() {\n return new window.appboy.ab.ContentCards();\n };\n (y = p.createElement(P)).type = \"text/javascript\";\n y.src = \"https://js.appboycdn.com/web-sdk/2.4/appboy.min.js\";\n y.async = 1;\n (b = p.getElementsByTagName(P)[0]).parentNode.insertBefore(y, b);\n })(window, document, \"script\");\n\n window.appboy.initialize(this.appKey, {\n enableLogging: true,\n baseUrl: this.endPoint\n });\n window.appboy.display.automaticallyShowNewInAppMessages();\n\n var userId = this.analytics.userId;\n //send userId if you have it https://js.appboycdn.com/web-sdk/latest/doc/module-appboy.html#.changeUser\n if (userId) appboy.changeUser(userId);\n\n window.appboy.openSession();\n }\n\n handleReservedProperties(props) {\n // remove reserved keys from custom event properties\n // https://www.appboy.com/documentation/Platform_Wide/#reserved-keys\n var reserved = [\n \"time\",\n \"product_id\",\n \"quantity\",\n \"event_name\",\n \"price\",\n \"currency\"\n ];\n\n reserved.forEach(element => {\n delete props[element];\n });\n return props;\n }\n\n identify(rudderElement) {\n var userId = rudderElement.message.userId;\n var address = rudderElement.message.context.traits.address;\n var avatar = rudderElement.message.context.traits.avatar;\n var birthday = rudderElement.message.context.traits.birthday;\n var email = rudderElement.message.context.traits.email;\n var firstname = rudderElement.message.context.traits.firstname;\n var gender = rudderElement.message.context.traits.gender;\n var lastname = rudderElement.message.context.traits.lastname;\n var phone = rudderElement.message.context.traits.phone;\n\n // This is a hack to make a deep copy that is not recommended because it will often fail:\n var traits = JSON.parse(\n JSON.stringify(rudderElement.message.context.traits)\n );\n\n window.appboy.changeUser(userId);\n window.appboy.getUser().setAvatarImageUrl(avatar);\n if (email) window.appboy.getUser().setEmail(email);\n if (firstname) window.appboy.getUser().setFirstName(firstname);\n if (gender) window.appboy.getUser().setGender(this.formatGender(gender));\n if (lastname) window.appboy.getUser().setLastName(lastname);\n if (phone) window.appboy.getUser().setPhoneNumber(phone);\n if (address) {\n window.appboy.getUser().setCountry(address.country);\n window.appboy.getUser().setHomeCity(address.city);\n }\n if (birthday) {\n window.appboy\n .getUser()\n .setDateOfBirth(\n birthday.getUTCFullYear(),\n birthday.getUTCMonth() + 1,\n birthday.getUTCDate()\n );\n }\n\n // remove reserved keys https://www.appboy.com/documentation/Platform_Wide/#reserved-keys\n var reserved = [\n \"avatar\",\n \"address\",\n \"birthday\",\n \"email\",\n \"id\",\n \"firstname\",\n \"gender\",\n \"lastname\",\n \"phone\",\n \"facebook\",\n \"twitter\",\n \"first_name\",\n \"last_name\",\n \"dob\",\n \"external_id\",\n \"country\",\n \"home_city\",\n \"bio\",\n \"gender\",\n \"phone\",\n \"email_subscribe\",\n \"push_subscribe\"\n ];\n\n reserved.forEach(element => {\n delete traits[element];\n });\n\n Object.keys(traits).forEach(key => {\n window.appboy.getUser().setCustomUserAttribute(key, traits[key]);\n });\n }\n\n handlePurchase(properties, userId) {\n var products = properties.products;\n var currencyCode = properties.currency;\n\n window.appboy.changeUser(userId);\n\n // del used properties\n del(properties, \"products\");\n del(properties, \"currency\");\n\n // we have to make a separate call to appboy for each product\n products.forEach(product => {\n var productId = product.product_id;\n var price = product.price;\n var quantity = product.quantity;\n if (quantity && price && productId)\n window.appboy.logPurchase(\n productId,\n price,\n currencyCode,\n quantity,\n properties\n );\n });\n }\n\n track(rudderElement) {\n var userId = rudderElement.message.userId;\n var eventName = rudderElement.message.event;\n var properties = rudderElement.message.properties;\n\n window.appboy.changeUser(userId);\n\n if (eventName.toLowerCase() === \"order completed\") {\n this.handlePurchase(properties, userId);\n } else {\n properties = this.handleReservedProperties(properties);\n window.appboy.logCustomEvent(eventName, properties);\n }\n }\n\n page(rudderElement) {\n var userId = rudderElement.message.userId;\n var eventName = rudderElement.message.name;\n var properties = rudderElement.message.properties;\n\n properties = this.handleReservedProperties(properties);\n\n window.appboy.changeUser(userId);\n window.appboy.logCustomEvent(eventName, properties);\n }\n\n isLoaded() {\n return window.appboyQueue === null;\n }\n\n isReady() {\n return window.appboyQueue === null;\n }\n}\n\nexport { Braze };\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","/* globals window, HTMLElement */\n\n'use strict';\n\n/**!\n * is\n * the definitive JavaScript type testing library\n *\n * @copyright 2013-2014 Enrico Marino / Jordan Harband\n * @license MIT\n */\n\nvar objProto = Object.prototype;\nvar owns = objProto.hasOwnProperty;\nvar toStr = objProto.toString;\nvar symbolValueOf;\nif (typeof Symbol === 'function') {\n symbolValueOf = Symbol.prototype.valueOf;\n}\nvar bigIntValueOf;\nif (typeof BigInt === 'function') {\n bigIntValueOf = BigInt.prototype.valueOf;\n}\nvar isActualNaN = function (value) {\n return value !== value;\n};\nvar NON_HOST_TYPES = {\n 'boolean': 1,\n number: 1,\n string: 1,\n undefined: 1\n};\n\nvar base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/;\nvar hexRegex = /^[A-Fa-f0-9]+$/;\n\n/**\n * Expose `is`\n */\n\nvar is = {};\n\n/**\n * Test general.\n */\n\n/**\n * is.type\n * Test if `value` is a type of `type`.\n *\n * @param {*} value value to test\n * @param {String} type type\n * @return {Boolean} true if `value` is a type of `type`, false otherwise\n * @api public\n */\n\nis.a = is.type = function (value, type) {\n return typeof value === type;\n};\n\n/**\n * is.defined\n * Test if `value` is defined.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is defined, false otherwise\n * @api public\n */\n\nis.defined = function (value) {\n return typeof value !== 'undefined';\n};\n\n/**\n * is.empty\n * Test if `value` is empty.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is empty, false otherwise\n * @api public\n */\n\nis.empty = function (value) {\n var type = toStr.call(value);\n var key;\n\n if (type === '[object Array]' || type === '[object Arguments]' || type === '[object String]') {\n return value.length === 0;\n }\n\n if (type === '[object Object]') {\n for (key in value) {\n if (owns.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n return !value;\n};\n\n/**\n * is.equal\n * Test if `value` is equal to `other`.\n *\n * @param {*} value value to test\n * @param {*} other value to compare with\n * @return {Boolean} true if `value` is equal to `other`, false otherwise\n */\n\nis.equal = function equal(value, other) {\n if (value === other) {\n return true;\n }\n\n var type = toStr.call(value);\n var key;\n\n if (type !== toStr.call(other)) {\n return false;\n }\n\n if (type === '[object Object]') {\n for (key in value) {\n if (!is.equal(value[key], other[key]) || !(key in other)) {\n return false;\n }\n }\n for (key in other) {\n if (!is.equal(value[key], other[key]) || !(key in value)) {\n return false;\n }\n }\n return true;\n }\n\n if (type === '[object Array]') {\n key = value.length;\n if (key !== other.length) {\n return false;\n }\n while (key--) {\n if (!is.equal(value[key], other[key])) {\n return false;\n }\n }\n return true;\n }\n\n if (type === '[object Function]') {\n return value.prototype === other.prototype;\n }\n\n if (type === '[object Date]') {\n return value.getTime() === other.getTime();\n }\n\n return false;\n};\n\n/**\n * is.hosted\n * Test if `value` is hosted by `host`.\n *\n * @param {*} value to test\n * @param {*} host host to test with\n * @return {Boolean} true if `value` is hosted by `host`, false otherwise\n * @api public\n */\n\nis.hosted = function (value, host) {\n var type = typeof host[value];\n return type === 'object' ? !!host[value] : !NON_HOST_TYPES[type];\n};\n\n/**\n * is.instance\n * Test if `value` is an instance of `constructor`.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an instance of `constructor`\n * @api public\n */\n\nis.instance = is['instanceof'] = function (value, constructor) {\n return value instanceof constructor;\n};\n\n/**\n * is.nil / is.null\n * Test if `value` is null.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is null, false otherwise\n * @api public\n */\n\nis.nil = is['null'] = function (value) {\n return value === null;\n};\n\n/**\n * is.undef / is.undefined\n * Test if `value` is undefined.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is undefined, false otherwise\n * @api public\n */\n\nis.undef = is.undefined = function (value) {\n return typeof value === 'undefined';\n};\n\n/**\n * Test arguments.\n */\n\n/**\n * is.args\n * Test if `value` is an arguments object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an arguments object, false otherwise\n * @api public\n */\n\nis.args = is.arguments = function (value) {\n var isStandardArguments = toStr.call(value) === '[object Arguments]';\n var isOldArguments = !is.array(value) && is.arraylike(value) && is.object(value) && is.fn(value.callee);\n return isStandardArguments || isOldArguments;\n};\n\n/**\n * Test array.\n */\n\n/**\n * is.array\n * Test if 'value' is an array.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an array, false otherwise\n * @api public\n */\n\nis.array = Array.isArray || function (value) {\n return toStr.call(value) === '[object Array]';\n};\n\n/**\n * is.arguments.empty\n * Test if `value` is an empty arguments object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an empty arguments object, false otherwise\n * @api public\n */\nis.args.empty = function (value) {\n return is.args(value) && value.length === 0;\n};\n\n/**\n * is.array.empty\n * Test if `value` is an empty array.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an empty array, false otherwise\n * @api public\n */\nis.array.empty = function (value) {\n return is.array(value) && value.length === 0;\n};\n\n/**\n * is.arraylike\n * Test if `value` is an arraylike object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an arguments object, false otherwise\n * @api public\n */\n\nis.arraylike = function (value) {\n return !!value && !is.bool(value)\n && owns.call(value, 'length')\n && isFinite(value.length)\n && is.number(value.length)\n && value.length >= 0;\n};\n\n/**\n * Test boolean.\n */\n\n/**\n * is.bool\n * Test if `value` is a boolean.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a boolean, false otherwise\n * @api public\n */\n\nis.bool = is['boolean'] = function (value) {\n return toStr.call(value) === '[object Boolean]';\n};\n\n/**\n * is.false\n * Test if `value` is false.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is false, false otherwise\n * @api public\n */\n\nis['false'] = function (value) {\n return is.bool(value) && Boolean(Number(value)) === false;\n};\n\n/**\n * is.true\n * Test if `value` is true.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is true, false otherwise\n * @api public\n */\n\nis['true'] = function (value) {\n return is.bool(value) && Boolean(Number(value)) === true;\n};\n\n/**\n * Test date.\n */\n\n/**\n * is.date\n * Test if `value` is a date.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a date, false otherwise\n * @api public\n */\n\nis.date = function (value) {\n return toStr.call(value) === '[object Date]';\n};\n\n/**\n * is.date.valid\n * Test if `value` is a valid date.\n *\n * @param {*} value value to test\n * @returns {Boolean} true if `value` is a valid date, false otherwise\n */\nis.date.valid = function (value) {\n return is.date(value) && !isNaN(Number(value));\n};\n\n/**\n * Test element.\n */\n\n/**\n * is.element\n * Test if `value` is an html element.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an HTML Element, false otherwise\n * @api public\n */\n\nis.element = function (value) {\n return value !== undefined\n && typeof HTMLElement !== 'undefined'\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Test error.\n */\n\n/**\n * is.error\n * Test if `value` is an error object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an error object, false otherwise\n * @api public\n */\n\nis.error = function (value) {\n return toStr.call(value) === '[object Error]';\n};\n\n/**\n * Test function.\n */\n\n/**\n * is.fn / is.function (deprecated)\n * Test if `value` is a function.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a function, false otherwise\n * @api public\n */\n\nis.fn = is['function'] = function (value) {\n var isAlert = typeof window !== 'undefined' && value === window.alert;\n if (isAlert) {\n return true;\n }\n var str = toStr.call(value);\n return str === '[object Function]' || str === '[object GeneratorFunction]' || str === '[object AsyncFunction]';\n};\n\n/**\n * Test number.\n */\n\n/**\n * is.number\n * Test if `value` is a number.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a number, false otherwise\n * @api public\n */\n\nis.number = function (value) {\n return toStr.call(value) === '[object Number]';\n};\n\n/**\n * is.infinite\n * Test if `value` is positive or negative infinity.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is positive or negative Infinity, false otherwise\n * @api public\n */\nis.infinite = function (value) {\n return value === Infinity || value === -Infinity;\n};\n\n/**\n * is.decimal\n * Test if `value` is a decimal number.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a decimal number, false otherwise\n * @api public\n */\n\nis.decimal = function (value) {\n return is.number(value) && !isActualNaN(value) && !is.infinite(value) && value % 1 !== 0;\n};\n\n/**\n * is.divisibleBy\n * Test if `value` is divisible by `n`.\n *\n * @param {Number} value value to test\n * @param {Number} n dividend\n * @return {Boolean} true if `value` is divisible by `n`, false otherwise\n * @api public\n */\n\nis.divisibleBy = function (value, n) {\n var isDividendInfinite = is.infinite(value);\n var isDivisorInfinite = is.infinite(n);\n var isNonZeroNumber = is.number(value) && !isActualNaN(value) && is.number(n) && !isActualNaN(n) && n !== 0;\n return isDividendInfinite || isDivisorInfinite || (isNonZeroNumber && value % n === 0);\n};\n\n/**\n * is.integer\n * Test if `value` is an integer.\n *\n * @param value to test\n * @return {Boolean} true if `value` is an integer, false otherwise\n * @api public\n */\n\nis.integer = is['int'] = function (value) {\n return is.number(value) && !isActualNaN(value) && value % 1 === 0;\n};\n\n/**\n * is.maximum\n * Test if `value` is greater than 'others' values.\n *\n * @param {Number} value value to test\n * @param {Array} others values to compare with\n * @return {Boolean} true if `value` is greater than `others` values\n * @api public\n */\n\nis.maximum = function (value, others) {\n if (isActualNaN(value)) {\n throw new TypeError('NaN is not a valid value');\n } else if (!is.arraylike(others)) {\n throw new TypeError('second argument must be array-like');\n }\n var len = others.length;\n\n while (--len >= 0) {\n if (value < others[len]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * is.minimum\n * Test if `value` is less than `others` values.\n *\n * @param {Number} value value to test\n * @param {Array} others values to compare with\n * @return {Boolean} true if `value` is less than `others` values\n * @api public\n */\n\nis.minimum = function (value, others) {\n if (isActualNaN(value)) {\n throw new TypeError('NaN is not a valid value');\n } else if (!is.arraylike(others)) {\n throw new TypeError('second argument must be array-like');\n }\n var len = others.length;\n\n while (--len >= 0) {\n if (value > others[len]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * is.nan\n * Test if `value` is not a number.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is not a number, false otherwise\n * @api public\n */\n\nis.nan = function (value) {\n return !is.number(value) || value !== value;\n};\n\n/**\n * is.even\n * Test if `value` is an even number.\n *\n * @param {Number} value value to test\n * @return {Boolean} true if `value` is an even number, false otherwise\n * @api public\n */\n\nis.even = function (value) {\n return is.infinite(value) || (is.number(value) && value === value && value % 2 === 0);\n};\n\n/**\n * is.odd\n * Test if `value` is an odd number.\n *\n * @param {Number} value value to test\n * @return {Boolean} true if `value` is an odd number, false otherwise\n * @api public\n */\n\nis.odd = function (value) {\n return is.infinite(value) || (is.number(value) && value === value && value % 2 !== 0);\n};\n\n/**\n * is.ge\n * Test if `value` is greater than or equal to `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean}\n * @api public\n */\n\nis.ge = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value >= other;\n};\n\n/**\n * is.gt\n * Test if `value` is greater than `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean}\n * @api public\n */\n\nis.gt = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value > other;\n};\n\n/**\n * is.le\n * Test if `value` is less than or equal to `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean} if 'value' is less than or equal to 'other'\n * @api public\n */\n\nis.le = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value <= other;\n};\n\n/**\n * is.lt\n * Test if `value` is less than `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean} if `value` is less than `other`\n * @api public\n */\n\nis.lt = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value < other;\n};\n\n/**\n * is.within\n * Test if `value` is within `start` and `finish`.\n *\n * @param {Number} value value to test\n * @param {Number} start lower bound\n * @param {Number} finish upper bound\n * @return {Boolean} true if 'value' is is within 'start' and 'finish'\n * @api public\n */\nis.within = function (value, start, finish) {\n if (isActualNaN(value) || isActualNaN(start) || isActualNaN(finish)) {\n throw new TypeError('NaN is not a valid value');\n } else if (!is.number(value) || !is.number(start) || !is.number(finish)) {\n throw new TypeError('all arguments must be numbers');\n }\n var isAnyInfinite = is.infinite(value) || is.infinite(start) || is.infinite(finish);\n return isAnyInfinite || (value >= start && value <= finish);\n};\n\n/**\n * Test object.\n */\n\n/**\n * is.object\n * Test if `value` is an object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an object, false otherwise\n * @api public\n */\nis.object = function (value) {\n return toStr.call(value) === '[object Object]';\n};\n\n/**\n * is.primitive\n * Test if `value` is a primitive.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a primitive, false otherwise\n * @api public\n */\nis.primitive = function isPrimitive(value) {\n if (!value) {\n return true;\n }\n if (typeof value === 'object' || is.object(value) || is.fn(value) || is.array(value)) {\n return false;\n }\n return true;\n};\n\n/**\n * is.hash\n * Test if `value` is a hash - a plain object literal.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a hash, false otherwise\n * @api public\n */\n\nis.hash = function (value) {\n return is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval;\n};\n\n/**\n * Test regexp.\n */\n\n/**\n * is.regexp\n * Test if `value` is a regular expression.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a regexp, false otherwise\n * @api public\n */\n\nis.regexp = function (value) {\n return toStr.call(value) === '[object RegExp]';\n};\n\n/**\n * Test string.\n */\n\n/**\n * is.string\n * Test if `value` is a string.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is a string, false otherwise\n * @api public\n */\n\nis.string = function (value) {\n return toStr.call(value) === '[object String]';\n};\n\n/**\n * Test base64 string.\n */\n\n/**\n * is.base64\n * Test if `value` is a valid base64 encoded string.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is a base64 encoded string, false otherwise\n * @api public\n */\n\nis.base64 = function (value) {\n return is.string(value) && (!value.length || base64Regex.test(value));\n};\n\n/**\n * Test base64 string.\n */\n\n/**\n * is.hex\n * Test if `value` is a valid hex encoded string.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is a hex encoded string, false otherwise\n * @api public\n */\n\nis.hex = function (value) {\n return is.string(value) && (!value.length || hexRegex.test(value));\n};\n\n/**\n * is.symbol\n * Test if `value` is an ES6 Symbol\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a Symbol, false otherise\n * @api public\n */\n\nis.symbol = function (value) {\n return typeof Symbol === 'function' && toStr.call(value) === '[object Symbol]' && typeof symbolValueOf.call(value) === 'symbol';\n};\n\n/**\n * is.bigint\n * Test if `value` is an ES-proposed BigInt\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a BigInt, false otherise\n * @api public\n */\n\nis.bigint = function (value) {\n // eslint-disable-next-line valid-typeof\n return typeof BigInt === 'function' && toStr.call(value) === '[object BigInt]' && typeof bigIntValueOf.call(value) === 'bigint';\n};\n\nmodule.exports = is;\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message))\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","import logger from \"../../utils/logUtil\";\nimport md5 from \"md5\";\n\nclass INTERCOM {\n constructor(config) {\n this.NAME = \"INTERCOM\";\n this.API_KEY = config.apiKey;\n this.APP_ID = config.appId;\n this.MOBILE_APP_ID = config.mobileAppId;\n logger.debug(\"Config \", config);\n }\n\n init() {\n window.intercomSettings = {\n app_id: this.APP_ID\n };\n\n (function() {\n var w = window;\n var ic = w.Intercom;\n if (typeof ic === \"function\") {\n ic(\"reattach_activator\");\n ic(\"update\", w.intercomSettings);\n } else {\n var d = document;\n var i = function() {\n i.c(arguments);\n };\n i.q = [];\n i.c = function(args) {\n i.q.push(args);\n };\n w.Intercom = i;\n var l = function() {\n var s = d.createElement(\"script\");\n s.type = \"text/javascript\";\n s.async = true;\n s.src =\n \"https://widget.intercom.io/widget/\" +\n window.intercomSettings.app_id;\n var x = d.getElementsByTagName(\"script\")[0];\n x.parentNode.insertBefore(s, x);\n };\n if (document.readyState === \"complete\") {\n l();\n window.intercom_code = true;\n } else if (w.attachEvent) {\n w.attachEvent(\"onload\", l);\n window.intercom_code = true;\n } else {\n w.addEventListener(\"load\", l, false);\n window.intercom_code = true;\n }\n }\n })();\n }\n\n page() {\n // Get new messages of the current user\n window.Intercom(\"update\");\n }\n\n identify(rudderElement) {\n let rawPayload = {};\n const context = rudderElement.message.context;\n\n const identityVerificationProps = context.Intercom\n ? context.Intercom\n : null;\n if (identityVerificationProps != null) {\n // user hash\n const userHash = context.Intercom.user_hash\n ? context.Intercom.user_hash\n : null;\n\n if (userHash != null) {\n rawPayload.user_hash = userHash;\n }\n\n // hide default launcher\n const hideDefaultLauncher = context.Intercom.hideDefaultLauncher\n ? context.Intercom.hideDefaultLauncher\n : null;\n\n if (hideDefaultLauncher != null) {\n rawPayload.hide_default_launcher = hideDefaultLauncher;\n }\n }\n\n // map rudderPayload to desired\n Object.keys(context.traits).forEach(field => {\n if (context.traits.hasOwnProperty(field)) {\n const value = context.traits[field];\n\n if (field === \"company\") {\n let companies = [];\n let company = {};\n // special handling string\n if (typeof context.traits[field] == \"string\") {\n company[\"company_id\"] = md5(context.traits[field]);\n }\n const companyFields =\n (typeof context.traits[field] == \"object\" &&\n Object.keys(context.traits[field])) ||\n [];\n companyFields.forEach(key => {\n if (companyFields.hasOwnProperty(key)) {\n if (key != \"id\") {\n company[key] = context.traits[field][key];\n } else {\n company[\"company_id\"] = context.traits[field][key];\n }\n }\n });\n\n if (\n typeof context.traits[field] == \"object\" &&\n !companyFields.includes(\"id\")\n ) {\n company[\"company_id\"] = md5(company.name);\n }\n\n companies.push(company);\n rawPayload.companies = companies;\n } else {\n rawPayload[field] = context.traits[field];\n }\n\n switch (field) {\n case \"createdAt\":\n rawPayload[\"created_at\"] = value;\n break;\n case \"anonymousId\":\n rawPayload[\"user_id\"] = value;\n break;\n\n default:\n break;\n }\n }\n });\n rawPayload.user_id = rudderElement.message.userId;\n window.Intercom(\"update\", rawPayload);\n }\n\n track(rudderElement) {\n let rawPayload = {};\n const message = rudderElement.message;\n\n const properties = message.properties\n ? Object.keys(message.properties)\n : null;\n properties.forEach(property => {\n const value = message.properties[property];\n rawPayload[property] = value;\n });\n\n if (message.event) {\n rawPayload.event_name = message.event;\n }\n rawPayload.user_id = message.userId ? message.userId : message.anonymousId;\n rawPayload.created_at = Math.floor(\n new Date(message.originalTimestamp).getTime() / 1000\n );\n window.Intercom(\"trackEvent\", rawPayload.event_name, rawPayload);\n }\n\n isLoaded() {\n return !!window.intercom_code;\n }\n\n isReady() {\n return !!window.intercom_code;\n }\n}\n\nexport { INTERCOM };\n","import logger from \"../../utils/logUtil\";\nimport { ScriptLoader } from \"../ScriptLoader\";\nclass Keen {\n constructor(config) {\n this.projectID = config.projectID;\n this.writeKey = config.writeKey;\n this.ipAddon = config.ipAddon;\n this.uaAddon = config.uaAddon;\n this.urlAddon = config.urlAddon;\n this.referrerAddon = config.referrerAddon;\n this.client = null;\n this.name = \"KEEN\";\n }\n\n init() {\n logger.debug(\"===in init Keen===\");\n ScriptLoader(\n \"keen-integration\",\n \"https://cdn.jsdelivr.net/npm/keen-tracking@4\"\n );\n\n var check = setInterval(checkAndInitKeen.bind(this), 1000);\n function initKeen(object) {\n object.client = new window.KeenTracking({\n projectId: object.projectID,\n writeKey: object.writeKey\n });\n return object.client;\n }\n function checkAndInitKeen() {\n if (window.KeenTracking !== undefined && window.KeenTracking !== void 0) {\n this.client = initKeen(this);\n clearInterval(check);\n }\n }\n }\n\n identify(rudderElement) {\n logger.debug(\"in Keen identify\");\n let traits = rudderElement.message.context.traits;\n let userId = rudderElement.message.userId\n ? rudderElement.message.userId\n : rudderElement.message.anonymousId;\n let properties = rudderElement.message.properties\n ? Object.assign(properties, rudderElement.message.properties)\n : {};\n properties.user = {\n userId: userId,\n traits: traits\n };\n properties = this.getAddOn(properties);\n this.client.extendEvents(properties);\n }\n\n track(rudderElement) {\n logger.debug(\"in Keen track\");\n\n var event = rudderElement.message.event;\n var properties = rudderElement.message.properties;\n properties = this.getAddOn(properties);\n this.client.recordEvent(event, properties);\n }\n\n page(rudderElement) {\n logger.debug(\"in Keen page\");\n const pageName = rudderElement.message.name;\n const pageCategory = rudderElement.message.properties\n ? rudderElement.message.properties.category\n : undefined;\n var name = \"Loaded a Page\";\n if (pageName) {\n name = \"Viewed \" + pageName + \" page\";\n }\n if (pageCategory && pageName) {\n name = \"Viewed \" + pageCategory + \" \" + pageName + \" page\";\n }\n\n var properties = rudderElement.message.properties;\n properties = this.getAddOn(properties);\n this.client.recordEvent(name, properties);\n }\n\n isLoaded() {\n logger.debug(\"in Keen isLoaded\");\n return !!(this.client != null);\n }\n\n isReady() {\n return !!(this.client != null);\n }\n\n getAddOn(properties) {\n var addOns = [];\n if (this.ipAddon) {\n properties.ip_address = \"${keen.ip}\";\n addOns.push({\n name: \"keen:ip_to_geo\",\n input: {\n ip: \"ip_address\"\n },\n output: \"ip_geo_info\"\n });\n }\n if (this.uaAddon) {\n properties.user_agent = \"${keen.user_agent}\";\n addOns.push({\n name: \"keen:ua_parser\",\n input: {\n ua_string: \"user_agent\"\n },\n output: \"parsed_user_agent\"\n });\n }\n if (this.urlAddon) {\n properties.page_url = document.location.href;\n addOns.push({\n name: \"keen:url_parser\",\n input: {\n url: \"page_url\"\n },\n output: \"parsed_page_url\"\n });\n }\n if (this.referrerAddon) {\n properties.page_url = document.location.href;\n properties.referrer_url = document.referrer;\n addOns.push({\n name: \"keen:referrer_parser\",\n input: {\n referrer_url: \"referrer_url\",\n page_url: \"page_url\"\n },\n output: \"referrer_info\"\n });\n }\n properties.keen = {\n addons: addOns\n };\n return properties;\n }\n}\n\nexport { Keen };\n","\n/**\n * Module Dependencies\n */\n\nvar expr;\ntry {\n expr = require('props');\n} catch(e) {\n expr = require('component-props');\n}\n\n/**\n * Expose `toFunction()`.\n */\n\nmodule.exports = toFunction;\n\n/**\n * Convert `obj` to a `Function`.\n *\n * @param {Mixed} obj\n * @return {Function}\n * @api private\n */\n\nfunction toFunction(obj) {\n switch ({}.toString.call(obj)) {\n case '[object Object]':\n return objectToFunction(obj);\n case '[object Function]':\n return obj;\n case '[object String]':\n return stringToFunction(obj);\n case '[object RegExp]':\n return regexpToFunction(obj);\n default:\n return defaultToFunction(obj);\n }\n}\n\n/**\n * Default to strict equality.\n *\n * @param {Mixed} val\n * @return {Function}\n * @api private\n */\n\nfunction defaultToFunction(val) {\n return function(obj){\n return val === obj;\n };\n}\n\n/**\n * Convert `re` to a function.\n *\n * @param {RegExp} re\n * @return {Function}\n * @api private\n */\n\nfunction regexpToFunction(re) {\n return function(obj){\n return re.test(obj);\n };\n}\n\n/**\n * Convert property `str` to a function.\n *\n * @param {String} str\n * @return {Function}\n * @api private\n */\n\nfunction stringToFunction(str) {\n // immediate such as \"> 20\"\n if (/^ *\\W+/.test(str)) return new Function('_', 'return _ ' + str);\n\n // properties such as \"name.first\" or \"age > 18\" or \"age > 18 && age < 36\"\n return new Function('_', 'return ' + get(str));\n}\n\n/**\n * Convert `object` to a function.\n *\n * @param {Object} object\n * @return {Function}\n * @api private\n */\n\nfunction objectToFunction(obj) {\n var match = {};\n for (var key in obj) {\n match[key] = typeof obj[key] === 'string'\n ? defaultToFunction(obj[key])\n : toFunction(obj[key]);\n }\n return function(val){\n if (typeof val !== 'object') return false;\n for (var key in match) {\n if (!(key in val)) return false;\n if (!match[key](val[key])) return false;\n }\n return true;\n };\n}\n\n/**\n * Built the getter function. Supports getter style functions\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction get(str) {\n var props = expr(str);\n if (!props.length) return '_.' + str;\n\n var val, i, prop;\n for (i = 0; i < props.length; i++) {\n prop = props[i];\n val = '_.' + prop;\n val = \"('function' == typeof \" + val + \" ? \" + val + \"() : \" + val + \")\";\n\n // mimic negative lookbehind to avoid problems with nested properties\n str = stripNested(prop, str, val);\n }\n\n return str;\n}\n\n/**\n * Mimic negative lookbehind to avoid problems with nested properties.\n *\n * See: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript\n *\n * @param {String} prop\n * @param {String} str\n * @param {String} val\n * @return {String}\n * @api private\n */\n\nfunction stripNested (prop, str, val) {\n return str.replace(new RegExp('(\\\\.)?' + prop, 'g'), function($0, $1) {\n return $1 ? $0 : val;\n });\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Copy the properties of one or more `objects` onto a destination object. Input objects are iterated over\n * in left-to-right order, so duplicate properties on later objects will overwrite those from\n * erevious ones. Only enumerable and own properties of the input objects are copied onto the\n * resulting object.\n *\n * @name extend\n * @api public\n * @category Object\n * @param {Object} dest The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} `dest`, extended with the properties of all `sources`.\n * @example\n * var a = { a: 'a' };\n * var b = { b: 'b' };\n * var c = { c: 'c' };\n *\n * extend(a, b, c);\n * //=> { a: 'a', b: 'b', c: 'c' };\n */\nvar extend = function extend(dest /*, sources */) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n for (var i = 0; i < sources.length; i += 1) {\n for (var key in sources[i]) {\n if (has.call(sources[i], key)) {\n dest[key] = sources[i][key];\n }\n }\n }\n\n return dest;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = extend;\n","\nvar identity = function(_){ return _; };\n\n\n/**\n * Module exports, export\n */\n\nmodule.exports = multiple(find);\nmodule.exports.find = module.exports;\n\n\n/**\n * Export the replacement function, return the modified object\n */\n\nmodule.exports.replace = function (obj, key, val, options) {\n multiple(replace).call(this, obj, key, val, options);\n return obj;\n};\n\n\n/**\n * Export the delete function, return the modified object\n */\n\nmodule.exports.del = function (obj, key, options) {\n multiple(del).call(this, obj, key, null, options);\n return obj;\n};\n\n\n/**\n * Compose applying the function to a nested key\n */\n\nfunction multiple (fn) {\n return function (obj, path, val, options) {\n normalize = options && isFunction(options.normalizer) ? options.normalizer : defaultNormalize;\n path = normalize(path);\n\n var key;\n var finished = false;\n\n while (!finished) loop();\n\n function loop() {\n for (key in obj) {\n var normalizedKey = normalize(key);\n if (0 === path.indexOf(normalizedKey)) {\n var temp = path.substr(normalizedKey.length);\n if (temp.charAt(0) === '.' || temp.length === 0) {\n path = temp.substr(1);\n var child = obj[key];\n\n // we're at the end and there is nothing.\n if (null == child) {\n finished = true;\n return;\n }\n\n // we're at the end and there is something.\n if (!path.length) {\n finished = true;\n return;\n }\n\n // step into child\n obj = child;\n\n // but we're done here\n return;\n }\n }\n }\n\n key = undefined;\n // if we found no matching properties\n // on the current object, there's no match.\n finished = true;\n }\n\n if (!key) return;\n if (null == obj) return obj;\n\n // the `obj` and `key` is one above the leaf object and key, so\n // start object: { a: { 'b.c': 10 } }\n // end object: { 'b.c': 10 }\n // end key: 'b.c'\n // this way, you can do `obj[key]` and get `10`.\n return fn(obj, key, val);\n };\n}\n\n\n/**\n * Find an object by its key\n *\n * find({ first_name : 'Calvin' }, 'firstName')\n */\n\nfunction find (obj, key) {\n if (obj.hasOwnProperty(key)) return obj[key];\n}\n\n\n/**\n * Delete a value for a given key\n *\n * del({ a : 'b', x : 'y' }, 'X' }) -> { a : 'b' }\n */\n\nfunction del (obj, key) {\n if (obj.hasOwnProperty(key)) delete obj[key];\n return obj;\n}\n\n\n/**\n * Replace an objects existing value with a new one\n *\n * replace({ a : 'b' }, 'a', 'c') -> { a : 'c' }\n */\n\nfunction replace (obj, key, val) {\n if (obj.hasOwnProperty(key)) obj[key] = val;\n return obj;\n}\n\n/**\n * Normalize a `dot.separated.path`.\n *\n * A.HELL(!*&#(!)O_WOR LD.bar => ahelloworldbar\n *\n * @param {String} path\n * @return {String}\n */\n\nfunction defaultNormalize(path) {\n return path.replace(/[^a-zA-Z0-9\\.]+/g, '').toLowerCase();\n}\n\n/**\n * Check if a value is a function.\n *\n * @param {*} val\n * @return {boolean} Returns `true` if `val` is a function, otherwise `false`.\n */\n\nfunction isFunction(val) {\n return typeof val === 'function';\n}\n","\n/**\n * toString ref.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n *\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nmodule.exports = function(val){\n switch (toString.call(val)) {\n case '[object Function]': return 'function';\n case '[object Date]': return 'date';\n case '[object RegExp]': return 'regexp';\n case '[object Arguments]': return 'arguments';\n case '[object Array]': return 'array';\n case '[object String]': return 'string';\n }\n\n if (val === null) return 'null';\n if (val === undefined) return 'undefined';\n if (val && val.nodeType === 1) return 'element';\n if (val === Object(val)) return 'object';\n\n return typeof val;\n};\n","/**\n * Global Names\n */\n\nvar globals = /\\b(Array|Date|Object|Math|JSON)\\b/g;\n\n/**\n * Return immediate identifiers parsed from `str`.\n *\n * @param {String} str\n * @param {String|Function} map function or prefix\n * @return {Array}\n * @api public\n */\n\nmodule.exports = function(str, fn){\n var p = unique(props(str));\n if (fn && 'string' == typeof fn) fn = prefixed(fn);\n if (fn) return map(str, p, fn);\n return p;\n};\n\n/**\n * Return immediate identifiers in `str`.\n *\n * @param {String} str\n * @return {Array}\n * @api private\n */\n\nfunction props(str) {\n return str\n .replace(/\\.\\w+|\\w+ *\\(|\"[^\"]*\"|'[^']*'|\\/([^/]+)\\//g, '')\n .replace(globals, '')\n .match(/[a-zA-Z_]\\w*/g)\n || [];\n}\n\n/**\n * Return `str` with `props` mapped with `fn`.\n *\n * @param {String} str\n * @param {Array} props\n * @param {Function} fn\n * @return {String}\n * @api private\n */\n\nfunction map(str, props, fn) {\n var re = /\\.\\w+|\\w+ *\\(|\"[^\"]*\"|'[^']*'|\\/([^/]+)\\/|[a-zA-Z_]\\w*/g;\n return str.replace(re, function(_){\n if ('(' == _[_.length - 1]) return fn(_);\n if (!~props.indexOf(_)) return _;\n return fn(_);\n });\n}\n\n/**\n * Return unique array.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nfunction unique(arr) {\n var ret = [];\n\n for (var i = 0; i < arr.length; i++) {\n if (~ret.indexOf(arr[i])) continue;\n ret.push(arr[i]);\n }\n\n return ret;\n}\n\n/**\n * Map with prefix `str`.\n */\n\nfunction prefixed(str) {\n return function(_){\n return str + _;\n };\n}\n","\n/**\n * Module dependencies.\n */\n\ntry {\n var type = require('type');\n} catch (err) {\n var type = require('component-type');\n}\n\nvar toFunction = require('to-function');\n\n/**\n * HOP reference.\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Iterate the given `obj` and invoke `fn(val, i)`\n * in optional context `ctx`.\n *\n * @param {String|Array|Object} obj\n * @param {Function} fn\n * @param {Object} [ctx]\n * @api public\n */\n\nmodule.exports = function(obj, fn, ctx){\n fn = toFunction(fn);\n ctx = ctx || this;\n switch (type(obj)) {\n case 'array':\n return array(obj, fn, ctx);\n case 'object':\n if ('number' == typeof obj.length) return array(obj, fn, ctx);\n return object(obj, fn, ctx);\n case 'string':\n return string(obj, fn, ctx);\n }\n};\n\n/**\n * Iterate string chars.\n *\n * @param {String} obj\n * @param {Function} fn\n * @param {Object} ctx\n * @api private\n */\n\nfunction string(obj, fn, ctx) {\n for (var i = 0; i < obj.length; ++i) {\n fn.call(ctx, obj.charAt(i), i);\n }\n}\n\n/**\n * Iterate object keys.\n *\n * @param {Object} obj\n * @param {Function} fn\n * @param {Object} ctx\n * @api private\n */\n\nfunction object(obj, fn, ctx) {\n for (var key in obj) {\n if (has.call(obj, key)) {\n fn.call(ctx, key, obj[key]);\n }\n }\n}\n\n/**\n * Iterate array-ish.\n *\n * @param {Array|Object} obj\n * @param {Function} fn\n * @param {Object} ctx\n * @api private\n */\n\nfunction array(obj, fn, ctx) {\n for (var i = 0; i < obj.length; ++i) {\n fn.call(ctx, obj[i], i);\n }\n}\n","import logger from \"../../utils/logUtil\";\nimport { getRevenue } from \"../../utils/utils\";\nimport is from \"is\";\nimport extend from \"@ndhoule/extend\";\nimport { del } from \"obj-case\";\nimport each from \"component-each\";\n\nclass Kissmetrics {\n constructor(config) {\n this.apiKey = config.apiKey;\n this.prefixProperties = config.prefixProperties;\n this.name = \"KISSMETRICS\";\n }\n\n init() {\n logger.debug(\"===in init Kissmetrics===\");\n window._kmq = window._kmq || [];\n\n var _kmk = window._kmk || this.apiKey;\n function _kms(u) {\n setTimeout(function() {\n var d = document,\n f = d.getElementsByTagName(\"script\")[0],\n s = d.createElement(\"script\");\n s.type = \"text/javascript\";\n s.async = true;\n s.src = u;\n f.parentNode.insertBefore(s, f);\n }, 1);\n }\n _kms(\"//i.kissmetrics.com/i.js\");\n _kms(\"//scripts.kissmetrics.com/\" + _kmk + \".2.js\");\n\n if (this.isEnvMobile()) {\n window._kmq.push([\"set\", { \"Mobile Session\": \"Yes\" }]);\n }\n }\n\n isEnvMobile() {\n return (\n navigator.userAgent.match(/Android/i) ||\n navigator.userAgent.match(/BlackBerry/i) ||\n navigator.userAgent.match(/IEMobile/i) ||\n navigator.userAgent.match(/Opera Mini/i) ||\n navigator.userAgent.match(/iPad/i) ||\n navigator.userAgent.match(/iPhone|iPod/i)\n );\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n toUnixTimestamp(date) {\n date = new Date(date);\n return Math.floor(date.getTime() / 1000);\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n clean(obj) {\n var ret = {};\n\n for (var k in obj) {\n if (obj.hasOwnProperty(k)) {\n var value = obj[k];\n if (value === null || typeof value === \"undefined\") continue;\n\n // convert date to unix\n if (is.date(value)) {\n ret[k] = this.toUnixTimestamp(value);\n continue;\n }\n\n // leave boolean as is\n if (is.bool(value)) {\n ret[k] = value;\n continue;\n }\n\n // leave numbers as is\n if (is.number(value)) {\n ret[k] = value;\n continue;\n }\n\n // convert non objects to strings\n logger.debug(value.toString());\n if (value.toString() !== \"[object Object]\") {\n ret[k] = value.toString();\n continue;\n }\n\n // json\n // must flatten including the name of the original trait/property\n var nestedObj = {};\n nestedObj[k] = value;\n var flattenedObj = this.flatten(nestedObj, { safe: true });\n\n // stringify arrays inside nested object to be consistent with top level behavior of arrays\n for (var key in flattenedObj) {\n if (is.array(flattenedObj[key])) {\n flattenedObj[key] = flattenedObj[key].toString();\n }\n }\n\n ret = extend(ret, flattenedObj);\n delete ret[k];\n }\n }\n return ret;\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n flatten(target, opts) {\n opts = opts || {};\n\n var delimiter = opts.delimiter || \".\";\n var maxDepth = opts.maxDepth;\n var currentDepth = 1;\n var output = {};\n\n function step(object, prev) {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n var value = object[key];\n var isarray = opts.safe && is.array(value);\n var type = Object.prototype.toString.call(value);\n var isobject =\n type === \"[object Object]\" || type === \"[object Array]\";\n var arr = [];\n\n var newKey = prev ? prev + delimiter + key : key;\n\n if (!opts.maxDepth) {\n maxDepth = currentDepth + 1;\n }\n\n for (var keys in value) {\n if (value.hasOwnProperty(keys)) {\n arr.push(keys);\n }\n }\n\n if (!isarray && isobject && arr.length && currentDepth < maxDepth) {\n ++currentDepth;\n return step(value, newKey);\n }\n\n output[newKey] = value;\n }\n }\n }\n\n step(target);\n\n return output;\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n prefix(event, properties) {\n var prefixed = {};\n each(properties, function(key, val) {\n if (key === \"Billing Amount\") {\n prefixed[key] = val;\n } else if (key === \"revenue\") {\n prefixed[event + \" - \" + key] = val;\n prefixed[\"Billing Amount\"] = val;\n } else {\n prefixed[event + \" - \" + key] = val;\n }\n });\n return prefixed;\n }\n\n identify(rudderElement) {\n logger.debug(\"in Kissmetrics identify\");\n let traits = this.clean(rudderElement.message.context.traits);\n let userId =\n rudderElement.message.userId && rudderElement.message.userId != \"\"\n ? rudderElement.message.userId\n : undefined;\n\n if (userId) {\n window._kmq.push([\"identify\", userId]);\n }\n if (traits) {\n window._kmq.push([\"set\", traits]);\n }\n }\n\n track(rudderElement) {\n logger.debug(\"in Kissmetrics track\");\n\n let event = rudderElement.message.event;\n let properties = JSON.parse(\n JSON.stringify(rudderElement.message.properties)\n );\n let timestamp = this.toUnixTimestamp(new Date());\n\n let revenue = getRevenue(properties);\n if (revenue) {\n properties.revenue = revenue;\n }\n\n let products = properties.products;\n if (products) {\n delete properties.products;\n }\n\n properties = this.clean(properties);\n logger.debug(JSON.stringify(properties));\n\n if (this.prefixProperties) {\n properties = this.prefix(event, properties);\n }\n window._kmq.push([\"record\", event, properties]);\n\n let iterator = function pushItem(product, i) {\n let item = product;\n if (this.prefixProperties) item = this.prefix(event, item);\n item._t = timestamp + i;\n item._d = 1;\n window.KM.set(item);\n }.bind(this);\n\n if (products) {\n window._kmq.push(() => {\n each(products, iterator);\n });\n }\n }\n\n page(rudderElement) {\n logger.debug(\"in Kissmetrics page\");\n const pageName = rudderElement.message.name;\n const pageCategory = rudderElement.message.properties\n ? rudderElement.message.properties.category\n : undefined;\n var name = \"Loaded a Page\";\n if (pageName) {\n name = \"Viewed \" + pageName + \" page\";\n }\n if (pageCategory && pageName) {\n name = \"Viewed \" + pageCategory + \" \" + pageName + \" page\";\n }\n\n var properties = rudderElement.message.properties;\n if (this.prefixProperties) {\n properties = this.prefix(\"Page\", properties);\n }\n\n window._kmq.push([\"record\", name, properties]);\n }\n\n alias(rudderElement) {\n var prev = rudderElement.message.previousId;\n var userId = rudderElement.message.userId;\n window._kmq.push([\"alias\", userId, prev]);\n }\n\n group(rudderElement) {\n let groupId = rudderElement.message.groupId;\n let groupTraits = rudderElement.message.traits;\n groupTraits = this.prefix(\"Group\", groupTraits);\n if(groupId){\n groupTraits[\"Group - id\"] = groupId;\n }\n window._kmq.push([\"set\", groupTraits]);\n logger.debug(\"in Kissmetrics group\");\n }\n\n isLoaded() {\n return is.object(window.KM);\n }\n\n isReady() {\n return is.object(window.KM);\n }\n}\n\nexport { Kissmetrics };\n","import logger from \"../../utils/logUtil\";\nclass CustomerIO {\n constructor(config) {\n this.siteID = config.siteID;\n this.apiKey = config.apiKey;\n\n this.name = \"CUSTOMERIO\";\n }\n\n init() {\n logger.debug(\"===in init Customer IO init===\");\n window._cio = window._cio || [];\n let siteID = this.siteID;\n (function() {\n var a, b, c;\n a = function(f) {\n return function() {\n window._cio.push(\n [f].concat(Array.prototype.slice.call(arguments, 0))\n );\n };\n };\n b = [\"load\", \"identify\", \"sidentify\", \"track\", \"page\"];\n for (c = 0; c < b.length; c++) {\n window._cio[b[c]] = a(b[c]);\n }\n var t = document.createElement(\"script\"),\n s = document.getElementsByTagName(\"script\")[0];\n t.async = true;\n t.id = \"cio-tracker\";\n t.setAttribute(\"data-site-id\", siteID);\n t.src = \"https://assets.customer.io/assets/track.js\";\n s.parentNode.insertBefore(t, s);\n })();\n }\n\n identify(rudderElement) {\n logger.debug(\"in Customer IO identify\");\n let userId = rudderElement.message.userId\n ? rudderElement.message.userId\n : rudderElement.message.anonymousId;\n let traits = rudderElement.message.context.traits\n ? rudderElement.message.context.traits\n : {};\n if (!traits.created_at) {\n traits.created_at = Math.floor(new Date().getTime() / 1000);\n }\n traits.id = userId;\n window._cio.identify(traits);\n }\n\n track(rudderElement) {\n logger.debug(\"in Customer IO track\");\n\n let eventName = rudderElement.message.event;\n let properties = rudderElement.message.properties;\n window._cio.track(eventName, properties);\n }\n\n page(rudderElement) {\n logger.debug(\"in Customer IO page\");\n\n var name =\n rudderElement.message.name || rudderElement.message.properties.url;\n window._cio.page(name, rudderElement.message.properties);\n }\n\n isLoaded() {\n return !!(window._cio && window._cio.push !== Array.prototype.push);\n }\n\n isReady() {\n return !!(window._cio && window._cio.push !== Array.prototype.push);\n }\n}\n\nexport { CustomerIO };\n","var each = require('each');\n\n\n/**\n * Cache whether `` exists.\n */\n\nvar body = false;\n\n\n/**\n * Callbacks to call when the body exists.\n */\n\nvar callbacks = [];\n\n\n/**\n * Export a way to add handlers to be invoked once the body exists.\n *\n * @param {Function} callback A function to call when the body exists.\n */\n\nmodule.exports = function onBody (callback) {\n if (body) {\n call(callback);\n } else {\n callbacks.push(callback);\n }\n};\n\n\n/**\n * Set an interval to check for `document.body`.\n */\n\nvar interval = setInterval(function () {\n if (!document.body) return;\n body = true;\n each(callbacks, call);\n clearInterval(interval);\n}, 5);\n\n\n/**\n * Call a callback, passing it the body.\n *\n * @param {Function} callback The callback to call.\n */\n\nfunction call (callback) {\n callback(document.body);\n}","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","import logger from \"../../utils/logUtil\";\nimport onBody from \"on-body\";\nimport {\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL\n} from \"../../utils/constants\";\n\nclass Chartbeat {\n constructor(config, analytics) {\n this.analytics = analytics; // use this to modify failed integrations or for passing events from callback to other destinations\n this._sf_async_config = window._sf_async_config =\n window._sf_async_config || {};\n window._sf_async_config.useCanonical = true;\n window._sf_async_config.uid = config.uid;\n window._sf_async_config.domain = config.domain;\n this.isVideo = config.video ? true : false;\n this.sendNameAndCategoryAsTitle = config.sendNameAndCategoryAsTitle || true;\n this.subscriberEngagementKeys = config.subscriberEngagementKeys || [];\n this.replayEvents = [];\n this.failed = false;\n this.isFirstPageCallMade = false;\n this.name = \"CHARTBEAT\";\n }\n\n init() {\n logger.debug(\"===in init Chartbeat===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"in Chartbeat identify\");\n }\n\n track(rudderElement) {\n logger.debug(\"in Chartbeat track\");\n }\n\n page(rudderElement) {\n logger.debug(\"in Chartbeat page\");\n this.loadConfig(rudderElement);\n\n if (!this.isFirstPageCallMade) {\n this.isFirstPageCallMade = true;\n this.initAfterPage();\n } else {\n if (this.failed) {\n logger.debug(\"===ignoring cause failed integration===\");\n this.replayEvents = [];\n return;\n }\n if (!this.isLoaded() && !this.failed) {\n logger.debug(\"===pushing to replay queue for chartbeat===\");\n this.replayEvents.push([\"page\", rudderElement]);\n return;\n }\n logger.debug(\"===processing page event in chartbeat===\");\n let properties = rudderElement.message.properties;\n window.pSUPERFLY.virtualPage(properties.path);\n }\n }\n\n isLoaded() {\n logger.debug(\"in Chartbeat isLoaded\");\n if (!this.isFirstPageCallMade) {\n return true;\n } else {\n return !!window.pSUPERFLY;\n }\n }\n\n isFailed() {\n return this.failed;\n }\n\n isReady() {\n return !!window.pSUPERFLY;\n }\n\n loadConfig(rudderElement) {\n let properties = rudderElement.message.properties;\n let category = properties ? properties.category : undefined;\n let name = rudderElement.message.name;\n let author = properties ? properties.author : undefined;\n let title;\n if (this.sendNameAndCategoryAsTitle) {\n title = category && name ? category + \" \" + name : name;\n }\n if (category) window._sf_async_config.sections = category;\n if (author) window._sf_async_config.authors = author;\n if (title) window._sf_async_config.title = title;\n\n var _cbq = (window._cbq = window._cbq || []);\n\n for (var key in properties) {\n if (!properties.hasOwnProperty(key)) continue;\n if (this.subscriberEngagementKeys.indexOf(key) > -1) {\n _cbq.push([key, properties[key]]);\n }\n }\n }\n\n initAfterPage() {\n onBody(() => {\n var script = this.isVideo ? \"chartbeat_video.js\" : \"chartbeat.js\";\n function loadChartbeat() {\n var e = document.createElement(\"script\");\n var n = document.getElementsByTagName(\"script\")[0];\n e.type = \"text/javascript\";\n e.async = true;\n e.src = \"//static.chartbeat.com/js/\" + script;\n n.parentNode.insertBefore(e, n);\n }\n loadChartbeat();\n });\n\n this._isReady(this).then(instance => {\n logger.debug(\"===replaying on chartbeat===\");\n instance.replayEvents.forEach(event => {\n instance[event[0]](event[1]);\n });\n });\n }\n\n pause(time) {\n return new Promise(resolve => {\n setTimeout(resolve, time);\n });\n }\n\n _isReady(instance, time = 0) {\n return new Promise(resolve => {\n if (this.isLoaded()) {\n this.failed = false;\n logger.debug(\"===chartbeat loaded successfully===\");\n instance.analytics.emit(\"ready\");\n return resolve(instance);\n }\n if (time >= MAX_WAIT_FOR_INTEGRATION_LOAD) {\n this.failed = true;\n logger.debug(\"===chartbeat failed===\");\n return resolve(instance);\n }\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() => {\n return this._isReady(\n instance,\n time + INTEGRATION_LOAD_CHECK_INTERVAL\n ).then(resolve);\n });\n });\n }\n}\n\nexport { Chartbeat };\n","import logger from \"../../utils/logUtil\";\nimport {\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL\n} from \"../../utils/constants\";\nclass Comscore {\n constructor(config, analytics) {\n this.c2ID = config.c2ID;\n this.analytics = analytics;\n this.comScoreBeaconParam = config.comScoreBeaconParam\n ? config.comScoreBeaconParam\n : {};\n this.isFirstPageCallMade = false;\n this.failed = false;\n this.comScoreParams = {};\n this.replayEvents = [];\n this.name = \"COMSCORE\";\n }\n\n init() {\n logger.debug(\"===in init Comscore init===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"in Comscore identify\");\n }\n\n track(rudderElement) {\n logger.debug(\"in Comscore track\");\n }\n\n page(rudderElement) {\n logger.debug(\"in Comscore page\");\n\n this.loadConfig(rudderElement);\n\n if (!this.isFirstPageCallMade) {\n this.isFirstPageCallMade = true;\n this.initAfterPage();\n } else {\n if (this.failed) {\n this.replayEvents = [];\n return;\n }\n if (!this.isLoaded() && !this.failed) {\n this.replayEvents.push([\"page\", rudderElement]);\n return;\n }\n let properties = rudderElement.message.properties;\n //window.COMSCORE.beacon({c1:\"2\", c2: \"\"});\n //this.comScoreParams = this.mapComscoreParams(properties);\n window.COMSCORE.beacon(this.comScoreParams);\n }\n }\n\n loadConfig(rudderElement) {\n logger.debug(\"=====in loadConfig=====\");\n this.comScoreParams = this.mapComscoreParams(\n rudderElement.message.properties\n );\n window._comscore = window._comscore || [];\n window._comscore.push(this.comScoreParams);\n }\n\n initAfterPage() {\n logger.debug(\"=====in initAfterPage=====\");\n (function() {\n var s = document.createElement(\"script\"),\n el = document.getElementsByTagName(\"script\")[0];\n s.async = true;\n s.src =\n (document.location.protocol == \"https:\" ? \"https://sb\" : \"http://b\") +\n \".scorecardresearch.com/beacon.js\";\n el.parentNode.insertBefore(s, el);\n })();\n\n this._isReady(this).then(instance => {\n instance.replayEvents.forEach(event => {\n instance[event[0]](event[1]);\n });\n });\n }\n\n pause(time) {\n return new Promise(resolve => {\n setTimeout(resolve, time);\n });\n }\n\n _isReady(instance, time = 0) {\n return new Promise(resolve => {\n if (this.isLoaded()) {\n this.failed = false;\n instance.analytics.emit(\"ready\");\n return resolve(instance);\n }\n if (time >= MAX_WAIT_FOR_INTEGRATION_LOAD) {\n this.failed = true;\n return resolve(instance);\n }\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() => {\n return this._isReady(\n instance,\n time + INTEGRATION_LOAD_CHECK_INTERVAL\n ).then(resolve);\n });\n });\n }\n\n mapComscoreParams(properties) {\n logger.debug(\"=====in mapComscoreParams=====\");\n let comScoreBeaconParamsMap = this.comScoreBeaconParam;\n\n var comScoreParams = {};\n\n Object.keys(comScoreBeaconParamsMap).forEach(function(property) {\n if (property in properties) {\n var key = comScoreBeaconParamsMap[property];\n var value = properties[property];\n comScoreParams[key] = value;\n }\n });\n\n comScoreParams.c1 = \"2\";\n comScoreParams.c2 = this.c2ID;\n /* if (this.options.comscorekw.length) {\n comScoreParams.comscorekw = this.options.comscorekw;\n } */\n logger.debug(\"=====in mapComscoreParams=====\", comScoreParams);\n return comScoreParams;\n }\n\n isLoaded() {\n logger.debug(\"in Comscore isLoaded\");\n if (!this.isFirstPageCallMade) {\n return true;\n } else {\n return !!window.COMSCORE;\n }\n }\n\n isReady() {\n return !!window.COMSCORE;\n }\n}\n\nexport { Comscore };\n","'use strict';\n\nvar hop = Object.prototype.hasOwnProperty;\nvar strCharAt = String.prototype.charAt;\nvar toStr = Object.prototype.toString;\n\n/**\n * Returns the character at a given index.\n *\n * @param {string} str\n * @param {number} index\n * @return {string|undefined}\n */\n// TODO: Move to a library\nvar charAt = function(str, index) {\n return strCharAt.call(str, index);\n};\n\n/**\n * hasOwnProperty, wrapped as a function.\n *\n * @name has\n * @api private\n * @param {*} context\n * @param {string|number} prop\n * @return {boolean}\n */\n\n// TODO: Move to a library\nvar has = function has(context, prop) {\n return hop.call(context, prop);\n};\n\n/**\n * Returns true if a value is a string, otherwise false.\n *\n * @name isString\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n\n// TODO: Move to a library\nvar isString = function isString(val) {\n return toStr.call(val) === '[object String]';\n};\n\n/**\n * Returns true if a value is array-like, otherwise false. Array-like means a\n * value is not null, undefined, or a function, and has a numeric `length`\n * property.\n *\n * @name isArrayLike\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isArrayLike = function isArrayLike(val) {\n return val != null && (typeof val !== 'function' && typeof val.length === 'number');\n};\n\n\n/**\n * indexKeys\n *\n * @name indexKeys\n * @api private\n * @param {} target\n * @param {Function} pred\n * @return {Array}\n */\nvar indexKeys = function indexKeys(target, pred) {\n pred = pred || has;\n\n var results = [];\n\n for (var i = 0, len = target.length; i < len; i += 1) {\n if (pred(target, i)) {\n results.push(String(i));\n }\n }\n\n return results;\n};\n\n/**\n * Returns an array of an object's owned keys.\n *\n * @name objectKeys\n * @api private\n * @param {*} target\n * @param {Function} pred Predicate function used to include/exclude values from\n * the resulting array.\n * @return {Array}\n */\nvar objectKeys = function objectKeys(target, pred) {\n pred = pred || has;\n\n var results = [];\n\n for (var key in target) {\n if (pred(target, key)) {\n results.push(String(key));\n }\n }\n\n return results;\n};\n\n/**\n * Creates an array composed of all keys on the input object. Ignores any non-enumerable properties.\n * More permissive than the native `Object.keys` function (non-objects will not throw errors).\n *\n * @name keys\n * @api public\n * @category Object\n * @param {Object} source The value to retrieve keys from.\n * @return {Array} An array containing all the input `source`'s keys.\n * @example\n * keys({ likes: 'avocado', hates: 'pineapple' });\n * //=> ['likes', 'pineapple'];\n *\n * // Ignores non-enumerable properties\n * var hasHiddenKey = { name: 'Tim' };\n * Object.defineProperty(hasHiddenKey, 'hidden', {\n * value: 'i am not enumerable!',\n * enumerable: false\n * })\n * keys(hasHiddenKey);\n * //=> ['name'];\n *\n * // Works on arrays\n * keys(['a', 'b', 'c']);\n * //=> ['0', '1', '2']\n *\n * // Skips unpopulated indices in sparse arrays\n * var arr = [1];\n * arr[4] = 4;\n * keys(arr);\n * //=> ['0', '4']\n */\nvar keys = function keys(source) {\n if (source == null) {\n return [];\n }\n\n // IE6-8 compatibility (string)\n if (isString(source)) {\n return indexKeys(source, charAt);\n }\n\n // IE6-8 compatibility (arguments)\n if (isArrayLike(source)) {\n return indexKeys(source, has);\n }\n\n return objectKeys(source);\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = keys;\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar keys = require('@ndhoule/keys');\n\nvar objToString = Object.prototype.toString;\n\n/**\n * Tests if a value is a number.\n *\n * @name isNumber\n * @api private\n * @param {*} val The value to test.\n * @return {boolean} Returns `true` if `val` is a number, otherwise `false`.\n */\n// TODO: Move to library\nvar isNumber = function isNumber(val) {\n var type = typeof val;\n return type === 'number' || (type === 'object' && objToString.call(val) === '[object Number]');\n};\n\n/**\n * Tests if a value is an array.\n *\n * @name isArray\n * @api private\n * @param {*} val The value to test.\n * @return {boolean} Returns `true` if the value is an array, otherwise `false`.\n */\n// TODO: Move to library\nvar isArray = typeof Array.isArray === 'function' ? Array.isArray : function isArray(val) {\n return objToString.call(val) === '[object Array]';\n};\n\n/**\n * Tests if a value is array-like. Array-like means the value is not a function and has a numeric\n * `.length` property.\n *\n * @name isArrayLike\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n// TODO: Move to library\nvar isArrayLike = function isArrayLike(val) {\n return val != null && (isArray(val) || (val !== 'function' && isNumber(val.length)));\n};\n\n/**\n * Internal implementation of `each`. Works on arrays and array-like data structures.\n *\n * @name arrayEach\n * @api private\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Array} array The array(-like) structure to iterate over.\n * @return {undefined}\n */\nvar arrayEach = function arrayEach(iterator, array) {\n for (var i = 0; i < array.length; i += 1) {\n // Break iteration early if `iterator` returns `false`\n if (iterator(array[i], i, array) === false) {\n break;\n }\n }\n};\n\n/**\n * Internal implementation of `each`. Works on objects.\n *\n * @name baseEach\n * @api private\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Object} object The object to iterate over.\n * @return {undefined}\n */\nvar baseEach = function baseEach(iterator, object) {\n var ks = keys(object);\n\n for (var i = 0; i < ks.length; i += 1) {\n // Break iteration early if `iterator` returns `false`\n if (iterator(object[ks[i]], ks[i], object) === false) {\n break;\n }\n }\n};\n\n/**\n * Iterate over an input collection, invoking an `iterator` function for each element in the\n * collection and passing to it three arguments: `(value, index, collection)`. The `iterator`\n * function can end iteration early by returning `false`.\n *\n * @name each\n * @api public\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Array|Object|string} collection The collection to iterate over.\n * @return {undefined} Because `each` is run only for side effects, always returns `undefined`.\n * @example\n * var log = console.log.bind(console);\n *\n * each(log, ['a', 'b', 'c']);\n * //-> 'a', 0, ['a', 'b', 'c']\n * //-> 'b', 1, ['a', 'b', 'c']\n * //-> 'c', 2, ['a', 'b', 'c']\n * //=> undefined\n *\n * each(log, 'tim');\n * //-> 't', 2, 'tim'\n * //-> 'i', 1, 'tim'\n * //-> 'm', 0, 'tim'\n * //=> undefined\n *\n * // Note: Iteration order not guaranteed across environments\n * each(log, { name: 'tim', occupation: 'enchanter' });\n * //-> 'tim', 'name', { name: 'tim', occupation: 'enchanter' }\n * //-> 'enchanter', 'occupation', { name: 'tim', occupation: 'enchanter' }\n * //=> undefined\n */\nvar each = function each(iterator, collection) {\n return (isArrayLike(collection) ? arrayEach : baseEach).call(this, iterator, collection);\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = each;\n","import { ScriptLoader } from \"../ScriptLoader\";\nimport logger from \"../../utils/logUtil\";\nimport is from \"is\";\nimport each from \"@ndhoule/each\";\n\nclass FBPixel {\n constructor(config) {\n this.blacklistPiiProperties = config.blacklistPiiProperties;\n this.categoryToContent = config.categoryToContent;\n this.pixelId = config.pixelId;\n this.eventsToEvents = config.eventsToEvents;\n this.eventCustomProperties = config.eventCustomProperties;\n this.valueFieldIdentifier = config.valueFieldIdentifier;\n this.advancedMapping = config.advancedMapping;\n this.traitKeyToExternalId = config.traitKeyToExternalId;\n this.legacyConversionPixelId = config.legacyConversionPixelId;\n this.userIdAsPixelId = config.userIdAsPixelId;\n this.whitelistPiiProperties = config.whitelistPiiProperties;\n this.name = \"FB_PIXEL\";\n }\n\n init() {\n if (this.categoryToContent === undefined) {\n this.categoryToContent = [];\n }\n if (this.legacyConversionPixelId === undefined) {\n this.legacyConversionPixelId = [];\n }\n if (this.userIdAsPixelId === undefined) {\n this.userIdAsPixelId = [];\n }\n\n logger.debug(\"===in init FbPixel===\");\n\n window._fbq = function () {\n if (window.fbq.callMethod) {\n window.fbq.callMethod.apply(window.fbq, arguments);\n } else {\n window.fbq.queue.push(arguments);\n }\n };\n\n window.fbq = window.fbq || window._fbq;\n window.fbq.push = window.fbq;\n window.fbq.loaded = true;\n window.fbq.disablePushState = true; // disables automatic pageview tracking\n window.fbq.allowDuplicatePageViews = true; // enables fb\n window.fbq.version = \"2.0\";\n window.fbq.queue = [];\n\n window.fbq(\"init\", this.pixelId);\n ScriptLoader(\n \"fbpixel-integration\",\n \"//connect.facebook.net/en_US/fbevents.js\"\n );\n }\n\n isLoaded() {\n logger.debug(\"in FBPixel isLoaded\");\n return !!(window.fbq && window.fbq.callMethod);\n }\n\n isReady() {\n logger.debug(\"in FBPixel isReady\");\n return !!(window.fbq && window.fbq.callMethod);\n }\n\n page(rudderElement) {\n window.fbq(\"track\", \"PageView\");\n }\n\n identify(rudderElement) {\n if (this.advancedMapping) {\n window.fbq(\"init\", this.pixelId, rudderElement.message.context.traits);\n }\n }\n\n track(rudderElement) {\n let self = this;\n var event = rudderElement.message.event;\n var revenue = this.formatRevenue(rudderElement.message.properties.revenue);\n var payload = this.buildPayLoad(rudderElement, true);\n\n if (this.categoryToContent === undefined) {\n this.categoryToContent = [];\n }\n if (this.legacyConversionPixelId === undefined) {\n this.legacyConversionPixelId = [];\n }\n if (this.userIdAsPixelId === undefined) {\n this.userIdAsPixelId = [];\n }\n\n payload.value = revenue;\n var standard = this.eventsToEvents;\n var legacy = this.legacyConversionPixelId;\n var standardTo;\n var legacyTo;\n\n standardTo = standard.reduce((filtered, standard) => {\n if (standard.from === event) {\n filtered.push(standard.to);\n }\n return filtered;\n }, []);\n\n legacyTo = legacy.reduce((filtered, legacy) => {\n if (legacy.from === event) {\n filtered.push(legacy.to);\n }\n return filtered;\n }, []);\n\n each((event) => {\n payload.currency = rudderElement.message.properties.currency || \"USD\";\n\n window.fbq(\"trackSingle\", self.pixelId, event, payload, {\n eventID: rudderElement.message.messageId,\n });\n }, standardTo);\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: revenue,\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n\n if (event === \"Product List Viewed\") {\n var contentType;\n var contentIds;\n var contents = [];\n var products = rudderElement.message.properties.products;\n var customProperties = this.buildPayLoad(rudderElement, true);\n\n if (Array.isArray(products)) {\n products.forEach(function (product) {\n var productId = product.product_id;\n if (productId) {\n contentIds.push(productId);\n contents.push({\n id: productId,\n quantity: rudderElement.message.properties.quantity,\n });\n }\n });\n }\n\n if (contentIds.length) {\n contentType = [\"product\"];\n } else {\n contentIds.push(rudderElement.message.properties.category || \"\");\n contents.push({\n id: rudderElement.message.properties.category || \"\",\n quantity: 1,\n });\n contentType = [\"product_group\"];\n }\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"ViewContent\",\n this.merge(\n {\n content_ids: contentIds,\n content_type: this.getContentType(rudderElement, contentType),\n contents: contents,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: this.formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Product Viewed\") {\n var useValue = this.valueFieldIdentifier === \"properties.value\";\n var customProperties = this.buildPayLoad(rudderElement, true);\n\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"ViewContent\",\n this.merge(\n {\n content_ids: [\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n ],\n content_type: this.getContentType(rudderElement, [\"product\"]),\n content_name: rudderElement.message.properties.product_name || \"\",\n content_category: rudderElement.message.properties.category || \"\",\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n contents: [\n {\n id:\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n },\n ],\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Product Added\") {\n var useValue = this.valueFieldIdentifier === \"properties.value\";\n var customProperties = this.buildPayLoad(rudderElement, true);\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"AddToCart\",\n this.merge(\n {\n content_ids: [\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n ],\n content_type: this.getContentType(rudderElement, [\"product\"]),\n\n content_name: rudderElement.message.properties.product_name || \"\",\n content_category: rudderElement.message.properties.category || \"\",\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n contents: [\n {\n id:\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n },\n ],\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n this.merge(\n {\n content_ids: [\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n ],\n content_type: this.getContentType(rudderElement, [\"product\"]),\n\n content_name: rudderElement.message.properties.product_name || \"\",\n content_category: rudderElement.message.properties.category || \"\",\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n contents: [\n {\n id:\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n },\n ],\n },\n customProperties\n );\n } else if (event === \"Order Completed\") {\n var products = rudderElement.message.properties.products;\n var customProperties = this.buildPayLoad(rudderElement, true);\n var revenue = this.formatRevenue(\n rudderElement.message.properties.revenue\n );\n\n var contentType = this.getContentType(rudderElement, [\"product\"]);\n var contentIds = [];\n var contents = [];\n\n for (var i = 0; i < products.length; i++) {\n var pId = product.product_id;\n contentIds.push(pId);\n var content = {\n id: pId,\n quantity: rudderElement.message.properties.quantity,\n };\n if (rudderElement.message.properties.price) {\n content.item_price = rudderElement.message.properties.price;\n }\n contents.push(content);\n }\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"Purchase\",\n this.merge(\n {\n content_ids: contentIds,\n content_type: contentType,\n currency: rudderElement.message.properties.currency,\n value: revenue,\n contents: contents,\n num_items: contentIds.length,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: this.formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Products Searched\") {\n var customProperties = this.buildPayLoad(rudderElement, true);\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"Search\",\n this.merge(\n {\n search_string: rudderElement.message.properties.query,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Checkout Started\") {\n var products = rudderElement.message.properties.products;\n var customProperties = this.buildPayLoad(rudderElement, true);\n var revenue = this.formatRevenue(\n rudderElement.message.properties.revenue\n );\n var contentCategory = rudderElement.message.properties.category;\n var contentIds = [];\n var contents = [];\n\n for (var i = 0; i < products.length; i++) {\n let product = products[i];\n var pId = product.product_id;\n contentIds.push(pId);\n var content = {\n id: pId,\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n };\n if (rudderElement.message.properties.price) {\n content.item_price = rudderElement.message.properties.price;\n }\n contents.push(content);\n }\n if (!contentCategory && products[0] && products[0].category) {\n contentCategory = products[0].category;\n }\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"InitiateCheckout\",\n this.merge(\n {\n content_category: contentCategory,\n content_ids: contentIds,\n content_type: this.getContentType(rudderElement, [\"product\"]),\n currency: rudderElement.message.properties.currency,\n value: revenue,\n contents: contents,\n num_items: contentIds.length,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: this.formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n }\n }\n\n getContentType(rudderElement, defaultValue) {\n var options = rudderElement.message.options;\n if (options && options.contentType) {\n return [options.contentType];\n }\n\n var category = rudderElement.message.properties.category;\n if (!category) {\n var products = rudderElement.message.properties.products;\n if (products && products.length) {\n category = products[0].category;\n }\n }\n if (category) {\n var mapped = this.categoryToContent;\n var mappedTo;\n mappedTo = mapped.reduce((filtered, mapped) => {\n if (mapped.from == category) {\n filtered.push(mapped.to);\n }\n return filtered;\n }, []);\n if (mappedTo.length) {\n return mappedTo;\n }\n }\n return defaultValue;\n }\n\n merge(obj1, obj2) {\n var res = {};\n\n // All properties of obj1\n for (var propObj1 in obj1) {\n if (obj1.hasOwnProperty(propObj1)) {\n res[propObj1] = obj1[propObj1];\n }\n }\n\n // Extra properties of obj2\n for (var propObj2 in obj2) {\n if (obj2.hasOwnProperty(propObj2) && !res.hasOwnProperty(propObj2)) {\n res[propObj2] = obj2[propObj2];\n }\n }\n\n return res;\n }\n\n formatRevenue(revenue) {\n return Number(revenue || 0).toFixed(2);\n }\n\n buildPayLoad(rudderElement, isStandardEvent) {\n var dateFields = [\n \"checkinDate\",\n \"checkoutDate\",\n \"departingArrivalDate\",\n \"departingDepartureDate\",\n \"returningArrivalDate\",\n \"returningDepartureDate\",\n \"travelEnd\",\n \"travelStart\",\n ];\n var defaultPiiProperties = [\n \"email\",\n \"firstName\",\n \"lastName\",\n \"gender\",\n \"city\",\n \"country\",\n \"phone\",\n \"state\",\n \"zip\",\n \"birthday\",\n ];\n var whitelistPiiProperties = this.whitelistPiiProperties || [];\n var blacklistPiiProperties = this.blacklistPiiProperties || [];\n var eventCustomProperties = this.eventCustomProperties || [];\n var customPiiProperties = {};\n for (var i = 0; i < blacklistPiiProperties[i]; i++) {\n var configuration = blacklistPiiProperties[i];\n customPiiProperties[configuration.blacklistPiiProperties] =\n configuration.blacklistPiiHash;\n }\n var payload = {};\n var properties = rudderElement.message.properties;\n\n for (var property in properties) {\n if (!properties.hasOwnProperty(property)) {\n continue;\n }\n\n if (isStandardEvent && eventCustomProperties.indexOf(property) < 0) {\n continue;\n }\n var value = properties[property];\n\n if (dateFields.indexOf(properties) >= 0) {\n if (is.date(value)) {\n payload[property] = value.toISOTring().split(\"T\")[0];\n continue;\n }\n }\n if (customPiiProperties.hasOwnProperty(property)) {\n if (customPiiProperties[property] && typeof value == \"string\") {\n payload[property] = sha256(value);\n }\n continue;\n }\n var isPropertyPii = defaultPiiProperties.indexOf(property) >= 0;\n var isProperyWhiteListed = whitelistPiiProperties.indexOf(property) >= 0;\n if (!isPropertyPii || isProperyWhiteListed) {\n payload[property] = value;\n }\n }\n return payload;\n }\n}\n\nexport { FBPixel };\n","import logger from \"../../utils/logUtil\";\nimport Storage from \"../../utils/storage\";\n\nlet defaults = {\n lotame_synch_time_key: \"lt_synch_timestamp\"\n};\n\nclass LotameStorage {\n constructor() {\n this.storage = Storage;//new Storage();\n }\n\n setLotameSynchTime(value) {\n this.storage.setItem(defaults.lotame_synch_time_key, value);\n }\n\n getLotameSynchTime() {\n return this.storage.getItem(defaults.lotame_synch_time_key);\n }\n}\nlet lotameStorage = new LotameStorage();\nexport {lotameStorage as LotameStorage};","import * as HubSpot from \"./HubSpot\";\nimport * as GA from \"./GA\";\nimport * as Hotjar from \"./Hotjar\";\nimport * as GoogleAds from \"./GoogleAds\";\nimport * as VWO from \"./VWO\";\nimport * as GoogleTagManager from \"./GoogleTagManager\";\nimport * as Braze from \"./Braze\";\nimport * as INTERCOM from \"./INTERCOM\";\nimport * as Keen from \"./Keen\";\nimport * as Kissmetrics from \"./Kissmetrics\";\nimport * as CustomerIO from \"./CustomerIO\";\nimport * as Chartbeat from \"./Chartbeat\";\nimport * as Comscore from \"./Comscore\";\nimport * as FBPixel from \"./FBPixel\";\nimport * as Lotame from \"./Lotame\";\n\n// the key names should match the destination.name value to keep partity everywhere \n// (config-plan name, native destination.name , exported integration name(this one below))\n\nlet integrations = {\n HS: HubSpot.default,\n GA: GA.default,\n HOTJAR: Hotjar.default,\n GOOGLEADS: GoogleAds.default,\n VWO: VWO.default,\n GTM: GoogleTagManager.default,\n BRAZE: Braze.default,\n INTERCOM: INTERCOM.default,\n KEEN: Keen.default,\n KISSMETRICS: Kissmetrics.default,\n CUSTOMERIO: CustomerIO.default,\n CHARTBEAT: Chartbeat.default,\n COMSCORE: Comscore.default,\n FACEBOOK_PIXEL: FBPixel.default,\n LOTAME: Lotame.default\n};\n\nexport { integrations };\n","import logger from \"../../utils/logUtil\";\nimport { LotameStorage } from \"./LotameStorage\";\nclass Lotame {\n constructor(config, analytics) {\n this.name = \"LOTAME\";\n this.analytics = analytics;\n this.storage = LotameStorage;\n this.bcpUrlSettingsPixel = config.bcpUrlSettingsPixel;\n this.bcpUrlSettingsIframe = config.bcpUrlSettingsIframe;\n this.dspUrlSettingsPixel = config.dspUrlSettingsPixel;\n this.dspUrlSettingsIframe = config.dspUrlSettingsIframe;\n this.mappings = {};\n config.mappings.forEach(mapping => {\n let key = mapping.key;\n let value = mapping.value;\n this.mappings[key] = value;\n });\n }\n\n init() {\n logger.debug(\"===in init Lotame===\");\n window.LOTAME_SYNCH_CALLBACK = () => {};\n }\n\n addPixel(source, width, height) {\n logger.debug(\"Adding pixel for :: \" + source);\n\n let image = document.createElement(\"img\");\n image.src = source;\n image.setAttribute(\"width\", width);\n image.setAttribute(\"height\", height);\n\n logger.debug(\"Image Pixel :: \" + image);\n document.getElementsByTagName(\"body\")[0].appendChild(image);\n }\n\n addIFrame(source) {\n logger.debug(\"Adding iframe for :: \" + source);\n\n let iframe = document.createElement(\"iframe\");\n iframe.src = source;\n iframe.title = \"empty\";\n iframe.setAttribute(\"id\", \"LOTCCFrame\");\n iframe.setAttribute(\"tabindex\", \"-1\");\n iframe.setAttribute(\"role\", \"presentation\");\n iframe.setAttribute(\"aria-hidden\", \"true\");\n iframe.setAttribute(\"style\", \"border: 0px; width: 0px; height: 0px; display: block;\");\n\n logger.debug(\"IFrame :: \" + iframe);\n document.getElementsByTagName(\"body\")[0].appendChild(iframe);\n }\n\n syncPixel(userId) {\n logger.debug(\"===== in syncPixel ======\");\n\n logger.debug(\"Firing DSP Pixel URLs\");\n if (this.dspUrlSettingsPixel && this.dspUrlSettingsPixel.length > 0) {\n let currentTime = Date.now();\n this.dspUrlSettingsPixel.forEach(urlSettings => {\n let dspUrl = this.compileUrl(\n { ...this.mappings, userId: userId, random: currentTime },\n urlSettings.dspUrlTemplate\n );\n this.addPixel(dspUrl, \"1\", \"1\");\n });\n }\n\n logger.debug(\"Firing DSP IFrame URLs\");\n if (this.dspUrlSettingsIframe && this.dspUrlSettingsIframe.length > 0) {\n let currentTime = Date.now();\n this.dspUrlSettingsIframe.forEach(urlSettings => {\n let dspUrl = this.compileUrl(\n { ...this.mappings, userId: userId, random: currentTime },\n urlSettings.dspUrlTemplate\n );\n this.addIFrame(dspUrl);\n });\n }\n\n this.storage.setLotameSynchTime(Date.now());\n // emit on syncPixel\n if (this.analytics.methodToCallbackMapping[\"syncPixel\"]) {\n this.analytics.emit(\"syncPixel\", {\n destination: this.name\n });\n }\n }\n\n compileUrl(map, url) {\n Object.keys(map).forEach(key => {\n if (map.hasOwnProperty(key)) {\n let replaceKey = \"{{\" + key + \"}}\";\n let regex = new RegExp(replaceKey, \"gi\");\n url = url.replace(regex, map[key]);\n }\n });\n return url;\n }\n\n identify(rudderElement) {\n logger.debug(\"in Lotame identify\");\n let userId = rudderElement.message.userId;\n this.syncPixel(userId);\n }\n\n track(rudderElement) {\n logger.debug(\"track not supported for lotame\");\n }\n\n page(rudderElement) {\n logger.debug(\"in Lotame page\");\n\n logger.debug(\"Firing BCP Pixel URLs\");\n if (this.bcpUrlSettingsPixel && this.bcpUrlSettingsPixel.length > 0) {\n let currentTime = Date.now();\n this.bcpUrlSettingsPixel.forEach(urlSettings => {\n let bcpUrl = this.compileUrl(\n { ...this.mappings, random: currentTime},\n urlSettings.bcpUrlTemplate\n );\n this.addPixel(bcpUrl, \"1\", \"1\");\n });\n }\n\n logger.debug(\"Firing BCP IFrame URLs\");\n if (this.bcpUrlSettingsIframe && this.bcpUrlSettingsIframe.length > 0) {\n let currentTime = Date.now();\n this.bcpUrlSettingsIframe.forEach(urlSettings => {\n let bcpUrl = this.compileUrl(\n { ...this.mappings, random: currentTime},\n urlSettings.bcpUrlTemplate\n );\n this.addIFrame(bcpUrl);\n });\n }\n\n if (rudderElement.message.userId && this.isPixelToBeSynched()) {\n this.syncPixel(rudderElement.message.userId);\n }\n }\n\n isPixelToBeSynched() {\n let lastSynchedTime = this.storage.getLotameSynchTime();\n let currentTime = Date.now();\n if (!lastSynchedTime) {\n return true;\n }\n\n let difference = Math.floor(\n (currentTime - lastSynchedTime) / (1000 * 3600 * 24)\n );\n return difference >= 7;\n }\n\n isLoaded() {\n logger.debug(\"in Lotame isLoaded\");\n return true;\n }\n\n isReady() {\n return true;\n }\n}\n\nexport { Lotame };\n","//Application class\nclass RudderApp {\n constructor() {\n this.build = \"1.0.0\";\n this.name = \"RudderLabs JavaScript SDK\";\n this.namespace = \"com.rudderlabs.javascript\";\n this.version = \"process.package_version\";\n }\n}\nexport default RudderApp;\n","//Library information class\nclass RudderLibraryInfo {\n constructor() {\n this.name = \"RudderLabs JavaScript SDK\";\n this.version = \"process.package_version\";\n }\n}\n//Operating System information class\nclass RudderOSInfo {\n constructor() {\n this.name = \"\";\n this.version = \"\";\n }\n}\n//Screen information class\nclass RudderScreenInfo {\n constructor() {\n this.density = 0;\n this.width = 0;\n this.height = 0;\n }\n}\n//Device information class\nclass RudderDeviceInfo {\n constructor() {\n this.id = \"\";\n this.manufacturer = \"\";\n this.model = \"\";\n this.name = \"\";\n }\n}\n//Carrier information\nclass RudderNetwork {\n constructor() {\n this.carrier = \"\";\n }\n}\nexport {\n RudderLibraryInfo,\n RudderOSInfo,\n RudderScreenInfo,\n RudderDeviceInfo,\n RudderNetwork\n};\n","//Context class\nimport RudderApp from \"./RudderApp\";\nimport {\n RudderLibraryInfo,\n RudderOSInfo,\n RudderScreenInfo\n} from \"./RudderInfo\";\nclass RudderContext {\n constructor() {\n this.app = new RudderApp();\n this.traits = null;\n this.library = new RudderLibraryInfo();\n //this.os = null;\n let os = new RudderOSInfo();\n os.version = \"\"; //skipping version for simplicity now\n let screen = new RudderScreenInfo();\n\n //Depending on environment within which the code is executing, screen\n //dimensions can be set\n //User agent and locale can be retrieved only for browser\n //For server-side integration, same needs to be set by calling program\n if (!process.browser) {\n //server-side integration\n screen.width = 0;\n screen.height = 0;\n screen.density = 0;\n os.version = \"\";\n os.name = \"\";\n this.userAgent = null;\n this.locale = null;\n } else {\n //running within browser\n screen.width = window.width;\n screen.height = window.height;\n screen.density = window.devicePixelRatio;\n this.userAgent = navigator.userAgent;\n //property name differs based on browser version\n this.locale = navigator.language || navigator.browserLanguage;\n }\n this.os = os;\n this.screen = screen;\n this.device = null;\n this.network = null;\n }\n}\nexport default RudderContext;\n","//Core message class with default values\nimport { generateUUID } from \"./utils\";\nimport { MessageType, ECommerceEvents } from \"./constants\";\nimport RudderContext from \"./RudderContext\";\nclass RudderMessage {\n constructor() {\n this.channel = \"web\";\n this.context = new RudderContext();\n this.type = null;\n this.action = null;\n this.messageId = generateUUID().toString();\n this.originalTimestamp = new Date().toISOString();\n this.anonymousId = null;\n this.userId = null;\n this.event = null;\n this.properties = {};\n this.integrations = {};\n //By default, all integrations will be set as enabled from client\n //Decision to route to specific destinations will be taken at server end\n this.integrations[\"All\"] = true;\n }\n\n //Get property\n getProperty(key) {\n return this.properties[key];\n }\n\n //Add property\n addProperty(key, value) {\n this.properties[key] = value;\n }\n\n //Validate whether this message is semantically valid for the type mentioned\n validateFor(messageType) {\n //First check that properties is populated\n if (!this.properties) {\n throw new Error(\"Key properties is required\");\n }\n //Event type specific checks\n switch (messageType) {\n case MessageType.TRACK:\n //check if event is present\n if (!this.event) {\n throw new Error(\"Key event is required for track event\");\n }\n //Next make specific checks for e-commerce events\n if (this.event in Object.values(ECommerceEvents)) {\n switch (this.event) {\n case ECommerceEvents.CHECKOUT_STEP_VIEWED:\n case ECommerceEvents.CHECKOUT_STEP_COMPLETED:\n case ECommerceEvents.PAYMENT_INFO_ENTERED:\n this.checkForKey(\"checkout_id\");\n this.checkForKey(\"step\");\n break;\n case ECommerceEvents.PROMOTION_VIEWED:\n case ECommerceEvents.PROMOTION_CLICKED:\n this.checkForKey(\"promotion_id\");\n break;\n case ECommerceEvents.ORDER_REFUNDED:\n this.checkForKey(\"order_id\");\n break;\n default:\n }\n } else if (!this.properties[\"category\"]) {\n //if category is not there, set to event\n this.properties[\"category\"] = this.event;\n }\n\n break;\n case MessageType.PAGE:\n break;\n case MessageType.SCREEN:\n if (!this.properties[\"name\"]) {\n throw new Error(\"Key 'name' is required in properties\");\n }\n break;\n }\n }\n\n //Function for checking existence of a particular property\n checkForKey(propertyName) {\n if (!this.properties[propertyName]) {\n throw new Error(\"Key '\" + propertyName + \"' is required in properties\");\n }\n }\n}\nexport default RudderMessage;\n","import RudderMessage from \"./RudderMessage\";\n//Individual element class containing Rudder Message\nclass RudderElement {\n constructor() {\n this.message = new RudderMessage();\n }\n\n //Setters that in turn set the field values for the contained object\n setType(type) {\n this.message.type = type;\n }\n\n setProperty(rudderProperty) {\n this.message.properties = rudderProperty;\n }\n\n setUserProperty(rudderUserProperty) {\n this.message.user_properties = rudderUserProperty;\n }\n\n setUserId(userId) {\n this.message.userId = userId;\n }\n\n setEventName(eventName) {\n this.message.event = eventName;\n }\n\n updateTraits(traits) {\n this.message.context.traits = traits;\n }\n\n getElementContent() {\n return this.message;\n }\n}\nexport default RudderElement;\n","//Class responsible for building up the individual elements in a batch\n//that is transmitted by the SDK\nimport RudderElement from \"./RudderElement.js\";\nclass RudderElementBuilder {\n constructor() {\n this.rudderProperty = null;\n this.rudderUserProperty = null;\n this.event = null;\n this.userId = null;\n this.channel = null;\n this.type = null;\n }\n\n //Set the property\n setProperty(inputRudderProperty) {\n this.rudderProperty = inputRudderProperty;\n return this;\n }\n\n //Build and set the property object\n setPropertyBuilder(rudderPropertyBuilder) {\n this.rudderProperty = rudderPropertyBuilder.build();\n return this;\n }\n\n setUserProperty(inputRudderUserProperty) {\n this.rudderUserProperty = inputRudderUserProperty;\n return this;\n }\n\n setUserPropertyBuilder(rudderUserPropertyBuilder) {\n this.rudderUserProperty = rudderUserPropertyBuilder.build();\n return this;\n }\n\n //Setter methods for all variables. Instance is returned for each call in\n //accordance with the Builder pattern\n\n setEvent(event) {\n this.event = event;\n return this;\n }\n\n setUserId(userId) {\n this.userId = userId;\n return this;\n }\n\n setChannel(channel) {\n this.channel = channel;\n return this;\n }\n\n setType(eventType) {\n this.type = eventType;\n return this;\n }\n\n build() {\n let element = new RudderElement();\n element.setUserId(this.userId);\n element.setType(this.type);\n element.setEventName(this.event);\n element.setProperty(this.rudderProperty);\n element.setUserProperty(this.rudderUserProperty);\n return element;\n }\n}\nexport default RudderElementBuilder;\n","//Payload class, contains batch of Elements\nclass RudderPayload {\n constructor() {\n this.batch = null;\n this.writeKey = null;\n }\n}\nexport { RudderPayload };\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","'use strict';\n\nvar keys = require('@ndhoule/keys');\nvar uuid = require('uuid').v4;\n\nvar inMemoryStore = {\n _data: {},\n length: 0,\n setItem: function(key, value) {\n this._data[key] = value;\n this.length = keys(this._data).length;\n return value;\n },\n getItem: function(key) {\n if (key in this._data) {\n return this._data[key];\n }\n return null;\n },\n removeItem: function(key) {\n if (key in this._data) {\n delete this._data[key];\n }\n this.length = keys(this._data).length;\n return null;\n },\n clear: function() {\n this._data = {};\n this.length = 0;\n },\n key: function(index) {\n return keys(this._data)[index];\n }\n};\n\nfunction isSupportedNatively() {\n try {\n if (!window.localStorage) return false;\n var key = uuid();\n window.localStorage.setItem(key, 'test_value');\n var value = window.localStorage.getItem(key);\n window.localStorage.removeItem(key);\n\n // handle localStorage silently failing\n return value === 'test_value';\n } catch (e) {\n // Can throw if localStorage is disabled\n return false;\n }\n}\n\nfunction pickStorage() {\n if (isSupportedNatively()) {\n return window.localStorage;\n }\n // fall back to in-memory\n return inMemoryStore;\n}\n\n// Return a shared instance\nmodule.exports.defaultEngine = pickStorage();\n// Expose the in-memory store explicitly for testing\nmodule.exports.inMemoryEngine = inMemoryStore;\n","'use strict';\n\nvar defaultEngine = require('./engine').defaultEngine;\nvar inMemoryEngine = require('./engine').inMemoryEngine;\nvar each = require('@ndhoule/each');\nvar keys = require('@ndhoule/keys');\nvar json = require('json3');\n\n/**\n* Store Implementation with dedicated\n*/\n\nfunction Store(name, id, keys, optionalEngine) {\n this.id = id;\n this.name = name;\n this.keys = keys || {};\n this.engine = optionalEngine || defaultEngine;\n}\n\n/**\n* Set value by key.\n*/\n\nStore.prototype.set = function(key, value) {\n var compoundKey = this._createValidKey(key);\n if (!compoundKey) return;\n try {\n this.engine.setItem(compoundKey, json.stringify(value));\n } catch (err) {\n if (isQuotaExceeded(err)) {\n // switch to inMemory engine\n this._swapEngine();\n // and save it there\n this.set(key, value);\n }\n }\n};\n\n/**\n* Get by Key.\n*/\n\nStore.prototype.get = function(key) {\n try {\n var str = this.engine.getItem(this._createValidKey(key));\n if (str === null) {\n return null;\n }\n return json.parse(str);\n } catch (err) {\n return null;\n }\n};\n\n/**\n* Remove by Key.\n*/\n\nStore.prototype.remove = function(key) {\n this.engine.removeItem(this._createValidKey(key));\n};\n\n/**\n* Ensure the key is valid\n*/\n\nStore.prototype._createValidKey = function(key) {\n var name = this.name;\n var id = this.id;\n\n if (!keys(this.keys).length) return [name, id, key].join('.');\n\n // validate and return undefined if invalid key\n var compoundKey;\n each(function(value) {\n if (value === key) {\n compoundKey = [name, id, key].join('.');\n }\n }, this.keys);\n return compoundKey;\n};\n\n/**\n* Switch to inMemoryEngine, bringing any existing data with.\n*/\n\nStore.prototype._swapEngine = function() {\n var self = this;\n\n // grab existing data, but only for this page's queue instance, not all\n // better to keep other queues in localstorage to be flushed later\n // than to pull them into memory and remove them from durable storage\n each(function(key) {\n var value = self.get(key);\n inMemoryEngine.setItem([self.name, self.id, key].join('.'), value);\n self.remove(key);\n }, this.keys);\n\n this.engine = inMemoryEngine;\n};\n\nmodule.exports = Store;\n\nfunction isQuotaExceeded(e) {\n var quotaExceeded = false;\n if (e.code) {\n switch (e.code) {\n case 22:\n quotaExceeded = true;\n break;\n case 1014:\n // Firefox\n if (e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n quotaExceeded = true;\n }\n break;\n default:\n break;\n }\n } else if (e.number === -2147024882) {\n // Internet Explorer 8\n quotaExceeded = true;\n }\n return quotaExceeded;\n}\n","'use strict';\n\nvar each = require('@ndhoule/each');\n\nvar defaultClock = {\n setTimeout: function(fn, ms) {\n return window.setTimeout(fn, ms);\n },\n clearTimeout: function(id) {\n return window.clearTimeout(id);\n },\n Date: window.Date\n};\n\nvar clock = defaultClock;\n\nfunction Schedule() {\n this.tasks = {};\n this.nextId = 1;\n}\n\nSchedule.prototype.now = function() {\n return +new clock.Date();\n};\n\nSchedule.prototype.run = function(task, timeout) {\n var id = this.nextId++;\n this.tasks[id] = clock.setTimeout(this._handle(id, task), timeout);\n return id;\n};\n\nSchedule.prototype.cancel = function(id) {\n if (this.tasks[id]) {\n clock.clearTimeout(this.tasks[id]);\n delete this.tasks[id];\n }\n};\n\nSchedule.prototype.cancelAll = function() {\n each(clock.clearTimeout, this.tasks);\n this.tasks = {};\n};\n\nSchedule.prototype._handle = function(id, callback) {\n var self = this;\n return function() {\n delete self.tasks[id];\n return callback();\n };\n};\n\nSchedule.setClock = function(newClock) {\n clock = newClock;\n};\n\nSchedule.resetClock = function() {\n clock = defaultClock;\n};\n\nmodule.exports = Schedule;\n","\n/**\n * Expose `debug()` as the module.\n */\n\nmodule.exports = debug;\n\n/**\n * Create a debugger with the given `name`.\n *\n * @param {String} name\n * @return {Type}\n * @api public\n */\n\nfunction debug(name) {\n if (!debug.enabled(name)) return function(){};\n\n return function(fmt){\n fmt = coerce(fmt);\n\n var curr = new Date;\n var ms = curr - (debug[name] || curr);\n debug[name] = curr;\n\n fmt = name\n + ' '\n + fmt\n + ' +' + debug.humanize(ms);\n\n // This hackery is required for IE8\n // where `console.log` doesn't have 'apply'\n window.console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n }\n}\n\n/**\n * The currently active debug mode names.\n */\n\ndebug.names = [];\ndebug.skips = [];\n\n/**\n * Enables a debug mode by name. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} name\n * @api public\n */\n\ndebug.enable = function(name) {\n try {\n localStorage.debug = name;\n } catch(e){}\n\n var split = (name || '').split(/[\\s,]+/)\n , len = split.length;\n\n for (var i = 0; i < len; i++) {\n name = split[i].replace('*', '.*?');\n if (name[0] === '-') {\n debug.skips.push(new RegExp('^' + name.substr(1) + '$'));\n }\n else {\n debug.names.push(new RegExp('^' + name + '$'));\n }\n }\n};\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\ndebug.disable = function(){\n debug.enable('');\n};\n\n/**\n * Humanize the given `ms`.\n *\n * @param {Number} m\n * @return {String}\n * @api private\n */\n\ndebug.humanize = function(ms) {\n var sec = 1000\n , min = 60 * 1000\n , hour = 60 * min;\n\n if (ms >= hour) return (ms / hour).toFixed(1) + 'h';\n if (ms >= min) return (ms / min).toFixed(1) + 'm';\n if (ms >= sec) return (ms / sec | 0) + 's';\n return ms + 'ms';\n};\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\ndebug.enabled = function(name) {\n for (var i = 0, len = debug.skips.length; i < len; i++) {\n if (debug.skips[i].test(name)) {\n return false;\n }\n }\n for (var i = 0, len = debug.names.length; i < len; i++) {\n if (debug.names[i].test(name)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Coerce `val`.\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n\n// persist\n\ntry {\n if (window.localStorage) debug.enable(localStorage.debug);\n} catch(e){}\n","\n/**\n * Expose `Emitter`.\n */\n\nif (typeof module !== 'undefined') {\n module.exports = Emitter;\n}\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","'use strict';\n\nvar uuid = require('uuid').v4;\nvar Store = require('./store');\nvar each = require('@ndhoule/each');\nvar Schedule = require('./schedule');\nvar debug = require('debug')('localstorage-retry');\nvar Emitter = require('component-emitter');\n\n// Some browsers don't support Function.prototype.bind, so just including a simplified version here\nfunction bind(func, obj) {\n return function() {\n return func.apply(obj, arguments);\n };\n}\n\n/**\n * @callback processFunc\n * @param {Mixed} item The item added to the queue to process\n * @param {Function} done A function to call when processing is completed.\n * @param {Error} Optional error parameter if the processing failed\n * @param {Response} Optional response parameter to emit for async handling\n */\n\n/**\n * Constructs a Queue backed by localStorage\n *\n * @constructor\n * @param {String} name The name of the queue. Will be used to find abandoned queues and retry their items\n * @param {processFunc} fn The function to call in order to process an item added to the queue\n */\nfunction Queue(name, opts, fn) {\n if (typeof opts === 'function') fn = opts;\n this.name = name;\n this.id = uuid();\n this.fn = fn;\n this.maxItems = opts.maxItems || Infinity;\n this.maxAttempts = opts.maxAttempts || Infinity;\n\n this.backoff = {\n MIN_RETRY_DELAY: opts.minRetryDelay || 1000,\n MAX_RETRY_DELAY: opts.maxRetryDelay || 30000,\n FACTOR: opts.backoffFactor || 2,\n JITTER: opts.backoffJitter || 0\n };\n\n // painstakingly tuned. that's why they're not \"easily\" configurable\n this.timeouts = {\n ACK_TIMER: 1000,\n RECLAIM_TIMER: 3000,\n RECLAIM_TIMEOUT: 10000,\n RECLAIM_WAIT: 500\n };\n\n this.keys = {\n IN_PROGRESS: 'inProgress',\n QUEUE: 'queue',\n ACK: 'ack',\n RECLAIM_START: 'reclaimStart',\n RECLAIM_END: 'reclaimEnd'\n };\n\n this._schedule = new Schedule();\n this._processId = 0;\n\n // Set up our empty queues\n this._store = new Store(this.name, this.id, this.keys);\n this._store.set(this.keys.IN_PROGRESS, {});\n this._store.set(this.keys.QUEUE, []);\n\n // bind recurring tasks for ease of use\n this._ack = bind(this._ack, this);\n this._checkReclaim = bind(this._checkReclaim, this);\n this._processHead = bind(this._processHead, this);\n\n this._running = false;\n}\n\n/**\n * Mix in event emitter\n */\n\nEmitter(Queue.prototype);\n\n/**\n * Starts processing the queue\n */\nQueue.prototype.start = function() {\n if (this._running) {\n this.stop();\n }\n this._running = true;\n this._ack();\n this._checkReclaim();\n this._processHead();\n};\n\n/**\n * Stops processing the queue\n */\nQueue.prototype.stop = function() {\n this._schedule.cancelAll();\n this._running = false;\n};\n\n/**\n * Decides whether to retry. Overridable.\n *\n * @param {Object} item The item being processed\n * @param {Number} attemptNumber The attemptNumber (1 for first retry)\n * @param {Error} error The error from previous attempt, if there was one\n * @return {Boolean} Whether to requeue the message\n */\nQueue.prototype.shouldRetry = function(_, attemptNumber) {\n if (attemptNumber > this.maxAttempts) return false;\n return true;\n};\n\n/**\n * Calculates the delay (in ms) for a retry attempt\n *\n * @param {Number} attemptNumber The attemptNumber (1 for first retry)\n * @return {Number} The delay in milliseconds to wait before attempting a retry\n */\nQueue.prototype.getDelay = function(attemptNumber) {\n var ms = this.backoff.MIN_RETRY_DELAY * Math.pow(this.backoff.FACTOR, attemptNumber);\n if (this.backoff.JITTER) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.backoff.JITTER * ms);\n if (Math.floor(rand * 10) < 5) {\n ms -= deviation;\n } else {\n ms += deviation;\n }\n }\n return Number(Math.min(ms, this.backoff.MAX_RETRY_DELAY).toPrecision(1));\n};\n\n/**\n * Adds an item to the queue\n *\n * @param {Mixed} item The item to process\n */\nQueue.prototype.addItem = function(item) {\n this._enqueue({\n item: item,\n attemptNumber: 0,\n time: this._schedule.now()\n });\n};\n\n/**\n * Adds an item to the retry queue\n *\n * @param {Mixed} item The item to retry\n * @param {Number} attemptNumber The attempt number (1 for first retry)\n * @param {Error} [error] The error from previous attempt, if there was one\n */\nQueue.prototype.requeue = function(item, attemptNumber, error) {\n if (this.shouldRetry(item, attemptNumber, error)) {\n this._enqueue({\n item: item,\n attemptNumber: attemptNumber,\n time: this._schedule.now() + this.getDelay(attemptNumber)\n });\n } else {\n this.emit('discard', item, attemptNumber);\n }\n};\n\nQueue.prototype._enqueue = function(entry) {\n var queue = this._store.get(this.keys.QUEUE) || [];\n queue = queue.slice(-(this.maxItems - 1));\n queue.push(entry);\n queue = queue.sort(function(a,b) {\n return a.time - b.time;\n });\n\n this._store.set(this.keys.QUEUE, queue);\n\n if (this._running) {\n this._processHead();\n }\n};\n\nQueue.prototype._processHead = function() {\n var self = this;\n var store = this._store;\n\n // cancel the scheduled task if it exists\n this._schedule.cancel(this._processId);\n\n // Pop the head off the queue\n var queue = store.get(this.keys.QUEUE) || [];\n var inProgress = store.get(this.keys.IN_PROGRESS) || {};\n var now = this._schedule.now();\n var toRun = [];\n\n function enqueue(el, id) {\n toRun.push({\n item: el.item,\n done: function handle(err, res) {\n var inProgress = store.get(self.keys.IN_PROGRESS) || {};\n delete inProgress[id];\n store.set(self.keys.IN_PROGRESS, inProgress);\n self.emit('processed', err, res, el.item);\n if (err) {\n self.requeue(el.item, el.attemptNumber + 1, err);\n }\n }\n });\n }\n\n var inProgressSize = Object.keys(inProgress).length;\n\n while (queue.length && queue[0].time <= now && inProgressSize++ < self.maxItems) {\n var el = queue.shift();\n var id = uuid();\n\n // Save this to the in progress map\n inProgress[id] = {\n item: el.item,\n attemptNumber: el.attemptNumber,\n time: self._schedule.now()\n };\n\n enqueue(el, id);\n }\n\n store.set(this.keys.QUEUE, queue);\n store.set(this.keys.IN_PROGRESS, inProgress);\n\n each(function(el) {\n // TODO: handle fn timeout\n try {\n self.fn(el.item, el.done);\n } catch (err) {\n debug('Process function threw error: ' + err);\n }\n }, toRun);\n\n // re-read the queue in case the process function finished immediately or added another item\n queue = store.get(this.keys.QUEUE) || [];\n this._schedule.cancel(this._processId);\n if (queue.length > 0) {\n this._processId = this._schedule.run(this._processHead, queue[0].time - now);\n }\n};\n\n// Ack continuously to prevent other tabs from claiming our queue\nQueue.prototype._ack = function() {\n this._store.set(this.keys.ACK, this._schedule.now());\n this._store.set(this.keys.RECLAIM_START, null);\n this._store.set(this.keys.RECLAIM_END, null);\n this._schedule.run(this._ack, this.timeouts.ACK_TIMER);\n};\n\nQueue.prototype._checkReclaim = function() {\n var self = this;\n\n function tryReclaim(store) {\n store.set(self.keys.RECLAIM_START, self.id);\n store.set(self.keys.ACK, self._schedule.now());\n\n self._schedule.run(function() {\n if (store.get(self.keys.RECLAIM_START) !== self.id) return;\n store.set(self.keys.RECLAIM_END, self.id);\n\n self._schedule.run(function() {\n if (store.get(self.keys.RECLAIM_END) !== self.id) return;\n if (store.get(self.keys.RECLAIM_START) !== self.id) return;\n self._reclaim(store.id);\n }, self.timeouts.RECLAIM_WAIT);\n }, self.timeouts.RECLAIM_WAIT);\n }\n\n function findOtherQueues(name) {\n var res = [];\n var storage = self._store.engine;\n for (var i = 0; i < storage.length; i++) {\n var k = storage.key(i);\n var parts = k.split('.');\n if (parts.length !== 3) continue;\n if (parts[0] !== name) continue;\n if (parts[2] !== 'ack') continue;\n res.push(new Store(name, parts[1], self.keys));\n }\n return res;\n }\n\n each(function(store) {\n if (store.id === self.id) return;\n if (self._schedule.now() - store.get(self.keys.ACK) < self.timeouts.RECLAIM_TIMEOUT) return;\n tryReclaim(store);\n }, findOtherQueues(this.name));\n\n this._schedule.run(this._checkReclaim, this.timeouts.RECLAIM_TIMER);\n};\n\nQueue.prototype._reclaim = function(id) {\n var self = this;\n var other = new Store(this.name, id, this.keys);\n\n var our = {\n queue: this._store.get(this.keys.QUEUE) || []\n };\n\n var their = {\n inProgress: other.get(this.keys.IN_PROGRESS) || {},\n queue: other.get(this.keys.QUEUE) || []\n };\n\n // add their queue to ours, resetting run-time to immediate and copying the attempt#\n each(function(el) {\n our.queue.push({\n item: el.item,\n attemptNumber: el.attemptNumber,\n time: self._schedule.now()\n });\n }, their.queue);\n\n // if the queue is abandoned, all the in-progress are failed. retry them immediately and increment the attempt#\n each(function(el) {\n our.queue.push({\n item: el.item,\n attemptNumber: el.attemptNumber + 1,\n time: self._schedule.now()\n });\n }, their.inProgress);\n\n our.queue = our.queue.sort(function(a,b) {\n return a.time - b.time;\n });\n\n this._store.set(this.keys.QUEUE, our.queue);\n\n // remove all keys\n other.remove(this.keys.ACK);\n other.remove(this.keys.RECLAIM_START);\n other.remove(this.keys.RECLAIM_END);\n other.remove(this.keys.IN_PROGRESS);\n other.remove(this.keys.QUEUE);\n\n // process the new items we claimed\n this._processHead();\n};\n\nmodule.exports = Queue;\n","import {\n BASE_URL,\n FLUSH_QUEUE_SIZE,\n FLUSH_INTERVAL_DEFAULT\n} from \"./constants\";\nimport { getCurrentTimeFormatted, handleError } from \"./utils\";\nimport { replacer } from \"./utils\";\nimport { RudderPayload } from \"./RudderPayload\";\nimport Queue from \"@segment/localstorage-retry\";\nimport logger from \"./logUtil\";\n//import * as XMLHttpRequestNode from \"Xmlhttprequest\";\n\nlet XMLHttpRequestNode;\nif (!process.browser) {\n XMLHttpRequestNode = require(\"Xmlhttprequest\");\n}\n\nlet btoaNode;\nif (!process.browser) {\n btoaNode = require(\"btoa\");\n}\n\nvar queueOptions = {\n maxRetryDelay: 360000,\n minRetryDelay: 1000,\n backoffFactor: 2,\n maxAttempts: 10,\n maxItems: 100\n};\n\nconst MESSAGE_LENGTH = 32 * 1000; // ~32 Kb\n\n/**\n *\n * @class EventRepository responsible for adding events into\n * flush queue and sending data to rudder backend\n * in batch and maintains order of the event.\n */\nclass EventRepository {\n /**\n *Creates an instance of EventRepository.\n * @memberof EventRepository\n */\n constructor() {\n this.eventsBuffer = [];\n this.writeKey = \"\";\n this.url = BASE_URL;\n this.state = \"READY\";\n this.batchSize = 0;\n\n // previous implementation\n //setInterval(this.preaparePayloadAndFlush, FLUSH_INTERVAL_DEFAULT, this);\n\n this.payloadQueue = new Queue(\"rudder\", queueOptions, function(item, done) {\n // apply sentAt at flush time and reset on each retry\n item.message.sentAt = getCurrentTimeFormatted();\n //send this item for processing, with a callback to enable queue to get the done status\n eventRepository.processQueueElement(\n item.url,\n item.headers,\n item.message,\n 10 * 1000,\n function(err, res) {\n if (err) {\n return done(err);\n }\n done(null, res);\n }\n );\n });\n\n //start queue\n this.payloadQueue.start();\n }\n\n /**\n *\n *\n * @param {EventRepository} repo\n * @returns\n * @memberof EventRepository\n */\n preaparePayloadAndFlush(repo) {\n //construct payload\n logger.debug(\"==== in preaparePayloadAndFlush with state: \" + repo.state);\n logger.debug(repo.eventsBuffer);\n if (repo.eventsBuffer.length == 0 || repo.state === \"PROCESSING\") {\n return;\n }\n var eventsPayload = repo.eventsBuffer;\n var payload = new RudderPayload();\n payload.batch = eventsPayload;\n payload.writeKey = repo.writeKey;\n payload.sentAt = getCurrentTimeFormatted();\n\n //add sentAt to individual events as well\n payload.batch.forEach(event => {\n event.sentAt = payload.sentAt;\n });\n\n repo.batchSize = repo.eventsBuffer.length;\n //server-side integration, XHR is node module\n\n if (process.browser) {\n var xhr = new XMLHttpRequest();\n } else {\n var xhr = new XMLHttpRequestNode.XMLHttpRequest();\n }\n\n logger.debug(\"==== in flush sending to Rudder BE ====\");\n logger.debug(JSON.stringify(payload, replacer));\n\n xhr.open(\"POST\", repo.url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n\n if (process.browser) {\n xhr.setRequestHeader(\n \"Authorization\",\n \"Basic \" + btoa(payload.writeKey + \":\")\n );\n } else {\n xhr.setRequestHeader(\n \"Authorization\",\n \"Basic \" + btoaNode(payload.writeKey + \":\")\n );\n }\n\n //register call back to reset event buffer on successfull POST\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4 && xhr.status === 200) {\n logger.debug(\"====== request processed successfully: \" + xhr.status);\n repo.eventsBuffer = repo.eventsBuffer.slice(repo.batchSize);\n logger.debug(repo.eventsBuffer.length);\n } else if (xhr.readyState === 4 && xhr.status !== 200) {\n handleError(\n new Error(\n \"request failed with status: \" +\n xhr.status +\n \" for url: \" +\n repo.url\n )\n );\n }\n repo.state = \"READY\";\n };\n xhr.send(JSON.stringify(payload, replacer));\n repo.state = \"PROCESSING\";\n }\n\n /**\n * the queue item proceesor\n * @param {*} url to send requests to\n * @param {*} headers\n * @param {*} message\n * @param {*} timeout\n * @param {*} queueFn the function to call after request completion\n */\n processQueueElement(url, headers, message, timeout, queueFn) {\n try {\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", url, true);\n for (var k in headers) {\n xhr.setRequestHeader(k, headers[k]);\n }\n xhr.timeout = timeout;\n xhr.ontimeout = queueFn;\n xhr.onerror = queueFn;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 429 || (xhr.status >= 500 && xhr.status < 600)) {\n handleError(\n new Error(\n \"request failed with status: \" +\n xhr.status +\n xhr.statusText +\n \" for url: \" +\n url\n )\n );\n queueFn(\n new Error(\n \"request failed with status: \" +\n xhr.status +\n xhr.statusText +\n \" for url: \" +\n url\n )\n );\n } else {\n logger.debug(\n \"====== request processed successfully: \" + xhr.status\n );\n queueFn(null, xhr.status);\n }\n }\n };\n\n xhr.send(JSON.stringify(message, replacer));\n } catch (error) {\n queueFn(error);\n }\n }\n\n /**\n *\n *\n * @param {RudderElement} rudderElement\n * @memberof EventRepository\n */\n enqueue(rudderElement, type) {\n var message = rudderElement.getElementContent();\n\n var headers = {\n \"Content-Type\": \"application/json\",\n Authorization: \"Basic \" + btoa(this.writeKey + \":\"),\n AnonymousId: btoa(message.anonymousId)\n };\n\n message.originalTimestamp = getCurrentTimeFormatted();\n message.sentAt = getCurrentTimeFormatted(); // add this, will get modified when actually being sent\n\n // check message size, if greater log an error\n if (JSON.stringify(message).length > MESSAGE_LENGTH) {\n logger.error(\"[EventRepository] enqueue:: message length greater 32 Kb \", message);\n }\n\n //modify the url for event specific endpoints\n var url = this.url.slice(-1) == \"/\" ? this.url.slice(0, -1) : this.url;\n // add items to the queue\n this.payloadQueue.addItem({\n url: url + \"/v1/\" + type,\n headers: headers,\n message: message\n });\n }\n}\nlet eventRepository = new EventRepository();\nexport { eventRepository as EventRepository };\n","import { getDefaultPageProperties } from \"./utils\";\nimport logger from \"./logUtil\";\n\nfunction addDomEventHandlers(rudderanalytics) {\n var handler = e => {\n e = e || window.event;\n var target = e.target || e.srcElement;\n\n if (isTextNode(target)) {\n target = target.parentNode;\n }\n if (shouldTrackDomEvent(target, e)) {\n logger.debug(\"to be tracked \", e.type);\n } else {\n logger.debug(\"not to be tracked \", e.type);\n }\n trackWindowEvent(e, rudderanalytics);\n };\n register_event(document, \"submit\", handler, true);\n register_event(document, \"change\", handler, true);\n register_event(document, \"click\", handler, true);\n rudderanalytics.page();\n}\n\nfunction register_event(element, type, handler, useCapture) {\n if (!element) {\n logger.error(\"[Autotrack] register_event:: No valid element provided to register_event\");\n return;\n }\n element.addEventListener(type, handler, !!useCapture);\n}\n\nfunction shouldTrackDomEvent(el, event) {\n if (!el || isTag(el, \"html\") || !isElementNode(el)) {\n return false;\n }\n var tag = el.tagName.toLowerCase();\n switch (tag) {\n case \"html\":\n return false;\n case \"form\":\n return event.type === \"submit\";\n case \"input\":\n if ([\"button\", \"submit\"].indexOf(el.getAttribute(\"type\")) === -1) {\n return event.type === \"change\";\n } else {\n return event.type === \"click\";\n }\n case \"select\":\n case \"textarea\":\n return event.type === \"change\";\n default:\n return event.type === \"click\";\n }\n}\n\nfunction isTag(el, tag) {\n return el && el.tagName && el.tagName.toLowerCase() === tag.toLowerCase();\n}\n\nfunction isElementNode(el) {\n return el && el.nodeType === 1; // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\nfunction isTextNode(el) {\n return el && el.nodeType === 3; // Node.TEXT_NODE - use integer constant for browser portability\n}\n\nfunction shouldTrackElement(el) {\n if (!el.parentNode || isTag(el, \"body\")) return false;\n return true;\n}\n\nfunction getClassName(el) {\n switch (typeof el.className) {\n case \"string\":\n return el.className;\n case \"object\": // handle cases where className might be SVGAnimatedString or some other type\n return el.className.baseVal || el.getAttribute(\"class\") || \"\";\n default:\n // future proof\n return \"\";\n }\n}\n\nfunction trackWindowEvent(e, rudderanalytics) {\n var target = e.target || e.srcElement;\n var formValues = undefined;\n if (isTextNode(target)) {\n target = target.parentNode;\n }\n\n if (shouldTrackDomEvent(target, e)) {\n if (target.tagName.toLowerCase() == \"form\") {\n formValues = {};\n for (var i = 0; i < target.elements.length; i++) {\n var formElement = target.elements[i];\n if (\n isElToBeTracked(formElement) &&\n isElValueToBeTracked(formElement, rudderanalytics.trackValues)\n ) {\n let name = formElement.id ? formElement.id : formElement.name;\n if (name && typeof name === \"string\") {\n var key = formElement.id ? formElement.id : formElement.name;\n // formElement.value gives the same thing\n var value = formElement.id\n ? document.getElementById(formElement.id).value\n : document.getElementsByName(formElement.name)[0].value;\n if (\n formElement.type === \"checkbox\" ||\n formElement.type === \"radio\"\n ) {\n value = formElement.checked;\n }\n if (key.trim() !== \"\") {\n formValues[encodeURIComponent(key)] = encodeURIComponent(value);\n }\n }\n }\n }\n }\n var targetElementList = [target];\n var curEl = target;\n while (curEl.parentNode && !isTag(curEl, \"body\")) {\n targetElementList.push(curEl.parentNode);\n curEl = curEl.parentNode;\n }\n\n var elementsJson = [];\n var href,\n explicitNoTrack = false;\n\n targetElementList.forEach(el => {\n var shouldTrackEl = shouldTrackElement(el);\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === \"a\") {\n href = el.getAttribute(\"href\");\n href = shouldTrackEl && href;\n }\n\n // allow users to programatically prevent tracking of elements by adding class 'rudder-no-track'\n\n explicitNoTrack = explicitNoTrack || !isElToBeTracked(el);\n\n //explicitNoTrack = !isElToBeTracked(el);\n\n elementsJson.push(getPropertiesFromElement(el, rudderanalytics));\n });\n\n if (explicitNoTrack) {\n return false;\n }\n\n var elementText = \"\";\n var text = getText(target); //target.innerText//target.textContent//getSafeText(target);\n if (text && text.length) {\n elementText = text;\n }\n var props = {\n event_type: e.type,\n page: getDefaultPageProperties(),\n elements: elementsJson,\n el_attr_href: href,\n el_text: elementText\n };\n\n if (formValues) {\n props[\"form_values\"] = formValues;\n }\n\n logger.debug(\"web_event\", props);\n rudderanalytics.track(\"autotrack\", props);\n return true;\n }\n}\n\nfunction isElValueToBeTracked(el, includeList) {\n var elAttributesLength = el.attributes.length;\n for (let i = 0; i < elAttributesLength; i++) {\n let value = el.attributes[i].value;\n if (includeList.indexOf(value) > -1) {\n return true;\n }\n }\n return false;\n}\n\nfunction isElToBeTracked(el) {\n var classes = getClassName(el).split(\" \");\n if (classes.indexOf(\"rudder-no-track\") >= 0) {\n return false;\n }\n return true;\n}\n\nfunction getText(el) {\n var text = \"\";\n el.childNodes.forEach(function(value) {\n if (value.nodeType === Node.TEXT_NODE) {\n text += value.nodeValue;\n }\n });\n return text.trim();\n}\n\nfunction getPropertiesFromElement(elem, rudderanalytics) {\n var props = {\n classes: getClassName(elem).split(\" \"),\n tag_name: elem.tagName.toLowerCase()\n };\n\n let attrLength = elem.attributes.length;\n for (let i = 0; i < attrLength; i++) {\n let name = elem.attributes[i].name;\n let value = elem.attributes[i].value;\n if (value) {\n props[\"attr__\" + name] = value;\n }\n if (\n (name == \"name\" || name == \"id\") &&\n isElValueToBeTracked(elem, rudderanalytics.trackValues)\n ) {\n props[\"field_value\"] =\n name == \"id\"\n ? document.getElementById(value).value\n : document.getElementsByName(value)[0].value;\n\n if (elem.type === \"checkbox\" || elem.type === \"radio\") {\n props[\"field_value\"] = elem.checked;\n }\n }\n }\n\n var nthChild = 1;\n var nthOfType = 1;\n var currentElem = elem;\n while ((currentElem = previousElementSibling(currentElem))) {\n nthChild++;\n if (currentElem.tagName === elem.tagName) {\n nthOfType++;\n }\n }\n props[\"nth_child\"] = nthChild;\n props[\"nth_of_type\"] = nthOfType;\n\n return props;\n}\n\nfunction previousElementSibling(el) {\n if (el.previousElementSibling) {\n return el.previousElementSibling;\n } else {\n do {\n el = el.previousSibling;\n } while (el && !isElementNode(el));\n return el;\n }\n}\nexport { addDomEventHandlers };\n","module.exports = after\n\nfunction after(count, callback, err_cb) {\n var bail = false\n err_cb = err_cb || noop\n proxy.count = count\n\n return (count === 0) ? callback() : proxy\n\n function proxy(err, result) {\n if (proxy.count <= 0) {\n throw new Error('after called too many times')\n }\n --proxy.count\n\n // after first error, rest are passed to err_cb\n if (err) {\n bail = true\n callback(err)\n // future error callbacks will go to error handler\n callback = err_cb\n } else if (proxy.count === 0 && !bail) {\n callback(null, result)\n }\n }\n}\n\nfunction noop() {}\n","import {\n getJSONTrimmed,\n generateUUID,\n handleError,\n getDefaultPageProperties,\n findAllEnabledDestinations,\n tranformToRudderNames,\n transformToServerNames\n} from \"./utils/utils\";\nimport {\n CONFIG_URL,\n ECommerceEvents,\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL\n} from \"./utils/constants\";\nimport { integrations } from \"./integrations\";\nimport RudderElementBuilder from \"./utils/RudderElementBuilder\";\nimport Storage from \"./utils/storage\";\nimport { EventRepository } from \"./utils/EventRepository\";\nimport logger from \"./utils/logUtil\";\nimport { addDomEventHandlers } from \"./utils/autotrack.js\";\nimport Emitter from \"component-emitter\";\nimport after from \"after\";\nimport {ScriptLoader} from \"./integrations/ScriptLoader\"\n\n//https://unpkg.com/test-rudder-sdk@1.0.5/dist/browser.js\n\n/**\n * Add the rudderelement object to flush queue\n *\n * @param {RudderElement} rudderElement\n */\nfunction enqueue(rudderElement, type) {\n if (!this.eventRepository) {\n this.eventRepository = EventRepository;\n }\n this.eventRepository.enqueue(rudderElement, type);\n}\n\n/**\n * class responsible for handling core\n * event tracking functionalities\n */\nclass Analytics {\n /**\n * Creates an instance of Analytics.\n * @memberof Analytics\n */\n constructor() {\n this.autoTrackHandlersRegistered = false;\n this.autoTrackFeatureEnabled = false;\n this.initialized = false;\n this.trackValues = [];\n this.eventsBuffer = [];\n this.clientIntegrations = [];\n this.loadOnlyIntegrations = {};\n this.clientIntegrationObjects = undefined;\n this.successfullyLoadedIntegration = [];\n this.failedToBeLoadedIntegration = [];\n this.toBeProcessedArray = [];\n this.toBeProcessedByIntegrationArray = [];\n this.storage = Storage;\n this.userId =\n this.storage.getUserId() != undefined ? this.storage.getUserId() : \"\";\n\n this.userTraits =\n this.storage.getUserTraits() != undefined\n ? this.storage.getUserTraits()\n : {};\n\n this.groupId =\n this.storage.getGroupId() != undefined ? this.storage.getGroupId() : \"\";\n\n this.groupTraits =\n this.storage.getGroupTraits() != undefined\n ? this.storage.getGroupTraits()\n : {};\n\n this.anonymousId = this.getAnonymousId();\n this.storage.setUserId(this.userId);\n this.eventRepository = EventRepository;\n this.sendAdblockPage = false\n this.sendAdblockPageOptions = {}\n this.clientSuppliedCallbacks = {}\n this.readyCallback = () => {};\n this.executeReadyCallback = undefined;\n this.methodToCallbackMapping = {\n syncPixel: \"syncPixelCallback\"\n };\n }\n\n /**\n * Process the response from control plane and\n * call initialize for integrations\n *\n * @param {*} status\n * @param {*} response\n * @memberof Analytics\n */\n processResponse(status, response) {\n try {\n logger.debug(\"===in process response=== \" + status);\n response = JSON.parse(response);\n if (\n response.source.useAutoTracking &&\n !this.autoTrackHandlersRegistered\n ) {\n this.autoTrackFeatureEnabled = true;\n addDomEventHandlers(this);\n this.autoTrackHandlersRegistered = true;\n }\n response.source.destinations.forEach(function(destination, index) {\n logger.debug(\n \"Destination \" +\n index +\n \" Enabled? \" +\n destination.enabled +\n \" Type: \" +\n destination.destinationDefinition.name +\n \" Use Native SDK? \" +\n destination.config.useNativeSDK\n );\n if (destination.enabled) {\n this.clientIntegrations.push({\"name\": destination.destinationDefinition.name, \"config\": destination.config});\n }\n }, this);\n\n // intersection of config-plane native sdk destinations with sdk load time destination list\n this.clientIntegrations = findAllEnabledDestinations(\n this.loadOnlyIntegrations,\n this.clientIntegrations\n );\n\n // remove from the list which don't have support yet in SDK\n this.clientIntegrations = this.clientIntegrations.filter(intg => {\n return integrations[intg.name] != undefined\n })\n\n this.init(this.clientIntegrations);\n } catch (error) {\n handleError(error);\n logger.debug(\"===handling config BE response processing error===\");\n logger.debug(\n \"autoTrackHandlersRegistered\",\n this.autoTrackHandlersRegistered\n );\n if (this.autoTrackFeatureEnabled && !this.autoTrackHandlersRegistered) {\n addDomEventHandlers(this);\n this.autoTrackHandlersRegistered = true;\n }\n }\n }\n\n /**\n * Initialize integrations by addinfg respective scripts\n * keep the instances reference in core\n *\n * @param {*} intgArray\n * @returns\n * @memberof Analytics\n */\n init(intgArray) {\n let self = this;\n logger.debug(\"supported intgs \", integrations);\n // this.clientIntegrationObjects = [];\n\n if (!intgArray || intgArray.length == 0) {\n if (this.readyCallback) {\n this.readyCallback();\n }\n this.toBeProcessedByIntegrationArray = [];\n return;\n }\n\n intgArray.forEach((intg) => {\n try {\n logger.debug(\"[Analytics] init :: trying to initialize integration name:: \", intg.name)\n let intgClass = integrations[intg.name];\n let destConfig = intg.config;\n let intgInstance = new intgClass(destConfig, self);\n intgInstance.init();\n\n logger.debug(\"initializing destination: \", intg);\n\n this.isInitialized(intgInstance).then(this.replayEvents);\n } catch (e) {\n logger.error(\"[Analytics] initialize integration (integration.init()) failed :: \", intg.name)\n }\n \n\n });\n }\n\n replayEvents(object) {\n if (\n object.successfullyLoadedIntegration.length +\n object.failedToBeLoadedIntegration.length ==\n object.clientIntegrations.length &&\n object.toBeProcessedByIntegrationArray.length > 0\n ) {\n logger.debug(\n \"===replay events called====\",\n object.successfullyLoadedIntegration.length,\n object.failedToBeLoadedIntegration.length\n );\n object.clientIntegrationObjects = [];\n object.clientIntegrationObjects = object.successfullyLoadedIntegration;\n\n logger.debug(\n \"==registering after callback===\",\n object.clientIntegrationObjects.length\n );\n object.executeReadyCallback = after(\n object.clientIntegrationObjects.length,\n object.readyCallback\n );\n\n logger.debug(\"==registering ready callback===\");\n object.on(\"ready\", object.executeReadyCallback);\n\n object.clientIntegrationObjects.forEach(intg => {\n logger.debug(\"===looping over each successful integration====\");\n if (!intg[\"isReady\"] || intg[\"isReady\"]()) {\n logger.debug(\"===letting know I am ready=====\", intg[\"name\"]);\n object.emit(\"ready\");\n }\n });\n\n //send the queued events to the fetched integration\n object.toBeProcessedByIntegrationArray.forEach(event => {\n let methodName = event[0];\n event.shift();\n\n // convert common names to sdk identified name\n if (Object.keys(event[0].message.integrations).length > 0) {\n tranformToRudderNames(event[0].message.integrations);\n }\n \n // if not specified at event level, All: true is default\n var clientSuppliedIntegrations = event[0].message.integrations;\n \n \n\n // get intersection between config plane native enabled destinations\n // (which were able to successfully load on the page) vs user supplied integrations\n var succesfulLoadedIntersectClientSuppliedIntegrations = findAllEnabledDestinations(\n clientSuppliedIntegrations,\n object.clientIntegrationObjects\n );\n\n //send to all integrations now from the 'toBeProcessedByIntegrationArray' replay queue\n for (let i = 0; i < succesfulLoadedIntersectClientSuppliedIntegrations.length; i++) {\n try {\n if (\n !succesfulLoadedIntersectClientSuppliedIntegrations[i][\"isFailed\"] ||\n !succesfulLoadedIntersectClientSuppliedIntegrations[i][\"isFailed\"]()\n ) {\n if(succesfulLoadedIntersectClientSuppliedIntegrations[i][methodName]) {\n succesfulLoadedIntersectClientSuppliedIntegrations[i][methodName](\n ...event\n );\n }\n \n }\n } catch (error) {\n handleError(error);\n }\n }\n });\n object.toBeProcessedByIntegrationArray = [];\n }\n }\n\n pause(time) {\n return new Promise(resolve => {\n setTimeout(resolve, time);\n });\n }\n\n isInitialized(instance, time = 0) {\n return new Promise(resolve => {\n if (instance.isLoaded()) {\n logger.debug(\n \"===integration loaded successfully====\",\n instance[\"name\"]\n );\n this.successfullyLoadedIntegration.push(instance);\n return resolve(this);\n }\n if (time >= MAX_WAIT_FOR_INTEGRATION_LOAD) {\n logger.debug(\"====max wait over====\");\n this.failedToBeLoadedIntegration.push(instance);\n return resolve(this);\n }\n\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() => {\n logger.debug(\"====after pause, again checking====\");\n return this.isInitialized(\n instance,\n time + INTEGRATION_LOAD_CHECK_INTERVAL\n ).then(resolve);\n });\n });\n }\n\n /**\n * Process page params and forward to page call\n *\n * @param {*} category\n * @param {*} name\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n page(category, name, properties, options, callback) {\n if (typeof options == \"function\") (callback = options), (options = null);\n if (typeof properties == \"function\")\n (callback = properties), (options = properties = null);\n if (typeof name == \"function\")\n (callback = name), (options = properties = name = null);\n if (typeof category === \"object\")\n (options = name), (properties = category), (name = category = null);\n if (typeof name === \"object\")\n (options = properties), (properties = name), (name = null);\n if (typeof category === \"string\" && typeof name !== \"string\")\n (name = category), (category = null);\n if(this.sendAdblockPage && category != \"RudderJS-Initiated\") {\n this.sendSampleRequest()\n }\n this.processPage(category, name, properties, options, callback);\n }\n\n /**\n * Process track params and forward to track call\n *\n * @param {*} event\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n track(event, properties, options, callback) {\n if (typeof options == \"function\") (callback = options), (options = null);\n if (typeof properties == \"function\")\n (callback = properties), (options = null), (properties = null);\n\n this.processTrack(event, properties, options, callback);\n }\n\n /**\n * Process identify params and forward to indentify call\n *\n * @param {*} userId\n * @param {*} traits\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n identify(userId, traits, options, callback) {\n if (typeof options == \"function\") (callback = options), (options = null);\n if (typeof traits == \"function\")\n (callback = traits), (options = null), (traits = null);\n if (typeof userId == \"object\")\n (options = traits), (traits = userId), (userId = this.userId);\n\n this.processIdentify(userId, traits, options, callback);\n }\n\n /**\n *\n * @param {*} to\n * @param {*} from\n * @param {*} options\n * @param {*} callback\n */\n alias(to, from, options, callback) {\n if (typeof options == \"function\") (callback = options), (options = null);\n if (typeof from == \"function\")\n (callback = from), (options = null), (from = null);\n if (typeof from == \"object\") (options = from), (from = null);\n\n let rudderElement = new RudderElementBuilder().setType(\"alias\").build();\n rudderElement.message.previousId =\n from || (this.userId ? this.userId : this.getAnonymousId());\n rudderElement.message.userId = to;\n\n this.processAndSendDataToDestinations(\n \"alias\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n *\n * @param {*} to\n * @param {*} from\n * @param {*} options\n * @param {*} callback\n */\n group(groupId, traits, options, callback) {\n if (!arguments.length) return;\n\n if (typeof options == \"function\") (callback = options), (options = null);\n if (typeof traits == \"function\")\n (callback = traits), (options = null), (traits = null);\n if (typeof groupId == \"object\")\n (options = traits), (traits = groupId), (groupId = this.groupId);\n\n this.groupId = groupId;\n this.storage.setGroupId(this.groupId);\n\n let rudderElement = new RudderElementBuilder().setType(\"group\").build();\n if (traits) {\n for (let key in traits) {\n this.groupTraits[key] = traits[key];\n }\n } else {\n this.groupTraits = {};\n }\n this.storage.setGroupTraits(this.groupTraits);\n\n this.processAndSendDataToDestinations(\n \"group\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Send page call to Rudder BE and to initialized integrations\n *\n * @param {*} category\n * @param {*} name\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n processPage(category, name, properties, options, callback) {\n let rudderElement = new RudderElementBuilder().setType(\"page\").build();\n if (name) {\n rudderElement[\"message\"][\"name\"] = name;\n }\n if (!properties) {\n properties = {};\n }\n if (category) {\n properties[\"category\"] = category;\n }\n if (properties) {\n rudderElement[\"message\"][\"properties\"] = this.getPageProperties(\n properties\n ); //properties;\n }\n\n this.trackPage(rudderElement, options, callback);\n }\n\n /**\n * Send track call to Rudder BE and to initialized integrations\n *\n * @param {*} event\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n processTrack(event, properties, options, callback) {\n let rudderElement = new RudderElementBuilder().setType(\"track\").build();\n if (event) {\n rudderElement.setEventName(event);\n }\n if (properties) {\n rudderElement.setProperty(properties);\n } else {\n rudderElement.setProperty({});\n }\n\n this.trackEvent(rudderElement, options, callback);\n }\n\n /**\n * Send identify call to Rudder BE and to initialized integrations\n *\n * @param {*} userId\n * @param {*} traits\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n processIdentify(userId, traits, options, callback) {\n if (userId && this.userId && userId !== this.userId) {\n this.reset();\n }\n this.userId = userId;\n this.storage.setUserId(this.userId);\n\n let rudderElement = new RudderElementBuilder().setType(\"identify\").build();\n if (traits) {\n for (let key in traits) {\n this.userTraits[key] = traits[key];\n }\n this.storage.setUserTraits(this.userTraits);\n }\n\n this.identifyUser(rudderElement, options, callback);\n }\n\n /**\n * Identify call supporting rudderelement from builder\n *\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n identifyUser(rudderElement, options, callback) {\n if (rudderElement[\"message\"][\"userId\"]) {\n this.userId = rudderElement[\"message\"][\"userId\"];\n this.storage.setUserId(this.userId);\n }\n\n if (\n rudderElement &&\n rudderElement[\"message\"] &&\n rudderElement[\"message\"][\"context\"] &&\n rudderElement[\"message\"][\"context\"][\"traits\"]\n ) {\n this.userTraits = Object.assign(\n {},\n rudderElement[\"message\"][\"context\"][\"traits\"]\n );\n this.storage.setUserTraits(this.userTraits);\n }\n\n this.processAndSendDataToDestinations(\n \"identify\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Page call supporting rudderelement from builder\n *\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n trackPage(rudderElement, options, callback) {\n this.processAndSendDataToDestinations(\n \"page\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Track call supporting rudderelement from builder\n *\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n trackEvent(rudderElement, options, callback) {\n this.processAndSendDataToDestinations(\n \"track\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Process and send data to destinations along with rudder BE\n *\n * @param {*} type\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n processAndSendDataToDestinations(type, rudderElement, options, callback) {\n try {\n if (!this.anonymousId) {\n this.setAnonymousId();\n }\n\n // assign page properties to context\n rudderElement[\"message\"][\"context\"][\"page\"] = getDefaultPageProperties();\n\n rudderElement[\"message\"][\"context\"][\"traits\"] = Object.assign(\n {},\n this.userTraits\n );\n \n logger.debug(\"anonymousId: \", this.anonymousId);\n rudderElement[\"message\"][\"anonymousId\"] = this.anonymousId;\n rudderElement[\"message\"][\"userId\"] = rudderElement[\"message\"][\"userId\"]\n ? rudderElement[\"message\"][\"userId\"]\n : this.userId;\n\n if (type == \"group\") {\n if (this.groupId) {\n rudderElement[\"message\"][\"groupId\"] = this.groupId;\n }\n if (this.groupTraits) {\n rudderElement[\"message\"][\"traits\"] = Object.assign(\n {},\n this.groupTraits\n );\n }\n }\n\n if (options) {\n this.processOptionsParam(rudderElement, options);\n }\n logger.debug(JSON.stringify(rudderElement));\n\n // structure user supplied integrations object to rudder format\n if (Object.keys(rudderElement.message.integrations).length > 0) {\n tranformToRudderNames(rudderElement.message.integrations);\n }\n\n // if not specified at event level, All: true is default\n var clientSuppliedIntegrations = rudderElement.message.integrations;\n\n // get intersection between config plane native enabled destinations\n // (which were able to successfully load on the page) vs user supplied integrations\n var succesfulLoadedIntersectClientSuppliedIntegrations = findAllEnabledDestinations(\n clientSuppliedIntegrations,\n this.clientIntegrationObjects\n );\n\n //try to first send to all integrations, if list populated from BE\n succesfulLoadedIntersectClientSuppliedIntegrations.forEach(obj => {\n if (!obj[\"isFailed\"] || !obj[\"isFailed\"]()) {\n if(obj[type]) {\n obj[type](rudderElement);\n }\n }\n });\n\n // config plane native enabled destinations, still not completely loaded\n // in the page, add the events to a queue and process later\n if (!this.clientIntegrationObjects) {\n logger.debug(\"pushing in replay queue\");\n //new event processing after analytics initialized but integrations not fetched from BE\n this.toBeProcessedByIntegrationArray.push([type, rudderElement]);\n }\n\n // convert integrations object to server identified names, kind of hack now!\n transformToServerNames(rudderElement.message.integrations)\n \n // self analytics process, send to rudder\n enqueue.call(this, rudderElement, type);\n\n logger.debug(type + \" is called \");\n if (callback) {\n callback();\n }\n } catch (error) {\n handleError(error);\n }\n }\n\n /**\n * process options parameter\n *\n * @param {*} rudderElement\n * @param {*} options\n * @memberof Analytics\n */\n processOptionsParam(rudderElement, options) {\n var toplevelElements = [\"integrations\", \"anonymousId\", \"originalTimestamp\"];\n for (let key in options) {\n if (toplevelElements.includes(key)) {\n rudderElement.message[key] = options[key];\n //special handle for ananymousId as transformation expects anonymousId in traits.\n /* if (key === \"anonymousId\") {\n rudderElement.message.context.traits[\"anonymousId\"] = options[key];\n } */\n } else {\n if (key !== \"context\")\n rudderElement.message.context[key] = options[key];\n else {\n for (let k in options[key]) {\n rudderElement.message.context[k] = options[key][k];\n }\n }\n }\n }\n }\n\n getPageProperties(properties) {\n let defaultPageProperties = getDefaultPageProperties();\n for (let key in defaultPageProperties) {\n if (properties[key] === undefined) {\n properties[key] = defaultPageProperties[key];\n }\n }\n return properties;\n }\n\n /**\n * Clear user information\n *\n * @memberof Analytics\n */\n reset() {\n this.userId = \"\";\n this.userTraits = {};\n this.storage.clear();\n }\n\n getAnonymousId() {\n this.anonymousId = this.storage.getAnonymousId();\n if (!this.anonymousId) {\n this.setAnonymousId();\n }\n return this.anonymousId;\n }\n\n setAnonymousId(anonymousId) {\n this.anonymousId = anonymousId ? anonymousId : generateUUID();\n this.storage.setAnonymousId(this.anonymousId);\n }\n\n /**\n * Call control pane to get client configs\n *\n * @param {*} writeKey\n * @memberof Analytics\n */\n load(writeKey, serverUrl, options) {\n logger.debug(\"inside load \");\n let configUrl = CONFIG_URL;\n if (!writeKey || !serverUrl || serverUrl.length == 0) {\n handleError({\n message:\n \"[Analytics] load:: Unable to load due to wrong writeKey or serverUrl\"\n });\n throw Error(\"failed to initialize\");\n }\n if (options && options.logLevel) {\n logger.setLogLevel(options.logLevel);\n }\n if (options && options.integrations) {\n Object.assign(this.loadOnlyIntegrations, options.integrations);\n tranformToRudderNames(this.loadOnlyIntegrations);\n }\n if (options && options.configUrl) {\n configUrl = options.configUrl;\n }\n if(options && options.sendAdblockPage) {\n this.sendAdblockPage = true\n }\n if(options && options.sendAdblockPageOptions) {\n if(typeof options.sendAdblockPageOptions == \"object\") {\n this.sendAdblockPageOptions = options.sendAdblockPageOptions\n }\n }\n if(options && options.clientSuppliedCallbacks) {\n\n // convert to rudder recognised method names\n let tranformedCallbackMapping = {}\n Object.keys(this.methodToCallbackMapping).forEach(methodName =>{\n if(this.methodToCallbackMapping.hasOwnProperty(methodName)) {\n if(options.clientSuppliedCallbacks[this.methodToCallbackMapping[methodName]]) {\n tranformedCallbackMapping[methodName] = options.clientSuppliedCallbacks[this.methodToCallbackMapping[methodName]]\n }\n }\n })\n Object.assign(this.clientSuppliedCallbacks, tranformedCallbackMapping)\n this.registerCallbacks(true)\n }\n\n this.eventRepository.writeKey = writeKey;\n if (serverUrl) {\n this.eventRepository.url = serverUrl;\n }\n if (\n options &&\n options.valTrackingList &&\n options.valTrackingList.push == Array.prototype.push\n ) {\n this.trackValues = options.valTrackingList;\n }\n if (options && options.useAutoTracking) {\n this.autoTrackFeatureEnabled = true;\n if (this.autoTrackFeatureEnabled && !this.autoTrackHandlersRegistered) {\n addDomEventHandlers(this);\n this.autoTrackHandlersRegistered = true;\n logger.debug(\n \"autoTrackHandlersRegistered\",\n this.autoTrackHandlersRegistered\n );\n }\n }\n try {\n getJSONTrimmed(this, configUrl, writeKey, this.processResponse);\n } catch (error) {\n handleError(error);\n if (this.autoTrackFeatureEnabled && !this.autoTrackHandlersRegistered) {\n addDomEventHandlers(instance);\n }\n }\n }\n\n ready(callback) {\n if (typeof callback == \"function\") {\n this.readyCallback = callback;\n return;\n }\n logger.error(\"ready callback is not a function\");\n }\n\n initializeCallbacks() {\n Object.keys(this.methodToCallbackMapping).forEach(methodName => {\n if (this.methodToCallbackMapping.hasOwnProperty(methodName)) {\n this.on(methodName, () => {});\n }\n })\n }\n\n registerCallbacks(calledFromLoad) {\n\n if(!calledFromLoad) {\n Object.keys(this.methodToCallbackMapping).forEach(methodName => {\n if (this.methodToCallbackMapping.hasOwnProperty(methodName)) {\n if(!!window.rudderanalytics) {\n if (typeof window.rudderanalytics[\n this.methodToCallbackMapping[methodName]\n ] == \"function\") {\n this.clientSuppliedCallbacks[methodName] = window.rudderanalytics[this.methodToCallbackMapping[methodName]]\n }\n }\n // let callback = \n // ? typeof window.rudderanalytics[\n // this.methodToCallbackMapping[methodName]\n // ] == \"function\"\n // ? window.rudderanalytics[this.methodToCallbackMapping[methodName]]\n // : () => {}\n // : () => {};\n \n //logger.debug(\"registerCallbacks\", methodName, callback);\n \n //this.on(methodName, callback);\n }\n });\n }\n \n Object.keys(this.clientSuppliedCallbacks).forEach(methodName => {\n if(this.clientSuppliedCallbacks.hasOwnProperty(methodName)) {\n logger.debug(\"registerCallbacks\", methodName, this.clientSuppliedCallbacks[methodName]);\n this.on(methodName, this.clientSuppliedCallbacks[methodName]);\n }\n })\n }\n\n sendSampleRequest() {\n ScriptLoader(\"ad-block\", \"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\")\n }\n \n}\n\nlet instance = new Analytics();\n\nEmitter(instance);\n\nif (process.browser) {\n window.addEventListener(\n \"error\",\n (e) => {\n handleError(e, instance);\n },\n true\n );\n}\n\nif (process.browser) {\n // test for adblocker\n // instance.sendSampleRequest()\n \n // initialize supported callbacks\n instance.initializeCallbacks()\n\n // register supported callbacks\n instance.registerCallbacks(false);\n let eventsPushedAlready =\n !!window.rudderanalytics &&\n window.rudderanalytics.push == Array.prototype.push;\n\n let methodArg = window.rudderanalytics ? window.rudderanalytics[0] : [];\n if (methodArg.length > 0 && methodArg[0] == \"load\") {\n let method = methodArg[0];\n methodArg.shift();\n logger.debug(\"=====from init, calling method:: \", method);\n instance[method](...methodArg);\n }\n\n if (eventsPushedAlready) {\n for (let i = 1; i < window.rudderanalytics.length; i++) {\n instance.toBeProcessedArray.push(window.rudderanalytics[i]);\n }\n\n for (let i = 0; i < instance.toBeProcessedArray.length; i++) {\n let event = [...instance.toBeProcessedArray[i]];\n let method = event[0];\n event.shift();\n logger.debug(\"=====from init, calling method:: \", method);\n instance[method](...event);\n }\n instance.toBeProcessedArray = [];\n }\n}\n\nlet ready = instance.ready.bind(instance);\nlet identify = instance.identify.bind(instance);\nlet page = instance.page.bind(instance);\nlet track = instance.track.bind(instance);\nlet alias = instance.alias.bind(instance);\nlet group = instance.group.bind(instance);\nlet reset = instance.reset.bind(instance);\nlet load = instance.load.bind(instance);\nlet initialized = (instance.initialized = true);\nlet getAnonymousId = instance.getAnonymousId.bind(instance);\nlet setAnonymousId = instance.setAnonymousId.bind(instance);\n\nexport {\n initialized,\n ready,\n page,\n track,\n load,\n identify,\n reset,\n alias,\n group,\n getAnonymousId,\n setAnonymousId\n};\n"],"names":["LOG_LEVEL","logger","logLevel","toUpperCase","console","debug","arguments","error","commonNames","clientToServerNames","replacer","key","value","generateUUID","d","Date","getTime","performance","now","replace","c","r","Math","random","floor","toString","getCurrentTimeFormatted","toISOString","handleError","analyticsInstance","errorMessage","message","undefined","sampleAdBlockTest","Event","target","localName","src","id","includes","page","path","title","sendAdblockPageOptions","e","getDefaultPageProperties","canonicalUrl","getCanonicalUrl","pathname","window","location","referrer","document","search","url","indexOf","href","hashIndex","slice","getUrl","tag","tags","getElementsByTagName","i","getAttribute","getRevenue","properties","eventName","revenue","match","total","val","parseFloat","isNaN","getCurrency","tranformToRudderNames","integrationObject","Object","keys","forEach","hasOwnProperty","findAllEnabledDestinations","sdkSuppliedIntegrations","configPlaneEnabledIntegrations","enabledList","length","allValue","intg","intgValue","push","_typeof","name","MessageType","TRACK","PAGE","IDENTIFY","ECommerceEvents","PRODUCTS_SEARCHED","PRODUCT_LIST_VIEWED","PRODUCT_LIST_FILTERED","PROMOTION_VIEWED","PROMOTION_CLICKED","PRODUCT_CLICKED","PRODUCT_VIEWED","PRODUCT_ADDED","PRODUCT_REMOVED","CART_VIEWED","CHECKOUT_STARTED","CHECKOUT_STEP_VIEWED","CHECKOUT_STEP_COMPLETED","PAYMENT_INFO_ENTERED","ORDER_UPDATED","ORDER_COMPLETED","ORDER_REFUNDED","ORDER_CANCELLED","COUPON_ENTERED","COUPON_APPLIED","COUPON_DENIED","COUPON_REMOVED","PRODUCT_ADDED_TO_WISHLIST","PRODUCT_REMOVED_FROM_WISHLIST","WISH_LIST_PRODUCT_ADDED_TO_CART","PRODUCT_SHARED","CART_SHARED","PRODUCT_REVIEWED","ScriptLoader","js","createElement","async","type","parentNode","insertBefore","config","hubId","hubID","this","rudderElement","traits","context","traitsValue","k","getOwnPropertyDescriptor","hubspotkey","call","userProperties","user_properties","_hsq","eventValue","event","Array","prototype","clone","obj","t","nodeType","_isBuffer","constructor","isBuffer","valueOf","apply","copy","l","flags","multiline","global","ignoreCase","RegExp","source","s","m","h","options","str","exec","n","toLowerCase","parse","long","ms","plural","round","short","ceil","exports","module","namespace","disabled","enabled","self","curr","prevTime","diff","prev","useColors","color","selectColor","args","coerce","concat","index","format","formatter","formatters","splice","formatArgs","logFn","log","bind","fn","Error","stack","enable","namespaces","save","split","len","skips","substr","names","test","require$$0","prevColor","colors","load","storage","Function","humanize","lastC","removeItem","documentElement","style","firebug","exception","table","navigator","userAgent","parseInt","$1","chrome","local","localStorage","localstorage","j","v","JSON","stringify","set","get","all","encode","maxage","expires","domain","toUTCString","samesite","secure","cookie","err","pair","pairs","decode","encodeURIComponent","decodeURIComponent","max","count","collection","toDrop","Number","resultsLength","results","has","objToString","isObject","Boolean","isPlainObject","shallowCombiner","deepCombiner","defaultsDeep","defaultsWith","combiner","sources","drop","rest","objectTypes","function","object","freeExports","root","freeGlobal","runInContext","String","SyntaxError","TypeError","nativeJSON","objectProto","getClass","isProperty","attempt","func","errorFunc","isExtended","isSupported","serialized","stringifySupported","toJSON","a","parseSupported","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","charIndexBuggy","forOwn","callback","Properties","dontEnums","property","size","isConstructor","isFunction","hasProperty","Escapes","92","34","8","12","10","13","9","toPaddedString","width","serializeDate","getData","year","month","date","time","hours","minutes","seconds","milliseconds","Months","getDay","dateToJSON","nativeStringify","filter","nativeToJSON","result","escapeChar","character","charCode","charCodeAt","escaped","reEscape","quote","lastIndex","serialize","whitespace","indentation","className","element","prefix","join","pop","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","charAt","temp","hasMembers","update","walk","previousJSON","JSON3","isRestored","noConflict","port","protocol","host","hash","hostname","query","isAbsolute","levels","opts","parts","last","Cookie","_options","topDomain","defaults","remove","json","store","win","doc","version","defaultVal","clear","transact","transactionFn","getAll","ret","deserialize","isLocalStorageNameSupported","setItem","getItem","addBehavior","storageOwner","storageContainer","ActiveXObject","open","write","close","w","frames","body","withIEStorage","storeFunction","unshift","appendChild","removeChild","forbiddenCharsRegex","ieKeyFix","setAttribute","removeAttribute","attributes","XMLDocument","attr","testKey","Store","trackingID","allowLinker","o","g","q","ga","userId","Storage","getUserId","anonymousId","eventCategory","eventAction","eventLabel","category","label","hitType","gaplugins","siteId","siteID","_ready","hotjarSiteId","hj","_hjSettings","hjid","hjsv","conversionId","conversionID","pageLoadConversions","clickEventConversions","defaultPageConversion","dataLayer","gtag","conversionData","getConversionData","conversionLabel","sendToValue","send_to","eventTypeConversions","eventTypeConversion","VWO","analytics","accountId","settingsTolerance","isSPA","libraryTolerance","useExistingJquery","sendExperimentTrack","sendExperimentIdentify","account_id","settings_tolerance","library_tolerance","use_existing_jquery","_vwo_code","f","finish","getElementById","finished","b","innerText","onerror","init","settings_timer","setTimeout","styleSheet","cssText","createTextNode","URL","_vwo_settings_timer","experimentViewedIdentify","experimentViewed","data","expId","variationId","_vwo_exp","comb_n","_this","track","experimentId","variationName","identify","GoogleTagManager","containerID","rudderMessage","props","sendToGTMDatalayer","pageName","pageCategory","Braze","appKey","endPoint","dataCenter","dataCenterArr","trim","gender","appboy","ab","User","Genders","FEMALE","MALE","OTHER","p","P","y","appboyQueue","getUser","getCachedFeed","Feed","getCachedContentCards","ContentCards","initialize","enableLogging","baseUrl","display","automaticallyShowNewInAppMessages","changeUser","openSession","address","avatar","birthday","email","firstname","lastname","phone","setAvatarImageUrl","setEmail","setFirstName","setGender","formatGender","setLastName","setPhoneNumber","setCountry","country","setHomeCity","city","setDateOfBirth","setCustomUserAttribute","products","currencyCode","currency","del","product","productId","product_id","price","quantity","logPurchase","handlePurchase","handleReservedProperties","logCustomEvent","base64map","crypt","rotl","rotr","endian","randomBytes","bytes","bytesToWords","words","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","base64","triplet","base64ToBytes","imod4","pow","charenc","utf8","stringToBytes","bin","unescape","bytesToString","escape","readFloatLE","isSlowBuffer","symbolValueOf","bigIntValueOf","require$$1","require$$2","md5","encoding","isArray","FF","_ff","GG","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","x","_blocksize","_digestsize","digestbytes","asBytes","asString","INTERCOM","NAME","API_KEY","apiKey","APP_ID","appId","MOBILE_APP_ID","mobileAppId","intercomSettings","app_id","ic","Intercom","readyState","intercom_code","attachEvent","addEventListener","rawPayload","userHash","user_hash","hideDefaultLauncher","hide_default_launcher","field","companies","company","companyFields","user_id","event_name","created_at","originalTimestamp","Keen","projectID","writeKey","ipAddon","uaAddon","urlAddon","referrerAddon","client","check","setInterval","KeenTracking","projectId","initKeen","clearInterval","assign","user","getAddOn","extendEvents","recordEvent","addOns","ip_address","input","ip","output","user_agent","ua_string","page_url","referrer_url","keen","addons","objProto","owns","toStr","Symbol","BigInt","isActualNaN","NON_HOST_TYPES","boolean","number","string","base64Regex","hexRegex","is","defined","empty","equal","other","hosted","instance","nil","undef","isStandardArguments","isOldArguments","array","arraylike","callee","bool","isFinite","valid","HTMLElement","alert","infinite","Infinity","decimal","divisibleBy","isDividendInfinite","isDivisorInfinite","isNonZeroNumber","integer","maximum","others","minimum","nan","even","odd","ge","gt","le","lt","within","start","primitive","regexp","symbol","bigint","expr","dest","multiple","normalize","normalizer","defaultNormalize","loop","normalizedKey","child","globals","arr","unique","_","prefixed","map","toFunction","defaultToFunction","objectToFunction","prop","stripNested","re","$0","ctx","Kissmetrics","prefixProperties","_kmq","_kmk","_kms","u","isEnvMobile","toUnixTimestamp","nestedObj","flattenedObj","flatten","safe","extend","delimiter","maxDepth","currentDepth","step","isarray","isobject","newKey","each","clean","timestamp","iterator","item","_t","_d","KM","previousId","groupId","groupTraits","CustomerIO","_cio","callbacks","interval","Chartbeat","_sf_async_config","useCanonical","uid","isVideo","video","sendNameAndCategoryAsTitle","subscriberEngagementKeys","replayEvents","failed","isFirstPageCallMade","loadConfig","isLoaded","pSUPERFLY","virtualPage","initAfterPage","author","sections","authors","_cbq","script","_isReady","then","Promise","resolve","_this2","emit","pause","Comscore","c2ID","comScoreBeaconParam","comScoreParams","COMSCORE","beacon","mapComscoreParams","_comscore","el","comScoreBeaconParamsMap","c1","c2","hop","strCharAt","indexKeys","pred","isArrayLike","objectKeys","isNumber","arrayEach","baseEach","ks","FBPixel","blacklistPiiProperties","categoryToContent","pixelId","eventsToEvents","eventCustomProperties","valueFieldIdentifier","advancedMapping","traitKeyToExternalId","legacyConversionPixelId","userIdAsPixelId","whitelistPiiProperties","_fbq","fbq","callMethod","queue","loaded","disablePushState","allowDuplicatePageViews","formatRevenue","payload","buildPayLoad","standardTo","legacyTo","standard","legacy","reduce","filtered","from","to","eventID","messageId","contents","customProperties","contentIds","contentType","merge","content_ids","content_type","getContentType","useValue","sku","content_name","product_name","content_category","item_price","pId","content","num_items","search_string","contentCategory","defaultValue","mappedTo","mapped","obj1","obj2","res","propObj1","propObj2","toFixed","isStandardEvent","dateFields","defaultPiiProperties","customPiiProperties","configuration","blacklistPiiHash","toISOTring","sha256","isPropertyPii","isProperyWhiteListed","lotameStorage","integrations","HS","HubSpot","GA","HOTJAR","Hotjar","GOOGLEADS","GoogleAds","GTM","BRAZE","KEEN","KISSMETRICS","CUSTOMERIO","CHARTBEAT","FACEBOOK_PIXEL","LOTAME","LotameStorage","bcpUrlSettingsPixel","bcpUrlSettingsIframe","dspUrlSettingsPixel","dspUrlSettingsIframe","mappings","mapping","LOTAME_SYNCH_CALLBACK","height","image","iframe","currentTime","urlSettings","dspUrl","compileUrl","dspUrlTemplate","addPixel","addIFrame","setLotameSynchTime","methodToCallbackMapping","destination","regex","syncPixel","bcpUrl","_this3","bcpUrlTemplate","isPixelToBeSynched","lastSynchedTime","getLotameSynchTime","RudderApp","build","RudderLibraryInfo","RudderOSInfo","RudderScreenInfo","density","RudderContext","app","library","os","screen","devicePixelRatio","locale","language","browserLanguage","device","network","RudderMessage","channel","action","messageType","values","checkForKey","SCREEN","propertyName","RudderElement","rudderProperty","rudderUserProperty","RudderElementBuilder","inputRudderProperty","rudderPropertyBuilder","inputRudderUserProperty","rudderUserPropertyBuilder","eventType","setUserId","setType","setEventName","setProperty","setUserProperty","RudderPayload","batch","getRandomValues","crypto","msCrypto","rnds8","Uint8Array","rnds","byteToHex","_nodeId","_clockseq","buf","offset","bth","_lastMSecs","_lastNSecs","node","clockseq","seedBytes","rng","msecs","nsecs","dt","tl","tmh","bytesToUuid","ii","uuid","v4","v1","inMemoryStore","_data","isSupportedNatively","defaultEngine","inMemoryEngine","optionalEngine","engine","compoundKey","_createValidKey","quotaExceeded","code","isQuotaExceeded","_swapEngine","defaultClock","clearTimeout","clock","Schedule","tasks","nextId","run","task","timeout","_handle","cancel","cancelAll","setClock","newClock","resetClock","fmt","disable","Emitter","mixin","on","_callbacks","once","off","removeListener","removeAllListeners","removeEventListener","cb","listeners","hasListeners","Queue","maxItems","maxAttempts","backoff","MIN_RETRY_DELAY","minRetryDelay","MAX_RETRY_DELAY","maxRetryDelay","FACTOR","backoffFactor","JITTER","backoffJitter","timeouts","ACK_TIMER","RECLAIM_TIMER","RECLAIM_TIMEOUT","RECLAIM_WAIT","IN_PROGRESS","QUEUE","ACK","RECLAIM_START","RECLAIM_END","_schedule","_processId","_store","_ack","_checkReclaim","_processHead","_running","stop","shouldRetry","attemptNumber","getDelay","rand","deviation","min","toPrecision","addItem","_enqueue","requeue","entry","sort","inProgress","toRun","enqueue","done","inProgressSize","shift","_reclaim","tryReclaim","findOtherQueues","our","their","queueOptions","eventRepository","eventsBuffer","state","batchSize","payloadQueue","sentAt","processQueueElement","headers","repo","eventsPayload","xhr","XMLHttpRequest","setRequestHeader","btoa","onreadystatechange","status","send","queueFn","ontimeout","statusText","getElementContent","Authorization","AnonymousId","addDomEventHandlers","rudderanalytics","handler","srcElement","isTextNode","shouldTrackDomEvent","formValues","tagName","elements","formElement","isElToBeTracked","isElValueToBeTracked","trackValues","getElementsByName","checked","targetElementList","curEl","isTag","elementsJson","explicitNoTrack","shouldTrackEl","shouldTrackElement","elem","classes","getClassName","tag_name","attrLength","nthChild","nthOfType","currentElem","previousElementSibling","getPropertiesFromElement","elementText","text","childNodes","Node","TEXT_NODE","nodeValue","getText","event_type","el_attr_href","el_text","trackWindowEvent","register_event","useCapture","isElementNode","baseVal","includeList","elAttributesLength","previousSibling","err_cb","bail","noop","proxy","EventRepository","autoTrackHandlersRegistered","autoTrackFeatureEnabled","initialized","clientIntegrations","loadOnlyIntegrations","clientIntegrationObjects","successfullyLoadedIntegration","failedToBeLoadedIntegration","toBeProcessedArray","toBeProcessedByIntegrationArray","userTraits","getUserTraits","getGroupId","getGroupTraits","getAnonymousId","sendAdblockPage","clientSuppliedCallbacks","readyCallback","executeReadyCallback","response","useAutoTracking","destinations","destinationDefinition","useNativeSDK","intgArray","intgInstance","intgClass","isInitialized","after","methodName","succesfulLoadedIntersectClientSuppliedIntegrations","sendSampleRequest","processPage","processTrack","processIdentify","processAndSendDataToDestinations","setGroupId","setGroupTraits","getPageProperties","trackPage","trackEvent","reset","setUserTraits","identifyUser","setAnonymousId","processOptionsParam","toplevelElements","defaultPageProperties","serverUrl","configUrl","tranformedCallbackMapping","registerCallbacks","valTrackingList","cb_","onload","responseText","getJSONTrimmed","processResponse","_this4","calledFromLoad","_this5","initializeCallbacks","eventsPushedAlready","methodArg","method","ready","alias","group"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"rudder-analytics.min.js","sources":["../node_modules/component-emitter/index.js","../node_modules/after/index.js","../node_modules/trim/index.js","../node_modules/component-querystring/index.js","../node_modules/component-querystring/node_modules/component-type/index.js","../node_modules/component-url/index.js","../utils/logUtil.js","../integrations/integration_cname.js","../integrations/client_server_name.js","../utils/constants.js","../utils/utils.js","../integrations/ScriptLoader.js","../node_modules/is/index.js","../integrations/HubSpot/browser.js","../node_modules/to-function/index.js","../node_modules/component-each/node_modules/component-type/index.js","../node_modules/component-props/index.js","../node_modules/component-each/index.js","../integrations/GA/browser.js","../integrations/Hotjar/browser.js","../integrations/GoogleAds/browser.js","../integrations/VWO/browser.js","../integrations/GoogleTagManager/browser.js","../integrations/Braze/browser.js","../node_modules/crypt/crypt.js","../node_modules/charenc/charenc.js","../node_modules/is-buffer/index.js","../node_modules/md5/md5.js","../integrations/INTERCOM/browser.js","../integrations/Keen/browser.js","../node_modules/@ndhoule/extend/index.js","../node_modules/obj-case/index.js","../integrations/Kissmetrics/browser.js","../integrations/CustomerIO/browser.js","../node_modules/on-body/index.js","../integrations/Chartbeat/browser.js","../integrations/Comscore/browser.js","../node_modules/@ndhoule/keys/index.js","../node_modules/@ndhoule/each/index.js","../integrations/FacebookPixel/browser.js","../node_modules/crypto-js/core.js","../node_modules/crypto-js/enc-base64.js","../node_modules/crypto-js/md5.js","../node_modules/crypto-js/sha1.js","../node_modules/crypto-js/hmac.js","../node_modules/crypto-js/evpkdf.js","../node_modules/crypto-js/cipher-core.js","../node_modules/crypto-js/aes.js","../node_modules/crypto-js/enc-utf8.js","../node_modules/component-type/index.js","../node_modules/@ndhoule/clone/index.js","../node_modules/ms/index.js","../node_modules/rudder-component-cookie/node_modules/debug/debug.js","../node_modules/rudder-component-cookie/node_modules/debug/browser.js","../node_modules/rudder-component-cookie/index.js","../node_modules/@ndhoule/drop/index.js","../node_modules/@ndhoule/rest/index.js","../node_modules/@ndhoule/defaults/index.js","../node_modules/json3/lib/json3.js","../node_modules/component-cookie/node_modules/debug/debug.js","../node_modules/component-cookie/node_modules/debug/browser.js","../node_modules/component-cookie/index.js","../node_modules/@segment/top-domain/lib/index.js","../utils/storage/cookie.js","../node_modules/@segment/store/src/store.js","../utils/storage/store.js","../utils/storage/storage.js","../utils/storage/index.js","../integrations/Lotame/LotameStorage.js","../integrations/Lotame/browser.js","../integrations/Optimizely/browser.js","../integrations/Bugsnag/browser.js","../node_modules/camelcase/index.js","../node_modules/uuid/lib/bytesToUuid.js","../integrations/index.js","../integrations/Fullstory/browser.js","../integrations/TVSquared/browser.js","../utils/RudderApp.js","../utils/RudderInfo.js","../utils/RudderContext.js","../utils/RudderMessage.js","../utils/RudderElement.js","../utils/RudderElementBuilder.js","../node_modules/uuid/lib/rng-browser.js","../node_modules/uuid/v1.js","../node_modules/uuid/v4.js","../node_modules/uuid/index.js","../node_modules/@segment/localstorage-retry/lib/engine.js","../node_modules/@segment/localstorage-retry/lib/store.js","../node_modules/@segment/localstorage-retry/lib/schedule.js","../node_modules/debug/debug.js","../node_modules/@segment/localstorage-retry/lib/index.js","../utils/RudderPayload.js","../utils/EventRepository.js","../utils/autotrack.js","../analytics.js"],"sourcesContent":["\n/**\n * Expose `Emitter`.\n */\n\nif (typeof module !== 'undefined') {\n module.exports = Emitter;\n}\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","module.exports = after\n\nfunction after(count, callback, err_cb) {\n var bail = false\n err_cb = err_cb || noop\n proxy.count = count\n\n return (count === 0) ? callback() : proxy\n\n function proxy(err, result) {\n if (proxy.count <= 0) {\n throw new Error('after called too many times')\n }\n --proxy.count\n\n // after first error, rest are passed to err_cb\n if (err) {\n bail = true\n callback(err)\n // future error callbacks will go to error handler\n callback = err_cb\n } else if (proxy.count === 0 && !bail) {\n callback(null, result)\n }\n }\n}\n\nfunction noop() {}\n","\nexports = module.exports = trim;\n\nfunction trim(str){\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n return str.replace(/\\s*$/, '');\n};\n","\n/**\n * Module dependencies.\n */\n\nvar trim = require('trim');\nvar type = require('type');\n\nvar pattern = /(\\w+)\\[(\\d+)\\]/\n\n/**\n * Safely encode the given string\n * \n * @param {String} str\n * @return {String}\n * @api private\n */\n\nvar encode = function(str) {\n try {\n return encodeURIComponent(str);\n } catch (e) {\n return str;\n }\n};\n\n/**\n * Safely decode the string\n * \n * @param {String} str\n * @return {String}\n * @api private\n */\n\nvar decode = function(str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, ' '));\n } catch (e) {\n return str;\n }\n}\n\n/**\n * Parse the given query `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api public\n */\n\nexports.parse = function(str){\n if ('string' != typeof str) return {};\n\n str = trim(str);\n if ('' == str) return {};\n if ('?' == str.charAt(0)) str = str.slice(1);\n\n var obj = {};\n var pairs = str.split('&');\n for (var i = 0; i < pairs.length; i++) {\n var parts = pairs[i].split('=');\n var key = decode(parts[0]);\n var m;\n\n if (m = pattern.exec(key)) {\n obj[m[1]] = obj[m[1]] || [];\n obj[m[1]][m[2]] = decode(parts[1]);\n continue;\n }\n\n obj[parts[0]] = null == parts[1]\n ? ''\n : decode(parts[1]);\n }\n\n return obj;\n};\n\n/**\n * Stringify the given `obj`.\n *\n * @param {Object} obj\n * @return {String}\n * @api public\n */\n\nexports.stringify = function(obj){\n if (!obj) return '';\n var pairs = [];\n\n for (var key in obj) {\n var value = obj[key];\n\n if ('array' == type(value)) {\n for (var i = 0; i < value.length; ++i) {\n pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));\n }\n continue;\n }\n\n pairs.push(encode(key) + '=' + encode(obj[key]));\n }\n\n return pairs.join('&');\n};\n","/**\n * toString ref.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n *\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nmodule.exports = function(val){\n switch (toString.call(val)) {\n case '[object Date]': return 'date';\n case '[object RegExp]': return 'regexp';\n case '[object Arguments]': return 'arguments';\n case '[object Array]': return 'array';\n case '[object Error]': return 'error';\n }\n\n if (val === null) return 'null';\n if (val === undefined) return 'undefined';\n if (val !== val) return 'nan';\n if (val && val.nodeType === 1) return 'element';\n\n val = val.valueOf\n ? val.valueOf()\n : Object.prototype.valueOf.apply(val)\n\n return typeof val;\n};\n","\n/**\n * Parse the given `url`.\n *\n * @param {String} str\n * @return {Object}\n * @api public\n */\n\nexports.parse = function(url){\n var a = document.createElement('a');\n a.href = url;\n return {\n href: a.href,\n host: a.host || location.host,\n port: ('0' === a.port || '' === a.port) ? port(a.protocol) : a.port,\n hash: a.hash,\n hostname: a.hostname || location.hostname,\n pathname: a.pathname.charAt(0) != '/' ? '/' + a.pathname : a.pathname,\n protocol: !a.protocol || ':' == a.protocol ? location.protocol : a.protocol,\n search: a.search,\n query: a.search.slice(1)\n };\n};\n\n/**\n * Check if `url` is absolute.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isAbsolute = function(url){\n return 0 == url.indexOf('//') || !!~url.indexOf('://');\n};\n\n/**\n * Check if `url` is relative.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isRelative = function(url){\n return !exports.isAbsolute(url);\n};\n\n/**\n * Check if `url` is cross domain.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isCrossDomain = function(url){\n url = exports.parse(url);\n var location = exports.parse(window.location.href);\n return url.hostname !== location.hostname\n || url.port !== location.port\n || url.protocol !== location.protocol;\n};\n\n/**\n * Return default port for `protocol`.\n *\n * @param {String} protocol\n * @return {String}\n * @api private\n */\nfunction port (protocol){\n switch (protocol) {\n case 'http:':\n return 80;\n case 'https:':\n return 443;\n default:\n return location.port;\n }\n}\n","const LOG_LEVEL_INFO = 1;\nconst LOG_LEVEL_DEBUG = 2;\nconst LOG_LEVEL_WARN = 3;\nconst LOG_LEVEL_ERROR = 4;\nlet LOG_LEVEL = LOG_LEVEL_ERROR;\n\nconst logger = {\n setLogLevel(logLevel) {\n switch (logLevel.toUpperCase()) {\n case \"INFO\":\n LOG_LEVEL = LOG_LEVEL_INFO;\n return;\n case \"DEBUG\":\n LOG_LEVEL = LOG_LEVEL_DEBUG;\n return;\n case \"WARN\":\n LOG_LEVEL = LOG_LEVEL_WARN;\n }\n },\n\n info() {\n if (LOG_LEVEL <= LOG_LEVEL_INFO) {\n console.log(...arguments);\n }\n },\n\n debug() {\n if (LOG_LEVEL <= LOG_LEVEL_DEBUG) {\n console.log(...arguments);\n }\n },\n\n warn() {\n if (LOG_LEVEL <= LOG_LEVEL_WARN) {\n console.log(...arguments);\n }\n },\n\n error() {\n if (LOG_LEVEL <= LOG_LEVEL_ERROR) {\n console.log(...arguments);\n }\n },\n};\nexport default logger;\n","// for sdk side native integration identification\n// add a mapping from common names to index.js exported key names as identified by Rudder\nconst commonNames = {\n All: \"All\",\n \"Google Analytics\": \"GA\",\n GoogleAnalytics: \"GA\",\n GA: \"GA\",\n \"Google Ads\": \"GOOGLEADS\",\n GoogleAds: \"GOOGLEADS\",\n GOOGLEADS: \"GOOGLEADS\",\n Braze: \"BRAZE\",\n BRAZE: \"BRAZE\",\n Chartbeat: \"CHARTBEAT\",\n CHARTBEAT: \"CHARTBEAT\",\n Comscore: \"COMSCORE\",\n COMSCORE: \"COMSCORE\",\n Customerio: \"CUSTOMERIO\",\n \"Customer.io\": \"CUSTOMERIO\",\n \"FB Pixel\": \"FACEBOOK_PIXEL\",\n \"Facebook Pixel\": \"FACEBOOK_PIXEL\",\n FB_PIXEL: \"FACEBOOK_PIXEL\",\n \"Google Tag Manager\": \"GOOGLETAGMANAGER\",\n GTM: \"GTM\",\n Hotjar: \"HOTJAR\",\n hotjar: \"HOTJAR\",\n HOTJAR: \"HOTJAR\",\n Hubspot: \"HS\",\n HUBSPOT: \"HS\",\n Intercom: \"INTERCOM\",\n INTERCOM: \"INTERCOM\",\n Keen: \"KEEN\",\n \"Keen.io\": \"KEEN\",\n KEEN: \"KEEN\",\n Kissmetrics: \"KISSMETRICS\",\n KISSMETRICS: \"KISSMETRICS\",\n Lotame: \"LOTAME\",\n LOTAME: \"LOTAME\",\n \"Visual Website Optimizer\": \"VWO\",\n VWO: \"VWO\",\n OPTIMIZELY: \"OPTIMIZELY\",\n Optimizely: \"OPTIMIZELY\",\n FULLSTORY: \"FULLSTORY\",\n Fullstory: \"FULLSTORY\",\n BUGSNAG: \"BUGSNAG\",\n TVSQUARED: \"TVSQUARED\",\n};\n\nexport { commonNames };\n","// from client native integration name to server identified display name\n// add a mapping from Rudder identified key names to Rudder server recognizable names\nconst clientToServerNames = {\n All: \"All\",\n GA: \"Google Analytics\",\n GOOGLEADS: \"Google Ads\",\n BRAZE: \"Braze\",\n CHARTBEAT: \"Chartbeat\",\n COMSCORE: \"Comscore\",\n CUSTOMERIO: \"Customer IO\",\n FACEBOOK_PIXEL: \"Facebook Pixel\",\n GTM: \"Google Tag Manager\",\n HOTJAR: \"Hotjar\",\n HS: \"HubSpot\",\n INTERCOM: \"Intercom\",\n KEEN: \"Keen\",\n KISSMETRICS: \"Kiss Metrics\",\n LOTAME: \"Lotame\",\n VWO: \"VWO\",\n OPTIMIZELY: \"Optimizely\",\n FULLSTORY: \"Fullstory\",\n TVSQUUARED: \"TVSquared\"\n};\n\nexport { clientToServerNames };\n","// Message Type enumeration\nconst MessageType = {\n TRACK: \"track\",\n PAGE: \"page\",\n // SCREEN: \"screen\",\n IDENTIFY: \"identify\",\n};\n\n// ECommerce Parameter Names Enumeration\nconst ECommerceParamNames = {\n QUERY: \"query\",\n PRICE: \"price\",\n PRODUCT_ID: \"product_id\",\n CATEGORY: \"category\",\n CURRENCY: \"currency\",\n LIST_ID: \"list_id\",\n PRODUCTS: \"products\",\n WISHLIST_ID: \"wishlist_id\",\n WISHLIST_NAME: \"wishlist_name\",\n QUANTITY: \"quantity\",\n CART_ID: \"cart_id\",\n CHECKOUT_ID: \"checkout_id\",\n TOTAL: \"total\",\n REVENUE: \"revenue\",\n ORDER_ID: \"order_id\",\n FILTERS: \"filters\",\n SORTS: \"sorts\",\n SHARE_VIA: \"share_via\",\n SHARE_MESSAGE: \"share_message\",\n RECIPIENT: \"recipient\",\n};\n// ECommerce Events Enumeration\nconst ECommerceEvents = {\n PRODUCTS_SEARCHED: \"Products Searched\",\n PRODUCT_LIST_VIEWED: \"Product List Viewed\",\n PRODUCT_LIST_FILTERED: \"Product List Filtered\",\n PROMOTION_VIEWED: \"Promotion Viewed\",\n PROMOTION_CLICKED: \"Promotion Clicked\",\n PRODUCT_CLICKED: \"Product Clicked\",\n PRODUCT_VIEWED: \"Product Viewed\",\n PRODUCT_ADDED: \"Product Added\",\n PRODUCT_REMOVED: \"Product Removed\",\n CART_VIEWED: \"Cart Viewed\",\n CHECKOUT_STARTED: \"Checkout Started\",\n CHECKOUT_STEP_VIEWED: \"Checkout Step Viewed\",\n CHECKOUT_STEP_COMPLETED: \"Checkout Step Completed\",\n PAYMENT_INFO_ENTERED: \"Payment Info Entered\",\n ORDER_UPDATED: \"Order Updated\",\n ORDER_COMPLETED: \"Order Completed\",\n ORDER_REFUNDED: \"Order Refunded\",\n ORDER_CANCELLED: \"Order Cancelled\",\n COUPON_ENTERED: \"Coupon Entered\",\n COUPON_APPLIED: \"Coupon Applied\",\n COUPON_DENIED: \"Coupon Denied\",\n COUPON_REMOVED: \"Coupon Removed\",\n PRODUCT_ADDED_TO_WISHLIST: \"Product Added to Wishlist\",\n PRODUCT_REMOVED_FROM_WISHLIST: \"Product Removed from Wishlist\",\n WISH_LIST_PRODUCT_ADDED_TO_CART: \"Wishlist Product Added to Cart\",\n PRODUCT_SHARED: \"Product Shared\",\n CART_SHARED: \"Cart Shared\",\n PRODUCT_REVIEWED: \"Product Reviewed\",\n};\n\n// Enumeration for integrations supported\nconst RudderIntegrationPlatform = {\n RUDDERLABS: \"rudderlabs\",\n GA: \"ga\",\n AMPLITUDE: \"amplitude\",\n};\n\nconst BASE_URL = \"https://hosted.rudderlabs.com\"; // default to RudderStack\nconst CONFIG_URL = \"https://api.rudderlabs.com/sourceConfig/?p=process.module_type&v=process.package_version\";\n\nconst FLUSH_QUEUE_SIZE = 30;\n\nconst FLUSH_INTERVAL_DEFAULT = 5000;\n\nconst MAX_WAIT_FOR_INTEGRATION_LOAD = 10000;\nconst INTEGRATION_LOAD_CHECK_INTERVAL = 1000;\n\nexport {\n MessageType,\n ECommerceParamNames,\n ECommerceEvents,\n RudderIntegrationPlatform,\n BASE_URL,\n CONFIG_URL,\n FLUSH_QUEUE_SIZE,\n FLUSH_INTERVAL_DEFAULT,\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL,\n};\n/* module.exports = {\n MessageType: MessageType,\n ECommerceParamNames: ECommerceParamNames,\n ECommerceEvents: ECommerceEvents,\n RudderIntegrationPlatform: RudderIntegrationPlatform,\n BASE_URL: BASE_URL,\n CONFIG_URL: CONFIG_URL,\n FLUSH_QUEUE_SIZE: FLUSH_QUEUE_SIZE\n}; */\n","// import * as XMLHttpRequestNode from \"Xmlhttprequest\";\nimport { parse } from \"component-url\";\nimport logger from \"./logUtil\";\nimport { commonNames } from \"../integrations/integration_cname\";\nimport { clientToServerNames } from \"../integrations/client_server_name\";\nimport { CONFIG_URL } from \"./constants\";\n\n/**\n *\n * Utility method for excluding null and empty values in JSON\n * @param {*} key\n * @param {*} value\n * @returns\n */\nfunction replacer(key, value) {\n if (value === null || value === undefined) {\n return undefined;\n }\n return value;\n}\n\n/**\n *\n * Utility function for UUID genration\n * @returns\n */\nfunction generateUUID() {\n // Public Domain/MIT\n let d = new Date().getTime();\n if (\n typeof performance !== \"undefined\" &&\n typeof performance.now === \"function\"\n ) {\n d += performance.now(); // use high-precision timer if available\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n\n/**\n *\n * Utility function to get current time (formatted) for including in sent_at field\n * @returns\n */\nfunction getCurrentTimeFormatted() {\n const curDateTime = new Date().toISOString();\n // Keeping same as iso string\n /* let curDate = curDateTime.split(\"T\")[0];\n let curTimeExceptMillis = curDateTime\n .split(\"T\")[1]\n .split(\"Z\")[0]\n .split(\".\")[0];\n let curTimeMillis = curDateTime.split(\"Z\")[0].split(\".\")[1];\n return curDate + \" \" + curTimeExceptMillis + \"+\" + curTimeMillis; */\n return curDateTime;\n}\n\n/**\n *\n * Utility function to retrieve configuration JSON from server\n * @param {*} url\n * @param {*} wrappers\n * @param {*} isLoaded\n * @param {*} callback\n */\nfunction getJSON(url, wrappers, isLoaded, callback) {\n // server-side integration, XHR is node module\n\n const xhr = new XMLHttpRequest();\n\n xhr.open(\"GET\", url, false);\n xhr.onload = function () {\n const { status } = xhr;\n if (status == 200) {\n logger.debug(\"status 200\");\n callback(null, xhr.responseText, wrappers, isLoaded);\n } else {\n callback(status);\n }\n };\n xhr.send();\n}\n\n/**\n *\n * Utility function to retrieve configuration JSON from server\n * @param {*} context\n * @param {*} url\n * @param {*} callback\n */\nfunction getJSONTrimmed(context, url, writeKey, callback) {\n // server-side integration, XHR is node module\n const cb_ = callback.bind(context);\n\n const xhr = new XMLHttpRequest();\n\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader(\"Authorization\", `Basic ${btoa(`${writeKey}:`)}`);\n\n xhr.onload = function () {\n const { status } = xhr;\n if (status == 200) {\n logger.debug(\"status 200 \" + \"calling callback\");\n cb_(200, xhr.responseText);\n } else {\n handleError(\n new Error(`request failed with status: ${xhr.status} for url: ${url}`)\n );\n cb_(status);\n }\n };\n xhr.send();\n}\n\nfunction handleError(error, analyticsInstance) {\n let errorMessage = error.message ? error.message : undefined;\n let sampleAdBlockTest;\n try {\n if (error instanceof Event) {\n if (error.target && error.target.localName == \"script\") {\n errorMessage = `error in script loading:: src:: ${error.target.src} id:: ${error.target.id}`;\n if (analyticsInstance && error.target.src.includes(\"adsbygoogle\")) {\n sampleAdBlockTest = true;\n analyticsInstance.page(\n \"RudderJS-Initiated\",\n \"ad-block page request\",\n { path: \"/ad-blocked\", title: errorMessage },\n analyticsInstance.sendAdblockPageOptions\n );\n }\n }\n }\n if (errorMessage && !sampleAdBlockTest) {\n logger.error(\"[Util] handleError:: \", errorMessage);\n }\n } catch (e) {\n logger.error(\"[Util] handleError:: \", e);\n }\n}\n\nfunction getDefaultPageProperties() {\n const canonicalUrl = getCanonicalUrl();\n const path = canonicalUrl\n ? parse(canonicalUrl).pathname\n : window.location.pathname;\n const { referrer } = document;\n const { search } = window.location;\n const { title } = document;\n const url = getUrl(search);\n\n return {\n path,\n referrer,\n search,\n title,\n url,\n };\n}\n\nfunction getUrl(search) {\n const canonicalUrl = getCanonicalUrl();\n const url = canonicalUrl\n ? canonicalUrl.indexOf(\"?\") > -1\n ? canonicalUrl\n : canonicalUrl + search\n : window.location.href;\n const hashIndex = url.indexOf(\"#\");\n return hashIndex > -1 ? url.slice(0, hashIndex) : url;\n}\n\nfunction getCanonicalUrl() {\n const tags = document.getElementsByTagName(\"link\");\n for (var i = 0, tag; (tag = tags[i]); i++) {\n if (tag.getAttribute(\"rel\") === \"canonical\") {\n return tag.getAttribute(\"href\");\n }\n }\n}\n\nfunction getCurrency(val) {\n if (!val) return;\n if (typeof val === \"number\") {\n return val;\n }\n if (typeof val !== \"string\") {\n return;\n }\n\n val = val.replace(/\\$/g, \"\");\n val = parseFloat(val);\n\n if (!isNaN(val)) {\n return val;\n }\n}\n\nfunction getRevenue(properties, eventName) {\n let { revenue } = properties;\n const orderCompletedRegExp = /^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i;\n\n // it's always revenue, unless it's called during an order completion.\n if (!revenue && eventName && eventName.match(orderCompletedRegExp)) {\n revenue = properties.total;\n }\n\n return getCurrency(revenue);\n}\n\n/**\n *\n *\n * @param {*} integrationObject\n */\nfunction tranformToRudderNames(integrationObject) {\n Object.keys(integrationObject).forEach((key) => {\n if (integrationObject.hasOwnProperty(key)) {\n if (commonNames[key]) {\n integrationObject[commonNames[key]] = integrationObject[key];\n }\n if (key != \"All\") {\n // delete user supplied keys except All and if except those where oldkeys are not present or oldkeys are same as transformed keys\n if (commonNames[key] != undefined && commonNames[key] != key) {\n delete integrationObject[key];\n }\n }\n }\n });\n}\n\nfunction transformToServerNames(integrationObject) {\n Object.keys(integrationObject).forEach((key) => {\n if (integrationObject.hasOwnProperty(key)) {\n if (clientToServerNames[key]) {\n integrationObject[clientToServerNames[key]] = integrationObject[key];\n }\n if (key != \"All\") {\n // delete user supplied keys except All and if except those where oldkeys are not present or oldkeys are same as transformed keys\n if (\n clientToServerNames[key] != undefined &&\n clientToServerNames[key] != key\n ) {\n delete integrationObject[key];\n }\n }\n }\n });\n}\n\n/**\n *\n * @param {*} sdkSuppliedIntegrations\n * @param {*} configPlaneEnabledIntegrations\n */\nfunction findAllEnabledDestinations(\n sdkSuppliedIntegrations,\n configPlaneEnabledIntegrations\n) {\n const enabledList = [];\n if (\n !configPlaneEnabledIntegrations ||\n configPlaneEnabledIntegrations.length == 0\n ) {\n return enabledList;\n }\n let allValue = true;\n if (typeof configPlaneEnabledIntegrations[0] === \"string\") {\n if (sdkSuppliedIntegrations.All != undefined) {\n allValue = sdkSuppliedIntegrations.All;\n }\n configPlaneEnabledIntegrations.forEach((intg) => {\n if (!allValue) {\n // All false ==> check if intg true supplied\n if (\n sdkSuppliedIntegrations[intg] != undefined &&\n sdkSuppliedIntegrations[intg] == true\n ) {\n enabledList.push(intg);\n }\n } else {\n // All true ==> intg true by default\n let intgValue = true;\n // check if intg false supplied\n if (\n sdkSuppliedIntegrations[intg] != undefined &&\n sdkSuppliedIntegrations[intg] == false\n ) {\n intgValue = false;\n }\n if (intgValue) {\n enabledList.push(intg);\n }\n }\n });\n\n return enabledList;\n }\n\n if (typeof configPlaneEnabledIntegrations[0] === \"object\") {\n if (sdkSuppliedIntegrations.All != undefined) {\n allValue = sdkSuppliedIntegrations.All;\n }\n configPlaneEnabledIntegrations.forEach((intg) => {\n if (!allValue) {\n // All false ==> check if intg true supplied\n if (\n sdkSuppliedIntegrations[intg.name] != undefined &&\n sdkSuppliedIntegrations[intg.name] == true\n ) {\n enabledList.push(intg);\n }\n } else {\n // All true ==> intg true by default\n let intgValue = true;\n // check if intg false supplied\n if (\n sdkSuppliedIntegrations[intg.name] != undefined &&\n sdkSuppliedIntegrations[intg.name] == false\n ) {\n intgValue = false;\n }\n if (intgValue) {\n enabledList.push(intg);\n }\n }\n });\n\n return enabledList;\n }\n}\n\n/**\n * reject all null values from array/object\n * @param {} obj\n * @param {} fn\n */\nfunction rejectArr(obj, fn) {\n fn = fn || compact;\n return type(obj) == \"array\" ? rejectarray(obj, fn) : rejectobject(obj, fn);\n}\n\n/**\n * particular case when rejecting an array\n * @param {} arr\n * @param {} fn\n */\nvar rejectarray = function (arr, fn) {\n const ret = [];\n\n for (let i = 0; i < arr.length; ++i) {\n if (!fn(arr[i], i)) ret[ret.length] = arr[i];\n }\n\n return ret;\n};\n\n/**\n * Rejecting null from any object other than arrays\n * @param {} obj\n * @param {} fn\n *\n */\nvar rejectobject = function (obj, fn) {\n const ret = {};\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k) && !fn(obj[k], k)) {\n ret[k] = obj[k];\n }\n }\n\n return ret;\n};\n\nfunction compact(value) {\n return value == null;\n}\n\n/**\n * check type of object incoming in the rejectArr function\n * @param {} val\n */\nfunction type(val) {\n switch (Object.prototype.toString.call(val)) {\n case \"[object Function]\":\n return \"function\";\n case \"[object Date]\":\n return \"date\";\n case \"[object RegExp]\":\n return \"regexp\";\n case \"[object Arguments]\":\n return \"arguments\";\n case \"[object Array]\":\n return \"array\";\n }\n\n if (val === null) return \"null\";\n if (val === undefined) return \"undefined\";\n if (val === Object(val)) return \"object\";\n\n return typeof val;\n}\n\nfunction getUserProvidedConfigUrl(configUrl) {\n let url = configUrl;\n if (configUrl.indexOf(\"sourceConfig\") == -1) {\n url = url.slice(-1) == \"/\" ? url.slice(0, -1) : url;\n url = `${url}/sourceConfig/`;\n }\n url = url.slice(-1) == \"/\" ? url : `${url}/`;\n if (url.indexOf(\"?\") > -1) {\n if (url.split(\"?\")[1] !== CONFIG_URL.split(\"?\")[1]) {\n url = `${url.split(\"?\")[0]}?${CONFIG_URL.split(\"?\")[1]}`;\n }\n } else {\n url = `${url}?${CONFIG_URL.split(\"?\")[1]}`;\n }\n return url;\n}\n\nexport {\n replacer,\n generateUUID,\n getCurrentTimeFormatted,\n getJSONTrimmed,\n getJSON,\n getRevenue,\n getDefaultPageProperties,\n getUserProvidedConfigUrl,\n findAllEnabledDestinations,\n tranformToRudderNames,\n transformToServerNames,\n handleError,\n rejectArr,\n};\n","import logger from \"../utils/logUtil\";\n\nconst ScriptLoader = (id, src) => {\n logger.debug(`in script loader=== ${id}`);\n const js = document.createElement(\"script\");\n js.src = src;\n js.async = true;\n js.type = \"text/javascript\";\n js.id = id;\n const e = document.getElementsByTagName(\"script\")[0];\n logger.debug(\"==script==\", e);\n e.parentNode.insertBefore(js, e);\n};\n\nexport default ScriptLoader;\n","/* globals window, HTMLElement */\n\n'use strict';\n\n/**!\n * is\n * the definitive JavaScript type testing library\n *\n * @copyright 2013-2014 Enrico Marino / Jordan Harband\n * @license MIT\n */\n\nvar objProto = Object.prototype;\nvar owns = objProto.hasOwnProperty;\nvar toStr = objProto.toString;\nvar symbolValueOf;\nif (typeof Symbol === 'function') {\n symbolValueOf = Symbol.prototype.valueOf;\n}\nvar bigIntValueOf;\nif (typeof BigInt === 'function') {\n bigIntValueOf = BigInt.prototype.valueOf;\n}\nvar isActualNaN = function (value) {\n return value !== value;\n};\nvar NON_HOST_TYPES = {\n 'boolean': 1,\n number: 1,\n string: 1,\n undefined: 1\n};\n\nvar base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/;\nvar hexRegex = /^[A-Fa-f0-9]+$/;\n\n/**\n * Expose `is`\n */\n\nvar is = {};\n\n/**\n * Test general.\n */\n\n/**\n * is.type\n * Test if `value` is a type of `type`.\n *\n * @param {*} value value to test\n * @param {String} type type\n * @return {Boolean} true if `value` is a type of `type`, false otherwise\n * @api public\n */\n\nis.a = is.type = function (value, type) {\n return typeof value === type;\n};\n\n/**\n * is.defined\n * Test if `value` is defined.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is defined, false otherwise\n * @api public\n */\n\nis.defined = function (value) {\n return typeof value !== 'undefined';\n};\n\n/**\n * is.empty\n * Test if `value` is empty.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is empty, false otherwise\n * @api public\n */\n\nis.empty = function (value) {\n var type = toStr.call(value);\n var key;\n\n if (type === '[object Array]' || type === '[object Arguments]' || type === '[object String]') {\n return value.length === 0;\n }\n\n if (type === '[object Object]') {\n for (key in value) {\n if (owns.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n return !value;\n};\n\n/**\n * is.equal\n * Test if `value` is equal to `other`.\n *\n * @param {*} value value to test\n * @param {*} other value to compare with\n * @return {Boolean} true if `value` is equal to `other`, false otherwise\n */\n\nis.equal = function equal(value, other) {\n if (value === other) {\n return true;\n }\n\n var type = toStr.call(value);\n var key;\n\n if (type !== toStr.call(other)) {\n return false;\n }\n\n if (type === '[object Object]') {\n for (key in value) {\n if (!is.equal(value[key], other[key]) || !(key in other)) {\n return false;\n }\n }\n for (key in other) {\n if (!is.equal(value[key], other[key]) || !(key in value)) {\n return false;\n }\n }\n return true;\n }\n\n if (type === '[object Array]') {\n key = value.length;\n if (key !== other.length) {\n return false;\n }\n while (key--) {\n if (!is.equal(value[key], other[key])) {\n return false;\n }\n }\n return true;\n }\n\n if (type === '[object Function]') {\n return value.prototype === other.prototype;\n }\n\n if (type === '[object Date]') {\n return value.getTime() === other.getTime();\n }\n\n return false;\n};\n\n/**\n * is.hosted\n * Test if `value` is hosted by `host`.\n *\n * @param {*} value to test\n * @param {*} host host to test with\n * @return {Boolean} true if `value` is hosted by `host`, false otherwise\n * @api public\n */\n\nis.hosted = function (value, host) {\n var type = typeof host[value];\n return type === 'object' ? !!host[value] : !NON_HOST_TYPES[type];\n};\n\n/**\n * is.instance\n * Test if `value` is an instance of `constructor`.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an instance of `constructor`\n * @api public\n */\n\nis.instance = is['instanceof'] = function (value, constructor) {\n return value instanceof constructor;\n};\n\n/**\n * is.nil / is.null\n * Test if `value` is null.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is null, false otherwise\n * @api public\n */\n\nis.nil = is['null'] = function (value) {\n return value === null;\n};\n\n/**\n * is.undef / is.undefined\n * Test if `value` is undefined.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is undefined, false otherwise\n * @api public\n */\n\nis.undef = is.undefined = function (value) {\n return typeof value === 'undefined';\n};\n\n/**\n * Test arguments.\n */\n\n/**\n * is.args\n * Test if `value` is an arguments object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an arguments object, false otherwise\n * @api public\n */\n\nis.args = is.arguments = function (value) {\n var isStandardArguments = toStr.call(value) === '[object Arguments]';\n var isOldArguments = !is.array(value) && is.arraylike(value) && is.object(value) && is.fn(value.callee);\n return isStandardArguments || isOldArguments;\n};\n\n/**\n * Test array.\n */\n\n/**\n * is.array\n * Test if 'value' is an array.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an array, false otherwise\n * @api public\n */\n\nis.array = Array.isArray || function (value) {\n return toStr.call(value) === '[object Array]';\n};\n\n/**\n * is.arguments.empty\n * Test if `value` is an empty arguments object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an empty arguments object, false otherwise\n * @api public\n */\nis.args.empty = function (value) {\n return is.args(value) && value.length === 0;\n};\n\n/**\n * is.array.empty\n * Test if `value` is an empty array.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an empty array, false otherwise\n * @api public\n */\nis.array.empty = function (value) {\n return is.array(value) && value.length === 0;\n};\n\n/**\n * is.arraylike\n * Test if `value` is an arraylike object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an arguments object, false otherwise\n * @api public\n */\n\nis.arraylike = function (value) {\n return !!value && !is.bool(value)\n && owns.call(value, 'length')\n && isFinite(value.length)\n && is.number(value.length)\n && value.length >= 0;\n};\n\n/**\n * Test boolean.\n */\n\n/**\n * is.bool\n * Test if `value` is a boolean.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a boolean, false otherwise\n * @api public\n */\n\nis.bool = is['boolean'] = function (value) {\n return toStr.call(value) === '[object Boolean]';\n};\n\n/**\n * is.false\n * Test if `value` is false.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is false, false otherwise\n * @api public\n */\n\nis['false'] = function (value) {\n return is.bool(value) && Boolean(Number(value)) === false;\n};\n\n/**\n * is.true\n * Test if `value` is true.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is true, false otherwise\n * @api public\n */\n\nis['true'] = function (value) {\n return is.bool(value) && Boolean(Number(value)) === true;\n};\n\n/**\n * Test date.\n */\n\n/**\n * is.date\n * Test if `value` is a date.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a date, false otherwise\n * @api public\n */\n\nis.date = function (value) {\n return toStr.call(value) === '[object Date]';\n};\n\n/**\n * is.date.valid\n * Test if `value` is a valid date.\n *\n * @param {*} value value to test\n * @returns {Boolean} true if `value` is a valid date, false otherwise\n */\nis.date.valid = function (value) {\n return is.date(value) && !isNaN(Number(value));\n};\n\n/**\n * Test element.\n */\n\n/**\n * is.element\n * Test if `value` is an html element.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an HTML Element, false otherwise\n * @api public\n */\n\nis.element = function (value) {\n return value !== undefined\n && typeof HTMLElement !== 'undefined'\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Test error.\n */\n\n/**\n * is.error\n * Test if `value` is an error object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an error object, false otherwise\n * @api public\n */\n\nis.error = function (value) {\n return toStr.call(value) === '[object Error]';\n};\n\n/**\n * Test function.\n */\n\n/**\n * is.fn / is.function (deprecated)\n * Test if `value` is a function.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a function, false otherwise\n * @api public\n */\n\nis.fn = is['function'] = function (value) {\n var isAlert = typeof window !== 'undefined' && value === window.alert;\n if (isAlert) {\n return true;\n }\n var str = toStr.call(value);\n return str === '[object Function]' || str === '[object GeneratorFunction]' || str === '[object AsyncFunction]';\n};\n\n/**\n * Test number.\n */\n\n/**\n * is.number\n * Test if `value` is a number.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a number, false otherwise\n * @api public\n */\n\nis.number = function (value) {\n return toStr.call(value) === '[object Number]';\n};\n\n/**\n * is.infinite\n * Test if `value` is positive or negative infinity.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is positive or negative Infinity, false otherwise\n * @api public\n */\nis.infinite = function (value) {\n return value === Infinity || value === -Infinity;\n};\n\n/**\n * is.decimal\n * Test if `value` is a decimal number.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a decimal number, false otherwise\n * @api public\n */\n\nis.decimal = function (value) {\n return is.number(value) && !isActualNaN(value) && !is.infinite(value) && value % 1 !== 0;\n};\n\n/**\n * is.divisibleBy\n * Test if `value` is divisible by `n`.\n *\n * @param {Number} value value to test\n * @param {Number} n dividend\n * @return {Boolean} true if `value` is divisible by `n`, false otherwise\n * @api public\n */\n\nis.divisibleBy = function (value, n) {\n var isDividendInfinite = is.infinite(value);\n var isDivisorInfinite = is.infinite(n);\n var isNonZeroNumber = is.number(value) && !isActualNaN(value) && is.number(n) && !isActualNaN(n) && n !== 0;\n return isDividendInfinite || isDivisorInfinite || (isNonZeroNumber && value % n === 0);\n};\n\n/**\n * is.integer\n * Test if `value` is an integer.\n *\n * @param value to test\n * @return {Boolean} true if `value` is an integer, false otherwise\n * @api public\n */\n\nis.integer = is['int'] = function (value) {\n return is.number(value) && !isActualNaN(value) && value % 1 === 0;\n};\n\n/**\n * is.maximum\n * Test if `value` is greater than 'others' values.\n *\n * @param {Number} value value to test\n * @param {Array} others values to compare with\n * @return {Boolean} true if `value` is greater than `others` values\n * @api public\n */\n\nis.maximum = function (value, others) {\n if (isActualNaN(value)) {\n throw new TypeError('NaN is not a valid value');\n } else if (!is.arraylike(others)) {\n throw new TypeError('second argument must be array-like');\n }\n var len = others.length;\n\n while (--len >= 0) {\n if (value < others[len]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * is.minimum\n * Test if `value` is less than `others` values.\n *\n * @param {Number} value value to test\n * @param {Array} others values to compare with\n * @return {Boolean} true if `value` is less than `others` values\n * @api public\n */\n\nis.minimum = function (value, others) {\n if (isActualNaN(value)) {\n throw new TypeError('NaN is not a valid value');\n } else if (!is.arraylike(others)) {\n throw new TypeError('second argument must be array-like');\n }\n var len = others.length;\n\n while (--len >= 0) {\n if (value > others[len]) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * is.nan\n * Test if `value` is not a number.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is not a number, false otherwise\n * @api public\n */\n\nis.nan = function (value) {\n return !is.number(value) || value !== value;\n};\n\n/**\n * is.even\n * Test if `value` is an even number.\n *\n * @param {Number} value value to test\n * @return {Boolean} true if `value` is an even number, false otherwise\n * @api public\n */\n\nis.even = function (value) {\n return is.infinite(value) || (is.number(value) && value === value && value % 2 === 0);\n};\n\n/**\n * is.odd\n * Test if `value` is an odd number.\n *\n * @param {Number} value value to test\n * @return {Boolean} true if `value` is an odd number, false otherwise\n * @api public\n */\n\nis.odd = function (value) {\n return is.infinite(value) || (is.number(value) && value === value && value % 2 !== 0);\n};\n\n/**\n * is.ge\n * Test if `value` is greater than or equal to `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean}\n * @api public\n */\n\nis.ge = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value >= other;\n};\n\n/**\n * is.gt\n * Test if `value` is greater than `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean}\n * @api public\n */\n\nis.gt = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value > other;\n};\n\n/**\n * is.le\n * Test if `value` is less than or equal to `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean} if 'value' is less than or equal to 'other'\n * @api public\n */\n\nis.le = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value <= other;\n};\n\n/**\n * is.lt\n * Test if `value` is less than `other`.\n *\n * @param {Number} value value to test\n * @param {Number} other value to compare with\n * @return {Boolean} if `value` is less than `other`\n * @api public\n */\n\nis.lt = function (value, other) {\n if (isActualNaN(value) || isActualNaN(other)) {\n throw new TypeError('NaN is not a valid value');\n }\n return !is.infinite(value) && !is.infinite(other) && value < other;\n};\n\n/**\n * is.within\n * Test if `value` is within `start` and `finish`.\n *\n * @param {Number} value value to test\n * @param {Number} start lower bound\n * @param {Number} finish upper bound\n * @return {Boolean} true if 'value' is is within 'start' and 'finish'\n * @api public\n */\nis.within = function (value, start, finish) {\n if (isActualNaN(value) || isActualNaN(start) || isActualNaN(finish)) {\n throw new TypeError('NaN is not a valid value');\n } else if (!is.number(value) || !is.number(start) || !is.number(finish)) {\n throw new TypeError('all arguments must be numbers');\n }\n var isAnyInfinite = is.infinite(value) || is.infinite(start) || is.infinite(finish);\n return isAnyInfinite || (value >= start && value <= finish);\n};\n\n/**\n * Test object.\n */\n\n/**\n * is.object\n * Test if `value` is an object.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is an object, false otherwise\n * @api public\n */\nis.object = function (value) {\n return toStr.call(value) === '[object Object]';\n};\n\n/**\n * is.primitive\n * Test if `value` is a primitive.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a primitive, false otherwise\n * @api public\n */\nis.primitive = function isPrimitive(value) {\n if (!value) {\n return true;\n }\n if (typeof value === 'object' || is.object(value) || is.fn(value) || is.array(value)) {\n return false;\n }\n return true;\n};\n\n/**\n * is.hash\n * Test if `value` is a hash - a plain object literal.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a hash, false otherwise\n * @api public\n */\n\nis.hash = function (value) {\n return is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval;\n};\n\n/**\n * Test regexp.\n */\n\n/**\n * is.regexp\n * Test if `value` is a regular expression.\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a regexp, false otherwise\n * @api public\n */\n\nis.regexp = function (value) {\n return toStr.call(value) === '[object RegExp]';\n};\n\n/**\n * Test string.\n */\n\n/**\n * is.string\n * Test if `value` is a string.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is a string, false otherwise\n * @api public\n */\n\nis.string = function (value) {\n return toStr.call(value) === '[object String]';\n};\n\n/**\n * Test base64 string.\n */\n\n/**\n * is.base64\n * Test if `value` is a valid base64 encoded string.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is a base64 encoded string, false otherwise\n * @api public\n */\n\nis.base64 = function (value) {\n return is.string(value) && (!value.length || base64Regex.test(value));\n};\n\n/**\n * Test base64 string.\n */\n\n/**\n * is.hex\n * Test if `value` is a valid hex encoded string.\n *\n * @param {*} value value to test\n * @return {Boolean} true if 'value' is a hex encoded string, false otherwise\n * @api public\n */\n\nis.hex = function (value) {\n return is.string(value) && (!value.length || hexRegex.test(value));\n};\n\n/**\n * is.symbol\n * Test if `value` is an ES6 Symbol\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a Symbol, false otherise\n * @api public\n */\n\nis.symbol = function (value) {\n return typeof Symbol === 'function' && toStr.call(value) === '[object Symbol]' && typeof symbolValueOf.call(value) === 'symbol';\n};\n\n/**\n * is.bigint\n * Test if `value` is an ES-proposed BigInt\n *\n * @param {*} value value to test\n * @return {Boolean} true if `value` is a BigInt, false otherise\n * @api public\n */\n\nis.bigint = function (value) {\n // eslint-disable-next-line valid-typeof\n return typeof BigInt === 'function' && toStr.call(value) === '[object BigInt]' && typeof bigIntValueOf.call(value) === 'bigint';\n};\n\nmodule.exports = is;\n","import ScriptLoader from \"../ScriptLoader\";\nimport logger from \"../../utils/logUtil\";\n\nclass HubSpot {\n constructor(config) {\n this.hubId = config.hubID; // 6405167\n this.name = \"HS\";\n }\n\n init() {\n const hubspotJs = `http://js.hs-scripts.com/${this.hubId}.js`;\n ScriptLoader(\"hubspot-integration\", hubspotJs);\n\n logger.debug(\"===in init HS===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"in HubspotAnalyticsManager identify\");\n\n const { traits } = rudderElement.message.context;\n const traitsValue = {};\n\n for (const k in traits) {\n if (!!Object.getOwnPropertyDescriptor(traits, k) && traits[k]) {\n const hubspotkey = k; // k.startsWith(\"rl_\") ? k.substring(3, k.length) : k;\n if (Object.prototype.toString.call(traits[k]) == \"[object Date]\") {\n traitsValue[hubspotkey] = traits[k].getTime();\n } else {\n traitsValue[hubspotkey] = traits[k];\n }\n }\n }\n /* if (traitsValue[\"address\"]) {\n let address = traitsValue[\"address\"];\n //traitsValue.delete(address)\n delete traitsValue[\"address\"];\n for (let k in address) {\n if (!!Object.getOwnPropertyDescriptor(address, k) && address[k]) {\n let hubspotkey = k;//k.startsWith(\"rl_\") ? k.substring(3, k.length) : k;\n hubspotkey = hubspotkey == \"street\" ? \"address\" : hubspotkey;\n traitsValue[hubspotkey] = address[k];\n }\n }\n } */\n const userProperties = rudderElement.message.context.user_properties;\n for (const k in userProperties) {\n if (\n !!Object.getOwnPropertyDescriptor(userProperties, k) &&\n userProperties[k]\n ) {\n const hubspotkey = k; // k.startsWith(\"rl_\") ? k.substring(3, k.length) : k;\n traitsValue[hubspotkey] = userProperties[k];\n }\n }\n\n logger.debug(traitsValue);\n\n if (typeof window !== undefined) {\n const _hsq = (window._hsq = window._hsq || []);\n _hsq.push([\"identify\", traitsValue]);\n }\n }\n\n track(rudderElement) {\n logger.debug(\"in HubspotAnalyticsManager track\");\n const _hsq = (window._hsq = window._hsq || []);\n const eventValue = {};\n eventValue.id = rudderElement.message.event;\n if (\n rudderElement.message.properties &&\n (rudderElement.message.properties.revenue ||\n rudderElement.message.properties.value)\n ) {\n eventValue.value =\n rudderElement.message.properties.revenue ||\n rudderElement.message.properties.value;\n }\n _hsq.push([\"trackEvent\", eventValue]);\n }\n\n page(rudderElement) {\n logger.debug(\"in HubspotAnalyticsManager page\");\n const _hsq = (window._hsq = window._hsq || []);\n // logger.debug(\"path: \" + rudderElement.message.properties.path);\n // _hsq.push([\"setPath\", rudderElement.message.properties.path]);\n /* _hsq.push([\"identify\",{\n email: \"testtrackpage@email.com\"\n }]); */\n if (\n rudderElement.message.properties &&\n rudderElement.message.properties.path\n ) {\n _hsq.push([\"setPath\", rudderElement.message.properties.path]);\n }\n _hsq.push([\"trackPageView\"]);\n }\n\n isLoaded() {\n logger.debug(\"in hubspot isLoaded\");\n return !!(window._hsq && window._hsq.push !== Array.prototype.push);\n }\n\n isReady() {\n return !!(window._hsq && window._hsq.push !== Array.prototype.push);\n }\n}\n\nexport { HubSpot };\n","\n/**\n * Module Dependencies\n */\n\nvar expr;\ntry {\n expr = require('props');\n} catch(e) {\n expr = require('component-props');\n}\n\n/**\n * Expose `toFunction()`.\n */\n\nmodule.exports = toFunction;\n\n/**\n * Convert `obj` to a `Function`.\n *\n * @param {Mixed} obj\n * @return {Function}\n * @api private\n */\n\nfunction toFunction(obj) {\n switch ({}.toString.call(obj)) {\n case '[object Object]':\n return objectToFunction(obj);\n case '[object Function]':\n return obj;\n case '[object String]':\n return stringToFunction(obj);\n case '[object RegExp]':\n return regexpToFunction(obj);\n default:\n return defaultToFunction(obj);\n }\n}\n\n/**\n * Default to strict equality.\n *\n * @param {Mixed} val\n * @return {Function}\n * @api private\n */\n\nfunction defaultToFunction(val) {\n return function(obj){\n return val === obj;\n };\n}\n\n/**\n * Convert `re` to a function.\n *\n * @param {RegExp} re\n * @return {Function}\n * @api private\n */\n\nfunction regexpToFunction(re) {\n return function(obj){\n return re.test(obj);\n };\n}\n\n/**\n * Convert property `str` to a function.\n *\n * @param {String} str\n * @return {Function}\n * @api private\n */\n\nfunction stringToFunction(str) {\n // immediate such as \"> 20\"\n if (/^ *\\W+/.test(str)) return new Function('_', 'return _ ' + str);\n\n // properties such as \"name.first\" or \"age > 18\" or \"age > 18 && age < 36\"\n return new Function('_', 'return ' + get(str));\n}\n\n/**\n * Convert `object` to a function.\n *\n * @param {Object} object\n * @return {Function}\n * @api private\n */\n\nfunction objectToFunction(obj) {\n var match = {};\n for (var key in obj) {\n match[key] = typeof obj[key] === 'string'\n ? defaultToFunction(obj[key])\n : toFunction(obj[key]);\n }\n return function(val){\n if (typeof val !== 'object') return false;\n for (var key in match) {\n if (!(key in val)) return false;\n if (!match[key](val[key])) return false;\n }\n return true;\n };\n}\n\n/**\n * Built the getter function. Supports getter style functions\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction get(str) {\n var props = expr(str);\n if (!props.length) return '_.' + str;\n\n var val, i, prop;\n for (i = 0; i < props.length; i++) {\n prop = props[i];\n val = '_.' + prop;\n val = \"('function' == typeof \" + val + \" ? \" + val + \"() : \" + val + \")\";\n\n // mimic negative lookbehind to avoid problems with nested properties\n str = stripNested(prop, str, val);\n }\n\n return str;\n}\n\n/**\n * Mimic negative lookbehind to avoid problems with nested properties.\n *\n * See: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript\n *\n * @param {String} prop\n * @param {String} str\n * @param {String} val\n * @return {String}\n * @api private\n */\n\nfunction stripNested (prop, str, val) {\n return str.replace(new RegExp('(\\\\.)?' + prop, 'g'), function($0, $1) {\n return $1 ? $0 : val;\n });\n}\n","\n/**\n * toString ref.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n *\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nmodule.exports = function(val){\n switch (toString.call(val)) {\n case '[object Function]': return 'function';\n case '[object Date]': return 'date';\n case '[object RegExp]': return 'regexp';\n case '[object Arguments]': return 'arguments';\n case '[object Array]': return 'array';\n case '[object String]': return 'string';\n }\n\n if (val === null) return 'null';\n if (val === undefined) return 'undefined';\n if (val && val.nodeType === 1) return 'element';\n if (val === Object(val)) return 'object';\n\n return typeof val;\n};\n","/**\n * Global Names\n */\n\nvar globals = /\\b(Array|Date|Object|Math|JSON)\\b/g;\n\n/**\n * Return immediate identifiers parsed from `str`.\n *\n * @param {String} str\n * @param {String|Function} map function or prefix\n * @return {Array}\n * @api public\n */\n\nmodule.exports = function(str, fn){\n var p = unique(props(str));\n if (fn && 'string' == typeof fn) fn = prefixed(fn);\n if (fn) return map(str, p, fn);\n return p;\n};\n\n/**\n * Return immediate identifiers in `str`.\n *\n * @param {String} str\n * @return {Array}\n * @api private\n */\n\nfunction props(str) {\n return str\n .replace(/\\.\\w+|\\w+ *\\(|\"[^\"]*\"|'[^']*'|\\/([^/]+)\\//g, '')\n .replace(globals, '')\n .match(/[a-zA-Z_]\\w*/g)\n || [];\n}\n\n/**\n * Return `str` with `props` mapped with `fn`.\n *\n * @param {String} str\n * @param {Array} props\n * @param {Function} fn\n * @return {String}\n * @api private\n */\n\nfunction map(str, props, fn) {\n var re = /\\.\\w+|\\w+ *\\(|\"[^\"]*\"|'[^']*'|\\/([^/]+)\\/|[a-zA-Z_]\\w*/g;\n return str.replace(re, function(_){\n if ('(' == _[_.length - 1]) return fn(_);\n if (!~props.indexOf(_)) return _;\n return fn(_);\n });\n}\n\n/**\n * Return unique array.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nfunction unique(arr) {\n var ret = [];\n\n for (var i = 0; i < arr.length; i++) {\n if (~ret.indexOf(arr[i])) continue;\n ret.push(arr[i]);\n }\n\n return ret;\n}\n\n/**\n * Map with prefix `str`.\n */\n\nfunction prefixed(str) {\n return function(_){\n return str + _;\n };\n}\n","\n/**\n * Module dependencies.\n */\n\ntry {\n var type = require('type');\n} catch (err) {\n var type = require('component-type');\n}\n\nvar toFunction = require('to-function');\n\n/**\n * HOP reference.\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Iterate the given `obj` and invoke `fn(val, i)`\n * in optional context `ctx`.\n *\n * @param {String|Array|Object} obj\n * @param {Function} fn\n * @param {Object} [ctx]\n * @api public\n */\n\nmodule.exports = function(obj, fn, ctx){\n fn = toFunction(fn);\n ctx = ctx || this;\n switch (type(obj)) {\n case 'array':\n return array(obj, fn, ctx);\n case 'object':\n if ('number' == typeof obj.length) return array(obj, fn, ctx);\n return object(obj, fn, ctx);\n case 'string':\n return string(obj, fn, ctx);\n }\n};\n\n/**\n * Iterate string chars.\n *\n * @param {String} obj\n * @param {Function} fn\n * @param {Object} ctx\n * @api private\n */\n\nfunction string(obj, fn, ctx) {\n for (var i = 0; i < obj.length; ++i) {\n fn.call(ctx, obj.charAt(i), i);\n }\n}\n\n/**\n * Iterate object keys.\n *\n * @param {Object} obj\n * @param {Function} fn\n * @param {Object} ctx\n * @api private\n */\n\nfunction object(obj, fn, ctx) {\n for (var key in obj) {\n if (has.call(obj, key)) {\n fn.call(ctx, key, obj[key]);\n }\n }\n}\n\n/**\n * Iterate array-ish.\n *\n * @param {Array|Object} obj\n * @param {Function} fn\n * @param {Object} ctx\n * @api private\n */\n\nfunction array(obj, fn, ctx) {\n for (var i = 0; i < obj.length; ++i) {\n fn.call(ctx, obj[i], i);\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport is from \"is\";\nimport each from \"component-each\";\nimport logger from \"../../utils/logUtil\";\nimport { rejectArr } from \"../../utils/utils\";\nimport ScriptLoader from \"../ScriptLoader\";\n\nexport default class GA {\n constructor(config) {\n this.trackingID = config.trackingID;\n this.sendUserId = config.sendUserId || false;\n this.dimensions = config.dimensions || [];\n this.metrics = config.metrics || [];\n this.contentGroupings = config.contentGroupings || [];\n this.nonInteraction = config.nonInteraction || false;\n this.anonymizeIp = config.anonymizeIp || false;\n this.useGoogleAmpClientId = config.useGoogleAmpClientId || false;\n\n this.domain = config.domain || \"auto\";\n this.doubleClick = config.doubleClick || false;\n this.enhancedEcommerce = config.enhancedEcommerce || false;\n this.enhancedLinkAttribution = config.enhancedLinkAttribution || false;\n\n this.includeSearch = config.includeSearch || false;\n this.setAllMappedProps = config.setAllMappedProps || true;\n this.siteSpeedSampleRate = config.siteSpeedSampleRate || 1;\n this.sampleRate = config.sampleRate || 100;\n this.trackCategorizedPages = config.trackCategorizedPages || true;\n this.trackNamedPages = config.trackNamedPages || true;\n this.optimizeContainerId = config.optimize || \"\";\n this.resetCustomDimensionsOnPage = config.resetCustomDimensionsOnPage || [];\n this.enhancedEcommerceLoaded = 0;\n this.name = \"GA\";\n this.eventWithCategoryFieldProductScoped = [\n \"product clicked\",\n \"product added\",\n \"product viewed\",\n \"product removed\",\n ];\n }\n\n loadScript() {\n ScriptLoader(\n \"google-analytics\",\n \"https://www.google-analytics.com/analytics.js\"\n );\n }\n\n init() {\n this.pageCalled = false;\n this.dimensionsArray = {};\n let elementTo;\n this.dimensions.forEach((element) => {\n if (element.to.startsWith(\"dimension\")) {\n this.dimensionsArray[element.from] = element.to;\n } else {\n /* eslint-disable no-param-reassign */\n elementTo = element.to.replace(/cd/g, \"dimension\");\n this.dimensionsArray[element.from] = elementTo;\n }\n });\n this.metricsArray = {};\n this.metrics.forEach((element) => {\n if (element.to.startsWith(\"dimension\")) {\n this.metricsArray[element.from] = element.to;\n } else {\n elementTo = element.to.replace(/cm/g, \"metric\");\n this.metricsArray[element.from] = elementTo;\n }\n });\n this.contentGroupingsArray = {};\n this.contentGroupings.forEach((element) => {\n this.contentGroupingsArray[element.from] = element.to;\n });\n window.GoogleAnalyticsObject = \"ga\";\n window.ga =\n window.ga ||\n function a() {\n window.ga.q = window.ga.q || [];\n window.ga.q.push(arguments);\n };\n window.ga.l = new Date().getTime();\n\n this.loadScript();\n\n // create ga with these properties. if the properties are empty it will take default values.\n const config = {\n cookieDomain: this.domain || GA.prototype.defaults.domain,\n siteSpeedSampleRate: this.siteSpeedSampleRate,\n sampleRate: this.sampleRate,\n allowLinker: true,\n useAmpClientId: this.useGoogleAmpClientId,\n };\n\n window.ga(\"create\", this.trackingID, config);\n\n if (this.optimizeContainerId) {\n window.ga(\"require\", this.optimizeContainerId);\n }\n\n // ecommerce is required\n if (!this.ecommerce) {\n window.ga(\"require\", \"ecommerce\");\n this.ecommerce = true;\n }\n\n // this is to display advertising\n if (this.doubleClick) {\n window.ga(\"require\", \"displayfeatures\");\n }\n\n // https://support.google.com/analytics/answer/2558867?hl=en\n if (this.enhancedLinkAttribution) {\n window.ga(\"require\", \"linkid\");\n }\n\n // a warning is in ga debugger if anonymize is false after initialization\n if (this.anonymizeIp) {\n window.ga(\"set\", \"anonymizeIp\", true);\n }\n\n logger.debug(\"===in init GA===\");\n }\n\n identify(rudderElement) {\n // send global id\n if (this.sendUserId && rudderElement.message.userId) {\n window.ga(\"set\", \"userId\", rudderElement.message.userId);\n }\n\n // custom dimensions and metrics\n const custom = this.metricsFunction(\n rudderElement.message.context.traits,\n this.dimensionsArray,\n this.metricsArray,\n this.contentGroupingsArray\n );\n\n if (Object.keys(custom).length) {\n window.ga(\"set\", custom);\n }\n\n logger.debug(\"in GoogleAnalyticsManager identify\");\n }\n\n track(rudderElement) {\n const self = this;\n // Ecommerce events\n const { event, properties, name } = rudderElement.message;\n const options = this.extractCheckoutOptions(rudderElement);\n const props = rudderElement.message.properties;\n const { products } = properties;\n let { total } = properties;\n const data = {};\n const eventCategory = rudderElement.message.properties.category;\n const orderId = properties.order_id;\n const eventAction = event || name || \"\";\n const eventLabel = rudderElement.message.properties.label;\n let eventValue = \"\";\n let payload;\n const { campaign } = rudderElement.message.context;\n let params;\n let filters;\n let sorts;\n if (event === \"Order Completed\" && !this.enhancedEcommerce) {\n // order_id is required\n if (!orderId) {\n logger.debug(\"order_id not present events are not sent to GA\");\n return;\n }\n\n // add transaction\n window.ga(\"ecommerce:addTransaction\", {\n affiliation: properties.affiliation,\n shipping: properties.shipping,\n revenue: total,\n tax: properties.tax,\n id: orderId,\n currency: properties.currency,\n });\n\n // products added\n products.forEach((product) => {\n const productTrack = self.createProductTrack(rudderElement, product);\n\n window.ga(\"ecommerce:addItem\", {\n category: productTrack.properties.category,\n quantity: productTrack.properties.quantity,\n price: productTrack.properties.price,\n name: productTrack.properties.name,\n sku: productTrack.properties.sku,\n id: orderId,\n currency: productTrack.properties.currency,\n });\n });\n\n window.ga(\"ecommerce:send\");\n }\n\n // enhanced ecommerce events\n else if (this.enhancedEcommerce) {\n switch (event) {\n case \"Checkout Started\":\n case \"Checkout Step Viewed\":\n case \"Order Updated\":\n this.loadEnhancedEcommerce(rudderElement);\n each(products, (product) => {\n let productTrack = self.createProductTrack(rudderElement, product);\n productTrack = { message: productTrack };\n\n self.enhancedEcommerceTrackProduct(productTrack);\n });\n\n window.ga(\"ec:setAction\", \"checkout\", {\n step: properties.step || 1,\n option: options || undefined,\n });\n\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Checkout Step Completed\":\n if (!props.step) {\n logger.debug(\"step not present events are not sent to GA\");\n return;\n }\n params = {\n step: props.step || 1,\n option: options || undefined,\n };\n\n this.loadEnhancedEcommerce(rudderElement);\n\n window.ga(\"ec:setAction\", \"checkout_option\", params);\n window.ga(\"send\", \"event\", \"Checkout\", \"Option\");\n break;\n case \"Order Completed\":\n total =\n rudderElement.message.properties.total ||\n rudderElement.message.properties.revenue ||\n 0;\n\n if (!orderId) {\n logger.debug(\"order_id not present events are not sent to GA\");\n return;\n }\n this.loadEnhancedEcommerce(rudderElement);\n\n each(products, (product) => {\n let productTrack = self.createProductTrack(rudderElement, product);\n productTrack = { message: productTrack };\n self.enhancedEcommerceTrackProduct(productTrack);\n });\n window.ga(\"ec:setAction\", \"purchase\", {\n id: orderId,\n affiliation: props.affiliation,\n revenue: total,\n tax: props.tax,\n shipping: props.shipping,\n coupon: props.coupon,\n });\n\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Order Refunded\":\n if (!orderId) {\n logger.debug(\"order_id not present events are not sent to GA\");\n return;\n }\n this.loadEnhancedEcommerce(rudderElement);\n\n each(products, (product) => {\n const track = { properties: product };\n window.ga(\"ec:addProduct\", {\n id:\n track.properties.product_id ||\n track.properties.id ||\n track.properties.sku,\n quantity: track.properties.quantity,\n });\n });\n\n window.ga(\"ec:setAction\", \"refund\", {\n id: orderId,\n });\n\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Product Added\":\n this.loadEnhancedEcommerce(rudderElement);\n this.enhancedEcommerceTrackProductAction(rudderElement, \"add\", null);\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Product Removed\":\n this.loadEnhancedEcommerce(rudderElement);\n this.enhancedEcommerceTrackProductAction(\n rudderElement,\n \"remove\",\n null\n );\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Product Viewed\":\n this.loadEnhancedEcommerce(rudderElement);\n\n if (props.list) data.list = props.list;\n this.enhancedEcommerceTrackProductAction(\n rudderElement,\n \"detail\",\n data\n );\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Product Clicked\":\n this.loadEnhancedEcommerce(rudderElement);\n\n if (props.list) data.list = props.list;\n this.enhancedEcommerceTrackProductAction(\n rudderElement,\n \"click\",\n data\n );\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Promotion Viewed\":\n this.loadEnhancedEcommerce(rudderElement);\n window.ga(\"ec:addPromo\", {\n id: props.promotion_id || props.id,\n name: props.name,\n creative: props.creative,\n position: props.position,\n });\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Promotion Clicked\":\n this.loadEnhancedEcommerce(rudderElement);\n\n window.ga(\"ec:addPromo\", {\n id: props.promotion_id || props.id,\n name: props.name,\n creative: props.creative,\n position: props.position,\n });\n window.ga(\"ec:setAction\", \"promo_click\", {});\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Product List Viewed\":\n this.loadEnhancedEcommerce(rudderElement);\n\n each(products, (product) => {\n const item = { properties: product };\n if (\n !(item.properties.product_id || item.properties.sku) &&\n !item.properties.name\n ) {\n logger.debug(\n \"product_id/sku/name of product not present events are not sent to GA\"\n );\n return;\n }\n let impressionObj = {\n id: item.properties.product_id || item.properties.sku,\n name: item.properties.name,\n category: item.properties.category || props.category,\n list: props.list_id || props.category || \"products\",\n brand: item.properties.band,\n variant: item.properties.variant,\n price: item.properties.price,\n position: self.getProductPosition(item, products),\n };\n impressionObj = {\n ...impressionObj,\n ...self.metricsFunction(\n item.properties,\n self.dimensionsArray,\n self.metricsArray,\n self.contentGroupingsArray\n ),\n };\n Object.keys(impressionObj).forEach((key) => {\n if (impressionObj[key] === undefined) delete impressionObj[key];\n });\n window.ga(\"ec:addImpression\", impressionObj);\n });\n this.pushEnhancedEcommerce(rudderElement);\n break;\n case \"Product List Filtered\":\n props.filters = props.filters || [];\n props.sorters = props.sorters || [];\n filters = props.filters\n .map((obj) => {\n return `${obj.type}:${obj.value}`;\n })\n .join();\n sorts = props.sorters\n .map((obj) => {\n return `${obj.type}:${obj.value}`;\n })\n .join();\n\n this.loadEnhancedEcommerce(rudderElement);\n\n each(products, (product) => {\n const item = { properties: product };\n\n if (\n !(item.properties.product_id || item.properties.sku) &&\n !item.properties.name\n ) {\n logger.debug(\n \"product_id/sku/name of product not present events are not sent to GA\"\n );\n return;\n }\n\n let impressionObj = {\n id: item.properties.product_id || item.sku,\n name: item.name,\n category: item.category || props.category,\n list: props.list_id || props.category || \"search results\",\n brand: props.brand,\n variant: `${filters}::${sorts}`,\n price: item.price,\n position: self.getProductPosition(item, products),\n };\n\n impressionObj = {\n impressionObj,\n ...self.metricsFunction(\n item.properties,\n self.dimensionsArray,\n self.metricsArray,\n self.contentGroupingsArray\n ),\n };\n Object.keys(impressionObj).forEach((key) => {\n if (impressionObj[key] === undefined) delete impressionObj[key];\n });\n window.ga(\"ec:addImpression\", impressionObj);\n });\n this.pushEnhancedEcommerce(rudderElement);\n break;\n default:\n if (rudderElement.message.properties) {\n eventValue = rudderElement.message.properties.value\n ? rudderElement.message.properties.value\n : rudderElement.message.properties.revenue;\n }\n\n payload = {\n eventCategory: eventCategory || \"All\",\n eventAction,\n eventLabel,\n eventValue: this.formatValue(eventValue),\n // Allow users to override their nonInteraction integration setting for any single particluar event.\n nonInteraction:\n rudderElement.message.properties.nonInteraction !== undefined\n ? !!rudderElement.message.properties.nonInteraction\n : !!this.nonInteraction,\n };\n\n if (campaign) {\n if (campaign.name) payload.campaignName = campaign.name;\n if (campaign.source) payload.campaignSource = campaign.source;\n if (campaign.medium) payload.campaignMedium = campaign.medium;\n if (campaign.content) payload.campaignContent = campaign.content;\n if (campaign.term) payload.campaignKeyword = campaign.term;\n }\n\n payload = {\n payload,\n ...this.setCustomDimenionsAndMetrics(\n rudderElement.message.properties\n ),\n };\n\n window.ga(\"send\", \"event\", payload.payload);\n logger.debug(\"in GoogleAnalyticsManager track\");\n }\n } else {\n if (rudderElement.message.properties) {\n eventValue = rudderElement.message.properties.value\n ? rudderElement.message.properties.value\n : rudderElement.message.properties.revenue;\n }\n\n payload = {\n eventCategory: eventCategory || \"All\",\n eventAction,\n eventLabel,\n eventValue: this.formatValue(eventValue),\n // Allow users to override their nonInteraction integration setting for any single particluar event.\n nonInteraction:\n rudderElement.message.properties.nonInteraction !== undefined\n ? !!rudderElement.message.properties.nonInteraction\n : !!this.nonInteraction,\n };\n\n if (campaign) {\n if (campaign.name) payload.campaignName = campaign.name;\n if (campaign.source) payload.campaignSource = campaign.source;\n if (campaign.medium) payload.campaignMedium = campaign.medium;\n if (campaign.content) payload.campaignContent = campaign.content;\n if (campaign.term) payload.campaignKeyword = campaign.term;\n }\n\n payload = {\n payload,\n ...this.setCustomDimenionsAndMetrics(rudderElement.message.properties),\n };\n\n window.ga(\"send\", \"event\", payload.payload);\n logger.debug(\"in GoogleAnalyticsManager track\");\n }\n }\n\n page(rudderElement) {\n logger.debug(\"in GoogleAnalyticsManager page\");\n\n const { category } = rudderElement.message.properties;\n const eventProperties = rudderElement.message.properties;\n let name;\n if (\n rudderElement.message.properties.category &&\n rudderElement.message.name\n ) {\n name = `${rudderElement.message.properties.category} ${rudderElement.message.name}`;\n } else if (\n !rudderElement.message.properties.category &&\n !rudderElement.message.name\n ) {\n name = \"\";\n } else {\n name =\n rudderElement.message.name || rudderElement.message.properties.category;\n }\n\n const campaign = rudderElement.message.context.campaign || {};\n let pageview = {};\n const pagePath = this.path(eventProperties, this.includeSearch);\n const pageReferrer = rudderElement.message.properties.referrer || \"\";\n let pageTitle;\n if (\n !rudderElement.message.properties.category &&\n !rudderElement.message.name\n )\n pageTitle = eventProperties.title;\n else if (!rudderElement.message.properties.category)\n pageTitle = rudderElement.message.name;\n else if (!rudderElement.message.name)\n pageTitle = rudderElement.message.properties.category;\n else pageTitle = name;\n\n pageview.page = pagePath;\n pageview.title = pageTitle;\n pageview.location = eventProperties.url;\n\n if (campaign) {\n if (campaign.name) pageview.campaignName = campaign.name;\n if (campaign.source) pageview.campaignSource = campaign.source;\n if (campaign.medium) pageview.campaignMedium = campaign.medium;\n if (campaign.content) pageview.campaignContent = campaign.content;\n if (campaign.term) pageview.campaignKeyword = campaign.term;\n }\n\n const resetCustomDimensions = {};\n for (let i = 0; i < this.resetCustomDimensionsOnPage.length; i += 1) {\n const property = this.resetCustomDimensionsOnPage[i]\n .resetCustomDimensionsOnPage;\n if (this.dimensionsArray[property]) {\n resetCustomDimensions[this.dimensionsArray[property]] = null;\n }\n }\n window.ga(\"set\", resetCustomDimensions);\n\n // adds more properties to pageview which will be sent\n pageview = {\n ...pageview,\n ...this.setCustomDimenionsAndMetrics(eventProperties),\n };\n const payload = {\n page: pagePath,\n title: pageTitle,\n };\n logger.debug(pageReferrer);\n logger.debug(document.referrer);\n if (pageReferrer !== document.referrer) payload.referrer = pageReferrer;\n\n window.ga(\"set\", payload);\n\n if (this.pageCalled) delete pageview.location;\n\n window.ga(\"send\", \"pageview\", pageview);\n\n // categorized pages\n if (category && this.trackCategorizedPages) {\n this.track(rudderElement, { nonInteraction: 1 });\n }\n\n // named pages\n if (name && this.trackNamedPages) {\n this.track(rudderElement, { nonInteraction: 1 });\n }\n this.pageCalled = true;\n }\n\n isLoaded() {\n logger.debug(\"in GA isLoaded\");\n return !!window.gaplugins;\n }\n\n isReady() {\n return !!window.gaplugins;\n }\n\n /**\n *\n *\n * @param {} obj incoming properties\n * @param {} dimensions the dimension mapping which is entered by the user in the ui. Eg: firstName : dimension1\n * @param {} metrics the metrics mapping which is entered by the user in the ui. Eg: age : metrics1\n * @param {} contentGroupings the contentGrouping mapping which is entered by the user in the ui. Eg: section : contentGrouping1\n *\n * This function maps these dimensions,metrics and contentGroupings with the incoming properties to send it to GA where the user has to set the corresponding dimension/metric/content group.\n * For example if:\n * if obj -> {age: 24}\n * metrics -> {age: metric1}\n * then the function will return {metric1:24} and it will be shown sent to GA if metric1 is set there.\n *\n * if obj -> {age: 24}\n * metrics - {revenue: metric2}\n * then the function will return {} as there is no corresponding mapping of metric.\n *\n */\n metricsFunction(obj, dimensions, metrics, contentGroupings) {\n const ret = {};\n\n each([metrics, dimensions, contentGroupings], (group) => {\n each(group, (prop, key) => {\n let value = obj[prop];\n if (is.boolean(value)) value = value.toString();\n if (value || value === 0) ret[key] = value;\n });\n });\n\n return ret;\n }\n\n formatValue(value) {\n if (!value || value < 0) return 0;\n return Math.round(value);\n }\n\n /**\n * @param {} props\n * @param {} inputs\n */\n setCustomDimenionsAndMetrics(props) {\n const ret = {};\n const custom = this.metricsFunction(\n props,\n this.dimensionsArray,\n this.metricsArray,\n this.contentGroupingsArray\n );\n if (Object.keys(custom).length) {\n if (this.setAllMappedProps) {\n window.ga(\"set\", custom);\n } else {\n Object.keys(custom).forEach((key) => {\n ret[key] = custom[key];\n });\n // each(custom, (key, value) => {\n // ret[key] = value;\n // });\n }\n }\n return ret;\n }\n\n /**\n * Return the path based on `properties` and `options`\n *\n * @param {} properties\n * @param {} includeSearch\n */\n path(properties, includeSearch) {\n let str = properties.path;\n if (properties) {\n if (includeSearch && properties.search) {\n str += properties.search;\n }\n }\n return str;\n }\n\n /**\n * Creates a track out of product properties\n * @param {} rudderElement\n * @param {} properties\n */\n createProductTrack(rudderElement, properties) {\n const props = properties || {};\n props.currency =\n properties.currency || rudderElement.message.properties.currency;\n return { properties: props };\n }\n\n /**\n * Loads ec.js (unless already loaded)\n * @param {} rudderElement\n * @param {} a\n */\n loadEnhancedEcommerce(rudderElement) {\n if (this.enhancedEcommerceLoaded === 0) {\n window.ga(\"require\", \"ec\");\n this.enhancedEcommerceLoaded = 1;\n }\n\n window.ga(\"set\", \"&cu\", rudderElement.message.properties.currency);\n }\n\n /**\n * helper class to not repeat `ec:addProduct`\n * @param {} rudderElement\n * @param {} inputs\n */\n enhancedEcommerceTrackProduct(rudderElement) {\n const props = rudderElement.message.properties;\n\n let product = {\n id: props.product_id || props.id || props.sku,\n name: props.name,\n category: props.category,\n quantity: props.quantity,\n price: props.price,\n brand: props.brand,\n variant: props.variant,\n currency: props.currency,\n };\n\n if (props.position != null) {\n product.position = Math.round(props.position);\n }\n\n const { coupon } = props;\n if (coupon) product.coupon = coupon;\n product = {\n ...product,\n ...this.metricsFunction(\n props,\n this.dimensionsArray,\n this.metricsArray,\n this.contentGroupingsArray\n ),\n };\n\n window.ga(\"ec:addProduct\", product);\n }\n\n /**\n * set action with data\n * @param {} rudderElement\n * @param {} action\n * @param {} data\n * @param {} inputs\n */\n enhancedEcommerceTrackProductAction(rudderElement, action, data) {\n this.enhancedEcommerceTrackProduct(rudderElement);\n window.ga(\"ec:setAction\", action, data || {});\n }\n\n /**\n * @param {} rudderElement\n * @param {} inputs\n */\n pushEnhancedEcommerce(rudderElement) {\n const args = rejectArr([\n \"send\",\n \"event\",\n rudderElement.message.properties.category || \"EnhancedEcommerce\",\n rudderElement.message.event || \"Action not defined\",\n rudderElement.message.properties.label,\n {\n nonInteraction: 1,\n ...this.setCustomDimenionsAndMetrics(rudderElement.message.properties),\n },\n ]);\n\n let { event } = rudderElement.message;\n event = event.toLowerCase();\n\n if (this.eventWithCategoryFieldProductScoped.includes(event)) {\n args[2] = \"EnhancedEcommerce\";\n }\n\n window.ga.call(window, ...args);\n }\n\n /**\n * @param {} item\n * @param {} products\n */\n getProductPosition(item, products) {\n const { position } = item.properties;\n\n if (\n typeof position !== \"undefined\" &&\n !Number.isNaN(Number(position)) &&\n Number(position) > -1\n ) {\n return position;\n }\n\n return (\n products\n .map((x) => {\n return x.product_id;\n })\n .indexOf(item.properties.product_id) + 1\n );\n }\n\n /**\n *extracts checkout options\n * @param {} rudderElement\n */\n extractCheckoutOptions(rudderElement) {\n const options = [\n rudderElement.message.properties.paymentMethod,\n rudderElement.message.properties.shippingMethod,\n ];\n // remove all nulls and join with commas.\n const valid = rejectArr(options);\n return valid.length > 0 ? valid.join(\", \") : null;\n }\n}\n","import logger from \"../../utils/logUtil\";\n\nclass Hotjar {\n constructor(config) {\n this.siteId = config.siteID; // 1549611\n this.name = \"HOTJAR\";\n this._ready = false;\n }\n\n init() {\n window.hotjarSiteId = this.siteId;\n (function (h, o, t, j, a, r) {\n h.hj =\n h.hj ||\n function () {\n (h.hj.q = h.hj.q || []).push(arguments);\n };\n h._hjSettings = { hjid: h.hotjarSiteId, hjsv: 6 };\n a = o.getElementsByTagName(\"head\")[0];\n r = o.createElement(\"script\");\n r.async = 1;\n r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;\n a.appendChild(r);\n })(window, document, \"https://static.hotjar.com/c/hotjar-\", \".js?sv=\");\n this._ready = true;\n\n logger.debug(\"===in init Hotjar===\");\n }\n\n identify(rudderElement) {\n const userId =\n rudderElement.message.userId || rudderElement.message.anonymousId;\n if (!userId) {\n logger.debug(\"[Hotjar] identify:: user id is required\");\n return;\n }\n\n const { traits } = rudderElement.message.context;\n\n window.hj(\"identify\", rudderElement.message.userId, traits);\n }\n\n track(rudderElement) {\n logger.debug(\"[Hotjar] track:: method not supported\");\n }\n\n page(rudderElement) {\n logger.debug(\"[Hotjar] page:: method not supported\");\n }\n\n isLoaded() {\n return this._ready;\n }\n\n isReady() {\n return this._ready;\n }\n}\n\nexport { Hotjar };\n","import logger from \"../../utils/logUtil\";\n\nclass GoogleAds {\n constructor(config) {\n // this.accountId = config.accountId;//AW-696901813\n this.conversionId = config.conversionID;\n this.pageLoadConversions = config.pageLoadConversions;\n this.clickEventConversions = config.clickEventConversions;\n this.defaultPageConversion = config.defaultPageConversion;\n\n this.name = \"GOOGLEADS\";\n }\n\n init() {\n const sourceUrl = `https://www.googletagmanager.com/gtag/js?id=${this.conversionId}`;\n (function (id, src, document) {\n logger.debug(`in script loader=== ${id}`);\n const js = document.createElement(\"script\");\n js.src = src;\n js.async = 1;\n js.type = \"text/javascript\";\n js.id = id;\n const e = document.getElementsByTagName(\"head\")[0];\n logger.debug(\"==script==\", e);\n e.appendChild(js);\n })(\"googleAds-integration\", sourceUrl, document);\n\n window.dataLayer = window.dataLayer || [];\n window.gtag = function () {\n window.dataLayer.push(arguments);\n };\n window.gtag(\"js\", new Date());\n window.gtag(\"config\", this.conversionId);\n\n logger.debug(\"===in init Google Ads===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"[GoogleAds] identify:: method not supported\");\n }\n\n // https://developers.google.com/gtagjs/reference/event\n track(rudderElement) {\n logger.debug(\"in GoogleAdsAnalyticsManager track\");\n const conversionData = this.getConversionData(\n this.clickEventConversions,\n rudderElement.message.event\n );\n if (conversionData.conversionLabel) {\n const { conversionLabel } = conversionData;\n const { eventName } = conversionData;\n const sendToValue = `${this.conversionId}/${conversionLabel}`;\n const properties = {};\n if (rudderElement.properties) {\n properties.value = rudderElement.properties.revenue;\n properties.currency = rudderElement.properties.currency;\n properties.transaction_id = rudderElement.properties.order_id;\n }\n properties.send_to = sendToValue;\n window.gtag(\"event\", eventName, properties);\n }\n }\n\n page(rudderElement) {\n logger.debug(\"in GoogleAdsAnalyticsManager page\");\n const conversionData = this.getConversionData(\n this.pageLoadConversions,\n rudderElement.message.name\n );\n if (conversionData.conversionLabel) {\n const { conversionLabel } = conversionData;\n const { eventName } = conversionData;\n window.gtag(\"event\", eventName, {\n send_to: `${this.conversionId}/${conversionLabel}`,\n });\n }\n }\n\n getConversionData(eventTypeConversions, eventName) {\n const conversionData = {};\n if (eventTypeConversions) {\n if (eventName) {\n eventTypeConversions.forEach((eventTypeConversion) => {\n if (\n eventTypeConversion.name.toLowerCase() === eventName.toLowerCase()\n ) {\n // rudderElement[\"message\"][\"name\"]\n conversionData.conversionLabel =\n eventTypeConversion.conversionLabel;\n conversionData.eventName = eventTypeConversion.name;\n }\n });\n } else if (this.defaultPageConversion) {\n conversionData.conversionLabel = this.defaultPageConversion;\n conversionData.eventName = \"Viewed a Page\";\n }\n }\n return conversionData;\n }\n\n isLoaded() {\n return window.dataLayer.push !== Array.prototype.push;\n }\n\n isReady() {\n return window.dataLayer.push !== Array.prototype.push;\n }\n}\n\nexport { GoogleAds };\n","import logger from \"../../utils/logUtil\";\n\nclass VWO {\n constructor(config, analytics) {\n this.accountId = config.accountId; // 1549611\n this.settingsTolerance = config.settingsTolerance;\n this.isSPA = config.isSPA;\n this.libraryTolerance = config.libraryTolerance;\n this.useExistingJquery = config.useExistingJquery;\n this.sendExperimentTrack = config.sendExperimentTrack;\n this.sendExperimentIdentify = config.sendExperimentIdentify;\n this.name = \"VWO\";\n this.analytics = analytics;\n logger.debug(\"Config \", config);\n }\n\n init() {\n logger.debug(\"===in init VWO===\");\n const account_id = this.accountId;\n const settings_tolerance = this.settingsTolerance;\n const library_tolerance = this.libraryTolerance;\n const use_existing_jquery = this.useExistingJquery;\n const { isSPA } = this;\n window._vwo_code = (function () {\n let f = false;\n const d = document;\n return {\n use_existing_jquery() {\n return use_existing_jquery;\n },\n library_tolerance() {\n return library_tolerance;\n },\n finish() {\n if (!f) {\n f = true;\n const a = d.getElementById(\"_vis_opt_path_hides\");\n if (a) a.parentNode.removeChild(a);\n }\n },\n finished() {\n return f;\n },\n load(a) {\n const b = d.createElement(\"script\");\n b.src = a;\n b.type = \"text/javascript\";\n b.innerText;\n b.onerror = function () {\n _vwo_code.finish();\n };\n d.getElementsByTagName(\"head\")[0].appendChild(b);\n },\n init() {\n const settings_timer = setTimeout(\n \"_vwo_code.finish()\",\n settings_tolerance\n );\n const a = d.createElement(\"style\");\n const b =\n \"body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}\";\n const h = d.getElementsByTagName(\"head\")[0];\n a.setAttribute(\"id\", \"_vis_opt_path_hides\");\n a.setAttribute(\"type\", \"text/css\");\n if (a.styleSheet) a.styleSheet.cssText = b;\n else a.appendChild(d.createTextNode(b));\n h.appendChild(a);\n this.load(\n `//dev.visualwebsiteoptimizer.com/j.php?a=${account_id}&u=${encodeURIComponent(\n d.URL\n )}&r=${Math.random()}&f=${+isSPA}`\n );\n return settings_timer;\n },\n };\n })();\n window._vwo_settings_timer = window._vwo_code.init();\n\n // Send track or iddentify when\n if (this.sendExperimentTrack || this.experimentViewedIdentify) {\n this.experimentViewed();\n }\n }\n\n experimentViewed() {\n window.VWO = window.VWO || [];\n const self = this;\n window.VWO.push([\n \"onVariationApplied\",\n (data) => {\n if (!data) {\n return;\n }\n logger.debug(\"Variation Applied\");\n const expId = data[1];\n const variationId = data[2];\n logger.debug(\n \"experiment id:\",\n expId,\n \"Variation Name:\",\n _vwo_exp[expId].comb_n[variationId]\n );\n if (\n typeof _vwo_exp[expId].comb_n[variationId] !== \"undefined\" &&\n [\"VISUAL_AB\", \"VISUAL\", \"SPLIT_URL\", \"SURVEY\"].indexOf(\n _vwo_exp[expId].type\n ) > -1\n ) {\n try {\n if (self.sendExperimentTrack) {\n logger.debug(\"Tracking...\");\n this.analytics.track(\"Experiment Viewed\", {\n experimentId: expId,\n variationName: _vwo_exp[expId].comb_n[variationId],\n });\n }\n } catch (error) {\n logger.error(\"[VWO] experimentViewed:: \", error);\n }\n try {\n if (self.sendExperimentIdentify) {\n logger.debug(\"Identifying...\");\n this.analytics.identify({\n [`Experiment: ${expId}`]: _vwo_exp[expId].comb_n[variationId],\n });\n }\n } catch (error) {\n logger.error(\"[VWO] experimentViewed:: \", error);\n }\n }\n },\n ]);\n }\n\n identify(rudderElement) {\n logger.debug(\"method not supported\");\n }\n\n track(rudderElement) {\n const eventName = rudderElement.message.event;\n if (eventName === \"Order Completed\") {\n const total = rudderElement.message.properties\n ? rudderElement.message.properties.total ||\n rudderElement.message.properties.revenue\n : 0;\n logger.debug(\"Revenue\", total);\n window.VWO = window.VWO || [];\n window.VWO.push([\"track.revenueConversion\", total]);\n }\n }\n\n page(rudderElement) {\n logger.debug(\"method not supported\");\n }\n\n isLoaded() {\n return !!window._vwo_code;\n }\n\n isReady() {\n return !!window._vwo_code;\n }\n}\n\nexport { VWO };\n","import logger from \"../../utils/logUtil\";\n\nclass GoogleTagManager {\n constructor(config) {\n this.containerID = config.containerID;\n this.name = \"GOOGLETAGMANAGER\";\n }\n\n init() {\n logger.debug(\"===in init GoogleTagManager===\");\n (function (w, d, s, l, i) {\n w[l] = w[l] || [];\n w[l].push({ \"gtm.start\": new Date().getTime(), event: \"gtm.js\" });\n const f = d.getElementsByTagName(s)[0];\n const j = d.createElement(s);\n const dl = l != \"dataLayer\" ? `&l=${l}` : \"\";\n j.async = true;\n j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`;\n f.parentNode.insertBefore(j, f);\n })(window, document, \"script\", \"dataLayer\", this.containerID);\n }\n\n identify(rudderElement) {\n logger.debug(\"[GTM] identify:: method not supported\");\n }\n\n track(rudderElement) {\n logger.debug(\"===in track GoogleTagManager===\");\n const rudderMessage = rudderElement.message;\n const props = {\n event: rudderMessage.event,\n userId: rudderMessage.userId,\n anonymousId: rudderMessage.anonymousId,\n ...rudderMessage.properties,\n };\n this.sendToGTMDatalayer(props);\n }\n\n page(rudderElement) {\n logger.debug(\"===in page GoogleTagManager===\");\n const rudderMessage = rudderElement.message;\n const pageName = rudderMessage.name;\n const pageCategory = rudderMessage.properties\n ? rudderMessage.properties.category\n : undefined;\n\n let eventName;\n\n if (pageName) {\n eventName = `Viewed ${pageName} page`;\n }\n\n if (pageCategory && pageName) {\n eventName = `Viewed ${pageCategory} ${pageName} page`;\n }\n if (!eventName) {\n eventName = \"Viewed a Page\";\n }\n const props = {\n event: eventName,\n userId: rudderMessage.userId,\n anonymousId: rudderMessage.anonymousId,\n ...rudderMessage.properties,\n };\n\n this.sendToGTMDatalayer(props);\n }\n\n isLoaded() {\n return !!(\n window.dataLayer && Array.prototype.push !== window.dataLayer.push\n );\n }\n\n sendToGTMDatalayer(props) {\n window.dataLayer.push(props);\n }\n\n isReady() {\n return !!(\n window.dataLayer && Array.prototype.push !== window.dataLayer.push\n );\n }\n}\n\nexport { GoogleTagManager };\n","import logger from \"../../utils/logUtil\";\n\n/*\nE-commerce support required for logPurchase support & other e-commerce events as track with productId changed\n*/\nclass Braze {\n constructor(config, analytics) {\n this.analytics = analytics;\n this.appKey = config.appKey;\n if (!config.appKey) this.appKey = \"\";\n this.endPoint = \"\";\n if (config.dataCenter) {\n const dataCenterArr = config.dataCenter.trim().split(\"-\");\n if (dataCenterArr[0].toLowerCase() === \"eu\") {\n this.endPoint = \"sdk.fra-01.braze.eu\";\n } else {\n this.endPoint = `sdk.iad-${dataCenterArr[1]}.braze.com`;\n }\n }\n\n this.name = \"BRAZE\";\n\n logger.debug(\"Config \", config);\n }\n\n /** https://js.appboycdn.com/web-sdk/latest/doc/ab.User.html#toc4\n */\n\n formatGender(gender) {\n if (!gender) return;\n if (typeof gender !== \"string\") return;\n\n const femaleGenders = [\"woman\", \"female\", \"w\", \"f\"];\n const maleGenders = [\"man\", \"male\", \"m\"];\n const otherGenders = [\"other\", \"o\"];\n\n if (femaleGenders.indexOf(gender.toLowerCase()) > -1)\n return window.appboy.ab.User.Genders.FEMALE;\n if (maleGenders.indexOf(gender.toLowerCase()) > -1)\n return window.appboy.ab.User.Genders.MALE;\n if (otherGenders.indexOf(gender.toLowerCase()) > -1)\n return window.appboy.ab.User.Genders.OTHER;\n }\n\n init() {\n logger.debug(\"===in init Braze===\");\n\n // load appboy\n +(function (a, p, P, b, y) {\n a.appboy = {};\n a.appboyQueue = [];\n for (\n let s = \"initialize destroy getDeviceId toggleAppboyLogging setLogger openSession changeUser requestImmediateDataFlush requestFeedRefresh subscribeToFeedUpdates requestContentCardsRefresh subscribeToContentCardsUpdates logCardImpressions logCardClick logCardDismissal logFeedDisplayed logContentCardsDisplayed logInAppMessageImpression logInAppMessageClick logInAppMessageButtonClick logInAppMessageHtmlClick subscribeToNewInAppMessages subscribeToInAppMessage removeSubscription removeAllSubscriptions logCustomEvent logPurchase isPushSupported isPushBlocked isPushGranted isPushPermissionGranted registerAppboyPushMessages unregisterAppboyPushMessages trackLocation stopWebTracking resumeWebTracking wipeData ab ab.DeviceProperties ab.User ab.User.Genders ab.User.NotificationSubscriptionTypes ab.User.prototype.getUserId ab.User.prototype.setFirstName ab.User.prototype.setLastName ab.User.prototype.setEmail ab.User.prototype.setGender ab.User.prototype.setDateOfBirth ab.User.prototype.setCountry ab.User.prototype.setHomeCity ab.User.prototype.setLanguage ab.User.prototype.setEmailNotificationSubscriptionType ab.User.prototype.setPushNotificationSubscriptionType ab.User.prototype.setPhoneNumber ab.User.prototype.setAvatarImageUrl ab.User.prototype.setLastKnownLocation ab.User.prototype.setUserAttribute ab.User.prototype.setCustomUserAttribute ab.User.prototype.addToCustomAttributeArray ab.User.prototype.removeFromCustomAttributeArray ab.User.prototype.incrementCustomUserAttribute ab.User.prototype.addAlias ab.User.prototype.setCustomLocationAttribute ab.InAppMessage ab.InAppMessage.SlideFrom ab.InAppMessage.ClickAction ab.InAppMessage.DismissType ab.InAppMessage.OpenTarget ab.InAppMessage.ImageStyle ab.InAppMessage.TextAlignment ab.InAppMessage.Orientation ab.InAppMessage.CropType ab.InAppMessage.prototype.subscribeToClickedEvent ab.InAppMessage.prototype.subscribeToDismissedEvent ab.InAppMessage.prototype.removeSubscription ab.InAppMessage.prototype.removeAllSubscriptions ab.InAppMessage.prototype.closeMessage ab.InAppMessage.Button ab.InAppMessage.Button.prototype.subscribeToClickedEvent ab.InAppMessage.Button.prototype.removeSubscription ab.InAppMessage.Button.prototype.removeAllSubscriptions ab.SlideUpMessage ab.ModalMessage ab.FullScreenMessage ab.HtmlMessage ab.ControlMessage ab.Feed ab.Feed.prototype.getUnreadCardCount ab.ContentCards ab.ContentCards.prototype.getUnviewedCardCount ab.Card ab.Card.prototype.dismissCard ab.ClassicCard ab.CaptionedImage ab.Banner ab.ControlCard ab.WindowUtils display display.automaticallyShowNewInAppMessages display.showInAppMessage display.showFeed display.destroyFeed display.toggleFeed display.showContentCards display.hideContentCards display.toggleContentCards sharedLib\".split(\n \" \"\n ),\n i = 0;\n i < s.length;\n i++\n ) {\n for (\n var m = s[i], k = a.appboy, l = m.split(\".\"), j = 0;\n j < l.length - 1;\n j++\n )\n k = k[l[j]];\n k[l[j]] = new Function(\n `return function ${m.replace(\n /\\./g,\n \"_\"\n )}(){window.appboyQueue.push(arguments); return true}`\n )();\n }\n window.appboy.getUser = function () {\n return new window.appboy.ab.User();\n };\n window.appboy.getCachedFeed = function () {\n return new window.appboy.ab.Feed();\n };\n window.appboy.getCachedContentCards = function () {\n return new window.appboy.ab.ContentCards();\n };\n (y = p.createElement(P)).type = \"text/javascript\";\n y.src = \"https://js.appboycdn.com/web-sdk/2.4/appboy.min.js\";\n y.async = 1;\n (b = p.getElementsByTagName(P)[0]).parentNode.insertBefore(y, b);\n })(window, document, \"script\");\n\n window.appboy.initialize(this.appKey, {\n enableLogging: true,\n baseUrl: this.endPoint,\n });\n window.appboy.display.automaticallyShowNewInAppMessages();\n\n const { userId } = this.analytics;\n // send userId if you have it https://js.appboycdn.com/web-sdk/latest/doc/module-appboy.html#.changeUser\n if (userId) appboy.changeUser(userId);\n\n window.appboy.openSession();\n }\n\n handleReservedProperties(props) {\n // remove reserved keys from custom event properties\n // https://www.appboy.com/documentation/Platform_Wide/#reserved-keys\n const reserved = [\n \"time\",\n \"product_id\",\n \"quantity\",\n \"event_name\",\n \"price\",\n \"currency\",\n ];\n\n reserved.forEach((element) => {\n delete props[element];\n });\n return props;\n }\n\n identify(rudderElement) {\n const { userId } = rudderElement.message;\n const { address } = rudderElement.message.context.traits;\n const { avatar } = rudderElement.message.context.traits;\n const { birthday } = rudderElement.message.context.traits;\n const { email } = rudderElement.message.context.traits;\n const { firstname } = rudderElement.message.context.traits;\n const { gender } = rudderElement.message.context.traits;\n const { lastname } = rudderElement.message.context.traits;\n const { phone } = rudderElement.message.context.traits;\n\n // This is a hack to make a deep copy that is not recommended because it will often fail:\n const traits = JSON.parse(\n JSON.stringify(rudderElement.message.context.traits)\n );\n\n window.appboy.changeUser(userId);\n window.appboy.getUser().setAvatarImageUrl(avatar);\n if (email) window.appboy.getUser().setEmail(email);\n if (firstname) window.appboy.getUser().setFirstName(firstname);\n if (gender) window.appboy.getUser().setGender(this.formatGender(gender));\n if (lastname) window.appboy.getUser().setLastName(lastname);\n if (phone) window.appboy.getUser().setPhoneNumber(phone);\n if (address) {\n window.appboy.getUser().setCountry(address.country);\n window.appboy.getUser().setHomeCity(address.city);\n }\n if (birthday) {\n window.appboy\n .getUser()\n .setDateOfBirth(\n birthday.getUTCFullYear(),\n birthday.getUTCMonth() + 1,\n birthday.getUTCDate()\n );\n }\n\n // remove reserved keys https://www.appboy.com/documentation/Platform_Wide/#reserved-keys\n const reserved = [\n \"avatar\",\n \"address\",\n \"birthday\",\n \"email\",\n \"id\",\n \"firstname\",\n \"gender\",\n \"lastname\",\n \"phone\",\n \"facebook\",\n \"twitter\",\n \"first_name\",\n \"last_name\",\n \"dob\",\n \"external_id\",\n \"country\",\n \"home_city\",\n \"bio\",\n \"gender\",\n \"phone\",\n \"email_subscribe\",\n \"push_subscribe\",\n ];\n\n reserved.forEach((element) => {\n delete traits[element];\n });\n\n Object.keys(traits).forEach((key) => {\n window.appboy.getUser().setCustomUserAttribute(key, traits[key]);\n });\n }\n\n handlePurchase(properties, userId) {\n const { products } = properties;\n const currencyCode = properties.currency;\n\n window.appboy.changeUser(userId);\n\n // del used properties\n del(properties, \"products\");\n del(properties, \"currency\");\n\n // we have to make a separate call to appboy for each product\n products.forEach((product) => {\n const productId = product.product_id;\n const { price } = product;\n const { quantity } = product;\n if (quantity && price && productId)\n window.appboy.logPurchase(\n productId,\n price,\n currencyCode,\n quantity,\n properties\n );\n });\n }\n\n track(rudderElement) {\n const { userId } = rudderElement.message;\n const eventName = rudderElement.message.event;\n let { properties } = rudderElement.message;\n\n window.appboy.changeUser(userId);\n\n if (eventName.toLowerCase() === \"order completed\") {\n this.handlePurchase(properties, userId);\n } else {\n properties = this.handleReservedProperties(properties);\n window.appboy.logCustomEvent(eventName, properties);\n }\n }\n\n page(rudderElement) {\n const { userId } = rudderElement.message;\n const eventName = rudderElement.message.name;\n let { properties } = rudderElement.message;\n\n properties = this.handleReservedProperties(properties);\n\n window.appboy.changeUser(userId);\n window.appboy.logCustomEvent(eventName, properties);\n }\n\n isLoaded() {\n return window.appboyQueue === null;\n }\n\n isReady() {\n return window.appboyQueue === null;\n }\n}\n\nexport { Braze };\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","import md5 from \"md5\";\nimport logger from \"../../utils/logUtil\";\n\nclass INTERCOM {\n constructor(config) {\n this.NAME = \"INTERCOM\";\n this.API_KEY = config.apiKey;\n this.APP_ID = config.appId;\n this.MOBILE_APP_ID = config.mobileAppId;\n logger.debug(\"Config \", config);\n }\n\n init() {\n window.intercomSettings = {\n app_id: this.APP_ID,\n };\n\n (function () {\n const w = window;\n const ic = w.Intercom;\n if (typeof ic === \"function\") {\n ic(\"reattach_activator\");\n ic(\"update\", w.intercomSettings);\n } else {\n const d = document;\n var i = function () {\n i.c(arguments);\n };\n i.q = [];\n i.c = function (args) {\n i.q.push(args);\n };\n w.Intercom = i;\n const l = function () {\n const s = d.createElement(\"script\");\n s.type = \"text/javascript\";\n s.async = true;\n s.src = `https://widget.intercom.io/widget/${window.intercomSettings.app_id}`;\n const x = d.getElementsByTagName(\"script\")[0];\n x.parentNode.insertBefore(s, x);\n };\n if (document.readyState === \"complete\") {\n l();\n window.intercom_code = true;\n } else if (w.attachEvent) {\n w.attachEvent(\"onload\", l);\n window.intercom_code = true;\n } else {\n w.addEventListener(\"load\", l, false);\n window.intercom_code = true;\n }\n }\n })();\n }\n\n page() {\n // Get new messages of the current user\n window.Intercom(\"update\");\n }\n\n identify(rudderElement) {\n const rawPayload = {};\n const { context } = rudderElement.message;\n\n const identityVerificationProps = context.Intercom\n ? context.Intercom\n : null;\n if (identityVerificationProps != null) {\n // user hash\n const userHash = context.Intercom.user_hash\n ? context.Intercom.user_hash\n : null;\n\n if (userHash != null) {\n rawPayload.user_hash = userHash;\n }\n\n // hide default launcher\n const hideDefaultLauncher = context.Intercom.hideDefaultLauncher\n ? context.Intercom.hideDefaultLauncher\n : null;\n\n if (hideDefaultLauncher != null) {\n rawPayload.hide_default_launcher = hideDefaultLauncher;\n }\n }\n\n // map rudderPayload to desired\n Object.keys(context.traits).forEach((field) => {\n if (context.traits.hasOwnProperty(field)) {\n const value = context.traits[field];\n\n if (field === \"company\") {\n const companies = [];\n const company = {};\n // special handling string\n if (typeof context.traits[field] === \"string\") {\n company.company_id = md5(context.traits[field]);\n }\n const companyFields =\n (typeof context.traits[field] === \"object\" &&\n Object.keys(context.traits[field])) ||\n [];\n companyFields.forEach((key) => {\n if (companyFields.hasOwnProperty(key)) {\n if (key != \"id\") {\n company[key] = context.traits[field][key];\n } else {\n company.company_id = context.traits[field][key];\n }\n }\n });\n\n if (\n typeof context.traits[field] === \"object\" &&\n !companyFields.includes(\"id\")\n ) {\n company.company_id = md5(company.name);\n }\n\n companies.push(company);\n rawPayload.companies = companies;\n } else {\n rawPayload[field] = context.traits[field];\n }\n\n switch (field) {\n case \"createdAt\":\n rawPayload.created_at = value;\n break;\n case \"anonymousId\":\n rawPayload.user_id = value;\n break;\n\n default:\n break;\n }\n }\n });\n rawPayload.user_id = rudderElement.message.userId;\n window.Intercom(\"update\", rawPayload);\n }\n\n track(rudderElement) {\n const rawPayload = {};\n const { message } = rudderElement;\n\n const properties = message.properties\n ? Object.keys(message.properties)\n : null;\n properties.forEach((property) => {\n const value = message.properties[property];\n rawPayload[property] = value;\n });\n\n if (message.event) {\n rawPayload.event_name = message.event;\n }\n rawPayload.user_id = message.userId ? message.userId : message.anonymousId;\n rawPayload.created_at = Math.floor(\n new Date(message.originalTimestamp).getTime() / 1000\n );\n window.Intercom(\"trackEvent\", rawPayload.event_name, rawPayload);\n }\n\n isLoaded() {\n return !!window.intercom_code;\n }\n\n isReady() {\n return !!window.intercom_code;\n }\n}\n\nexport { INTERCOM };\n","import logger from \"../../utils/logUtil\";\nimport ScriptLoader from \"../ScriptLoader\";\n\nclass Keen {\n constructor(config) {\n this.projectID = config.projectID;\n this.writeKey = config.writeKey;\n this.ipAddon = config.ipAddon;\n this.uaAddon = config.uaAddon;\n this.urlAddon = config.urlAddon;\n this.referrerAddon = config.referrerAddon;\n this.client = null;\n this.name = \"KEEN\";\n }\n\n init() {\n logger.debug(\"===in init Keen===\");\n ScriptLoader(\n \"keen-integration\",\n \"https://cdn.jsdelivr.net/npm/keen-tracking@4\"\n );\n\n const check = setInterval(checkAndInitKeen.bind(this), 1000);\n function initKeen(object) {\n object.client = new window.KeenTracking({\n projectId: object.projectID,\n writeKey: object.writeKey,\n });\n return object.client;\n }\n function checkAndInitKeen() {\n if (window.KeenTracking !== undefined && window.KeenTracking !== void 0) {\n this.client = initKeen(this);\n clearInterval(check);\n }\n }\n }\n\n identify(rudderElement) {\n logger.debug(\"in Keen identify\");\n const { traits } = rudderElement.message.context;\n const userId = rudderElement.message.userId\n ? rudderElement.message.userId\n : rudderElement.message.anonymousId;\n let properties = rudderElement.message.properties\n ? Object.assign(properties, rudderElement.message.properties)\n : {};\n properties.user = {\n userId,\n traits,\n };\n properties = this.getAddOn(properties);\n this.client.extendEvents(properties);\n }\n\n track(rudderElement) {\n logger.debug(\"in Keen track\");\n\n const { event } = rudderElement.message;\n let { properties } = rudderElement.message;\n properties = this.getAddOn(properties);\n this.client.recordEvent(event, properties);\n }\n\n page(rudderElement) {\n logger.debug(\"in Keen page\");\n const pageName = rudderElement.message.name;\n const pageCategory = rudderElement.message.properties\n ? rudderElement.message.properties.category\n : undefined;\n let name = \"Loaded a Page\";\n if (pageName) {\n name = `Viewed ${pageName} page`;\n }\n if (pageCategory && pageName) {\n name = `Viewed ${pageCategory} ${pageName} page`;\n }\n\n let { properties } = rudderElement.message;\n properties = this.getAddOn(properties);\n this.client.recordEvent(name, properties);\n }\n\n isLoaded() {\n logger.debug(\"in Keen isLoaded\");\n return !!(this.client != null);\n }\n\n isReady() {\n return !!(this.client != null);\n }\n\n getAddOn(properties) {\n const addOns = [];\n if (this.ipAddon) {\n properties.ip_address = \"${keen.ip}\";\n addOns.push({\n name: \"keen:ip_to_geo\",\n input: {\n ip: \"ip_address\",\n },\n output: \"ip_geo_info\",\n });\n }\n if (this.uaAddon) {\n properties.user_agent = \"${keen.user_agent}\";\n addOns.push({\n name: \"keen:ua_parser\",\n input: {\n ua_string: \"user_agent\",\n },\n output: \"parsed_user_agent\",\n });\n }\n if (this.urlAddon) {\n properties.page_url = document.location.href;\n addOns.push({\n name: \"keen:url_parser\",\n input: {\n url: \"page_url\",\n },\n output: \"parsed_page_url\",\n });\n }\n if (this.referrerAddon) {\n properties.page_url = document.location.href;\n properties.referrer_url = document.referrer;\n addOns.push({\n name: \"keen:referrer_parser\",\n input: {\n referrer_url: \"referrer_url\",\n page_url: \"page_url\",\n },\n output: \"referrer_info\",\n });\n }\n properties.keen = {\n addons: addOns,\n };\n return properties;\n }\n}\n\nexport { Keen };\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Copy the properties of one or more `objects` onto a destination object. Input objects are iterated over\n * in left-to-right order, so duplicate properties on later objects will overwrite those from\n * erevious ones. Only enumerable and own properties of the input objects are copied onto the\n * resulting object.\n *\n * @name extend\n * @api public\n * @category Object\n * @param {Object} dest The destination object.\n * @param {...Object} sources The source objects.\n * @return {Object} `dest`, extended with the properties of all `sources`.\n * @example\n * var a = { a: 'a' };\n * var b = { b: 'b' };\n * var c = { c: 'c' };\n *\n * extend(a, b, c);\n * //=> { a: 'a', b: 'b', c: 'c' };\n */\nvar extend = function extend(dest /*, sources */) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n for (var i = 0; i < sources.length; i += 1) {\n for (var key in sources[i]) {\n if (has.call(sources[i], key)) {\n dest[key] = sources[i][key];\n }\n }\n }\n\n return dest;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = extend;\n","\nvar identity = function(_){ return _; };\n\n\n/**\n * Module exports, export\n */\n\nmodule.exports = multiple(find);\nmodule.exports.find = module.exports;\n\n\n/**\n * Export the replacement function, return the modified object\n */\n\nmodule.exports.replace = function (obj, key, val, options) {\n multiple(replace).call(this, obj, key, val, options);\n return obj;\n};\n\n\n/**\n * Export the delete function, return the modified object\n */\n\nmodule.exports.del = function (obj, key, options) {\n multiple(del).call(this, obj, key, null, options);\n return obj;\n};\n\n\n/**\n * Compose applying the function to a nested key\n */\n\nfunction multiple (fn) {\n return function (obj, path, val, options) {\n normalize = options && isFunction(options.normalizer) ? options.normalizer : defaultNormalize;\n path = normalize(path);\n\n var key;\n var finished = false;\n\n while (!finished) loop();\n\n function loop() {\n for (key in obj) {\n var normalizedKey = normalize(key);\n if (0 === path.indexOf(normalizedKey)) {\n var temp = path.substr(normalizedKey.length);\n if (temp.charAt(0) === '.' || temp.length === 0) {\n path = temp.substr(1);\n var child = obj[key];\n\n // we're at the end and there is nothing.\n if (null == child) {\n finished = true;\n return;\n }\n\n // we're at the end and there is something.\n if (!path.length) {\n finished = true;\n return;\n }\n\n // step into child\n obj = child;\n\n // but we're done here\n return;\n }\n }\n }\n\n key = undefined;\n // if we found no matching properties\n // on the current object, there's no match.\n finished = true;\n }\n\n if (!key) return;\n if (null == obj) return obj;\n\n // the `obj` and `key` is one above the leaf object and key, so\n // start object: { a: { 'b.c': 10 } }\n // end object: { 'b.c': 10 }\n // end key: 'b.c'\n // this way, you can do `obj[key]` and get `10`.\n return fn(obj, key, val);\n };\n}\n\n\n/**\n * Find an object by its key\n *\n * find({ first_name : 'Calvin' }, 'firstName')\n */\n\nfunction find (obj, key) {\n if (obj.hasOwnProperty(key)) return obj[key];\n}\n\n\n/**\n * Delete a value for a given key\n *\n * del({ a : 'b', x : 'y' }, 'X' }) -> { a : 'b' }\n */\n\nfunction del (obj, key) {\n if (obj.hasOwnProperty(key)) delete obj[key];\n return obj;\n}\n\n\n/**\n * Replace an objects existing value with a new one\n *\n * replace({ a : 'b' }, 'a', 'c') -> { a : 'c' }\n */\n\nfunction replace (obj, key, val) {\n if (obj.hasOwnProperty(key)) obj[key] = val;\n return obj;\n}\n\n/**\n * Normalize a `dot.separated.path`.\n *\n * A.HELL(!*&#(!)O_WOR LD.bar => ahelloworldbar\n *\n * @param {String} path\n * @return {String}\n */\n\nfunction defaultNormalize(path) {\n return path.replace(/[^a-zA-Z0-9\\.]+/g, '').toLowerCase();\n}\n\n/**\n * Check if a value is a function.\n *\n * @param {*} val\n * @return {boolean} Returns `true` if `val` is a function, otherwise `false`.\n */\n\nfunction isFunction(val) {\n return typeof val === 'function';\n}\n","import is from \"is\";\nimport extend from \"@ndhoule/extend\";\nimport { del } from \"obj-case\";\nimport each from \"component-each\";\nimport { getRevenue } from \"../../utils/utils\";\nimport logger from \"../../utils/logUtil\";\n\nclass Kissmetrics {\n constructor(config) {\n this.apiKey = config.apiKey;\n this.prefixProperties = config.prefixProperties;\n this.name = \"KISSMETRICS\";\n }\n\n init() {\n logger.debug(\"===in init Kissmetrics===\");\n window._kmq = window._kmq || [];\n\n const _kmk = window._kmk || this.apiKey;\n function _kms(u) {\n setTimeout(function () {\n const d = document;\n const f = d.getElementsByTagName(\"script\")[0];\n const s = d.createElement(\"script\");\n s.type = \"text/javascript\";\n s.async = true;\n s.src = u;\n f.parentNode.insertBefore(s, f);\n }, 1);\n }\n _kms(\"//i.kissmetrics.com/i.js\");\n _kms(`//scripts.kissmetrics.com/${_kmk}.2.js`);\n\n if (this.isEnvMobile()) {\n window._kmq.push([\"set\", { \"Mobile Session\": \"Yes\" }]);\n }\n }\n\n isEnvMobile() {\n return (\n navigator.userAgent.match(/Android/i) ||\n navigator.userAgent.match(/BlackBerry/i) ||\n navigator.userAgent.match(/IEMobile/i) ||\n navigator.userAgent.match(/Opera Mini/i) ||\n navigator.userAgent.match(/iPad/i) ||\n navigator.userAgent.match(/iPhone|iPod/i)\n );\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n toUnixTimestamp(date) {\n date = new Date(date);\n return Math.floor(date.getTime() / 1000);\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n clean(obj) {\n let ret = {};\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n const value = obj[k];\n if (value === null || typeof value === \"undefined\") continue;\n\n // convert date to unix\n if (is.date(value)) {\n ret[k] = this.toUnixTimestamp(value);\n continue;\n }\n\n // leave boolean as is\n if (is.bool(value)) {\n ret[k] = value;\n continue;\n }\n\n // leave numbers as is\n if (is.number(value)) {\n ret[k] = value;\n continue;\n }\n\n // convert non objects to strings\n logger.debug(value.toString());\n if (value.toString() !== \"[object Object]\") {\n ret[k] = value.toString();\n continue;\n }\n\n // json\n // must flatten including the name of the original trait/property\n const nestedObj = {};\n nestedObj[k] = value;\n const flattenedObj = this.flatten(nestedObj, { safe: true });\n\n // stringify arrays inside nested object to be consistent with top level behavior of arrays\n for (const key in flattenedObj) {\n if (is.array(flattenedObj[key])) {\n flattenedObj[key] = flattenedObj[key].toString();\n }\n }\n\n ret = extend(ret, flattenedObj);\n delete ret[k];\n }\n }\n return ret;\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n flatten(target, opts) {\n opts = opts || {};\n\n const delimiter = opts.delimiter || \".\";\n let { maxDepth } = opts;\n let currentDepth = 1;\n const output = {};\n\n function step(object, prev) {\n for (const key in object) {\n if (object.hasOwnProperty(key)) {\n const value = object[key];\n const isarray = opts.safe && is.array(value);\n const type = Object.prototype.toString.call(value);\n const isobject =\n type === \"[object Object]\" || type === \"[object Array]\";\n const arr = [];\n\n const newKey = prev ? prev + delimiter + key : key;\n\n if (!opts.maxDepth) {\n maxDepth = currentDepth + 1;\n }\n\n for (const keys in value) {\n if (value.hasOwnProperty(keys)) {\n arr.push(keys);\n }\n }\n\n if (!isarray && isobject && arr.length && currentDepth < maxDepth) {\n ++currentDepth;\n return step(value, newKey);\n }\n\n output[newKey] = value;\n }\n }\n }\n\n step(target);\n\n return output;\n }\n\n // source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js\n prefix(event, properties) {\n const prefixed = {};\n each(properties, function (key, val) {\n if (key === \"Billing Amount\") {\n prefixed[key] = val;\n } else if (key === \"revenue\") {\n prefixed[`${event} - ${key}`] = val;\n prefixed[\"Billing Amount\"] = val;\n } else {\n prefixed[`${event} - ${key}`] = val;\n }\n });\n return prefixed;\n }\n\n identify(rudderElement) {\n logger.debug(\"in Kissmetrics identify\");\n const traits = this.clean(rudderElement.message.context.traits);\n const userId =\n rudderElement.message.userId && rudderElement.message.userId != \"\"\n ? rudderElement.message.userId\n : undefined;\n\n if (userId) {\n window._kmq.push([\"identify\", userId]);\n }\n if (traits) {\n window._kmq.push([\"set\", traits]);\n }\n }\n\n track(rudderElement) {\n logger.debug(\"in Kissmetrics track\");\n\n const { event } = rudderElement.message;\n let properties = JSON.parse(\n JSON.stringify(rudderElement.message.properties)\n );\n const timestamp = this.toUnixTimestamp(new Date());\n\n const revenue = getRevenue(properties);\n if (revenue) {\n properties.revenue = revenue;\n }\n\n const { products } = properties;\n if (products) {\n delete properties.products;\n }\n\n properties = this.clean(properties);\n logger.debug(JSON.stringify(properties));\n\n if (this.prefixProperties) {\n properties = this.prefix(event, properties);\n }\n window._kmq.push([\"record\", event, properties]);\n\n const iterator = function pushItem(product, i) {\n let item = product;\n if (this.prefixProperties) item = this.prefix(event, item);\n item._t = timestamp + i;\n item._d = 1;\n window.KM.set(item);\n }.bind(this);\n\n if (products) {\n window._kmq.push(() => {\n each(products, iterator);\n });\n }\n }\n\n page(rudderElement) {\n logger.debug(\"in Kissmetrics page\");\n const pageName = rudderElement.message.name;\n const pageCategory = rudderElement.message.properties\n ? rudderElement.message.properties.category\n : undefined;\n let name = \"Loaded a Page\";\n if (pageName) {\n name = `Viewed ${pageName} page`;\n }\n if (pageCategory && pageName) {\n name = `Viewed ${pageCategory} ${pageName} page`;\n }\n\n let { properties } = rudderElement.message;\n if (this.prefixProperties) {\n properties = this.prefix(\"Page\", properties);\n }\n\n window._kmq.push([\"record\", name, properties]);\n }\n\n alias(rudderElement) {\n const prev = rudderElement.message.previousId;\n const { userId } = rudderElement.message;\n window._kmq.push([\"alias\", userId, prev]);\n }\n\n group(rudderElement) {\n const { groupId } = rudderElement.message;\n let groupTraits = rudderElement.message.traits;\n groupTraits = this.prefix(\"Group\", groupTraits);\n if (groupId) {\n groupTraits[\"Group - id\"] = groupId;\n }\n window._kmq.push([\"set\", groupTraits]);\n logger.debug(\"in Kissmetrics group\");\n }\n\n isLoaded() {\n return is.object(window.KM);\n }\n\n isReady() {\n return is.object(window.KM);\n }\n}\n\nexport { Kissmetrics };\n","import logger from \"../../utils/logUtil\";\n\nclass CustomerIO {\n constructor(config) {\n this.siteID = config.siteID;\n this.apiKey = config.apiKey;\n\n this.name = \"CUSTOMERIO\";\n }\n\n init() {\n logger.debug(\"===in init Customer IO init===\");\n window._cio = window._cio || [];\n const { siteID } = this;\n (function () {\n let a;\n let b;\n let c;\n a = function (f) {\n return function () {\n window._cio.push(\n [f].concat(Array.prototype.slice.call(arguments, 0))\n );\n };\n };\n b = [\"load\", \"identify\", \"sidentify\", \"track\", \"page\"];\n for (c = 0; c < b.length; c++) {\n window._cio[b[c]] = a(b[c]);\n }\n const t = document.createElement(\"script\");\n const s = document.getElementsByTagName(\"script\")[0];\n t.async = true;\n t.id = \"cio-tracker\";\n t.setAttribute(\"data-site-id\", siteID);\n t.src = \"https://assets.customer.io/assets/track.js\";\n s.parentNode.insertBefore(t, s);\n })();\n }\n\n identify(rudderElement) {\n logger.debug(\"in Customer IO identify\");\n const userId = rudderElement.message.userId\n ? rudderElement.message.userId\n : rudderElement.message.anonymousId;\n const traits = rudderElement.message.context.traits\n ? rudderElement.message.context.traits\n : {};\n if (!traits.created_at) {\n traits.created_at = Math.floor(new Date().getTime() / 1000);\n }\n traits.id = userId;\n window._cio.identify(traits);\n }\n\n track(rudderElement) {\n logger.debug(\"in Customer IO track\");\n\n const eventName = rudderElement.message.event;\n const { properties } = rudderElement.message;\n window._cio.track(eventName, properties);\n }\n\n page(rudderElement) {\n logger.debug(\"in Customer IO page\");\n\n const name =\n rudderElement.message.name || rudderElement.message.properties.url;\n window._cio.page(name, rudderElement.message.properties);\n }\n\n isLoaded() {\n return !!(window._cio && window._cio.push !== Array.prototype.push);\n }\n\n isReady() {\n return !!(window._cio && window._cio.push !== Array.prototype.push);\n }\n}\n\nexport { CustomerIO };\n","var each = require('each');\n\n\n/**\n * Cache whether `` exists.\n */\n\nvar body = false;\n\n\n/**\n * Callbacks to call when the body exists.\n */\n\nvar callbacks = [];\n\n\n/**\n * Export a way to add handlers to be invoked once the body exists.\n *\n * @param {Function} callback A function to call when the body exists.\n */\n\nmodule.exports = function onBody (callback) {\n if (body) {\n call(callback);\n } else {\n callbacks.push(callback);\n }\n};\n\n\n/**\n * Set an interval to check for `document.body`.\n */\n\nvar interval = setInterval(function () {\n if (!document.body) return;\n body = true;\n each(callbacks, call);\n clearInterval(interval);\n}, 5);\n\n\n/**\n * Call a callback, passing it the body.\n *\n * @param {Function} callback The callback to call.\n */\n\nfunction call (callback) {\n callback(document.body);\n}","import onBody from \"on-body\";\nimport logger from \"../../utils/logUtil\";\nimport {\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL,\n} from \"../../utils/constants\";\n\nclass Chartbeat {\n constructor(config, analytics) {\n this.analytics = analytics; // use this to modify failed integrations or for passing events from callback to other destinations\n this._sf_async_config = window._sf_async_config =\n window._sf_async_config || {};\n window._sf_async_config.useCanonical = true;\n window._sf_async_config.uid = config.uid;\n window._sf_async_config.domain = config.domain;\n this.isVideo = !!config.video;\n this.sendNameAndCategoryAsTitle = config.sendNameAndCategoryAsTitle || true;\n this.subscriberEngagementKeys = config.subscriberEngagementKeys || [];\n this.replayEvents = [];\n this.failed = false;\n this.isFirstPageCallMade = false;\n this.name = \"CHARTBEAT\";\n }\n\n init() {\n logger.debug(\"===in init Chartbeat===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"in Chartbeat identify\");\n }\n\n track(rudderElement) {\n logger.debug(\"in Chartbeat track\");\n }\n\n page(rudderElement) {\n logger.debug(\"in Chartbeat page\");\n this.loadConfig(rudderElement);\n\n if (!this.isFirstPageCallMade) {\n this.isFirstPageCallMade = true;\n this.initAfterPage();\n } else {\n if (this.failed) {\n logger.debug(\"===ignoring cause failed integration===\");\n this.replayEvents = [];\n return;\n }\n if (!this.isLoaded() && !this.failed) {\n logger.debug(\"===pushing to replay queue for chartbeat===\");\n this.replayEvents.push([\"page\", rudderElement]);\n return;\n }\n logger.debug(\"===processing page event in chartbeat===\");\n const { properties } = rudderElement.message;\n window.pSUPERFLY.virtualPage(properties.path);\n }\n }\n\n isLoaded() {\n logger.debug(\"in Chartbeat isLoaded\");\n if (!this.isFirstPageCallMade) {\n return true;\n }\n return !!window.pSUPERFLY;\n }\n\n isFailed() {\n return this.failed;\n }\n\n isReady() {\n return !!window.pSUPERFLY;\n }\n\n loadConfig(rudderElement) {\n const { properties } = rudderElement.message;\n const category = properties ? properties.category : undefined;\n const { name } = rudderElement.message;\n const author = properties ? properties.author : undefined;\n let title;\n if (this.sendNameAndCategoryAsTitle) {\n title = category && name ? `${category} ${name}` : name;\n }\n if (category) window._sf_async_config.sections = category;\n if (author) window._sf_async_config.authors = author;\n if (title) window._sf_async_config.title = title;\n\n const _cbq = (window._cbq = window._cbq || []);\n\n for (const key in properties) {\n if (!properties.hasOwnProperty(key)) continue;\n if (this.subscriberEngagementKeys.indexOf(key) > -1) {\n _cbq.push([key, properties[key]]);\n }\n }\n }\n\n initAfterPage() {\n onBody(() => {\n const script = this.isVideo ? \"chartbeat_video.js\" : \"chartbeat.js\";\n function loadChartbeat() {\n const e = document.createElement(\"script\");\n const n = document.getElementsByTagName(\"script\")[0];\n e.type = \"text/javascript\";\n e.async = true;\n e.src = `//static.chartbeat.com/js/${script}`;\n n.parentNode.insertBefore(e, n);\n }\n loadChartbeat();\n });\n\n this._isReady(this).then((instance) => {\n logger.debug(\"===replaying on chartbeat===\");\n instance.replayEvents.forEach((event) => {\n instance[event[0]](event[1]);\n });\n });\n }\n\n pause(time) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n }\n\n _isReady(instance, time = 0) {\n return new Promise((resolve) => {\n if (this.isLoaded()) {\n this.failed = false;\n logger.debug(\"===chartbeat loaded successfully===\");\n instance.analytics.emit(\"ready\");\n return resolve(instance);\n }\n if (time >= MAX_WAIT_FOR_INTEGRATION_LOAD) {\n this.failed = true;\n logger.debug(\"===chartbeat failed===\");\n return resolve(instance);\n }\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() => {\n return this._isReady(\n instance,\n time + INTEGRATION_LOAD_CHECK_INTERVAL\n ).then(resolve);\n });\n });\n }\n}\n\nexport { Chartbeat };\n","import logger from \"../../utils/logUtil\";\nimport {\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL,\n} from \"../../utils/constants\";\n\nclass Comscore {\n constructor(config, analytics) {\n this.c2ID = config.c2ID;\n this.analytics = analytics;\n this.comScoreBeaconParam = config.comScoreBeaconParam\n ? config.comScoreBeaconParam\n : {};\n this.isFirstPageCallMade = false;\n this.failed = false;\n this.comScoreParams = {};\n this.replayEvents = [];\n this.name = \"COMSCORE\";\n }\n\n init() {\n logger.debug(\"===in init Comscore init===\");\n }\n\n identify(rudderElement) {\n logger.debug(\"in Comscore identify\");\n }\n\n track(rudderElement) {\n logger.debug(\"in Comscore track\");\n }\n\n page(rudderElement) {\n logger.debug(\"in Comscore page\");\n\n this.loadConfig(rudderElement);\n\n if (!this.isFirstPageCallMade) {\n this.isFirstPageCallMade = true;\n this.initAfterPage();\n } else {\n if (this.failed) {\n this.replayEvents = [];\n return;\n }\n if (!this.isLoaded() && !this.failed) {\n this.replayEvents.push([\"page\", rudderElement]);\n return;\n }\n const { properties } = rudderElement.message;\n // window.COMSCORE.beacon({c1:\"2\", c2: \"\"});\n // this.comScoreParams = this.mapComscoreParams(properties);\n window.COMSCORE.beacon(this.comScoreParams);\n }\n }\n\n loadConfig(rudderElement) {\n logger.debug(\"=====in loadConfig=====\");\n this.comScoreParams = this.mapComscoreParams(\n rudderElement.message.properties\n );\n window._comscore = window._comscore || [];\n window._comscore.push(this.comScoreParams);\n }\n\n initAfterPage() {\n logger.debug(\"=====in initAfterPage=====\");\n (function () {\n const s = document.createElement(\"script\");\n const el = document.getElementsByTagName(\"script\")[0];\n s.async = true;\n s.src = `${\n document.location.protocol == \"https:\" ? \"https://sb\" : \"http://b\"\n }.scorecardresearch.com/beacon.js`;\n el.parentNode.insertBefore(s, el);\n })();\n\n this._isReady(this).then((instance) => {\n instance.replayEvents.forEach((event) => {\n instance[event[0]](event[1]);\n });\n });\n }\n\n pause(time) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n }\n\n _isReady(instance, time = 0) {\n return new Promise((resolve) => {\n if (this.isLoaded()) {\n this.failed = false;\n instance.analytics.emit(\"ready\");\n return resolve(instance);\n }\n if (time >= MAX_WAIT_FOR_INTEGRATION_LOAD) {\n this.failed = true;\n return resolve(instance);\n }\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() => {\n return this._isReady(\n instance,\n time + INTEGRATION_LOAD_CHECK_INTERVAL\n ).then(resolve);\n });\n });\n }\n\n mapComscoreParams(properties) {\n logger.debug(\"=====in mapComscoreParams=====\");\n const comScoreBeaconParamsMap = this.comScoreBeaconParam;\n\n const comScoreParams = {};\n\n Object.keys(comScoreBeaconParamsMap).forEach(function (property) {\n if (property in properties) {\n const key = comScoreBeaconParamsMap[property];\n const value = properties[property];\n comScoreParams[key] = value;\n }\n });\n\n comScoreParams.c1 = \"2\";\n comScoreParams.c2 = this.c2ID;\n /* if (this.options.comscorekw.length) {\n comScoreParams.comscorekw = this.options.comscorekw;\n } */\n logger.debug(\"=====in mapComscoreParams=====\", comScoreParams);\n return comScoreParams;\n }\n\n isLoaded() {\n logger.debug(\"in Comscore isLoaded\");\n if (!this.isFirstPageCallMade) {\n return true;\n }\n return !!window.COMSCORE;\n }\n\n isReady() {\n return !!window.COMSCORE;\n }\n}\n\nexport { Comscore };\n","'use strict';\n\nvar hop = Object.prototype.hasOwnProperty;\nvar strCharAt = String.prototype.charAt;\nvar toStr = Object.prototype.toString;\n\n/**\n * Returns the character at a given index.\n *\n * @param {string} str\n * @param {number} index\n * @return {string|undefined}\n */\n// TODO: Move to a library\nvar charAt = function(str, index) {\n return strCharAt.call(str, index);\n};\n\n/**\n * hasOwnProperty, wrapped as a function.\n *\n * @name has\n * @api private\n * @param {*} context\n * @param {string|number} prop\n * @return {boolean}\n */\n\n// TODO: Move to a library\nvar has = function has(context, prop) {\n return hop.call(context, prop);\n};\n\n/**\n * Returns true if a value is a string, otherwise false.\n *\n * @name isString\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n\n// TODO: Move to a library\nvar isString = function isString(val) {\n return toStr.call(val) === '[object String]';\n};\n\n/**\n * Returns true if a value is array-like, otherwise false. Array-like means a\n * value is not null, undefined, or a function, and has a numeric `length`\n * property.\n *\n * @name isArrayLike\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isArrayLike = function isArrayLike(val) {\n return val != null && (typeof val !== 'function' && typeof val.length === 'number');\n};\n\n\n/**\n * indexKeys\n *\n * @name indexKeys\n * @api private\n * @param {} target\n * @param {Function} pred\n * @return {Array}\n */\nvar indexKeys = function indexKeys(target, pred) {\n pred = pred || has;\n\n var results = [];\n\n for (var i = 0, len = target.length; i < len; i += 1) {\n if (pred(target, i)) {\n results.push(String(i));\n }\n }\n\n return results;\n};\n\n/**\n * Returns an array of an object's owned keys.\n *\n * @name objectKeys\n * @api private\n * @param {*} target\n * @param {Function} pred Predicate function used to include/exclude values from\n * the resulting array.\n * @return {Array}\n */\nvar objectKeys = function objectKeys(target, pred) {\n pred = pred || has;\n\n var results = [];\n\n for (var key in target) {\n if (pred(target, key)) {\n results.push(String(key));\n }\n }\n\n return results;\n};\n\n/**\n * Creates an array composed of all keys on the input object. Ignores any non-enumerable properties.\n * More permissive than the native `Object.keys` function (non-objects will not throw errors).\n *\n * @name keys\n * @api public\n * @category Object\n * @param {Object} source The value to retrieve keys from.\n * @return {Array} An array containing all the input `source`'s keys.\n * @example\n * keys({ likes: 'avocado', hates: 'pineapple' });\n * //=> ['likes', 'pineapple'];\n *\n * // Ignores non-enumerable properties\n * var hasHiddenKey = { name: 'Tim' };\n * Object.defineProperty(hasHiddenKey, 'hidden', {\n * value: 'i am not enumerable!',\n * enumerable: false\n * })\n * keys(hasHiddenKey);\n * //=> ['name'];\n *\n * // Works on arrays\n * keys(['a', 'b', 'c']);\n * //=> ['0', '1', '2']\n *\n * // Skips unpopulated indices in sparse arrays\n * var arr = [1];\n * arr[4] = 4;\n * keys(arr);\n * //=> ['0', '4']\n */\nvar keys = function keys(source) {\n if (source == null) {\n return [];\n }\n\n // IE6-8 compatibility (string)\n if (isString(source)) {\n return indexKeys(source, charAt);\n }\n\n // IE6-8 compatibility (arguments)\n if (isArrayLike(source)) {\n return indexKeys(source, has);\n }\n\n return objectKeys(source);\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = keys;\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar keys = require('@ndhoule/keys');\n\nvar objToString = Object.prototype.toString;\n\n/**\n * Tests if a value is a number.\n *\n * @name isNumber\n * @api private\n * @param {*} val The value to test.\n * @return {boolean} Returns `true` if `val` is a number, otherwise `false`.\n */\n// TODO: Move to library\nvar isNumber = function isNumber(val) {\n var type = typeof val;\n return type === 'number' || (type === 'object' && objToString.call(val) === '[object Number]');\n};\n\n/**\n * Tests if a value is an array.\n *\n * @name isArray\n * @api private\n * @param {*} val The value to test.\n * @return {boolean} Returns `true` if the value is an array, otherwise `false`.\n */\n// TODO: Move to library\nvar isArray = typeof Array.isArray === 'function' ? Array.isArray : function isArray(val) {\n return objToString.call(val) === '[object Array]';\n};\n\n/**\n * Tests if a value is array-like. Array-like means the value is not a function and has a numeric\n * `.length` property.\n *\n * @name isArrayLike\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n// TODO: Move to library\nvar isArrayLike = function isArrayLike(val) {\n return val != null && (isArray(val) || (val !== 'function' && isNumber(val.length)));\n};\n\n/**\n * Internal implementation of `each`. Works on arrays and array-like data structures.\n *\n * @name arrayEach\n * @api private\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Array} array The array(-like) structure to iterate over.\n * @return {undefined}\n */\nvar arrayEach = function arrayEach(iterator, array) {\n for (var i = 0; i < array.length; i += 1) {\n // Break iteration early if `iterator` returns `false`\n if (iterator(array[i], i, array) === false) {\n break;\n }\n }\n};\n\n/**\n * Internal implementation of `each`. Works on objects.\n *\n * @name baseEach\n * @api private\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Object} object The object to iterate over.\n * @return {undefined}\n */\nvar baseEach = function baseEach(iterator, object) {\n var ks = keys(object);\n\n for (var i = 0; i < ks.length; i += 1) {\n // Break iteration early if `iterator` returns `false`\n if (iterator(object[ks[i]], ks[i], object) === false) {\n break;\n }\n }\n};\n\n/**\n * Iterate over an input collection, invoking an `iterator` function for each element in the\n * collection and passing to it three arguments: `(value, index, collection)`. The `iterator`\n * function can end iteration early by returning `false`.\n *\n * @name each\n * @api public\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Array|Object|string} collection The collection to iterate over.\n * @return {undefined} Because `each` is run only for side effects, always returns `undefined`.\n * @example\n * var log = console.log.bind(console);\n *\n * each(log, ['a', 'b', 'c']);\n * //-> 'a', 0, ['a', 'b', 'c']\n * //-> 'b', 1, ['a', 'b', 'c']\n * //-> 'c', 2, ['a', 'b', 'c']\n * //=> undefined\n *\n * each(log, 'tim');\n * //-> 't', 2, 'tim'\n * //-> 'i', 1, 'tim'\n * //-> 'm', 0, 'tim'\n * //=> undefined\n *\n * // Note: Iteration order not guaranteed across environments\n * each(log, { name: 'tim', occupation: 'enchanter' });\n * //-> 'tim', 'name', { name: 'tim', occupation: 'enchanter' }\n * //-> 'enchanter', 'occupation', { name: 'tim', occupation: 'enchanter' }\n * //=> undefined\n */\nvar each = function each(iterator, collection) {\n return (isArrayLike(collection) ? arrayEach : baseEach).call(this, iterator, collection);\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = each;\n","import is from \"is\";\nimport each from \"@ndhoule/each\";\nimport ScriptLoader from \"../ScriptLoader\";\nimport logger from \"../../utils/logUtil\";\n\nclass FacebookPixel {\n constructor(config) {\n this.blacklistPiiProperties = config.blacklistPiiProperties;\n this.categoryToContent = config.categoryToContent;\n this.pixelId = config.pixelId;\n this.eventsToEvents = config.eventsToEvents;\n this.eventCustomProperties = config.eventCustomProperties;\n this.valueFieldIdentifier = config.valueFieldIdentifier;\n this.advancedMapping = config.advancedMapping;\n this.traitKeyToExternalId = config.traitKeyToExternalId;\n this.legacyConversionPixelId = config.legacyConversionPixelId;\n this.userIdAsPixelId = config.userIdAsPixelId;\n this.whitelistPiiProperties = config.whitelistPiiProperties;\n this.name = \"FB_PIXEL\";\n }\n\n init() {\n if (this.categoryToContent === undefined) {\n this.categoryToContent = [];\n }\n if (this.legacyConversionPixelId === undefined) {\n this.legacyConversionPixelId = [];\n }\n if (this.userIdAsPixelId === undefined) {\n this.userIdAsPixelId = [];\n }\n\n logger.debug(\"===in init FbPixel===\");\n\n window._fbq = function () {\n if (window.fbq.callMethod) {\n window.fbq.callMethod.apply(window.fbq, arguments);\n } else {\n window.fbq.queue.push(arguments);\n }\n };\n\n window.fbq = window.fbq || window._fbq;\n window.fbq.push = window.fbq;\n window.fbq.loaded = true;\n window.fbq.disablePushState = true; // disables automatic pageview tracking\n window.fbq.allowDuplicatePageViews = true; // enables fb\n window.fbq.version = \"2.0\";\n window.fbq.queue = [];\n\n window.fbq(\"init\", this.pixelId);\n ScriptLoader(\n \"fbpixel-integration\",\n \"https://connect.facebook.net/en_US/fbevents.js\"\n );\n }\n\n isLoaded() {\n logger.debug(\"in FBPixel isLoaded\");\n return !!(window.fbq && window.fbq.callMethod);\n }\n\n isReady() {\n logger.debug(\"in FBPixel isReady\");\n return !!(window.fbq && window.fbq.callMethod);\n }\n\n page(rudderElement) {\n window.fbq(\"track\", \"PageView\");\n }\n\n identify(rudderElement) {\n if (this.advancedMapping) {\n window.fbq(\"init\", this.pixelId, rudderElement.message.context.traits);\n }\n }\n\n track(rudderElement) {\n const self = this;\n const { event } = rudderElement.message;\n var revenue = this.formatRevenue(rudderElement.message.properties.revenue);\n const payload = this.buildPayLoad(rudderElement, true);\n\n if (this.categoryToContent === undefined) {\n this.categoryToContent = [];\n }\n if (this.legacyConversionPixelId === undefined) {\n this.legacyConversionPixelId = [];\n }\n if (this.userIdAsPixelId === undefined) {\n this.userIdAsPixelId = [];\n }\n\n payload.value = revenue;\n const standard = this.eventsToEvents;\n const legacy = this.legacyConversionPixelId;\n let standardTo;\n let legacyTo;\n\n standardTo = standard.reduce((filtered, standard) => {\n if (standard.from === event) {\n filtered.push(standard.to);\n }\n return filtered;\n }, []);\n\n legacyTo = legacy.reduce((filtered, legacy) => {\n if (legacy.from === event) {\n filtered.push(legacy.to);\n }\n return filtered;\n }, []);\n\n each((event) => {\n payload.currency = rudderElement.message.properties.currency || \"USD\";\n\n window.fbq(\"trackSingle\", self.pixelId, event, payload, {\n eventID: rudderElement.message.messageId,\n });\n }, standardTo);\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: revenue,\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n\n if (event === \"Product List Viewed\") {\n var contentType;\n var contentIds;\n var contents = [];\n var { products } = rudderElement.message.properties;\n var customProperties = this.buildPayLoad(rudderElement, true);\n\n if (Array.isArray(products)) {\n products.forEach(function (product) {\n const productId = product.product_id;\n if (productId) {\n contentIds.push(productId);\n contents.push({\n id: productId,\n quantity: rudderElement.message.properties.quantity,\n });\n }\n });\n }\n\n if (contentIds.length) {\n contentType = [\"product\"];\n } else {\n contentIds.push(rudderElement.message.properties.category || \"\");\n contents.push({\n id: rudderElement.message.properties.category || \"\",\n quantity: 1,\n });\n contentType = [\"product_group\"];\n }\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"ViewContent\",\n this.merge(\n {\n content_ids: contentIds,\n content_type: this.getContentType(rudderElement, contentType),\n contents,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: this.formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Product Viewed\") {\n var useValue = this.valueFieldIdentifier === \"properties.value\";\n var customProperties = this.buildPayLoad(rudderElement, true);\n\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"ViewContent\",\n this.merge(\n {\n content_ids: [\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n ],\n content_type: this.getContentType(rudderElement, [\"product\"]),\n content_name: rudderElement.message.properties.product_name || \"\",\n content_category: rudderElement.message.properties.category || \"\",\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n contents: [\n {\n id:\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n },\n ],\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Product Added\") {\n var useValue = this.valueFieldIdentifier === \"properties.value\";\n var customProperties = this.buildPayLoad(rudderElement, true);\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"AddToCart\",\n this.merge(\n {\n content_ids: [\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n ],\n content_type: this.getContentType(rudderElement, [\"product\"]),\n\n content_name: rudderElement.message.properties.product_name || \"\",\n content_category: rudderElement.message.properties.category || \"\",\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n contents: [\n {\n id:\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n },\n ],\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n this.merge(\n {\n content_ids: [\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n ],\n content_type: this.getContentType(rudderElement, [\"product\"]),\n\n content_name: rudderElement.message.properties.product_name || \"\",\n content_category: rudderElement.message.properties.category || \"\",\n currency: rudderElement.message.properties.currency,\n value: useValue\n ? this.formatRevenue(rudderElement.message.properties.value)\n : this.formatRevenue(rudderElement.message.properties.price),\n contents: [\n {\n id:\n rudderElement.message.properties.product_id ||\n rudderElement.message.properties.id ||\n rudderElement.message.properties.sku ||\n \"\",\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n },\n ],\n },\n customProperties\n );\n } else if (event === \"Order Completed\") {\n var { products } = rudderElement.message.properties;\n var customProperties = this.buildPayLoad(rudderElement, true);\n var revenue = this.formatRevenue(\n rudderElement.message.properties.revenue\n );\n\n var contentType = this.getContentType(rudderElement, [\"product\"]);\n var contentIds = [];\n var contents = [];\n\n for (var i = 0; i < products.length; i++) {\n var pId = product.product_id;\n contentIds.push(pId);\n var content = {\n id: pId,\n quantity: rudderElement.message.properties.quantity,\n };\n if (rudderElement.message.properties.price) {\n content.item_price = rudderElement.message.properties.price;\n }\n contents.push(content);\n }\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"Purchase\",\n this.merge(\n {\n content_ids: contentIds,\n content_type: contentType,\n currency: rudderElement.message.properties.currency,\n value: revenue,\n contents,\n num_items: contentIds.length,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: this.formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Products Searched\") {\n var customProperties = this.buildPayLoad(rudderElement, true);\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"Search\",\n this.merge(\n {\n search_string: rudderElement.message.properties.query,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n } else if (event === \"Checkout Started\") {\n var { products } = rudderElement.message.properties;\n var customProperties = this.buildPayLoad(rudderElement, true);\n var revenue = this.formatRevenue(\n rudderElement.message.properties.revenue\n );\n let contentCategory = rudderElement.message.properties.category;\n var contentIds = [];\n var contents = [];\n\n for (var i = 0; i < products.length; i++) {\n const product = products[i];\n var pId = product.product_id;\n contentIds.push(pId);\n var content = {\n id: pId,\n quantity: rudderElement.message.properties.quantity,\n item_price: rudderElement.message.properties.price,\n };\n if (rudderElement.message.properties.price) {\n content.item_price = rudderElement.message.properties.price;\n }\n contents.push(content);\n }\n if (!contentCategory && products[0] && products[0].category) {\n contentCategory = products[0].category;\n }\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n \"InitiateCheckout\",\n this.merge(\n {\n content_category: contentCategory,\n content_ids: contentIds,\n content_type: this.getContentType(rudderElement, [\"product\"]),\n currency: rudderElement.message.properties.currency,\n value: revenue,\n contents,\n num_items: contentIds.length,\n },\n customProperties\n ),\n {\n eventID: rudderElement.message.messageId,\n }\n );\n\n each((event) => {\n window.fbq(\n \"trackSingle\",\n self.pixelId,\n event,\n {\n currency: rudderElement.message.properties.currency,\n value: this.formatRevenue(rudderElement.message.properties.revenue),\n },\n {\n eventID: rudderElement.message.messageId,\n }\n );\n }, legacyTo);\n }\n }\n\n getContentType(rudderElement, defaultValue) {\n const { options } = rudderElement.message;\n if (options && options.contentType) {\n return [options.contentType];\n }\n\n let { category } = rudderElement.message.properties;\n if (!category) {\n const { products } = rudderElement.message.properties;\n if (products && products.length) {\n category = products[0].category;\n }\n }\n if (category) {\n const mapped = this.categoryToContent;\n let mappedTo;\n mappedTo = mapped.reduce((filtered, mapped) => {\n if (mapped.from == category) {\n filtered.push(mapped.to);\n }\n return filtered;\n }, []);\n if (mappedTo.length) {\n return mappedTo;\n }\n }\n return defaultValue;\n }\n\n merge(obj1, obj2) {\n const res = {};\n\n // All properties of obj1\n for (const propObj1 in obj1) {\n if (obj1.hasOwnProperty(propObj1)) {\n res[propObj1] = obj1[propObj1];\n }\n }\n\n // Extra properties of obj2\n for (const propObj2 in obj2) {\n if (obj2.hasOwnProperty(propObj2) && !res.hasOwnProperty(propObj2)) {\n res[propObj2] = obj2[propObj2];\n }\n }\n\n return res;\n }\n\n formatRevenue(revenue) {\n return Number(revenue || 0).toFixed(2);\n }\n\n buildPayLoad(rudderElement, isStandardEvent) {\n const dateFields = [\n \"checkinDate\",\n \"checkoutDate\",\n \"departingArrivalDate\",\n \"departingDepartureDate\",\n \"returningArrivalDate\",\n \"returningDepartureDate\",\n \"travelEnd\",\n \"travelStart\",\n ];\n const defaultPiiProperties = [\n \"email\",\n \"firstName\",\n \"lastName\",\n \"gender\",\n \"city\",\n \"country\",\n \"phone\",\n \"state\",\n \"zip\",\n \"birthday\",\n ];\n const whitelistPiiProperties = this.whitelistPiiProperties || [];\n const blacklistPiiProperties = this.blacklistPiiProperties || [];\n const eventCustomProperties = this.eventCustomProperties || [];\n const customPiiProperties = {};\n for (let i = 0; i < blacklistPiiProperties[i]; i++) {\n const configuration = blacklistPiiProperties[i];\n customPiiProperties[configuration.blacklistPiiProperties] =\n configuration.blacklistPiiHash;\n }\n const payload = {};\n const { properties } = rudderElement.message;\n\n for (const property in properties) {\n if (!properties.hasOwnProperty(property)) {\n continue;\n }\n\n if (isStandardEvent && eventCustomProperties.indexOf(property) < 0) {\n continue;\n }\n const value = properties[property];\n\n if (dateFields.indexOf(properties) >= 0) {\n if (is.date(value)) {\n payload[property] = value.toISOTring().split(\"T\")[0];\n continue;\n }\n }\n if (customPiiProperties.hasOwnProperty(property)) {\n if (customPiiProperties[property] && typeof value === \"string\") {\n payload[property] = sha256(value);\n }\n continue;\n }\n const isPropertyPii = defaultPiiProperties.indexOf(property) >= 0;\n const isProperyWhiteListed =\n whitelistPiiProperties.indexOf(property) >= 0;\n if (!isPropertyPii || isProperyWhiteListed) {\n payload[property] = value;\n }\n }\n return payload;\n }\n}\n\nexport { FacebookPixel };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /*\n\t * Local polyfil of Object.create\n\t */\n\t var create = Object.create || (function () {\n\t function F() {};\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }())\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.enc.Utf8;\n\n}));","/**\n * toString ref.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n *\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nmodule.exports = function(val){\n switch (toString.call(val)) {\n case '[object Date]': return 'date';\n case '[object RegExp]': return 'regexp';\n case '[object Arguments]': return 'arguments';\n case '[object Array]': return 'array';\n case '[object Error]': return 'error';\n }\n\n if (val === null) return 'null';\n if (val === undefined) return 'undefined';\n if (val !== val) return 'nan';\n if (val && val.nodeType === 1) return 'element';\n\n if (isBuffer(val)) return 'buffer';\n\n val = val.valueOf\n ? val.valueOf()\n : Object.prototype.valueOf.apply(val);\n\n return typeof val;\n};\n\n// code borrowed from https://github.com/feross/is-buffer/blob/master/index.js\nfunction isBuffer(obj) {\n return !!(obj != null &&\n (obj._isBuffer || // For Safari 5-7 (missing Object.prototype.constructor)\n (obj.constructor &&\n typeof obj.constructor.isBuffer === 'function' &&\n obj.constructor.isBuffer(obj))\n ))\n}\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar type = require('component-type');\n\n/**\n * Deeply clone an object.\n *\n * @param {*} obj Any object.\n */\n\nvar clone = function clone(obj) {\n var t = type(obj);\n\n if (t === 'object') {\n var copy = {};\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n copy[key] = clone(obj[key]);\n }\n }\n return copy;\n }\n\n if (t === 'array') {\n var copy = new Array(obj.length);\n for (var i = 0, l = obj.length; i < l; i++) {\n copy[i] = clone(obj[i]);\n }\n return copy;\n }\n\n if (t === 'regexp') {\n // from millermedeiros/amd-utils - MIT\n var flags = '';\n flags += obj.multiline ? 'm' : '';\n flags += obj.global ? 'g' : '';\n flags += obj.ignoreCase ? 'i' : '';\n return new RegExp(obj.source, flags);\n }\n\n if (t === 'date') {\n return new Date(obj.getTime());\n }\n\n // string, number, boolean, etc.\n return obj;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = clone;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options){\n options = options || {};\n if ('string' == typeof val) return parse(val);\n return options.long\n ? long(val)\n : short(val);\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = '' + str;\n if (str.length > 10000) return;\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n if (!match) return;\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction short(ms) {\n if (ms >= d) return Math.round(ms / d) + 'd';\n if (ms >= h) return Math.round(ms / h) + 'h';\n if (ms >= m) return Math.round(ms / m) + 'm';\n if (ms >= s) return Math.round(ms / s) + 's';\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction long(ms) {\n return plural(ms, d, 'day')\n || plural(ms, h, 'hour')\n || plural(ms, m, 'minute')\n || plural(ms, s, 'second')\n || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) return;\n if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n // define the `disabled` version\n function disabled() {\n }\n disabled.enabled = false;\n\n // define the `enabled` version\n function enabled() {\n\n var self = enabled;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // add the `color` if not set\n if (null == self.useColors) self.useColors = exports.useColors();\n if (null == self.color && self.useColors) self.color = selectColor();\n\n var args = Array.prototype.slice.call(arguments);\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %o\n args = ['%o'].concat(args);\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n if ('function' === typeof exports.formatArgs) {\n args = exports.formatArgs.apply(self, args);\n }\n var logFn = enabled.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n enabled.enabled = true;\n\n var fn = exports.enabled(namespace) ? enabled : disabled;\n\n fn.namespace = namespace;\n\n return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n var split = (namespaces || '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // is webkit? http://stackoverflow.com/a/16459606/376773\n return ('WebkitAppearance' in document.documentElement.style) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (window.console && (console.firebug || (console.exception && console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n var args = arguments;\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return args;\n\n var c = 'color: ' + this.color;\n args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('cookie');\n\n/**\n * Set or get cookie `name` with `value` and `options` object.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {Mixed}\n * @api public\n */\n\nmodule.exports = function(name, value, options){\n switch (arguments.length) {\n case 3:\n case 2:\n return set(name, value, options);\n case 1:\n return get(name);\n default:\n return all();\n }\n};\n\n/**\n * Set cookie `name` to `value`.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @api private\n */\n\nfunction set(name, value, options) {\n options = options || {};\n var str = encode(name) + '=' + encode(value);\n\n if (null == value) options.maxage = -1;\n\n if (options.maxage) {\n options.expires = new Date(+new Date + options.maxage);\n }\n\n if (options.path) str += '; path=' + options.path;\n if (options.domain) str += '; domain=' + options.domain;\n if (options.expires) str += '; expires=' + options.expires.toUTCString();\n if (options.samesite) str += '; samesite=' + options.samesite;\n if (options.secure) str += '; secure';\n\n document.cookie = str;\n}\n\n/**\n * Return all cookies.\n *\n * @return {Object}\n * @api private\n */\n\nfunction all() {\n var str;\n try {\n str = document.cookie;\n } catch (err) {\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err.stack || err);\n }\n return {};\n }\n return parse(str);\n}\n\n/**\n * Get cookie `name`.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction get(name) {\n return all()[name];\n}\n\n/**\n * Parse cookie `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parse(str) {\n var obj = {};\n var pairs = str.split(/ *; */);\n var pair;\n if ('' == pairs[0]) return obj;\n for (var i = 0; i < pairs.length; ++i) {\n pair = pairs[i].split('=');\n obj[decode(pair[0])] = decode(pair[1]);\n }\n return obj;\n}\n\n/**\n * Encode.\n */\n\nfunction encode(value){\n try {\n return encodeURIComponent(value);\n } catch (e) {\n debug('error `encode(%o)` - %o', value, e)\n }\n}\n\n/**\n * Decode.\n */\n\nfunction decode(value) {\n try {\n return decodeURIComponent(value);\n } catch (e) {\n debug('error `decode(%o)` - %o', value, e)\n }\n}\n","'use strict';\n\nvar max = Math.max;\n\n/**\n * Produce a new array composed of all but the first `n` elements of an input `collection`.\n *\n * @name drop\n * @api public\n * @param {number} count The number of elements to drop.\n * @param {Array} collection The collection to iterate over.\n * @return {Array} A new array containing all but the first element from `collection`.\n * @example\n * drop(0, [1, 2, 3]); // => [1, 2, 3]\n * drop(1, [1, 2, 3]); // => [2, 3]\n * drop(2, [1, 2, 3]); // => [3]\n * drop(3, [1, 2, 3]); // => []\n * drop(4, [1, 2, 3]); // => []\n */\nvar drop = function drop(count, collection) {\n var length = collection ? collection.length : 0;\n\n if (!length) {\n return [];\n }\n\n // Preallocating an array *significantly* boosts performance when dealing with\n // `arguments` objects on v8. For a summary, see:\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var toDrop = max(Number(count) || 0, 0);\n var resultsLength = max(length - toDrop, 0);\n var results = new Array(resultsLength);\n\n for (var i = 0; i < resultsLength; i += 1) {\n results[i] = collection[i + toDrop];\n }\n\n return results;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = drop;\n","'use strict';\n\nvar max = Math.max;\n\n/**\n * Produce a new array by passing each value in the input `collection` through a transformative\n * `iterator` function. The `iterator` function is passed three arguments:\n * `(value, index, collection)`.\n *\n * @name rest\n * @api public\n * @param {Array} collection The collection to iterate over.\n * @return {Array} A new array containing all but the first element from `collection`.\n * @example\n * rest([1, 2, 3]); // => [2, 3]\n */\nvar rest = function rest(collection) {\n if (collection == null || !collection.length) {\n return [];\n }\n\n // Preallocating an array *significantly* boosts performance when dealing with\n // `arguments` objects on v8. For a summary, see:\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var results = new Array(max(collection.length - 2, 0));\n\n for (var i = 1; i < collection.length; i += 1) {\n results[i - 1] = collection[i];\n }\n\n return results;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = rest;\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar drop = require('@ndhoule/drop');\nvar rest = require('@ndhoule/rest');\n\nvar has = Object.prototype.hasOwnProperty;\nvar objToString = Object.prototype.toString;\n\n/**\n * Returns `true` if a value is an object, otherwise `false`.\n *\n * @name isObject\n * @api private\n * @param {*} val The value to test.\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isObject = function isObject(value) {\n return Boolean(value) && typeof value === 'object';\n};\n\n/**\n * Returns `true` if a value is a plain object, otherwise `false`.\n *\n * @name isPlainObject\n * @api private\n * @param {*} val The value to test.\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isPlainObject = function isPlainObject(value) {\n return Boolean(value) && objToString.call(value) === '[object Object]';\n};\n\n/**\n * Assigns a key-value pair to a target object when the value assigned is owned,\n * and where target[key] is undefined.\n *\n * @name shallowCombiner\n * @api private\n * @param {Object} target\n * @param {Object} source\n * @param {*} value\n * @param {string} key\n */\nvar shallowCombiner = function shallowCombiner(target, source, value, key) {\n if (has.call(source, key) && target[key] === undefined) {\n target[key] = value;\n }\n return source;\n};\n\n/**\n * Assigns a key-value pair to a target object when the value assigned is owned,\n * and where target[key] is undefined; also merges objects recursively.\n *\n * @name deepCombiner\n * @api private\n * @param {Object} target\n * @param {Object} source\n * @param {*} value\n * @param {string} key\n * @return {Object}\n */\nvar deepCombiner = function(target, source, value, key) {\n if (has.call(source, key)) {\n if (isPlainObject(target[key]) && isPlainObject(value)) {\n target[key] = defaultsDeep(target[key], value);\n } else if (target[key] === undefined) {\n target[key] = value;\n }\n }\n\n return source;\n};\n\n/**\n * TODO: Document\n *\n * @name defaultsWith\n * @api private\n * @param {Function} combiner\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object} Return the input `target`.\n */\nvar defaultsWith = function(combiner, target /*, ...sources */) {\n if (!isObject(target)) {\n return target;\n }\n\n combiner = combiner || shallowCombiner;\n var sources = drop(2, arguments);\n\n for (var i = 0; i < sources.length; i += 1) {\n for (var key in sources[i]) {\n combiner(target, sources[i], sources[i][key], key);\n }\n }\n\n return target;\n};\n\n/**\n * Copies owned, enumerable properties from a source object(s) to a target\n * object when the value of that property on the source object is `undefined`.\n * Recurses on objects.\n *\n * @name defaultsDeep\n * @api public\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object} The input `target`.\n */\nvar defaultsDeep = function defaultsDeep(target /*, sources */) {\n // TODO: Replace with `partial` call?\n return defaultsWith.apply(null, [deepCombiner, target].concat(rest(arguments)));\n};\n\n/**\n * Copies owned, enumerable properties from a source object(s) to a target\n * object when the value of that property on the source object is `undefined`.\n *\n * @name defaults\n * @api public\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object}\n * @example\n * var a = { a: 1 };\n * var b = { a: 2, b: 2 };\n *\n * defaults(a, b);\n * console.log(a); //=> { a: 1, b: 2 }\n */\nvar defaults = function(target /*, ...sources */) {\n // TODO: Replace with `partial` call?\n return defaultsWith.apply(null, [null, target].concat(rest(arguments)));\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = defaults;\nmodule.exports.deep = defaultsDeep;\n","/*! JSON v3.3.2 | https://bestiejs.github.io/json3 | Copyright 2012-2015, Kit Cambridge, Benjamin Tan | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root.Object());\n exports || (exports = root.Object());\n\n // Native constructor aliases.\n var Number = context.Number || root.Number,\n String = context.String || root.String,\n Object = context.Object || root.Object,\n Date = context.Date || root.Date,\n SyntaxError = context.SyntaxError || root.SyntaxError,\n TypeError = context.TypeError || root.TypeError,\n Math = context.Math || root.Math,\n nativeJSON = context.JSON || root.JSON;\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty = objectProto.hasOwnProperty,\n undefined;\n\n // Internal: Contains `try...catch` logic used by other functions.\n // This prevents other functions from being deoptimized.\n function attempt(func, errorFunc) {\n try {\n func();\n } catch (exception) {\n if (errorFunc) {\n errorFunc();\n }\n }\n }\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n attempt(function () {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n });\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] != null) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"date-serialization\") && has(\"json-parse\");\n } else if (name == \"date-serialization\") {\n // Indicates whether `Date`s can be serialized accurately by `JSON.stringify`.\n isSupported = has(\"json-stringify\") && isExtended;\n if (isSupported) {\n var stringify = exports.stringify;\n attempt(function () {\n isSupported =\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n });\n }\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\";\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n attempt(function () {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undefined &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undefined) === undefined &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undefined &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undefined]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undefined, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\";\n }, function () {\n stringifySupported = false;\n });\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse, parseSupported;\n if (typeof parse == \"function\") {\n attempt(function () {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n attempt(function () {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n });\n if (parseSupported) {\n attempt(function () {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n });\n }\n if (parseSupported) {\n attempt(function () {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n });\n }\n }\n }\n }, function () {\n parseSupported = false;\n });\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n has[\"bug-string-char-index\"] = has[\"date-serialization\"] = has[\"json\"] = has[\"json-stringify\"] = has[\"json-parse\"] = null;\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n var forOwn = function (object, callback) {\n var size = 0, Properties, dontEnums, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n dontEnums = new Properties();\n for (property in dontEnums) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(dontEnums, property)) {\n size++;\n }\n }\n Properties = dontEnums = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n dontEnums = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forOwn = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = dontEnums.length; property = dontEnums[--length];) {\n if (hasProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forOwn = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forOwn(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\") && !has(\"date-serialization\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Serializes a date object.\n var serializeDate = function (value) {\n var getData, year, month, date, time, hours, minutes, seconds, milliseconds;\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n getData = function (value) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n };\n } else {\n getData = function (value) {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n };\n }\n serializeDate = function (value) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n getData(value);\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n year = month = date = hours = minutes = seconds = milliseconds = null;\n } else {\n value = null;\n }\n return value;\n };\n return serializeDate(value);\n };\n\n // For environments with `JSON.stringify` but buggy date serialization,\n // we override the native `Date#toJSON` implementation with a\n // spec-compliant one.\n if (has(\"json-stringify\") && !has(\"date-serialization\")) {\n // Internal: the `Date#toJSON` implementation used to override the native one.\n function dateToJSON (key) {\n return serializeDate(this);\n }\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n var nativeStringify = exports.stringify;\n exports.stringify = function (source, filter, width) {\n var nativeToJSON = Date.prototype.toJSON;\n Date.prototype.toJSON = dateToJSON;\n var result = nativeStringify(source, filter, width);\n Date.prototype.toJSON = nativeToJSON;\n return result;\n }\n } else {\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var escapeChar = function (character) {\n var charCode = character.charCodeAt(0), escaped = Escapes[charCode];\n if (escaped) {\n return escaped;\n }\n return unicodePrefix + toPaddedString(2, charCode.toString(16));\n };\n var reEscape = /[\\x00-\\x1f\\x22\\x5c]/g;\n var quote = function (value) {\n reEscape.lastIndex = 0;\n return '\"' +\n (\n reEscape.test(value)\n ? value.replace(reEscape, escapeChar)\n : value\n ) +\n '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, type, className, results, element, index, length, prefix, result;\n attempt(function () {\n // Necessary for host object support.\n value = object[property];\n });\n if (typeof value == \"object\" && value) {\n if (value.getUTCFullYear && getClass.call(value) == dateClass && value.toJSON === Date.prototype.toJSON) {\n value = serializeDate(value);\n } else if (typeof value.toJSON == \"function\") {\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n // Exit early if value is `undefined` or `null`.\n if (value == undefined) {\n return value === undefined ? value : \"null\";\n }\n type = typeof value;\n // Only call `getClass` if the value is an object.\n if (type == \"object\") {\n className = getClass.call(value);\n }\n switch (className || type) {\n case \"boolean\":\n case booleanClass:\n // Booleans are represented literally.\n return \"\" + value;\n case \"number\":\n case numberClass:\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n case \"string\":\n case stringClass:\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undefined ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forOwn(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undefined) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n className = getClass.call(filter);\n if (className == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length;) {\n value = filter[index++];\n className = getClass.call(value);\n if (className == \"[object String]\" || className == \"[object Number]\") {\n properties[value] = 1;\n }\n }\n }\n }\n if (width) {\n className = getClass.call(width);\n if (className == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n if (width > 10) {\n width = 10;\n }\n for (whitespace = \"\"; whitespace.length < width;) {\n whitespace += \" \";\n }\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length; position++) {\n charCode = source.charCodeAt(position);\n if (charCode < 48 || charCode > 57) {\n break;\n }\n }\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length; position++) {\n charCode = source.charCodeAt(position);\n if (charCode < 48 || charCode > 57) {\n break;\n }\n }\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n var temp = source.slice(Index, Index + 4);\n if (temp == \"true\") {\n Index += 4;\n return true;\n } else if (temp == \"fals\" && source.charCodeAt(Index + 4 ) == 101) {\n Index += 5;\n return false;\n } else if (temp == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;;) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n } else {\n hasMembers = true;\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;;) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n } else {\n hasMembers = true;\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undefined) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forOwn` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(getClass, forOwn, value, length, callback);\n }\n } else {\n forOwn(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports.runInContext = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root.JSON3,\n isRestored = false;\n\n var JSON3 = runInContext(root, (root.JSON3 = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root.JSON3 = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n // define the `disabled` version\n function disabled() {\n }\n disabled.enabled = false;\n\n // define the `enabled` version\n function enabled() {\n\n var self = enabled;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // add the `color` if not set\n if (null == self.useColors) self.useColors = exports.useColors();\n if (null == self.color && self.useColors) self.color = selectColor();\n\n var args = Array.prototype.slice.call(arguments);\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %o\n args = ['%o'].concat(args);\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n if ('function' === typeof exports.formatArgs) {\n args = exports.formatArgs.apply(self, args);\n }\n var logFn = enabled.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n enabled.enabled = true;\n\n var fn = exports.enabled(namespace) ? enabled : disabled;\n\n fn.namespace = namespace;\n\n return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n var split = (namespaces || '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // is webkit? http://stackoverflow.com/a/16459606/376773\n return ('WebkitAppearance' in document.documentElement.style) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (window.console && (console.firebug || (console.exception && console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n var args = arguments;\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return args;\n\n var c = 'color: ' + this.color;\n args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('cookie');\n\n/**\n * Set or get cookie `name` with `value` and `options` object.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {Mixed}\n * @api public\n */\n\nmodule.exports = function(name, value, options){\n switch (arguments.length) {\n case 3:\n case 2:\n return set(name, value, options);\n case 1:\n return get(name);\n default:\n return all();\n }\n};\n\n/**\n * Set cookie `name` to `value`.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @api private\n */\n\nfunction set(name, value, options) {\n options = options || {};\n var str = encode(name) + '=' + encode(value);\n\n if (null == value) options.maxage = -1;\n\n if (options.maxage) {\n options.expires = new Date(+new Date + options.maxage);\n }\n\n if (options.path) str += '; path=' + options.path;\n if (options.domain) str += '; domain=' + options.domain;\n if (options.expires) str += '; expires=' + options.expires.toUTCString();\n if (options.secure) str += '; secure';\n\n document.cookie = str;\n}\n\n/**\n * Return all cookies.\n *\n * @return {Object}\n * @api private\n */\n\nfunction all() {\n var str;\n try {\n str = document.cookie;\n } catch (err) {\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err.stack || err);\n }\n return {};\n }\n return parse(str);\n}\n\n/**\n * Get cookie `name`.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction get(name) {\n return all()[name];\n}\n\n/**\n * Parse cookie `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parse(str) {\n var obj = {};\n var pairs = str.split(/ *; */);\n var pair;\n if ('' == pairs[0]) return obj;\n for (var i = 0; i < pairs.length; ++i) {\n pair = pairs[i].split('=');\n obj[decode(pair[0])] = decode(pair[1]);\n }\n return obj;\n}\n\n/**\n * Encode.\n */\n\nfunction encode(value){\n try {\n return encodeURIComponent(value);\n } catch (e) {\n debug('error `encode(%o)` - %o', value, e)\n }\n}\n\n/**\n * Decode.\n */\n\nfunction decode(value) {\n try {\n return decodeURIComponent(value);\n } catch (e) {\n debug('error `decode(%o)` - %o', value, e)\n }\n}\n","'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar parse = require('component-url').parse;\nvar cookie = require('component-cookie');\n\n/**\n * Get the top domain.\n *\n * The function constructs the levels of domain and attempts to set a global\n * cookie on each one when it succeeds it returns the top level domain.\n *\n * The method returns an empty string when the hostname is an ip or `localhost`.\n *\n * Example levels:\n *\n * domain.levels('http://www.google.co.uk');\n * // => [\"co.uk\", \"google.co.uk\", \"www.google.co.uk\"]\n *\n * Example:\n *\n * domain('http://localhost:3000/baz');\n * // => ''\n * domain('http://dev:3000/baz');\n * // => ''\n * domain('http://127.0.0.1:3000/baz');\n * // => ''\n * domain('http://segment.io/baz');\n * // => 'segment.io'\n *\n * @param {string} url\n * @return {string}\n * @api public\n */\nfunction domain(url) {\n var cookie = exports.cookie;\n var levels = exports.levels(url);\n\n // Lookup the real top level one.\n for (var i = 0; i < levels.length; ++i) {\n var cname = '__tld__';\n var domain = levels[i];\n var opts = { domain: '.' + domain };\n\n cookie(cname, 1, opts);\n if (cookie(cname)) {\n cookie(cname, null, opts);\n return domain;\n }\n }\n\n return '';\n}\n\n/**\n * Levels returns all levels of the given url.\n *\n * @param {string} url\n * @return {Array}\n * @api public\n */\ndomain.levels = function(url) {\n var host = parse(url).hostname;\n var parts = host.split('.');\n var last = parts[parts.length - 1];\n var levels = [];\n\n // Ip address.\n if (parts.length === 4 && last === parseInt(last, 10)) {\n return levels;\n }\n\n // Localhost.\n if (parts.length <= 1) {\n return levels;\n }\n\n // Create levels.\n for (var i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n\n return levels;\n};\n\n/**\n * Expose cookie on domain.\n */\ndomain.cookie = cookie;\n\n/*\n * Exports.\n */\n\nexports = module.exports = domain;\n","import clone from \"@ndhoule/clone\";\nimport cookie from \"rudder-component-cookie\";\nimport defaults from \"@ndhoule/defaults\";\nimport json from \"json3\";\nimport topDomain from \"@segment/top-domain\";\nimport logger from \"../logUtil\";\n\n/**\n * An object utility to persist values in cookies\n */\nclass CookieLocal {\n constructor(options) {\n this._options = {};\n this.options(options);\n }\n\n /**\n *\n * @param {*} options\n */\n options(options = {}) {\n if (arguments.length === 0) return this._options;\n\n let domain = `.${topDomain(window.location.href)}`;\n if (domain === \".\") domain = null;\n\n // the default maxage and path\n this._options = defaults(options, {\n maxage: 31536000000,\n path: \"/\",\n domain,\n samesite: \"Lax\",\n });\n\n // try setting a cookie first\n this.set(\"test_rudder\", true);\n if (!this.get(\"test_rudder\")) {\n this._options.domain = null;\n }\n this.remove(\"test_rudder\");\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n set(key, value) {\n try {\n cookie(key, value, clone(this._options));\n return true;\n } catch (e) {\n logger.error(e);\n return false;\n }\n }\n\n /**\n *\n * @param {*} key\n */\n get(key) {\n return cookie(key);\n }\n\n /**\n *\n * @param {*} key\n */\n remove(key) {\n try {\n cookie(key, null, clone(this._options));\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\n// Exporting only the instance\nconst Cookie = new CookieLocal({});\n\nexport { Cookie };\n","\"use strict\"\n\nvar JSON = require('json3');\n\nmodule.exports = (function() {\n\t// Store.js\n\tvar store = {},\n\t\twin = (typeof window != 'undefined' ? window : global),\n\t\tdoc = win.document,\n\t\tlocalStorageName = 'localStorage',\n\t\tscriptTag = 'script',\n\t\tstorage\n\n\tstore.disabled = false\n\tstore.version = '1.3.20'\n\tstore.set = function(key, value) {}\n\tstore.get = function(key, defaultVal) {}\n\tstore.has = function(key) { return store.get(key) !== undefined }\n\tstore.remove = function(key) {}\n\tstore.clear = function() {}\n\tstore.transact = function(key, defaultVal, transactionFn) {\n\t\tif (transactionFn == null) {\n\t\t\ttransactionFn = defaultVal\n\t\t\tdefaultVal = null\n\t\t}\n\t\tif (defaultVal == null) {\n\t\t\tdefaultVal = {}\n\t\t}\n\t\tvar val = store.get(key, defaultVal)\n\t\ttransactionFn(val)\n\t\tstore.set(key, val)\n\t}\n\tstore.getAll = function() {\n\t\tvar ret = {}\n\t\tstore.forEach(function(key, val) {\n\t\t\tret[key] = val\n\t\t})\n\t\treturn ret\n\t}\n\tstore.forEach = function() {}\n\tstore.serialize = function(value) {\n\t\treturn JSON.stringify(value)\n\t}\n\tstore.deserialize = function(value) {\n\t\tif (typeof value != 'string') { return undefined }\n\t\ttry { return JSON.parse(value) }\n\t\tcatch(e) { return value || undefined }\n\t}\n\n\t// Functions to encapsulate questionable FireFox 3.6.13 behavior\n\t// when about.config::dom.storage.enabled === false\n\t// See https://github.com/marcuswestin/store.js/issues#issue/13\n\tfunction isLocalStorageNameSupported() {\n\t\ttry { return (localStorageName in win && win[localStorageName]) }\n\t\tcatch(err) { return false }\n\t}\n\n\tif (isLocalStorageNameSupported()) {\n\t\tstorage = win[localStorageName]\n\t\tstore.set = function(key, val) {\n\t\t\tif (val === undefined) { return store.remove(key) }\n\t\t\tstorage.setItem(key, store.serialize(val))\n\t\t\treturn val\n\t\t}\n\t\tstore.get = function(key, defaultVal) {\n\t\t\tvar val = store.deserialize(storage.getItem(key))\n\t\t\treturn (val === undefined ? defaultVal : val)\n\t\t}\n\t\tstore.remove = function(key) { storage.removeItem(key) }\n\t\tstore.clear = function() { storage.clear() }\n\t\tstore.forEach = function(callback) {\n\t\t\tfor (var i=0; idocument.w=window')\n\t\t\tstorageContainer.close()\n\t\t\tstorageOwner = storageContainer.w.frames[0].document\n\t\t\tstorage = storageOwner.createElement('div')\n\t\t} catch(e) {\n\t\t\t// somehow ActiveXObject instantiation failed (perhaps some special\n\t\t\t// security settings or otherwse), fall back to per-path storage\n\t\t\tstorage = doc.createElement('div')\n\t\t\tstorageOwner = doc.body\n\t\t}\n\t\tvar withIEStorage = function(storeFunction) {\n\t\t\treturn function() {\n\t\t\t\tvar args = Array.prototype.slice.call(arguments, 0)\n\t\t\t\targs.unshift(storage)\n\t\t\t\t// See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx\n\t\t\t\t// and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx\n\t\t\t\tstorageOwner.appendChild(storage)\n\t\t\t\tstorage.addBehavior('#default#userData')\n\t\t\t\tstorage.load(localStorageName)\n\t\t\t\tvar result = storeFunction.apply(store, args)\n\t\t\t\tstorageOwner.removeChild(storage)\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\n\t\t// In IE7, keys cannot start with a digit or contain certain chars.\n\t\t// See https://github.com/marcuswestin/store.js/issues/40\n\t\t// See https://github.com/marcuswestin/store.js/issues/83\n\t\tvar forbiddenCharsRegex = new RegExp(\"[!\\\"#$%&'()*+,/\\\\\\\\:;<=>?@[\\\\]^`{|}~]\", \"g\")\n\t\tvar ieKeyFix = function(key) {\n\t\t\treturn key.replace(/^d/, '___$&').replace(forbiddenCharsRegex, '___')\n\t\t}\n\t\tstore.set = withIEStorage(function(storage, key, val) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tif (val === undefined) { return store.remove(key) }\n\t\t\tstorage.setAttribute(key, store.serialize(val))\n\t\t\tstorage.save(localStorageName)\n\t\t\treturn val\n\t\t})\n\t\tstore.get = withIEStorage(function(storage, key, defaultVal) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tvar val = store.deserialize(storage.getAttribute(key))\n\t\t\treturn (val === undefined ? defaultVal : val)\n\t\t})\n\t\tstore.remove = withIEStorage(function(storage, key) {\n\t\t\tkey = ieKeyFix(key)\n\t\t\tstorage.removeAttribute(key)\n\t\t\tstorage.save(localStorageName)\n\t\t})\n\t\tstore.clear = withIEStorage(function(storage) {\n\t\t\tvar attributes = storage.XMLDocument.documentElement.attributes\n\t\t\tstorage.load(localStorageName)\n\t\t\tfor (var i=attributes.length-1; i>=0; i--) {\n\t\t\t\tstorage.removeAttribute(attributes[i].name)\n\t\t\t}\n\t\t\tstorage.save(localStorageName)\n\t\t})\n\t\tstore.forEach = withIEStorage(function(storage, callback) {\n\t\t\tvar attributes = storage.XMLDocument.documentElement.attributes\n\t\t\tfor (var i=0, attr; attr=attributes[i]; ++i) {\n\t\t\t\tcallback(attr.name, store.deserialize(storage.getAttribute(attr.name)))\n\t\t\t}\n\t\t})\n\t}\n\n\ttry {\n\t\tvar testKey = '__storejs__'\n\t\tstore.set(testKey, testKey)\n\t\tif (store.get(testKey) != testKey) { store.disabled = true }\n\t\tstore.remove(testKey)\n\t} catch(e) {\n\t\tstore.disabled = true\n\t}\n\tstore.enabled = !store.disabled\n\t\n\treturn store\n}())\n","import defaults from \"@ndhoule/defaults\";\nimport store from \"@segment/store\";\n\n/**\n * An object utility to persist user and other values in localstorage\n */\nclass StoreLocal {\n constructor(options) {\n this._options = {};\n this.enabled = false;\n this.options(options);\n }\n\n /**\n *\n * @param {*} options\n */\n options(options = {}) {\n if (arguments.length === 0) return this._options;\n\n defaults(options, { enabled: true });\n\n this.enabled = options.enabled && store.enabled;\n this._options = options;\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n set(key, value) {\n if (!this.enabled) return false;\n return store.set(key, value);\n }\n\n /**\n *\n * @param {*} key\n */\n get(key) {\n if (!this.enabled) return null;\n return store.get(key);\n }\n\n /**\n *\n * @param {*} key\n */\n remove(key) {\n if (!this.enabled) return false;\n return store.remove(key);\n }\n}\n\n// Exporting only the instance\nconst Store = new StoreLocal({});\n\nexport { Store };\n","import AES from \"crypto-js/aes\";\nimport Utf8 from \"crypto-js/enc-utf8\";\nimport logger from \"../logUtil\";\nimport { Cookie } from \"./cookie\";\nimport { Store } from \"./store\";\n\nconst defaults = {\n user_storage_key: \"rl_user_id\",\n user_storage_trait: \"rl_trait\",\n user_storage_anonymousId: \"rl_anonymous_id\",\n group_storage_key: \"rl_group_id\",\n group_storage_trait: \"rl_group_trait\",\n prefix: \"RudderEncrypt:\",\n key: \"Rudder\",\n};\n\n/**\n * An object that handles persisting key-val from Analytics\n */\nclass Storage {\n constructor() {\n // First try setting the storage to cookie else to localstorage\n Cookie.set(\"rudder_cookies\", true);\n\n if (Cookie.get(\"rudder_cookies\")) {\n Cookie.remove(\"rudder_cookies\");\n this.storage = Cookie;\n return;\n }\n\n // localStorage is enabled.\n if (Store.enabled) {\n this.storage = Store;\n }\n }\n\n /**\n * Json stringify the given value\n * @param {*} value\n */\n stringify(value) {\n return JSON.stringify(value);\n }\n\n /**\n * JSON parse the value\n * @param {*} value\n */\n parse(value) {\n // if not parseable, return as is without json parse\n try {\n return value ? JSON.parse(value) : null;\n } catch (e) {\n logger.error(e);\n return value || null;\n }\n }\n\n /**\n * trim using regex for browser polyfill\n * @param {*} value\n */\n trim(value) {\n return value.replace(/^\\s+|\\s+$/gm, \"\");\n }\n\n /**\n * AES encrypt value with constant prefix\n * @param {*} value\n */\n encryptValue(value) {\n if (this.trim(value) == \"\") {\n return value;\n }\n const prefixedVal = `${defaults.prefix}${AES.encrypt(\n value,\n defaults.key\n ).toString()}`;\n\n return prefixedVal;\n }\n\n /**\n * decrypt value\n * @param {*} value\n */\n decryptValue(value) {\n if (!value || (typeof value === \"string\" && this.trim(value) == \"\")) {\n return value;\n }\n if (value.substring(0, defaults.prefix.length) == defaults.prefix) {\n return AES.decrypt(\n value.substring(defaults.prefix.length),\n defaults.key\n ).toString(Utf8);\n }\n return value;\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n setItem(key, value) {\n this.storage.set(key, this.encryptValue(this.stringify(value)));\n }\n\n /**\n *\n * @param {*} value\n */\n setUserId(value) {\n if (typeof value !== \"string\") {\n logger.error(\"[Storage] setUserId:: userId should be string\");\n return;\n }\n this.storage.set(\n defaults.user_storage_key,\n this.encryptValue(this.stringify(value))\n );\n }\n\n /**\n *\n * @param {*} value\n */\n setUserTraits(value) {\n this.storage.set(\n defaults.user_storage_trait,\n this.encryptValue(this.stringify(value))\n );\n }\n\n /**\n *\n * @param {*} value\n */\n setGroupId(value) {\n if (typeof value !== \"string\") {\n logger.error(\"[Storage] setGroupId:: groupId should be string\");\n return;\n }\n this.storage.set(\n defaults.group_storage_key,\n this.encryptValue(this.stringify(value))\n );\n }\n\n /**\n *\n * @param {*} value\n */\n setGroupTraits(value) {\n this.storage.set(\n defaults.group_storage_trait,\n this.encryptValue(this.stringify(value))\n );\n }\n\n /**\n *\n * @param {*} value\n */\n setAnonymousId(value) {\n if (typeof value !== \"string\") {\n logger.error(\"[Storage] setAnonymousId:: anonymousId should be string\");\n return;\n }\n this.storage.set(\n defaults.user_storage_anonymousId,\n this.encryptValue(this.stringify(value))\n );\n }\n\n /**\n *\n * @param {*} key\n */\n getItem(key) {\n return this.parse(this.decryptValue(this.storage.get(key)));\n }\n\n /**\n * get the stored userId\n */\n getUserId() {\n return this.parse(\n this.decryptValue(this.storage.get(defaults.user_storage_key))\n );\n }\n\n /**\n * get the stored user traits\n */\n getUserTraits() {\n return this.parse(\n this.decryptValue(this.storage.get(defaults.user_storage_trait))\n );\n }\n\n /**\n * get the stored userId\n */\n getGroupId() {\n return this.parse(\n this.decryptValue(this.storage.get(defaults.group_storage_key))\n );\n }\n\n /**\n * get the stored user traits\n */\n getGroupTraits() {\n return this.parse(\n this.decryptValue(this.storage.get(defaults.group_storage_trait))\n );\n }\n\n /**\n * get stored anonymous id\n */\n getAnonymousId() {\n return this.parse(\n this.decryptValue(this.storage.get(defaults.user_storage_anonymousId))\n );\n }\n\n /**\n *\n * @param {*} key\n */\n removeItem(key) {\n return this.storage.remove(key);\n }\n\n /**\n * remove stored keys\n */\n clear() {\n this.storage.remove(defaults.user_storage_key);\n this.storage.remove(defaults.user_storage_trait);\n this.storage.remove(defaults.group_storage_key);\n this.storage.remove(defaults.group_storage_trait);\n // this.storage.remove(defaults.user_storage_anonymousId);\n }\n}\n\nexport { Storage };\n","import { Storage } from \"./storage\";\n\nexport default new Storage();\n","import logger from \"../../utils/logUtil\";\nimport Storage from \"../../utils/storage\";\n\nconst defaults = {\n lotame_synch_time_key: \"lt_synch_timestamp\",\n};\n\nclass LotameStorage {\n constructor() {\n this.storage = Storage; // new Storage();\n }\n\n setLotameSynchTime(value) {\n this.storage.setItem(defaults.lotame_synch_time_key, value);\n }\n\n getLotameSynchTime() {\n return this.storage.getItem(defaults.lotame_synch_time_key);\n }\n}\nconst lotameStorage = new LotameStorage();\nexport { lotameStorage as LotameStorage };\n","import logger from \"../../utils/logUtil\";\nimport { LotameStorage } from \"./LotameStorage\";\n\nclass Lotame {\n constructor(config, analytics) {\n this.name = \"LOTAME\";\n this.analytics = analytics;\n this.storage = LotameStorage;\n this.bcpUrlSettingsPixel = config.bcpUrlSettingsPixel;\n this.bcpUrlSettingsIframe = config.bcpUrlSettingsIframe;\n this.dspUrlSettingsPixel = config.dspUrlSettingsPixel;\n this.dspUrlSettingsIframe = config.dspUrlSettingsIframe;\n this.mappings = {};\n config.mappings.forEach((mapping) => {\n const { key } = mapping;\n const { value } = mapping;\n this.mappings[key] = value;\n });\n }\n\n init() {\n logger.debug(\"===in init Lotame===\");\n window.LOTAME_SYNCH_CALLBACK = () => {};\n }\n\n addPixel(source, width, height) {\n logger.debug(`Adding pixel for :: ${source}`);\n\n const image = document.createElement(\"img\");\n image.src = source;\n image.setAttribute(\"width\", width);\n image.setAttribute(\"height\", height);\n\n logger.debug(`Image Pixel :: ${image}`);\n document.getElementsByTagName(\"body\")[0].appendChild(image);\n }\n\n addIFrame(source) {\n logger.debug(`Adding iframe for :: ${source}`);\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = source;\n iframe.title = \"empty\";\n iframe.setAttribute(\"id\", \"LOTCCFrame\");\n iframe.setAttribute(\"tabindex\", \"-1\");\n iframe.setAttribute(\"role\", \"presentation\");\n iframe.setAttribute(\"aria-hidden\", \"true\");\n iframe.setAttribute(\n \"style\",\n \"border: 0px; width: 0px; height: 0px; display: block;\"\n );\n\n logger.debug(`IFrame :: ${iframe}`);\n document.getElementsByTagName(\"body\")[0].appendChild(iframe);\n }\n\n syncPixel(userId) {\n logger.debug(\"===== in syncPixel ======\");\n\n logger.debug(\"Firing DSP Pixel URLs\");\n if (this.dspUrlSettingsPixel && this.dspUrlSettingsPixel.length > 0) {\n const currentTime = Date.now();\n this.dspUrlSettingsPixel.forEach((urlSettings) => {\n const dspUrl = this.compileUrl(\n { ...this.mappings, userId, random: currentTime },\n urlSettings.dspUrlTemplate\n );\n this.addPixel(dspUrl, \"1\", \"1\");\n });\n }\n\n logger.debug(\"Firing DSP IFrame URLs\");\n if (this.dspUrlSettingsIframe && this.dspUrlSettingsIframe.length > 0) {\n const currentTime = Date.now();\n this.dspUrlSettingsIframe.forEach((urlSettings) => {\n const dspUrl = this.compileUrl(\n { ...this.mappings, userId, random: currentTime },\n urlSettings.dspUrlTemplate\n );\n this.addIFrame(dspUrl);\n });\n }\n\n this.storage.setLotameSynchTime(Date.now());\n // emit on syncPixel\n if (this.analytics.methodToCallbackMapping.syncPixel) {\n this.analytics.emit(\"syncPixel\", {\n destination: this.name,\n });\n }\n }\n\n compileUrl(map, url) {\n Object.keys(map).forEach((key) => {\n if (map.hasOwnProperty(key)) {\n const replaceKey = `{{${key}}}`;\n const regex = new RegExp(replaceKey, \"gi\");\n url = url.replace(regex, map[key]);\n }\n });\n return url;\n }\n\n identify(rudderElement) {\n logger.debug(\"in Lotame identify\");\n const { userId } = rudderElement.message;\n this.syncPixel(userId);\n }\n\n track(rudderElement) {\n logger.debug(\"track not supported for lotame\");\n }\n\n page(rudderElement) {\n logger.debug(\"in Lotame page\");\n\n logger.debug(\"Firing BCP Pixel URLs\");\n if (this.bcpUrlSettingsPixel && this.bcpUrlSettingsPixel.length > 0) {\n const currentTime = Date.now();\n this.bcpUrlSettingsPixel.forEach((urlSettings) => {\n const bcpUrl = this.compileUrl(\n { ...this.mappings, random: currentTime },\n urlSettings.bcpUrlTemplate\n );\n this.addPixel(bcpUrl, \"1\", \"1\");\n });\n }\n\n logger.debug(\"Firing BCP IFrame URLs\");\n if (this.bcpUrlSettingsIframe && this.bcpUrlSettingsIframe.length > 0) {\n const currentTime = Date.now();\n this.bcpUrlSettingsIframe.forEach((urlSettings) => {\n const bcpUrl = this.compileUrl(\n { ...this.mappings, random: currentTime },\n urlSettings.bcpUrlTemplate\n );\n this.addIFrame(bcpUrl);\n });\n }\n\n if (rudderElement.message.userId && this.isPixelToBeSynched()) {\n this.syncPixel(rudderElement.message.userId);\n }\n }\n\n isPixelToBeSynched() {\n const lastSynchedTime = this.storage.getLotameSynchTime();\n const currentTime = Date.now();\n if (!lastSynchedTime) {\n return true;\n }\n\n const difference = Math.floor(\n (currentTime - lastSynchedTime) / (1000 * 3600 * 24)\n );\n return difference >= 7;\n }\n\n isLoaded() {\n logger.debug(\"in Lotame isLoaded\");\n return true;\n }\n\n isReady() {\n return true;\n }\n}\n\nexport { Lotame };\n","/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport logger from \"../../utils/logUtil\";\n\nclass Optimizely {\n constructor(config, analytics) {\n this.analytics = analytics;\n this.sendExperimentTrack = config.sendExperimentTrack;\n this.sendExperimentIdentify = config.sendExperimentIdentify;\n this.sendExperimentTrackAsNonInteractive =\n config.sendExperimentTrackAsNonInteractive;\n this.revenueOnlyOnOrderCompleted = config.revenueOnlyOnOrderCompleted;\n this.trackCategorizedPages = config.trackCategorizedPages;\n this.trackNamedPages = config.trackNamedPages;\n this.customCampaignProperties = config.customCampaignProperties\n ? config.customCampaignProperties\n : [];\n this.customExperimentProperties = config.customExperimentProperties\n ? config.customExperimentProperties\n : [];\n this.name = \"OPTIMIZELY\";\n }\n\n init() {\n logger.debug(\"=== in optimizely init ===\");\n this.initOptimizelyIntegration(\n this.referrerOverride,\n this.sendDataToRudder\n );\n }\n\n referrerOverride = (referrer) => {\n if (referrer) {\n window.optimizelyEffectiveReferrer = referrer;\n return referrer;\n }\n return undefined;\n };\n\n sendDataToRudder = (campaignState) => {\n logger.debug(campaignState);\n const { experiment } = campaignState;\n const { variation } = campaignState;\n const context = { integrations: { All: true } };\n const { audiences } = campaignState;\n\n // Reformatting this data structure into hash map so concatenating variation ids and names is easier later\n const audiencesMap = {};\n audiences.forEach((audience) => {\n audiencesMap[audience.id] = audience.name;\n });\n\n const audienceIds = Object.keys(audiencesMap).sort().join();\n const audienceNames = Object.values(audiencesMap).sort().join(\", \");\n\n if (this.sendExperimentTrack) {\n const props = {\n campaignName: campaignState.campaignName,\n campaignId: campaignState.id,\n experimentId: experiment.id,\n experimentName: experiment.name,\n variationName: variation.name,\n variationId: variation.id,\n audienceId: audienceIds, // eg. '7527562222,7527111138'\n audienceName: audienceNames, // eg. 'Peaky Blinders, Trust Tree'\n isInCampaignHoldback: campaignState.isInCampaignHoldback,\n };\n\n // If this was a redirect experiment and the effective referrer is different from document.referrer,\n // this value is made available. So if a customer came in via google.com/ad -> tb12.com -> redirect experiment -> Belichickgoat.com\n // `experiment.referrer` would be google.com/ad here NOT `tb12.com`.\n if (experiment.referrer) {\n props.referrer = experiment.referrer;\n context.page = { referrer: experiment.referrer };\n }\n\n // For Google's nonInteraction flag\n if (this.sendExperimentTrackAsNonInteractive) props.nonInteraction = 1;\n\n // If customCampaignProperties is provided overide the props with it.\n // If valid customCampaignProperties present it will override existing props.\n // const data = window.optimizely && window.optimizely.get(\"data\");\n const data = campaignState;\n if (data && this.customCampaignProperties.length > 0) {\n for (\n let index = 0;\n index < this.customCampaignProperties.length;\n index += 1\n ) {\n const rudderProp = this.customCampaignProperties[index].from;\n const optimizelyProp = this.customCampaignProperties[index].to;\n if (typeof props[optimizelyProp] !== \"undefined\") {\n props[rudderProp] = props[optimizelyProp];\n delete props[optimizelyProp];\n }\n }\n }\n\n // Send to Rudder\n this.analytics.track(\"Experiment Viewed\", props, context);\n }\n if (this.sendExperimentIdentify) {\n const traits = {};\n traits[`Experiment: ${experiment.name}`] = variation.name;\n\n // Send to Rudder\n this.analytics.identify(traits);\n }\n };\n\n initOptimizelyIntegration(referrerOverride, sendCampaignData) {\n const newActiveCampaign = (id, referrer) => {\n const state = window.optimizely.get && window.optimizely.get(\"state\");\n if (state) {\n const activeCampaigns = state.getCampaignStates({\n isActive: true,\n });\n const campaignState = activeCampaigns[id];\n if (referrer) campaignState.experiment.referrer = referrer;\n sendCampaignData(campaignState);\n }\n };\n\n const checkReferrer = () => {\n const state = window.optimizely.get && window.optimizely.get(\"state\");\n if (state) {\n const referrer =\n state.getRedirectInfo() && state.getRedirectInfo().referrer;\n\n if (referrer) {\n referrerOverride(referrer);\n return referrer;\n }\n }\n return undefined;\n };\n\n const registerFutureActiveCampaigns = () => {\n window.optimizely = window.optimizely || [];\n window.optimizely.push({\n type: \"addListener\",\n filter: {\n type: \"lifecycle\",\n name: \"campaignDecided\",\n },\n handler(event) {\n const { id } = event.data.campaign;\n newActiveCampaign(id);\n },\n });\n };\n\n const registerCurrentlyActiveCampaigns = () => {\n window.optimizely = window.optimizely || [];\n const state = window.optimizely.get && window.optimizely.get(\"state\");\n if (state) {\n const referrer = checkReferrer();\n const activeCampaigns = state.getCampaignStates({\n isActive: true,\n });\n Object.keys(activeCampaigns).forEach((id) => {\n if (referrer) {\n newActiveCampaign(id, referrer);\n } else {\n newActiveCampaign(id);\n }\n });\n } else {\n window.optimizely.push({\n type: \"addListener\",\n filter: {\n type: \"lifecycle\",\n name: \"initialized\",\n },\n handler() {\n checkReferrer();\n },\n });\n }\n };\n registerCurrentlyActiveCampaigns();\n registerFutureActiveCampaigns();\n }\n\n track(rudderElement) {\n logger.debug(\"in Optimizely web track\");\n const eventProperties = rudderElement.message.properties;\n const { event } = rudderElement.message;\n if (eventProperties.revenue && this.revenueOnlyOnOrderCompleted) {\n if (event === \"Order Completed\") {\n eventProperties.revenue = Math.round(eventProperties.revenue * 100);\n } else if (event !== \"Order Completed\") {\n delete eventProperties.revenue;\n }\n }\n const eventName = event.replace(/:/g, \"_\"); // can't have colons so replacing with underscores\n const payload = {\n type: \"event\",\n eventName,\n tags: eventProperties,\n };\n\n window.optimizely.push(payload);\n }\n\n page(rudderElement) {\n logger.debug(\"in Optimizely web page\");\n const { category } = rudderElement.message.properties;\n const { name } = rudderElement.message;\n /* const contextOptimizely = {\n integrations: { All: false, Optimizely: true },\n }; */\n\n // categorized pages\n if (category && this.trackCategorizedPages) {\n // this.analytics.track(`Viewed ${category} page`, {}, contextOptimizely);\n rudderElement.message.event = `Viewed ${category} page`;\n rudderElement.message.type = \"track\";\n this.track(rudderElement);\n }\n\n // named pages\n if (name && this.trackNamedPages) {\n // this.analytics.track(`Viewed ${name} page`, {}, contextOptimizely);\n rudderElement.message.event = `Viewed ${name} page`;\n rudderElement.message.type = \"track\";\n this.track(rudderElement);\n }\n }\n\n isLoaded() {\n return !!(\n window.optimizely && window.optimizely.push !== Array.prototype.push\n );\n }\n\n isReady() {\n return !!(\n window.optimizely && window.optimizely.push !== Array.prototype.push\n );\n }\n}\n\nexport default Optimizely;\n","import logger from \"../../utils/logUtil\";\nimport ScriptLoader from \"../ScriptLoader\";\n\nclass Bugsnag {\n constructor(config) {\n this.releaseStage = config.releaseStage;\n this.apiKey = config.apiKey;\n this.name = \"BUGSNAG\";\n this.setIntervalHandler = undefined;\n }\n\n init() {\n logger.debug(\"===in init Bugsnag===\");\n ScriptLoader(\n \"bugsnag-id\",\n \"https://d2wy8f7a9ursnm.cloudfront.net/v6/bugsnag.min.js\"\n );\n\n this.setIntervalHandler = setInterval(\n this.initBugsnagClient.bind(this),\n 1000\n );\n }\n\n initBugsnagClient() {\n if (window.bugsnag !== undefined) {\n window.bugsnagClient = window.bugsnag(this.apiKey);\n window.bugsnagClient.releaseStage = this.releaseStage;\n clearInterval(this.setIntervalHandler);\n }\n }\n\n isLoaded() {\n logger.debug(\"in bugsnag isLoaded\");\n return !!window.bugsnagClient;\n }\n\n isReady() {\n logger.debug(\"in bugsnag isReady\");\n return !!window.bugsnagClient;\n }\n\n identify(rudderElement) {\n const { traits } = rudderElement.message.context;\n const traitsFinal = {\n id: rudderElement.message.userId || rudderElement.message.anonymousId,\n name: traits.name,\n email: traits.email,\n };\n\n window.bugsnagClient.user = traitsFinal;\n window.bugsnagClient.notify(new Error(\"error in identify\"));\n }\n}\nexport { Bugsnag };\n","'use strict';\n\nconst preserveCamelCase = string => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && /[\\p{Lu}]/u.test(character)) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && /[\\p{Ll}]/u.test(character)) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = character.toLocaleLowerCase() === character && character.toLocaleUpperCase() !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = character.toLocaleUpperCase() === character && character.toLocaleLowerCase() !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = {\n\t\t...{pascalCase: false},\n\t\t...options\n\t};\n\n\tconst postProcess = x => options.pascalCase ? x.charAt(0).toLocaleUpperCase() + x.slice(1) : x;\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? input.toLocaleUpperCase() : input.toLocaleLowerCase();\n\t}\n\n\tconst hasUpperCase = input !== input.toLocaleLowerCase();\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input);\n\t}\n\n\tinput = input\n\t\t.replace(/^[_.\\- ]+/, '')\n\t\t.toLocaleLowerCase()\n\t\t.replace(/[_.\\- ]+([\\p{Alpha}\\p{N}_]|$)/gu, (_, p1) => p1.toLocaleUpperCase())\n\t\t.replace(/\\d+([\\p{Alpha}\\p{N}_]|$)/gu, m => m.toLocaleUpperCase());\n\n\treturn postProcess(input);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","import * as HubSpot from \"./HubSpot\";\nimport * as GA from \"./GA\";\nimport * as Hotjar from \"./Hotjar\";\nimport * as GoogleAds from \"./GoogleAds\";\nimport * as VWO from \"./VWO\";\nimport * as GoogleTagManager from \"./GoogleTagManager\";\nimport * as Braze from \"./Braze\";\nimport * as INTERCOM from \"./INTERCOM\";\nimport * as Keen from \"./Keen\";\nimport * as Kissmetrics from \"./Kissmetrics\";\nimport * as CustomerIO from \"./CustomerIO\";\nimport * as Chartbeat from \"./Chartbeat\";\nimport * as Comscore from \"./Comscore\";\nimport * as FBPixel from \"./FacebookPixel\";\nimport * as Lotame from \"./Lotame\";\nimport * as Optimizely from \"./Optimizely\";\nimport * as Bugsnag from \"./Bugsnag\";\nimport * as Fullstory from \"./Fullstory\";\nimport * as TVSquared from \"./TVSquared\";\n\n// the key names should match the destination.name value to keep partity everywhere\n// (config-plan name, native destination.name , exported integration name(this one below))\n\nconst integrations = {\n HS: HubSpot.default,\n GA: GA.default,\n HOTJAR: Hotjar.default,\n GOOGLEADS: GoogleAds.default,\n VWO: VWO.default,\n GTM: GoogleTagManager.default,\n BRAZE: Braze.default,\n INTERCOM: INTERCOM.default,\n KEEN: Keen.default,\n KISSMETRICS: Kissmetrics.default,\n CUSTOMERIO: CustomerIO.default,\n CHARTBEAT: Chartbeat.default,\n COMSCORE: Comscore.default,\n FACEBOOK_PIXEL: FBPixel.default,\n LOTAME: Lotame.default,\n OPTIMIZELY: Optimizely.default,\n BUGSNAG: Bugsnag.default,\n FULLSTORY: Fullstory.default,\n TVSQUARED: TVSquared.default,\n};\n\nexport { integrations };\n","import camelcase from \"camelcase\";\nimport logger from \"../../utils/logUtil\";\n\nclass Fullstory {\n constructor(config) {\n this.fs_org = config.fs_org;\n this.fs_debug_mode = config.fs_debug_mode;\n this.name = \"FULLSTORY\";\n }\n\n static getFSProperties(properties) {\n const FS_properties = {};\n Object.keys(properties).map(function (key, index) {\n FS_properties[\n key === \"displayName\" || key === \"email\"\n ? key\n : Fullstory.camelCaseField(key)\n ] = properties[key];\n });\n return FS_properties;\n }\n\n static camelCaseField(fieldName) {\n // Do not camel case across type suffixes.\n const parts = fieldName.split(\"_\");\n if (parts.length > 1) {\n const typeSuffix = parts.pop();\n switch (typeSuffix) {\n case \"str\":\n case \"int\":\n case \"date\":\n case \"real\":\n case \"bool\":\n case \"strs\":\n case \"ints\":\n case \"dates\":\n case \"reals\":\n case \"bools\":\n return `${camelcase(parts.join(\"_\"))}_${typeSuffix}`;\n default: // passthrough\n }\n }\n // No type suffix found. Camel case the whole field name.\n return camelcase(fieldName);\n }\n\n init() {\n logger.debug(\"===in init FULLSTORY===\");\n\n window._fs_debug = this.fs_debug_mode;\n window._fs_host = \"fullstory.com\";\n window._fs_script = \"edge.fullstory.com/s/fs.js\";\n window._fs_org = this.fs_org;\n window._fs_namespace = \"FS\";\n (function (m, n, e, t, l, o, g, y) {\n if (e in m) {\n if (m.console && m.console.log) {\n m.console.log(\n 'FullStory namespace conflict. Please set window[\"_fs_namespace\"].'\n );\n }\n return;\n }\n g = m[e] = function (a, b, s) {\n g.q ? g.q.push([a, b, s]) : g._api(a, b, s);\n };\n g.q = [];\n o = n.createElement(t);\n o.async = 1;\n o.crossOrigin = \"anonymous\";\n o.src = `https://${_fs_script}`;\n y = n.getElementsByTagName(t)[0];\n y.parentNode.insertBefore(o, y);\n g.identify = function (i, v, s) {\n g(l, { uid: i }, s);\n if (v) g(l, v, s);\n };\n g.setUserVars = function (v, s) {\n g(l, v, s);\n };\n g.event = function (i, v, s) {\n g(\"event\", { n: i, p: v }, s);\n };\n g.shutdown = function () {\n g(\"rec\", !1);\n };\n g.restart = function () {\n g(\"rec\", !0);\n };\n g.log = function (a, b) {\n g(\"log\", [a, b]);\n };\n g.consent = function (a) {\n g(\"consent\", !arguments.length || a);\n };\n g.identifyAccount = function (i, v) {\n o = \"account\";\n v = v || {};\n v.acctId = i;\n g(o, v);\n };\n g.clearUserCookie = function () {};\n g._w = {};\n y = \"XMLHttpRequest\";\n g._w[y] = m[y];\n y = \"fetch\";\n g._w[y] = m[y];\n if (m[y])\n m[y] = function () {\n return g._w[y].apply(this, arguments);\n };\n })(window, document, window._fs_namespace, \"script\", \"user\");\n }\n\n page(rudderElement) {\n logger.debug(\"in FULLSORY page\");\n const rudderMessage = rudderElement.message;\n const pageName = rudderMessage.name;\n const props = {\n name: pageName,\n ...rudderMessage.properties,\n };\n\n window.FS.event(\"Viewed a Page\", Fullstory.getFSProperties(props));\n }\n\n identify(rudderElement) {\n logger.debug(\"in FULLSORY identify\");\n let { userId } = rudderElement.message;\n const { traits } = rudderElement.message.context;\n if (!userId) userId = rudderElement.message.anonymousId;\n\n if (Object.keys(traits).length === 0 && traits.constructor === Object)\n window.FS.identify(userId);\n else window.FS.identify(userId, Fullstory.getFSProperties(traits));\n }\n\n track(rudderElement) {\n logger.debug(\"in FULLSTORY track\");\n window.FS.event(\n rudderElement.message.event,\n Fullstory.getFSProperties(rudderElement.message.properties)\n );\n }\n\n isLoaded() {\n logger.debug(\"in FULLSTORY isLoaded\");\n return !!window.FS;\n }\n}\n\nexport { Fullstory };\n","/* eslint-disable camelcase */\n/* eslint-disable no-underscore-dangle */\nimport ScriptLoader from \"../ScriptLoader\";\nimport logger from \"../../utils/logUtil\";\n\nclass TVSquared {\n constructor(config) {\n this.brandId = config.brandId;\n this.clientId = config.clientId;\n this.eventWhiteList = config.eventWhiteList || [];\n this.customMetrics = config.customMetrics || [];\n this.name = \"TVSquared\";\n }\n\n init() {\n logger.debug(\"===in init TVSquared===\");\n window._tvq = window._tvq || [];\n let url = document.location.protocol === \"https:\" ? \"https://\" : \"http://\";\n url += `collector-${this.clientId}.tvsquared.com/`;\n window._tvq.push([\"setSiteId\", this.brandId]);\n window._tvq.push([\"setTrackerUrl\", `${url}tv2track.php`]);\n ScriptLoader(\"TVSquared-integration\", `${url}tv2track.js`);\n }\n\n isLoaded = () => {\n logger.debug(\"in TVSqaured isLoaded\");\n return !!(window._tvq && window._tvq.push !== Array.prototype.push);\n };\n\n isReady = () => {\n logger.debug(\"in TVSqaured isReady\");\n return !!(window._tvq && window._tvq.push !== Array.prototype.push);\n };\n\n page = () => {\n window._tvq.push([\"trackPageView\"]);\n };\n\n track(rudderElement) {\n const { event, userId, anonymousId } = rudderElement.message;\n const {\n revenue,\n productType,\n category,\n order_id,\n promotion_id,\n } = rudderElement.message.properties;\n let i;\n let j;\n let whitelist = this.eventWhiteList.slice();\n whitelist = whitelist.filter((wl) => {\n return wl.event !== \"\";\n });\n for (i = 0; i < whitelist.length; i += 1) {\n if (event.toUpperCase() === whitelist[i].event.toUpperCase()) {\n break;\n }\n if (i === whitelist.length - 1) {\n return;\n }\n }\n\n const session = { user: userId || anonymousId || \"\" };\n const action = {\n rev: revenue ? this.formatRevenue(revenue) : \"\",\n prod: category || productType || \"\",\n id: order_id || \"\",\n promo: promotion_id || \"\",\n };\n let customMetrics = this.customMetrics.slice();\n customMetrics = customMetrics.filter((cm) => {\n return cm.propertyName !== \"\";\n });\n if (customMetrics.length) {\n for (j = 0; j < customMetrics.length; j += 1) {\n const key = customMetrics[j].propertyName;\n const value = rudderElement.message.properties[key];\n if (value) {\n action[key] = value;\n }\n }\n }\n window._tvq.push([\n function () {\n this.setCustomVariable(5, \"session\", JSON.stringify(session), \"visit\");\n },\n ]);\n if (event.toUpperCase() !== \"RESPONSE\") {\n window._tvq.push([\n function () {\n this.setCustomVariable(5, event, JSON.stringify(action), \"page\");\n },\n ]);\n window._tvq.push([\"trackPageView\"]);\n }\n };\n\n formatRevenue = (revenue) => {\n let rev = revenue;\n rev = parseFloat(rev.toString().replace(/^[^\\d.]*/, \"\"));\n return rev;\n };\n}\nexport default TVSquared;\n","// Application class\nclass RudderApp {\n constructor() {\n this.build = \"1.0.0\";\n this.name = \"RudderLabs JavaScript SDK\";\n this.namespace = \"com.rudderlabs.javascript\";\n this.version = \"process.package_version\";\n }\n}\nexport default RudderApp;\n","// Library information class\nclass RudderLibraryInfo {\n constructor() {\n this.name = \"RudderLabs JavaScript SDK\";\n this.version = \"process.package_version\";\n }\n}\n// Operating System information class\nclass RudderOSInfo {\n constructor() {\n this.name = \"\";\n this.version = \"\";\n }\n}\n// Screen information class\nclass RudderScreenInfo {\n constructor() {\n this.density = 0;\n this.width = 0;\n this.height = 0;\n }\n}\n// Device information class\nclass RudderDeviceInfo {\n constructor() {\n this.id = \"\";\n this.manufacturer = \"\";\n this.model = \"\";\n this.name = \"\";\n }\n}\n// Carrier information\nclass RudderNetwork {\n constructor() {\n this.carrier = \"\";\n }\n}\nexport {\n RudderLibraryInfo,\n RudderOSInfo,\n RudderScreenInfo,\n RudderDeviceInfo,\n RudderNetwork,\n};\n","// Context class\nimport RudderApp from \"./RudderApp\";\nimport {\n RudderLibraryInfo,\n RudderOSInfo,\n RudderScreenInfo,\n} from \"./RudderInfo\";\n\nclass RudderContext {\n constructor() {\n this.app = new RudderApp();\n this.traits = null;\n this.library = new RudderLibraryInfo();\n // this.os = null;\n const os = new RudderOSInfo();\n os.version = \"\"; // skipping version for simplicity now\n const screen = new RudderScreenInfo();\n\n // Depending on environment within which the code is executing, screen\n // dimensions can be set\n // User agent and locale can be retrieved only for browser\n // For server-side integration, same needs to be set by calling program\n if (!process.browser) {\n // server-side integration\n screen.width = 0;\n screen.height = 0;\n screen.density = 0;\n os.version = \"\";\n os.name = \"\";\n this.userAgent = null;\n this.locale = null;\n } else {\n // running within browser\n screen.width = window.width;\n screen.height = window.height;\n screen.density = window.devicePixelRatio;\n this.userAgent = navigator.userAgent;\n // property name differs based on browser version\n this.locale = navigator.language || navigator.browserLanguage;\n }\n this.os = os;\n this.screen = screen;\n this.device = null;\n this.network = null;\n }\n}\nexport default RudderContext;\n","// Core message class with default values\nimport { generateUUID } from \"./utils\";\nimport { MessageType, ECommerceEvents } from \"./constants\";\nimport RudderContext from \"./RudderContext\";\n\nclass RudderMessage {\n constructor() {\n this.channel = \"web\";\n this.context = new RudderContext();\n this.type = null;\n this.action = null;\n this.messageId = generateUUID().toString();\n this.originalTimestamp = new Date().toISOString();\n this.anonymousId = null;\n this.userId = null;\n this.event = null;\n this.properties = {};\n this.integrations = {};\n // By default, all integrations will be set as enabled from client\n // Decision to route to specific destinations will be taken at server end\n this.integrations.All = true;\n }\n\n // Get property\n getProperty(key) {\n return this.properties[key];\n }\n\n // Add property\n addProperty(key, value) {\n this.properties[key] = value;\n }\n\n // Validate whether this message is semantically valid for the type mentioned\n validateFor(messageType) {\n // First check that properties is populated\n if (!this.properties) {\n throw new Error(\"Key properties is required\");\n }\n // Event type specific checks\n switch (messageType) {\n case MessageType.TRACK:\n // check if event is present\n if (!this.event) {\n throw new Error(\"Key event is required for track event\");\n }\n // Next make specific checks for e-commerce events\n if (this.event in Object.values(ECommerceEvents)) {\n switch (this.event) {\n case ECommerceEvents.CHECKOUT_STEP_VIEWED:\n case ECommerceEvents.CHECKOUT_STEP_COMPLETED:\n case ECommerceEvents.PAYMENT_INFO_ENTERED:\n this.checkForKey(\"checkout_id\");\n this.checkForKey(\"step\");\n break;\n case ECommerceEvents.PROMOTION_VIEWED:\n case ECommerceEvents.PROMOTION_CLICKED:\n this.checkForKey(\"promotion_id\");\n break;\n case ECommerceEvents.ORDER_REFUNDED:\n this.checkForKey(\"order_id\");\n break;\n default:\n }\n } else if (!this.properties.category) {\n // if category is not there, set to event\n this.properties.category = this.event;\n }\n\n break;\n case MessageType.PAGE:\n break;\n case MessageType.SCREEN:\n if (!this.properties.name) {\n throw new Error(\"Key 'name' is required in properties\");\n }\n break;\n }\n }\n\n // Function for checking existence of a particular property\n checkForKey(propertyName) {\n if (!this.properties[propertyName]) {\n throw new Error(`Key '${propertyName}' is required in properties`);\n }\n }\n}\nexport default RudderMessage;\n","import RudderMessage from \"./RudderMessage\";\n// Individual element class containing Rudder Message\nclass RudderElement {\n constructor() {\n this.message = new RudderMessage();\n }\n\n // Setters that in turn set the field values for the contained object\n setType(type) {\n this.message.type = type;\n }\n\n setProperty(rudderProperty) {\n this.message.properties = rudderProperty;\n }\n\n setUserProperty(rudderUserProperty) {\n this.message.user_properties = rudderUserProperty;\n }\n\n setUserId(userId) {\n this.message.userId = userId;\n }\n\n setEventName(eventName) {\n this.message.event = eventName;\n }\n\n updateTraits(traits) {\n this.message.context.traits = traits;\n }\n\n getElementContent() {\n return this.message;\n }\n}\nexport default RudderElement;\n","// Class responsible for building up the individual elements in a batch\n// that is transmitted by the SDK\nimport RudderElement from \"./RudderElement.js\";\n\nclass RudderElementBuilder {\n constructor() {\n this.rudderProperty = null;\n this.rudderUserProperty = null;\n this.event = null;\n this.userId = null;\n this.channel = null;\n this.type = null;\n }\n\n // Set the property\n setProperty(inputRudderProperty) {\n this.rudderProperty = inputRudderProperty;\n return this;\n }\n\n // Build and set the property object\n setPropertyBuilder(rudderPropertyBuilder) {\n this.rudderProperty = rudderPropertyBuilder.build();\n return this;\n }\n\n setUserProperty(inputRudderUserProperty) {\n this.rudderUserProperty = inputRudderUserProperty;\n return this;\n }\n\n setUserPropertyBuilder(rudderUserPropertyBuilder) {\n this.rudderUserProperty = rudderUserPropertyBuilder.build();\n return this;\n }\n\n // Setter methods for all variables. Instance is returned for each call in\n // accordance with the Builder pattern\n\n setEvent(event) {\n this.event = event;\n return this;\n }\n\n setUserId(userId) {\n this.userId = userId;\n return this;\n }\n\n setChannel(channel) {\n this.channel = channel;\n return this;\n }\n\n setType(eventType) {\n this.type = eventType;\n return this;\n }\n\n build() {\n const element = new RudderElement();\n element.setUserId(this.userId);\n element.setType(this.type);\n element.setEventName(this.event);\n element.setProperty(this.rudderProperty);\n element.setUserProperty(this.rudderUserProperty);\n return element;\n }\n}\nexport default RudderElementBuilder;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","'use strict';\n\nvar keys = require('@ndhoule/keys');\nvar uuid = require('uuid').v4;\n\nvar inMemoryStore = {\n _data: {},\n length: 0,\n setItem: function(key, value) {\n this._data[key] = value;\n this.length = keys(this._data).length;\n return value;\n },\n getItem: function(key) {\n if (key in this._data) {\n return this._data[key];\n }\n return null;\n },\n removeItem: function(key) {\n if (key in this._data) {\n delete this._data[key];\n }\n this.length = keys(this._data).length;\n return null;\n },\n clear: function() {\n this._data = {};\n this.length = 0;\n },\n key: function(index) {\n return keys(this._data)[index];\n }\n};\n\nfunction isSupportedNatively() {\n try {\n if (!window.localStorage) return false;\n var key = uuid();\n window.localStorage.setItem(key, 'test_value');\n var value = window.localStorage.getItem(key);\n window.localStorage.removeItem(key);\n\n // handle localStorage silently failing\n return value === 'test_value';\n } catch (e) {\n // Can throw if localStorage is disabled\n return false;\n }\n}\n\nfunction pickStorage() {\n if (isSupportedNatively()) {\n return window.localStorage;\n }\n // fall back to in-memory\n return inMemoryStore;\n}\n\n// Return a shared instance\nmodule.exports.defaultEngine = pickStorage();\n// Expose the in-memory store explicitly for testing\nmodule.exports.inMemoryEngine = inMemoryStore;\n","'use strict';\n\nvar defaultEngine = require('./engine').defaultEngine;\nvar inMemoryEngine = require('./engine').inMemoryEngine;\nvar each = require('@ndhoule/each');\nvar keys = require('@ndhoule/keys');\nvar json = require('json3');\n\n/**\n* Store Implementation with dedicated\n*/\n\nfunction Store(name, id, keys, optionalEngine) {\n this.id = id;\n this.name = name;\n this.keys = keys || {};\n this.engine = optionalEngine || defaultEngine;\n this.originalEngine = this.engine;\n}\n\n/**\n* Set value by key.\n*/\n\nStore.prototype.set = function(key, value) {\n var compoundKey = this._createValidKey(key);\n if (!compoundKey) return;\n try {\n this.engine.setItem(compoundKey, json.stringify(value));\n } catch (err) {\n if (isQuotaExceeded(err)) {\n // switch to inMemory engine\n this._swapEngine();\n // and save it there\n this.set(key, value);\n }\n }\n};\n\n/**\n* Get by Key.\n*/\n\nStore.prototype.get = function(key) {\n try {\n var str = this.engine.getItem(this._createValidKey(key));\n if (str === null) {\n return null;\n }\n return json.parse(str);\n } catch (err) {\n return null;\n }\n};\n\n/**\n * Get original engine\n */\n\nStore.prototype.getOriginalEngine = function() {\n return this.originalEngine;\n};\n\n/**\n* Remove by Key.\n*/\n\nStore.prototype.remove = function(key) {\n this.engine.removeItem(this._createValidKey(key));\n};\n\n/**\n* Ensure the key is valid\n*/\n\nStore.prototype._createValidKey = function(key) {\n var name = this.name;\n var id = this.id;\n\n if (!keys(this.keys).length) return [name, id, key].join('.');\n\n // validate and return undefined if invalid key\n var compoundKey;\n each(function(value) {\n if (value === key) {\n compoundKey = [name, id, key].join('.');\n }\n }, this.keys);\n return compoundKey;\n};\n\n/**\n* Switch to inMemoryEngine, bringing any existing data with.\n*/\n\nStore.prototype._swapEngine = function() {\n var self = this;\n\n // grab existing data, but only for this page's queue instance, not all\n // better to keep other queues in localstorage to be flushed later\n // than to pull them into memory and remove them from durable storage\n each(function(key) {\n var value = self.get(key);\n inMemoryEngine.setItem([self.name, self.id, key].join('.'), value);\n self.remove(key);\n }, this.keys);\n\n this.engine = inMemoryEngine;\n};\n\nmodule.exports = Store;\n\nfunction isQuotaExceeded(e) {\n var quotaExceeded = false;\n if (e.code) {\n switch (e.code) {\n case 22:\n quotaExceeded = true;\n break;\n case 1014:\n // Firefox\n if (e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n quotaExceeded = true;\n }\n break;\n default:\n break;\n }\n } else if (e.number === -2147024882) {\n // Internet Explorer 8\n quotaExceeded = true;\n }\n return quotaExceeded;\n}\n","'use strict';\n\nvar each = require('@ndhoule/each');\n\nvar defaultClock = {\n setTimeout: function(fn, ms) {\n return window.setTimeout(fn, ms);\n },\n clearTimeout: function(id) {\n return window.clearTimeout(id);\n },\n Date: window.Date\n};\n\nvar clock = defaultClock;\n\nfunction Schedule() {\n this.tasks = {};\n this.nextId = 1;\n}\n\nSchedule.prototype.now = function() {\n return +new clock.Date();\n};\n\nSchedule.prototype.run = function(task, timeout) {\n var id = this.nextId++;\n this.tasks[id] = clock.setTimeout(this._handle(id, task), timeout);\n return id;\n};\n\nSchedule.prototype.cancel = function(id) {\n if (this.tasks[id]) {\n clock.clearTimeout(this.tasks[id]);\n delete this.tasks[id];\n }\n};\n\nSchedule.prototype.cancelAll = function() {\n each(clock.clearTimeout, this.tasks);\n this.tasks = {};\n};\n\nSchedule.prototype._handle = function(id, callback) {\n var self = this;\n return function() {\n delete self.tasks[id];\n return callback();\n };\n};\n\nSchedule.setClock = function(newClock) {\n clock = newClock;\n};\n\nSchedule.resetClock = function() {\n clock = defaultClock;\n};\n\nmodule.exports = Schedule;\n","\n/**\n * Expose `debug()` as the module.\n */\n\nmodule.exports = debug;\n\n/**\n * Create a debugger with the given `name`.\n *\n * @param {String} name\n * @return {Type}\n * @api public\n */\n\nfunction debug(name) {\n if (!debug.enabled(name)) return function(){};\n\n return function(fmt){\n fmt = coerce(fmt);\n\n var curr = new Date;\n var ms = curr - (debug[name] || curr);\n debug[name] = curr;\n\n fmt = name\n + ' '\n + fmt\n + ' +' + debug.humanize(ms);\n\n // This hackery is required for IE8\n // where `console.log` doesn't have 'apply'\n window.console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n }\n}\n\n/**\n * The currently active debug mode names.\n */\n\ndebug.names = [];\ndebug.skips = [];\n\n/**\n * Enables a debug mode by name. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} name\n * @api public\n */\n\ndebug.enable = function(name) {\n try {\n localStorage.debug = name;\n } catch(e){}\n\n var split = (name || '').split(/[\\s,]+/)\n , len = split.length;\n\n for (var i = 0; i < len; i++) {\n name = split[i].replace('*', '.*?');\n if (name[0] === '-') {\n debug.skips.push(new RegExp('^' + name.substr(1) + '$'));\n }\n else {\n debug.names.push(new RegExp('^' + name + '$'));\n }\n }\n};\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\ndebug.disable = function(){\n debug.enable('');\n};\n\n/**\n * Humanize the given `ms`.\n *\n * @param {Number} m\n * @return {String}\n * @api private\n */\n\ndebug.humanize = function(ms) {\n var sec = 1000\n , min = 60 * 1000\n , hour = 60 * min;\n\n if (ms >= hour) return (ms / hour).toFixed(1) + 'h';\n if (ms >= min) return (ms / min).toFixed(1) + 'm';\n if (ms >= sec) return (ms / sec | 0) + 's';\n return ms + 'ms';\n};\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\ndebug.enabled = function(name) {\n for (var i = 0, len = debug.skips.length; i < len; i++) {\n if (debug.skips[i].test(name)) {\n return false;\n }\n }\n for (var i = 0, len = debug.names.length; i < len; i++) {\n if (debug.names[i].test(name)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Coerce `val`.\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n\n// persist\n\ntry {\n if (window.localStorage) debug.enable(localStorage.debug);\n} catch(e){}\n","'use strict';\n\nvar uuid = require('uuid').v4;\nvar Store = require('./store');\nvar each = require('@ndhoule/each');\nvar Schedule = require('./schedule');\nvar debug = require('debug')('localstorage-retry');\nvar Emitter = require('component-emitter');\n\n// Some browsers don't support Function.prototype.bind, so just including a simplified version here\nfunction bind(func, obj) {\n return function() {\n return func.apply(obj, arguments);\n };\n}\n\n/**\n * @callback processFunc\n * @param {Mixed} item The item added to the queue to process\n * @param {Function} done A function to call when processing is completed.\n * @param {Error} Optional error parameter if the processing failed\n * @param {Response} Optional response parameter to emit for async handling\n */\n\n/**\n * Constructs a Queue backed by localStorage\n *\n * @constructor\n * @param {String} name The name of the queue. Will be used to find abandoned queues and retry their items\n * @param {processFunc} fn The function to call in order to process an item added to the queue\n */\nfunction Queue(name, opts, fn) {\n if (typeof opts === 'function') fn = opts;\n this.name = name;\n this.id = uuid();\n this.fn = fn;\n this.maxItems = opts.maxItems || Infinity;\n this.maxAttempts = opts.maxAttempts || Infinity;\n\n this.backoff = {\n MIN_RETRY_DELAY: opts.minRetryDelay || 1000,\n MAX_RETRY_DELAY: opts.maxRetryDelay || 30000,\n FACTOR: opts.backoffFactor || 2,\n JITTER: opts.backoffJitter || 0\n };\n\n // painstakingly tuned. that's why they're not \"easily\" configurable\n this.timeouts = {\n ACK_TIMER: 1000,\n RECLAIM_TIMER: 3000,\n RECLAIM_TIMEOUT: 10000,\n RECLAIM_WAIT: 500\n };\n\n this.keys = {\n IN_PROGRESS: 'inProgress',\n QUEUE: 'queue',\n RECLAIM_START: 'reclaimStart',\n RECLAIM_END: 'reclaimEnd',\n ACK: 'ack'\n };\n\n this._schedule = new Schedule();\n this._processId = 0;\n\n // Set up our empty queues\n this._store = new Store(this.name, this.id, this.keys);\n this._store.set(this.keys.IN_PROGRESS, {});\n this._store.set(this.keys.QUEUE, []);\n\n // bind recurring tasks for ease of use\n this._ack = bind(this._ack, this);\n this._checkReclaim = bind(this._checkReclaim, this);\n this._processHead = bind(this._processHead, this);\n\n this._running = false;\n}\n\n/**\n * Mix in event emitter\n */\n\nEmitter(Queue.prototype);\n\n/**\n * Starts processing the queue\n */\nQueue.prototype.start = function() {\n if (this._running) {\n this.stop();\n }\n this._running = true;\n this._ack();\n this._checkReclaim();\n this._processHead();\n};\n\n/**\n * Stops processing the queue\n */\nQueue.prototype.stop = function() {\n this._schedule.cancelAll();\n this._running = false;\n};\n\n/**\n * Decides whether to retry. Overridable.\n *\n * @param {Object} item The item being processed\n * @param {Number} attemptNumber The attemptNumber (1 for first retry)\n * @param {Error} error The error from previous attempt, if there was one\n * @return {Boolean} Whether to requeue the message\n */\nQueue.prototype.shouldRetry = function(_, attemptNumber) {\n if (attemptNumber > this.maxAttempts) return false;\n return true;\n};\n\n/**\n * Calculates the delay (in ms) for a retry attempt\n *\n * @param {Number} attemptNumber The attemptNumber (1 for first retry)\n * @return {Number} The delay in milliseconds to wait before attempting a retry\n */\nQueue.prototype.getDelay = function(attemptNumber) {\n var ms = this.backoff.MIN_RETRY_DELAY * Math.pow(this.backoff.FACTOR, attemptNumber);\n if (this.backoff.JITTER) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.backoff.JITTER * ms);\n if (Math.floor(rand * 10) < 5) {\n ms -= deviation;\n } else {\n ms += deviation;\n }\n }\n return Number(Math.min(ms, this.backoff.MAX_RETRY_DELAY).toPrecision(1));\n};\n\n/**\n * Adds an item to the queue\n *\n * @param {Mixed} item The item to process\n */\nQueue.prototype.addItem = function(item) {\n this._enqueue({\n item: item,\n attemptNumber: 0,\n time: this._schedule.now()\n });\n};\n\n/**\n * Adds an item to the retry queue\n *\n * @param {Mixed} item The item to retry\n * @param {Number} attemptNumber The attempt number (1 for first retry)\n * @param {Error} [error] The error from previous attempt, if there was one\n */\nQueue.prototype.requeue = function(item, attemptNumber, error) {\n if (this.shouldRetry(item, attemptNumber, error)) {\n this._enqueue({\n item: item,\n attemptNumber: attemptNumber,\n time: this._schedule.now() + this.getDelay(attemptNumber)\n });\n } else {\n this.emit('discard', item, attemptNumber);\n }\n};\n\nQueue.prototype._enqueue = function(entry) {\n var queue = this._store.get(this.keys.QUEUE) || [];\n queue = queue.slice(-(this.maxItems - 1));\n queue.push(entry);\n queue = queue.sort(function(a,b) {\n return a.time - b.time;\n });\n\n this._store.set(this.keys.QUEUE, queue);\n\n if (this._running) {\n this._processHead();\n }\n};\n\nQueue.prototype._processHead = function() {\n var self = this;\n var store = this._store;\n\n // cancel the scheduled task if it exists\n this._schedule.cancel(this._processId);\n\n // Pop the head off the queue\n var queue = store.get(this.keys.QUEUE) || [];\n var inProgress = store.get(this.keys.IN_PROGRESS) || {};\n var now = this._schedule.now();\n var toRun = [];\n\n function enqueue(el, id) {\n toRun.push({\n item: el.item,\n done: function handle(err, res) {\n var inProgress = store.get(self.keys.IN_PROGRESS) || {};\n delete inProgress[id];\n store.set(self.keys.IN_PROGRESS, inProgress);\n self.emit('processed', err, res, el.item);\n if (err) {\n self.requeue(el.item, el.attemptNumber + 1, err);\n }\n }\n });\n }\n\n var inProgressSize = Object.keys(inProgress).length;\n\n while (queue.length && queue[0].time <= now && inProgressSize++ < self.maxItems) {\n var el = queue.shift();\n var id = uuid();\n\n // Save this to the in progress map\n inProgress[id] = {\n item: el.item,\n attemptNumber: el.attemptNumber,\n time: self._schedule.now()\n };\n\n enqueue(el, id);\n }\n\n store.set(this.keys.QUEUE, queue);\n store.set(this.keys.IN_PROGRESS, inProgress);\n\n each(function(el) {\n // TODO: handle fn timeout\n try {\n self.fn(el.item, el.done);\n } catch (err) {\n debug('Process function threw error: ' + err);\n }\n }, toRun);\n\n // re-read the queue in case the process function finished immediately or added another item\n queue = store.get(this.keys.QUEUE) || [];\n this._schedule.cancel(this._processId);\n if (queue.length > 0) {\n this._processId = this._schedule.run(this._processHead, queue[0].time - now);\n }\n};\n\n// Ack continuously to prevent other tabs from claiming our queue\nQueue.prototype._ack = function() {\n this._store.set(this.keys.ACK, this._schedule.now());\n this._store.set(this.keys.RECLAIM_START, null);\n this._store.set(this.keys.RECLAIM_END, null);\n this._schedule.run(this._ack, this.timeouts.ACK_TIMER);\n};\n\nQueue.prototype._checkReclaim = function() {\n var self = this;\n\n function tryReclaim(store) {\n store.set(self.keys.RECLAIM_START, self.id);\n store.set(self.keys.ACK, self._schedule.now());\n\n self._schedule.run(function() {\n if (store.get(self.keys.RECLAIM_START) !== self.id) return;\n store.set(self.keys.RECLAIM_END, self.id);\n\n self._schedule.run(function() {\n if (store.get(self.keys.RECLAIM_END) !== self.id) return;\n if (store.get(self.keys.RECLAIM_START) !== self.id) return;\n self._reclaim(store.id);\n }, self.timeouts.RECLAIM_WAIT);\n }, self.timeouts.RECLAIM_WAIT);\n }\n\n function findOtherQueues(name) {\n var res = [];\n var storage = self._store.getOriginalEngine();\n for (var i = 0; i < storage.length; i++) {\n var k = storage.key(i);\n var parts = k.split('.');\n if (parts.length !== 3) continue;\n if (parts[0] !== name) continue;\n if (parts[2] !== 'ack') continue;\n res.push(new Store(name, parts[1], self.keys));\n }\n return res;\n }\n\n each(function(store) {\n if (store.id === self.id) return;\n if (self._schedule.now() - store.get(self.keys.ACK) < self.timeouts.RECLAIM_TIMEOUT) return;\n tryReclaim(store);\n }, findOtherQueues(this.name));\n\n this._schedule.run(this._checkReclaim, this.timeouts.RECLAIM_TIMER);\n};\n\nQueue.prototype._reclaim = function(id) {\n var self = this;\n var other = new Store(this.name, id, this.keys);\n\n var our = {\n queue: this._store.get(this.keys.QUEUE) || []\n };\n\n var their = {\n inProgress: other.get(this.keys.IN_PROGRESS) || {},\n queue: other.get(this.keys.QUEUE) || []\n };\n\n // add their queue to ours, resetting run-time to immediate and copying the attempt#\n each(function(el) {\n our.queue.push({\n item: el.item,\n attemptNumber: el.attemptNumber,\n time: self._schedule.now()\n });\n }, their.queue);\n\n // if the queue is abandoned, all the in-progress are failed. retry them immediately and increment the attempt#\n each(function(el) {\n our.queue.push({\n item: el.item,\n attemptNumber: el.attemptNumber + 1,\n time: self._schedule.now()\n });\n }, their.inProgress);\n\n our.queue = our.queue.sort(function(a,b) {\n return a.time - b.time;\n });\n\n this._store.set(this.keys.QUEUE, our.queue);\n\n // remove all keys\n other.remove(this.keys.IN_PROGRESS);\n other.remove(this.keys.QUEUE);\n other.remove(this.keys.RECLAIM_START);\n other.remove(this.keys.RECLAIM_END);\n other.remove(this.keys.ACK);\n\n // process the new items we claimed\n this._processHead();\n};\n\nmodule.exports = Queue;\n","// Payload class, contains batch of Elements\nclass RudderPayload {\n constructor() {\n this.batch = null;\n this.writeKey = null;\n }\n}\nexport { RudderPayload };\n","import Queue from \"@segment/localstorage-retry\";\nimport {\n BASE_URL,\n FLUSH_QUEUE_SIZE,\n FLUSH_INTERVAL_DEFAULT,\n} from \"./constants\";\nimport { getCurrentTimeFormatted, handleError, replacer } from \"./utils\";\n\nimport { RudderPayload } from \"./RudderPayload\";\nimport logger from \"./logUtil\";\n// import * as XMLHttpRequestNode from \"Xmlhttprequest\";\n\nlet XMLHttpRequestNode;\nif (!process.browser) {\n XMLHttpRequestNode = require(\"Xmlhttprequest\");\n}\n\nlet btoaNode;\nif (!process.browser) {\n btoaNode = require(\"btoa\");\n}\n\nconst queueOptions = {\n maxRetryDelay: 360000,\n minRetryDelay: 1000,\n backoffFactor: 2,\n maxAttempts: 10,\n maxItems: 100,\n};\n\nconst MESSAGE_LENGTH = 32 * 1000; // ~32 Kb\n\n/**\n *\n * @class EventRepository responsible for adding events into\n * flush queue and sending data to rudder backend\n * in batch and maintains order of the event.\n */\nclass EventRepository {\n /**\n *Creates an instance of EventRepository.\n * @memberof EventRepository\n */\n constructor() {\n this.eventsBuffer = [];\n this.writeKey = \"\";\n this.url = \"\";\n this.state = \"READY\";\n this.batchSize = 0;\n\n // previous implementation\n // setInterval(this.preaparePayloadAndFlush, FLUSH_INTERVAL_DEFAULT, this);\n\n this.payloadQueue = new Queue(\"rudder\", queueOptions, function (\n item,\n done\n ) {\n // apply sentAt at flush time and reset on each retry\n item.message.sentAt = getCurrentTimeFormatted();\n // send this item for processing, with a callback to enable queue to get the done status\n eventRepository.processQueueElement(\n item.url,\n item.headers,\n item.message,\n 10 * 1000,\n function (err, res) {\n if (err) {\n return done(err);\n }\n done(null, res);\n }\n );\n });\n\n // start queue\n this.payloadQueue.start();\n }\n\n /**\n *\n *\n * @param {EventRepository} repo\n * @returns\n * @memberof EventRepository\n */\n preaparePayloadAndFlush(repo) {\n // construct payload\n logger.debug(`==== in preaparePayloadAndFlush with state: ${repo.state}`);\n logger.debug(repo.eventsBuffer);\n if (repo.eventsBuffer.length == 0 || repo.state === \"PROCESSING\") {\n return;\n }\n const eventsPayload = repo.eventsBuffer;\n const payload = new RudderPayload();\n payload.batch = eventsPayload;\n payload.writeKey = repo.writeKey;\n payload.sentAt = getCurrentTimeFormatted();\n\n // add sentAt to individual events as well\n payload.batch.forEach((event) => {\n event.sentAt = payload.sentAt;\n });\n\n repo.batchSize = repo.eventsBuffer.length;\n // server-side integration, XHR is node module\n\n if (process.browser) {\n var xhr = new XMLHttpRequest();\n } else {\n var xhr = new XMLHttpRequestNode.XMLHttpRequest();\n }\n\n logger.debug(\"==== in flush sending to Rudder BE ====\");\n logger.debug(JSON.stringify(payload, replacer));\n\n xhr.open(\"POST\", repo.url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n\n if (process.browser) {\n xhr.setRequestHeader(\n \"Authorization\",\n `Basic ${btoa(`${payload.writeKey}:`)}`\n );\n } else {\n xhr.setRequestHeader(\n \"Authorization\",\n `Basic ${btoaNode(`${payload.writeKey}:`)}`\n );\n }\n\n // register call back to reset event buffer on successfull POST\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status === 200) {\n logger.debug(`====== request processed successfully: ${xhr.status}`);\n repo.eventsBuffer = repo.eventsBuffer.slice(repo.batchSize);\n logger.debug(repo.eventsBuffer.length);\n } else if (xhr.readyState === 4 && xhr.status !== 200) {\n handleError(\n new Error(\n `request failed with status: ${xhr.status} for url: ${repo.url}`\n )\n );\n }\n repo.state = \"READY\";\n };\n xhr.send(JSON.stringify(payload, replacer));\n repo.state = \"PROCESSING\";\n }\n\n /**\n * the queue item proceesor\n * @param {*} url to send requests to\n * @param {*} headers\n * @param {*} message\n * @param {*} timeout\n * @param {*} queueFn the function to call after request completion\n */\n processQueueElement(url, headers, message, timeout, queueFn) {\n try {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", url, true);\n for (const k in headers) {\n xhr.setRequestHeader(k, headers[k]);\n }\n xhr.timeout = timeout;\n xhr.ontimeout = queueFn;\n xhr.onerror = queueFn;\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 429 || (xhr.status >= 500 && xhr.status < 600)) {\n handleError(\n new Error(\n `request failed with status: ${xhr.status}${xhr.statusText} for url: ${url}`\n )\n );\n queueFn(\n new Error(\n `request failed with status: ${xhr.status}${xhr.statusText} for url: ${url}`\n )\n );\n } else {\n logger.debug(\n `====== request processed successfully: ${xhr.status}`\n );\n queueFn(null, xhr.status);\n }\n }\n };\n\n xhr.send(JSON.stringify(message, replacer));\n } catch (error) {\n queueFn(error);\n }\n }\n\n /**\n *\n *\n * @param {RudderElement} rudderElement\n * @memberof EventRepository\n */\n enqueue(rudderElement, type) {\n const message = rudderElement.getElementContent();\n\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${btoa(`${this.writeKey}:`)}`,\n AnonymousId: btoa(message.anonymousId),\n };\n\n message.originalTimestamp = getCurrentTimeFormatted();\n message.sentAt = getCurrentTimeFormatted(); // add this, will get modified when actually being sent\n\n // check message size, if greater log an error\n if (JSON.stringify(message).length > MESSAGE_LENGTH) {\n logger.error(\n \"[EventRepository] enqueue:: message length greater 32 Kb \",\n message\n );\n }\n\n // modify the url for event specific endpoints\n const url = this.url.slice(-1) == \"/\" ? this.url.slice(0, -1) : this.url;\n // add items to the queue\n this.payloadQueue.addItem({\n url: `${url}/v1/${type}`,\n headers,\n message,\n });\n }\n}\nlet eventRepository = new EventRepository();\nexport { eventRepository as EventRepository };\n","import { getDefaultPageProperties } from \"./utils\";\nimport logger from \"./logUtil\";\n\nfunction addDomEventHandlers(rudderanalytics) {\n const handler = (e) => {\n e = e || window.event;\n let target = e.target || e.srcElement;\n\n if (isTextNode(target)) {\n target = target.parentNode;\n }\n if (shouldTrackDomEvent(target, e)) {\n logger.debug(\"to be tracked \", e.type);\n } else {\n logger.debug(\"not to be tracked \", e.type);\n }\n trackWindowEvent(e, rudderanalytics);\n };\n register_event(document, \"submit\", handler, true);\n register_event(document, \"change\", handler, true);\n register_event(document, \"click\", handler, true);\n rudderanalytics.page();\n}\n\nfunction register_event(element, type, handler, useCapture) {\n if (!element) {\n logger.error(\n \"[Autotrack] register_event:: No valid element provided to register_event\"\n );\n return;\n }\n element.addEventListener(type, handler, !!useCapture);\n}\n\nfunction shouldTrackDomEvent(el, event) {\n if (!el || isTag(el, \"html\") || !isElementNode(el)) {\n return false;\n }\n const tag = el.tagName.toLowerCase();\n switch (tag) {\n case \"html\":\n return false;\n case \"form\":\n return event.type === \"submit\";\n case \"input\":\n if ([\"button\", \"submit\"].indexOf(el.getAttribute(\"type\")) === -1) {\n return event.type === \"change\";\n }\n return event.type === \"click\";\n\n case \"select\":\n case \"textarea\":\n return event.type === \"change\";\n default:\n return event.type === \"click\";\n }\n}\n\nfunction isTag(el, tag) {\n return el && el.tagName && el.tagName.toLowerCase() === tag.toLowerCase();\n}\n\nfunction isElementNode(el) {\n return el && el.nodeType === 1; // Node.ELEMENT_NODE - use integer constant for browser portability\n}\n\nfunction isTextNode(el) {\n return el && el.nodeType === 3; // Node.TEXT_NODE - use integer constant for browser portability\n}\n\n// excerpt from https://github.com/mixpanel/mixpanel-js/blob/master/src/autotrack-utils.js\nfunction shouldTrackElement(el) {\n\n if (!el.parentNode || isTag(el, \"body\")) return false;\n\n let curEl = el;\n while (curEl.parentNode && !isTag(curEl, \"body\")) {\n let classes = getClassName(el).split(\" \");\n\n // if explicitly specified \"rudder-no-track\", even at parent level, dont track the child nodes too.\n if (classes.indexOf(\"rudder-no-track\") >= 0) {\n return false;\n }\n curEl = curEl.parentNode;\n }\n\n // if explicitly set \"rudder-include\", at element level, then track the element even if the element is hidden or sensitive.\n let classes = getClassName(el).split(\" \");\n if (classes.indexOf(\"rudder-include\") >= 0) {\n return true;\n }\n\n // for general elements, do not track input/select/textarea(s)\n if (\n isTag(el, 'input') ||\n isTag(el, 'select') ||\n isTag(el, 'textarea') ||\n el.getAttribute('contenteditable') === 'true'\n ) {\n return false;\n } else if (el.getAttribute('contenteditable') === 'inherit'){\n for(curEl = el.parentNode; curEl.parentNode && !isTag(curEl, \"body\"); curEl = curEl.parentNode){\n if(curEl.getAttribute('contenteditable') === 'true'){\n return false;\n }\n }\n }\n\n // do not track hidden/password elements\n let type = el.type || '';\n if (typeof type === 'string') { // it's possible for el.type to be a DOM element if el is a form with a child input[name=\"type\"]\n switch(type.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n // filter out data from fields that look like sensitive field - \n // safeguard - match with regex with possible strings as id or name of an element for creditcard, password, ssn, pan, adhar\n let name = el.name || el.id || '';\n if (typeof name === 'string') { // it's possible for el.name or el.id to be a DOM element if el is a form with a child input[name=\"name\"]\n let sensitiveNameRegex = /^adhar|cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pan|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i;\n if (sensitiveNameRegex.test(name.replace(/[^a-zA-Z0-9]/g, ''))) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getClassName(el) {\n switch (typeof el.className) {\n case \"string\":\n return el.className;\n case \"object\": // handle cases where className might be SVGAnimatedString or some other type\n return el.className.baseVal || el.getAttribute(\"class\") || \"\";\n default:\n // future proof\n return \"\";\n }\n}\n\nfunction trackWindowEvent(e, rudderanalytics) {\n let target = e.target || e.srcElement;\n let formValues;\n if (isTextNode(target)) {\n target = target.parentNode;\n }\n\n if (shouldTrackDomEvent(target, e)) {\n if (target.tagName.toLowerCase() == \"form\") {\n formValues = {};\n for (let i = 0; i < target.elements.length; i++) {\n const formElement = target.elements[i];\n if (\n shouldTrackElement(formElement) &&\n isValueToBeTrackedFromTrackingList(formElement, rudderanalytics.trackValues)\n ) {\n const name = formElement.id ? formElement.id : formElement.name;\n if (name && typeof name === \"string\") {\n const key = formElement.id ? formElement.id : formElement.name;\n // formElement.value gives the same thing\n let value = formElement.id\n ? document.getElementById(formElement.id).value\n : document.getElementsByName(formElement.name)[0].value;\n if (\n formElement.type === \"checkbox\" ||\n formElement.type === \"radio\"\n ) {\n value = formElement.checked;\n }\n if (key.trim() !== \"\") {\n formValues[encodeURIComponent(key)] = encodeURIComponent(value);\n }\n }\n }\n }\n }\n const targetElementList = [];\n let curEl = target;\n if(isExplicitNoTrack(curEl)){\n return false;\n }\n while (curEl.parentNode && !isTag(curEl, \"body\")) {\n if(shouldTrackElement(curEl)){\n targetElementList.push(curEl);\n }\n curEl = curEl.parentNode;\n }\n\n const elementsJson = [];\n let href;\n\n targetElementList.forEach((el) => {\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === \"a\") {\n href = el.getAttribute(\"href\");\n href = isValueToBeTracked(href) && href;\n }\n elementsJson.push(getPropertiesFromElement(el, rudderanalytics));\n });\n\n if (targetElementList && targetElementList.length == 0) {\n return false;\n }\n\n let elementText = \"\";\n const text = getText(target); \n if (text && text.length) {\n elementText = text;\n }\n const props = {\n event_type: e.type,\n page: getDefaultPageProperties(),\n elements: elementsJson,\n el_attr_href: href,\n el_text: elementText,\n };\n\n if (formValues) {\n props.form_values = formValues;\n }\n\n logger.debug(\"web_event\", props);\n rudderanalytics.track(\"autotrack\", props);\n return true;\n }\n}\n\nfunction isExplicitNoTrack(el){\n const classes = getClassName(el).split(\" \");\n if (classes.indexOf(\"rudder-no-track\") >= 0) {\n return true;\n }\n return false;\n}\n\n// excerpt from https://github.com/mixpanel/mixpanel-js/blob/master/src/autotrack-utils.js\nfunction isValueToBeTracked(value){\n if(value === null || value === undefined){\n return false;\n }\n if (typeof value === 'string') {\n value = value.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n // check to see if input value looks like a credit card number\n // see: https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s20.html\n var ccRegex = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((value || '').replace(/[- ]/g, ''))) {\n return false;\n }\n\n // check to see if input value looks like a social security number\n var ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(value)) {\n return false;\n }\n\n // check to see if input value looks like a adhar number\n var adharRegex = /(^\\d{4}-?\\d{4}-?\\d{4}$)/;\n if (adharRegex.test(value)) {\n return false;\n }\n\n // check to see if input value looks like a PAN number\n var panRegex = /(^\\w{5}-?\\d{4}-?\\w{1}$)/;\n if (panRegex.test(value)) {\n return false;\n }\n}\n\nreturn true;\n}\n\n// if the element name is provided in the valTrackingList while loading rudderanalytics, track the value.\n/**\n * \n * @param {*} el \n * @param {*} includeList - valTrackingList provided in rudderanalytics.load()\n */\nfunction isValueToBeTrackedFromTrackingList(el, includeList) {\n const elAttributesLength = el.attributes.length;\n for (let i = 0; i < elAttributesLength; i++) {\n const { value } = el.attributes[i];\n if (includeList.indexOf(value) > -1) {\n return true;\n }\n }\n return false;\n}\n\nfunction getText(el) {\n let text = \"\";\n el.childNodes.forEach(function (value) {\n if (value.nodeType === Node.TEXT_NODE) {\n let textContent = value.nodeValue.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n // take each word from the text content and check whether the value should be tracked. Also, replace the whitespaces.\n let textValue = textContent.split(/(\\s+)/).filter(isValueToBeTracked).join('').replace(/[\\r\\n]/g, ' ');\n text += textValue;\n }\n });\n return text.trim();\n}\n\nfunction getPropertiesFromElement(elem, rudderanalytics) {\n const props = {\n classes: getClassName(elem).split(\" \"),\n tag_name: elem.tagName.toLowerCase(),\n };\n\n const attrLength = elem.attributes.length;\n for (let i = 0; i < attrLength; i++) {\n const { name } = elem.attributes[i];\n const { value } = elem.attributes[i];\n if (value && isValueToBeTracked(value)) {\n props[`attr__${name}`] = value;\n }\n if (\n (name == \"name\" || name == \"id\") &&\n isValueToBeTrackedFromTrackingList(elem, rudderanalytics.trackValues)\n ) {\n props.field_value =\n name == \"id\"\n ? document.getElementById(value).value\n : document.getElementsByName(value)[0].value;\n\n if (elem.type === \"checkbox\" || elem.type === \"radio\") {\n props.field_value = elem.checked;\n }\n }\n }\n\n let nthChild = 1;\n let nthOfType = 1;\n let currentElem = elem;\n while ((currentElem = previousElementSibling(currentElem))) {\n nthChild++;\n if (currentElem.tagName === elem.tagName) {\n nthOfType++;\n }\n }\n props.nth_child = nthChild;\n props.nth_of_type = nthOfType;\n\n return props;\n}\n\nfunction previousElementSibling(el) {\n if (el.previousElementSibling) {\n return el.previousElementSibling;\n }\n do {\n el = el.previousSibling;\n } while (el && !isElementNode(el));\n return el;\n}\nexport { addDomEventHandlers };\n","/* eslint-disable new-cap */\n/* eslint-disable func-names */\n/* eslint-disable eqeqeq */\n/* eslint-disable no-prototype-builtins */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable guard-for-in */\n/* eslint-disable no-sequences */\n/* eslint-disable no-multi-assign */\n/* eslint-disable no-unused-expressions */\n/* eslint-disable import/extensions */\n/* eslint-disable no-param-reassign */\nimport Emitter from \"component-emitter\";\nimport after from \"after\";\nimport querystring from \"component-querystring\";\nimport {\n getJSONTrimmed,\n generateUUID,\n handleError,\n getDefaultPageProperties,\n getUserProvidedConfigUrl,\n findAllEnabledDestinations,\n tranformToRudderNames,\n transformToServerNames,\n} from \"./utils/utils\";\nimport {\n CONFIG_URL,\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL,\n} from \"./utils/constants\";\nimport { integrations } from \"./integrations\";\nimport RudderElementBuilder from \"./utils/RudderElementBuilder\";\nimport Storage from \"./utils/storage\";\nimport { EventRepository } from \"./utils/EventRepository\";\nimport logger from \"./utils/logUtil\";\nimport { addDomEventHandlers } from \"./utils/autotrack.js\";\nimport ScriptLoader from \"./integrations/ScriptLoader\";\n\nconst queryDefaults = {\n trait: \"ajs_trait_\",\n prop: \"ajs_prop_\",\n};\n\n// https://unpkg.com/test-rudder-sdk@1.0.5/dist/browser.js\n\n/**\n * Add the rudderelement object to flush queue\n *\n * @param {RudderElement} rudderElement\n */\nfunction enqueue(rudderElement, type) {\n if (!this.eventRepository) {\n this.eventRepository = EventRepository;\n }\n this.eventRepository.enqueue(rudderElement, type);\n}\n\n/**\n * class responsible for handling core\n * event tracking functionalities\n */\nclass Analytics {\n /**\n * Creates an instance of Analytics.\n * @memberof Analytics\n */\n constructor() {\n this.autoTrackHandlersRegistered = false;\n this.autoTrackFeatureEnabled = false;\n this.initialized = false;\n this.trackValues = [];\n this.eventsBuffer = [];\n this.clientIntegrations = [];\n this.loadOnlyIntegrations = {};\n this.clientIntegrationObjects = undefined;\n this.successfullyLoadedIntegration = [];\n this.failedToBeLoadedIntegration = [];\n this.toBeProcessedArray = [];\n this.toBeProcessedByIntegrationArray = [];\n this.storage = Storage;\n this.eventRepository = EventRepository;\n this.sendAdblockPage = false;\n this.sendAdblockPageOptions = {};\n this.clientSuppliedCallbacks = {};\n this.readyCallback = () => {};\n this.executeReadyCallback = undefined;\n this.methodToCallbackMapping = {\n syncPixel: \"syncPixelCallback\",\n };\n this.loaded = false;\n }\n\n /**\n * initialize the user after load config\n */\n initializeUser() {\n this.userId =\n this.storage.getUserId() != undefined ? this.storage.getUserId() : \"\";\n\n this.userTraits =\n this.storage.getUserTraits() != undefined\n ? this.storage.getUserTraits()\n : {};\n\n this.groupId =\n this.storage.getGroupId() != undefined ? this.storage.getGroupId() : \"\";\n\n this.groupTraits =\n this.storage.getGroupTraits() != undefined\n ? this.storage.getGroupTraits()\n : {};\n\n this.anonymousId = this.getAnonymousId();\n\n // save once for storing older values to encrypted\n this.storage.setUserId(this.userId);\n this.storage.setAnonymousId(this.anonymousId);\n this.storage.setGroupId(this.groupId);\n this.storage.setUserTraits(this.userTraits);\n this.storage.setGroupTraits(this.groupTraits);\n }\n\n /**\n * Process the response from control plane and\n * call initialize for integrations\n *\n * @param {*} status\n * @param {*} response\n * @memberof Analytics\n */\n processResponse(status, response) {\n try {\n logger.debug(`===in process response=== ${status}`);\n response = JSON.parse(response);\n if (\n response.source.useAutoTracking &&\n !this.autoTrackHandlersRegistered\n ) {\n this.autoTrackFeatureEnabled = true;\n addDomEventHandlers(this);\n this.autoTrackHandlersRegistered = true;\n }\n response.source.destinations.forEach(function (destination, index) {\n logger.debug(\n `Destination ${index} Enabled? ${destination.enabled} Type: ${destination.destinationDefinition.name} Use Native SDK? ${destination.config.useNativeSDK}`\n );\n if (destination.enabled) {\n this.clientIntegrations.push({\n name: destination.destinationDefinition.name,\n config: destination.config,\n });\n }\n }, this);\n\n logger.debug(\"this.clientIntegrations: \", this.clientIntegrations);\n // intersection of config-plane native sdk destinations with sdk load time destination list\n this.clientIntegrations = findAllEnabledDestinations(\n this.loadOnlyIntegrations,\n this.clientIntegrations\n );\n\n // remove from the list which don't have support yet in SDK\n this.clientIntegrations = this.clientIntegrations.filter((intg) => {\n return integrations[intg.name] != undefined;\n });\n\n this.init(this.clientIntegrations);\n } catch (error) {\n handleError(error);\n logger.debug(\"===handling config BE response processing error===\");\n logger.debug(\n \"autoTrackHandlersRegistered\",\n this.autoTrackHandlersRegistered\n );\n if (this.autoTrackFeatureEnabled && !this.autoTrackHandlersRegistered) {\n addDomEventHandlers(this);\n this.autoTrackHandlersRegistered = true;\n }\n }\n }\n\n /**\n * Initialize integrations by addinfg respective scripts\n * keep the instances reference in core\n *\n * @param {*} intgArray\n * @returns\n * @memberof Analytics\n */\n init(intgArray) {\n const self = this;\n logger.debug(\"supported intgs \", integrations);\n // this.clientIntegrationObjects = [];\n\n if (!intgArray || intgArray.length == 0) {\n if (this.readyCallback) {\n this.readyCallback();\n }\n this.toBeProcessedByIntegrationArray = [];\n return;\n }\n\n intgArray.forEach((intg) => {\n try {\n logger.debug(\n \"[Analytics] init :: trying to initialize integration name:: \",\n intg.name\n );\n const intgClass = integrations[intg.name];\n const destConfig = intg.config;\n const intgInstance = new intgClass(destConfig, self);\n intgInstance.init();\n\n logger.debug(\"initializing destination: \", intg);\n\n this.isInitialized(intgInstance).then(this.replayEvents);\n } catch (e) {\n logger.error(\n \"[Analytics] initialize integration (integration.init()) failed :: \",\n intg.name\n );\n }\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n replayEvents(object) {\n if (\n object.successfullyLoadedIntegration.length +\n object.failedToBeLoadedIntegration.length ===\n object.clientIntegrations.length\n ) {\n logger.debug(\n \"===replay events called====\",\n object.successfullyLoadedIntegration.length,\n object.failedToBeLoadedIntegration.length\n );\n // eslint-disable-next-line no-param-reassign\n object.clientIntegrationObjects = [];\n // eslint-disable-next-line no-param-reassign\n object.clientIntegrationObjects = object.successfullyLoadedIntegration;\n\n logger.debug(\n \"==registering after callback===\",\n object.clientIntegrationObjects.length\n );\n object.executeReadyCallback = after(\n object.clientIntegrationObjects.length,\n object.readyCallback\n );\n\n logger.debug(\"==registering ready callback===\");\n object.on(\"ready\", object.executeReadyCallback);\n\n object.clientIntegrationObjects.forEach((intg) => {\n logger.debug(\"===looping over each successful integration====\");\n if (!intg.isReady || intg.isReady()) {\n logger.debug(\"===letting know I am ready=====\", intg.name);\n object.emit(\"ready\");\n }\n });\n\n if (object.toBeProcessedByIntegrationArray.length > 0) {\n // send the queued events to the fetched integration\n object.toBeProcessedByIntegrationArray.forEach((event) => {\n const methodName = event[0];\n event.shift();\n\n // convert common names to sdk identified name\n if (Object.keys(event[0].message.integrations).length > 0) {\n tranformToRudderNames(event[0].message.integrations);\n }\n\n // if not specified at event level, All: true is default\n const clientSuppliedIntegrations = event[0].message.integrations;\n\n // get intersection between config plane native enabled destinations\n // (which were able to successfully load on the page) vs user supplied integrations\n const succesfulLoadedIntersectClientSuppliedIntegrations = findAllEnabledDestinations(\n clientSuppliedIntegrations,\n object.clientIntegrationObjects\n );\n\n // send to all integrations now from the 'toBeProcessedByIntegrationArray' replay queue\n for (\n let i = 0;\n i < succesfulLoadedIntersectClientSuppliedIntegrations.length;\n i += 1\n ) {\n try {\n if (\n !succesfulLoadedIntersectClientSuppliedIntegrations[i]\n .isFailed ||\n !succesfulLoadedIntersectClientSuppliedIntegrations[\n i\n ].isFailed()\n ) {\n if (\n succesfulLoadedIntersectClientSuppliedIntegrations[i][\n methodName\n ]\n ) {\n succesfulLoadedIntersectClientSuppliedIntegrations[i][\n methodName\n ](...event);\n }\n }\n } catch (error) {\n handleError(error);\n }\n }\n });\n object.toBeProcessedByIntegrationArray = [];\n }\n }\n }\n\n pause(time) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n }\n\n isInitialized(instance, time = 0) {\n return new Promise((resolve) => {\n if (instance.isLoaded()) {\n logger.debug(\"===integration loaded successfully====\", instance.name);\n this.successfullyLoadedIntegration.push(instance);\n return resolve(this);\n }\n if (time >= MAX_WAIT_FOR_INTEGRATION_LOAD) {\n logger.debug(\"====max wait over====\");\n this.failedToBeLoadedIntegration.push(instance);\n return resolve(this);\n }\n\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() => {\n logger.debug(\"====after pause, again checking====\");\n return this.isInitialized(\n instance,\n time + INTEGRATION_LOAD_CHECK_INTERVAL\n ).then(resolve);\n });\n });\n }\n\n /**\n * Process page params and forward to page call\n *\n * @param {*} category\n * @param {*} name\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n page(category, name, properties, options, callback) {\n if (!this.loaded) return;\n if (typeof options === \"function\") (callback = options), (options = null);\n if (typeof properties === \"function\")\n (callback = properties), (options = properties = null);\n if (typeof name === \"function\")\n (callback = name), (options = properties = name = null);\n if (\n typeof category === \"object\" &&\n category != null &&\n category != undefined\n )\n (options = name), (properties = category), (name = category = null);\n if (typeof name === \"object\" && name != null && name != undefined)\n (options = properties), (properties = name), (name = null);\n if (typeof category === \"string\" && typeof name !== \"string\")\n (name = category), (category = null);\n if (this.sendAdblockPage && category != \"RudderJS-Initiated\") {\n this.sendSampleRequest();\n }\n this.processPage(category, name, properties, options, callback);\n }\n\n /**\n * Process track params and forward to track call\n *\n * @param {*} event\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n track(event, properties, options, callback) {\n if (!this.loaded) return;\n if (typeof options === \"function\") (callback = options), (options = null);\n if (typeof properties === \"function\")\n (callback = properties), (options = null), (properties = null);\n\n this.processTrack(event, properties, options, callback);\n }\n\n /**\n * Process identify params and forward to indentify call\n *\n * @param {*} userId\n * @param {*} traits\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n identify(userId, traits, options, callback) {\n if (!this.loaded) return;\n if (typeof options === \"function\") (callback = options), (options = null);\n if (typeof traits === \"function\")\n (callback = traits), (options = null), (traits = null);\n if (typeof userId === \"object\")\n (options = traits), (traits = userId), (userId = this.userId);\n\n this.processIdentify(userId, traits, options, callback);\n }\n\n /**\n *\n * @param {*} to\n * @param {*} from\n * @param {*} options\n * @param {*} callback\n */\n alias(to, from, options, callback) {\n if (!this.loaded) return;\n if (typeof options === \"function\") (callback = options), (options = null);\n if (typeof from === \"function\")\n (callback = from), (options = null), (from = null);\n if (typeof from === \"object\") (options = from), (from = null);\n\n const rudderElement = new RudderElementBuilder().setType(\"alias\").build();\n rudderElement.message.previousId =\n from || (this.userId ? this.userId : this.getAnonymousId());\n rudderElement.message.userId = to;\n\n this.processAndSendDataToDestinations(\n \"alias\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n *\n * @param {*} to\n * @param {*} from\n * @param {*} options\n * @param {*} callback\n */\n group(groupId, traits, options, callback) {\n if (!this.loaded) return;\n if (!arguments.length) return;\n\n if (typeof options === \"function\") (callback = options), (options = null);\n if (typeof traits === \"function\")\n (callback = traits), (options = null), (traits = null);\n if (typeof groupId === \"object\")\n (options = traits), (traits = groupId), (groupId = this.groupId);\n\n this.groupId = groupId;\n this.storage.setGroupId(this.groupId);\n\n const rudderElement = new RudderElementBuilder().setType(\"group\").build();\n if (traits) {\n for (const key in traits) {\n this.groupTraits[key] = traits[key];\n }\n } else {\n this.groupTraits = {};\n }\n this.storage.setGroupTraits(this.groupTraits);\n\n this.processAndSendDataToDestinations(\n \"group\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Send page call to Rudder BE and to initialized integrations\n *\n * @param {*} category\n * @param {*} name\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n processPage(category, name, properties, options, callback) {\n const rudderElement = new RudderElementBuilder().setType(\"page\").build();\n if (!properties) {\n properties = {};\n }\n if (name) {\n rudderElement.message.name = name;\n properties.name = name;\n }\n if (category) {\n rudderElement.message.category = category;\n properties.category = category;\n }\n rudderElement.message.properties = this.getPageProperties(properties); // properties;\n\n this.trackPage(rudderElement, options, callback);\n }\n\n /**\n * Send track call to Rudder BE and to initialized integrations\n *\n * @param {*} event\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n processTrack(event, properties, options, callback) {\n const rudderElement = new RudderElementBuilder().setType(\"track\").build();\n if (event) {\n rudderElement.setEventName(event);\n }\n if (properties) {\n rudderElement.setProperty(properties);\n } else {\n rudderElement.setProperty({});\n }\n\n this.trackEvent(rudderElement, options, callback);\n }\n\n /**\n * Send identify call to Rudder BE and to initialized integrations\n *\n * @param {*} userId\n * @param {*} traits\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n processIdentify(userId, traits, options, callback) {\n if (userId && this.userId && userId !== this.userId) {\n this.reset();\n }\n this.userId = userId;\n this.storage.setUserId(this.userId);\n\n const rudderElement = new RudderElementBuilder()\n .setType(\"identify\")\n .build();\n if (traits) {\n for (const key in traits) {\n this.userTraits[key] = traits[key];\n }\n this.storage.setUserTraits(this.userTraits);\n }\n\n this.identifyUser(rudderElement, options, callback);\n }\n\n /**\n * Identify call supporting rudderelement from builder\n *\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n identifyUser(rudderElement, options, callback) {\n if (rudderElement.message.userId) {\n this.userId = rudderElement.message.userId;\n this.storage.setUserId(this.userId);\n }\n\n if (\n rudderElement &&\n rudderElement.message &&\n rudderElement.message.context &&\n rudderElement.message.context.traits\n ) {\n this.userTraits = {\n ...rudderElement.message.context.traits,\n };\n this.storage.setUserTraits(this.userTraits);\n }\n\n this.processAndSendDataToDestinations(\n \"identify\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Page call supporting rudderelement from builder\n *\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n trackPage(rudderElement, options, callback) {\n this.processAndSendDataToDestinations(\n \"page\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Track call supporting rudderelement from builder\n *\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n trackEvent(rudderElement, options, callback) {\n this.processAndSendDataToDestinations(\n \"track\",\n rudderElement,\n options,\n callback\n );\n }\n\n /**\n * Process and send data to destinations along with rudder BE\n *\n * @param {*} type\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n processAndSendDataToDestinations(type, rudderElement, options, callback) {\n try {\n if (!this.anonymousId) {\n this.setAnonymousId();\n }\n\n // assign page properties to context\n // rudderElement.message.context.page = getDefaultPageProperties();\n\n rudderElement.message.context.traits = {\n ...this.userTraits,\n };\n\n logger.debug(\"anonymousId: \", this.anonymousId);\n rudderElement.message.anonymousId = this.anonymousId;\n rudderElement.message.userId = rudderElement.message.userId\n ? rudderElement.message.userId\n : this.userId;\n\n if (type == \"group\") {\n if (this.groupId) {\n rudderElement.message.groupId = this.groupId;\n }\n if (this.groupTraits) {\n rudderElement.message.traits = {\n ...this.groupTraits,\n };\n }\n }\n\n this.processOptionsParam(rudderElement, options);\n logger.debug(JSON.stringify(rudderElement));\n\n // structure user supplied integrations object to rudder format\n if (Object.keys(rudderElement.message.integrations).length > 0) {\n tranformToRudderNames(rudderElement.message.integrations);\n }\n\n // if not specified at event level, All: true is default\n const clientSuppliedIntegrations = rudderElement.message.integrations;\n\n // get intersection between config plane native enabled destinations\n // (which were able to successfully load on the page) vs user supplied integrations\n const succesfulLoadedIntersectClientSuppliedIntegrations = findAllEnabledDestinations(\n clientSuppliedIntegrations,\n this.clientIntegrationObjects\n );\n\n // try to first send to all integrations, if list populated from BE\n try {\n succesfulLoadedIntersectClientSuppliedIntegrations.forEach((obj) => {\n if (!obj.isFailed || !obj.isFailed()) {\n if (obj[type]) {\n obj[type](rudderElement);\n }\n }\n });\n } catch (err) {\n handleError({ message: `[sendToNative]:${err}` });\n }\n\n // config plane native enabled destinations, still not completely loaded\n // in the page, add the events to a queue and process later\n if (!this.clientIntegrationObjects) {\n logger.debug(\"pushing in replay queue\");\n // new event processing after analytics initialized but integrations not fetched from BE\n this.toBeProcessedByIntegrationArray.push([type, rudderElement]);\n }\n\n // convert integrations object to server identified names, kind of hack now!\n transformToServerNames(rudderElement.message.integrations);\n\n // self analytics process, send to rudder\n enqueue.call(this, rudderElement, type);\n\n logger.debug(`${type} is called `);\n if (callback) {\n callback();\n }\n } catch (error) {\n handleError(error);\n }\n }\n\n /**\n * process options parameter\n *\n * @param {*} rudderElement\n * @param {*} options\n * @memberof Analytics\n */\n processOptionsParam(rudderElement, options) {\n const { type, properties } = rudderElement.message;\n const toplevelElements = [\n \"integrations\",\n \"anonymousId\",\n \"originalTimestamp\",\n ];\n for (const key in options) {\n if (toplevelElements.includes(key)) {\n rudderElement.message[key] = options[key];\n // special handle for ananymousId as transformation expects anonymousId in traits.\n /* if (key === \"anonymousId\") {\n rudderElement.message.context.traits[\"anonymousId\"] = options[key];\n } */\n } else if (key !== \"context\")\n rudderElement.message.context[key] = options[key];\n else {\n for (const k in options[key]) {\n rudderElement.message.context[k] = options[key][k];\n }\n }\n }\n // assign page properties to context.page\n rudderElement.message.context.page =\n type == \"page\"\n ? this.getContextPageProperties(options, properties)\n : this.getContextPageProperties(options);\n }\n\n getPageProperties(properties, options) {\n const defaultPageProperties = getDefaultPageProperties();\n const optionPageProperties = options && options.page ? options.page : {};\n for (const key in defaultPageProperties) {\n if (properties[key] === undefined) {\n properties[key] =\n optionPageProperties[key] || defaultPageProperties[key];\n }\n }\n return properties;\n }\n\n // Assign page properties to context.page if the same property is not provided under context.page\n getContextPageProperties(options, properties) {\n const defaultPageProperties = getDefaultPageProperties();\n const contextPageProperties = options && options.page ? options.page : {};\n for (const key in defaultPageProperties) {\n if (contextPageProperties[key] === undefined) {\n contextPageProperties[key] =\n properties && properties[key]\n ? properties[key]\n : defaultPageProperties[key];\n }\n }\n return contextPageProperties;\n }\n\n /**\n * Clear user information\n *\n * @memberof Analytics\n */\n reset() {\n if (!this.loaded) return;\n this.userId = \"\";\n this.userTraits = {};\n this.groupId = \"\";\n this.groupTraits = {};\n this.storage.clear();\n }\n\n getAnonymousId() {\n // if (!this.loaded) return;\n this.anonymousId = this.storage.getAnonymousId();\n if (!this.anonymousId) {\n this.setAnonymousId();\n }\n return this.anonymousId;\n }\n\n setAnonymousId(anonymousId) {\n // if (!this.loaded) return;\n this.anonymousId = anonymousId || generateUUID();\n this.storage.setAnonymousId(this.anonymousId);\n }\n\n isValidWriteKey(writeKey) {\n if (\n !writeKey ||\n typeof writeKey !== \"string\" ||\n writeKey.trim().length == 0\n ) {\n return false;\n }\n return true;\n }\n\n isValidServerUrl(serverUrl) {\n if (\n !serverUrl ||\n typeof serverUrl !== \"string\" ||\n serverUrl.trim().length == 0\n ) {\n return false;\n }\n return true;\n }\n\n /**\n * Call control pane to get client configs\n *\n * @param {*} writeKey\n * @memberof Analytics\n */\n load(writeKey, serverUrl, options) {\n logger.debug(\"inside load \");\n if (this.loaded) return;\n let configUrl = CONFIG_URL;\n if (!this.isValidWriteKey(writeKey) || !this.isValidServerUrl(serverUrl)) {\n handleError({\n message:\n \"[Analytics] load:: Unable to load due to wrong writeKey or serverUrl\",\n });\n throw Error(\"failed to initialize\");\n }\n if (options && options.logLevel) {\n logger.setLogLevel(options.logLevel);\n }\n if (options && options.integrations) {\n Object.assign(this.loadOnlyIntegrations, options.integrations);\n tranformToRudderNames(this.loadOnlyIntegrations);\n }\n if (options && options.configUrl) {\n configUrl = getUserProvidedConfigUrl(options.configUrl);\n }\n if (options && options.sendAdblockPage) {\n this.sendAdblockPage = true;\n }\n if (options && options.sendAdblockPageOptions) {\n if (typeof options.sendAdblockPageOptions === \"object\") {\n this.sendAdblockPageOptions = options.sendAdblockPageOptions;\n }\n }\n if (options && options.clientSuppliedCallbacks) {\n // convert to rudder recognised method names\n const tranformedCallbackMapping = {};\n Object.keys(this.methodToCallbackMapping).forEach((methodName) => {\n if (this.methodToCallbackMapping.hasOwnProperty(methodName)) {\n if (\n options.clientSuppliedCallbacks[\n this.methodToCallbackMapping[methodName]\n ]\n ) {\n tranformedCallbackMapping[methodName] =\n options.clientSuppliedCallbacks[\n this.methodToCallbackMapping[methodName]\n ];\n }\n }\n });\n Object.assign(this.clientSuppliedCallbacks, tranformedCallbackMapping);\n this.registerCallbacks(true);\n }\n\n this.eventRepository.writeKey = writeKey;\n if (serverUrl) {\n this.eventRepository.url = serverUrl;\n }\n this.initializeUser();\n this.loaded = true;\n if (\n options &&\n options.valTrackingList &&\n options.valTrackingList.push == Array.prototype.push\n ) {\n this.trackValues = options.valTrackingList;\n }\n if (options && options.useAutoTracking) {\n this.autoTrackFeatureEnabled = true;\n if (this.autoTrackFeatureEnabled && !this.autoTrackHandlersRegistered) {\n addDomEventHandlers(this);\n this.autoTrackHandlersRegistered = true;\n logger.debug(\n \"autoTrackHandlersRegistered\",\n this.autoTrackHandlersRegistered\n );\n }\n }\n try {\n getJSONTrimmed(this, configUrl, writeKey, this.processResponse);\n } catch (error) {\n handleError(error);\n if (this.autoTrackFeatureEnabled && !this.autoTrackHandlersRegistered) {\n addDomEventHandlers(this);\n }\n }\n }\n\n ready(callback) {\n if (!this.loaded) return;\n if (typeof callback === \"function\") {\n this.readyCallback = callback;\n return;\n }\n logger.error(\"ready callback is not a function\");\n }\n\n initializeCallbacks() {\n Object.keys(this.methodToCallbackMapping).forEach((methodName) => {\n if (this.methodToCallbackMapping.hasOwnProperty(methodName)) {\n this.on(methodName, () => {});\n }\n });\n }\n\n registerCallbacks(calledFromLoad) {\n if (!calledFromLoad) {\n Object.keys(this.methodToCallbackMapping).forEach((methodName) => {\n if (this.methodToCallbackMapping.hasOwnProperty(methodName)) {\n if (window.rudderanalytics) {\n if (\n typeof window.rudderanalytics[\n this.methodToCallbackMapping[methodName]\n ] === \"function\"\n ) {\n this.clientSuppliedCallbacks[methodName] =\n window.rudderanalytics[\n this.methodToCallbackMapping[methodName]\n ];\n }\n }\n // let callback =\n // ? typeof window.rudderanalytics[\n // this.methodToCallbackMapping[methodName]\n // ] == \"function\"\n // ? window.rudderanalytics[this.methodToCallbackMapping[methodName]]\n // : () => {}\n // : () => {};\n\n // logger.debug(\"registerCallbacks\", methodName, callback);\n\n // this.on(methodName, callback);\n }\n });\n }\n\n Object.keys(this.clientSuppliedCallbacks).forEach((methodName) => {\n if (this.clientSuppliedCallbacks.hasOwnProperty(methodName)) {\n logger.debug(\n \"registerCallbacks\",\n methodName,\n this.clientSuppliedCallbacks[methodName]\n );\n this.on(methodName, this.clientSuppliedCallbacks[methodName]);\n }\n });\n }\n\n sendSampleRequest() {\n ScriptLoader(\n \"ad-block\",\n \"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"\n );\n }\n\n /**\n * parse the given query string into usable Rudder object\n * @param {*} query\n */\n parseQueryString(query) {\n function getTraitsFromQueryObject(qObj) {\n const traits = {};\n Object.keys(qObj).forEach((key) => {\n if (key.substr(0, queryDefaults.trait.length) == queryDefaults.trait) {\n traits[key.substr(queryDefaults.trait.length)] = qObj[key];\n }\n });\n\n return traits;\n }\n\n function getEventPropertiesFromQueryObject(qObj) {\n const props = {};\n Object.keys(qObj).forEach((key) => {\n if (key.substr(0, queryDefaults.prop.length) == queryDefaults.prop) {\n props[key.substr(queryDefaults.prop.length)] = qObj[key];\n }\n });\n\n return props;\n }\n\n const returnObj = {};\n const queryObject = querystring.parse(query);\n const userTraits = getTraitsFromQueryObject(queryObject);\n const eventProps = getEventPropertiesFromQueryObject(queryObject);\n if (queryObject.ajs_uid) {\n returnObj.userId = queryObject.ajs_uid;\n returnObj.traits = userTraits;\n }\n if (queryObject.ajs_aid) {\n returnObj.anonymousId = queryObject.ajs_aid;\n }\n if (queryObject.ajs_event) {\n returnObj.event = queryObject.ajs_event;\n returnObj.properties = eventProps;\n }\n\n return returnObj;\n }\n}\n\nfunction pushDataToAnalyticsArray(argumentsArray, obj) {\n if (obj.anonymousId) {\n if (obj.userId) {\n argumentsArray.unshift(\n [\"setAnonymousId\", obj.anonymousId],\n [\"identify\", obj.userId, obj.traits]\n );\n } else {\n argumentsArray.unshift([\"setAnonymousId\", obj.anonymousId]);\n }\n } else if (obj.userId) {\n argumentsArray.unshift([\"identify\", obj.userId, obj.traits]);\n }\n\n if (obj.event) {\n argumentsArray.push([\"track\", obj.event, obj.properties]);\n }\n}\n\nconst instance = new Analytics();\n\nEmitter(instance);\n\nwindow.addEventListener(\n \"error\",\n (e) => {\n handleError(e, instance);\n },\n true\n);\n\n// if (process.browser) {\n// test for adblocker\n// instance.sendSampleRequest()\n\n// initialize supported callbacks\ninstance.initializeCallbacks();\n\n// register supported callbacks\ninstance.registerCallbacks(false);\nconst eventsPushedAlready =\n !!window.rudderanalytics &&\n window.rudderanalytics.push == Array.prototype.push;\n\nconst argumentsArray = window.rudderanalytics;\n\nwhile (argumentsArray && argumentsArray[0] && argumentsArray[0][0] !== \"load\") {\n argumentsArray.shift();\n}\nif (\n argumentsArray &&\n argumentsArray.length > 0 &&\n argumentsArray[0][0] === \"load\"\n) {\n const method = argumentsArray[0][0];\n argumentsArray[0].shift();\n logger.debug(\"=====from init, calling method:: \", method);\n instance[method](...argumentsArray[0]);\n argumentsArray.shift();\n}\n\n// once loaded, parse querystring of the page url to send events\nconst parsedQueryObject = instance.parseQueryString(window.location.search);\n\npushDataToAnalyticsArray(argumentsArray, parsedQueryObject);\n\nif (eventsPushedAlready && argumentsArray && argumentsArray.length > 0) {\n for (let i = 0; i < argumentsArray.length; i++) {\n instance.toBeProcessedArray.push(argumentsArray[i]);\n }\n\n for (let i = 0; i < instance.toBeProcessedArray.length; i++) {\n const event = [...instance.toBeProcessedArray[i]];\n const method = event[0];\n event.shift();\n logger.debug(\"=====from init, calling method:: \", method);\n instance[method](...event);\n }\n instance.toBeProcessedArray = [];\n}\n// }\n\nconst ready = instance.ready.bind(instance);\nconst identify = instance.identify.bind(instance);\nconst page = instance.page.bind(instance);\nconst track = instance.track.bind(instance);\nconst alias = instance.alias.bind(instance);\nconst group = instance.group.bind(instance);\nconst reset = instance.reset.bind(instance);\nconst load = instance.load.bind(instance);\nconst initialized = (instance.initialized = true);\nconst getAnonymousId = instance.getAnonymousId.bind(instance);\nconst setAnonymousId = instance.setAnonymousId.bind(instance);\n\nexport {\n initialized,\n ready,\n page,\n track,\n load,\n identify,\n reset,\n alias,\n group,\n getAnonymousId,\n setAnonymousId,\n};\n"],"names":["Emitter","obj","key","prototype","mixin","module","on","addEventListener","event","fn","_callbacks","this","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","length","cb","callbacks","i","splice","emit","args","Array","len","slice","listeners","hasListeners","count","callback","err_cb","bail","noop","proxy","err","result","Error","exports","str","replace","pattern","Object","toString","decode","decodeURIComponent","e","trim","charAt","pairs","split","m","parts","exec","port","protocol","location","url","a","document","createElement","href","host","hash","hostname","pathname","search","query","indexOf","isAbsolute","parse","window","LOG_LEVEL","logger","logLevel","toUpperCase","console","log","commonNames","All","GoogleAnalytics","GA","GoogleAds","GOOGLEADS","Braze","BRAZE","Chartbeat","CHARTBEAT","Comscore","COMSCORE","Customerio","FB_PIXEL","GTM","Hotjar","hotjar","HOTJAR","Hubspot","HUBSPOT","Intercom","INTERCOM","Keen","KEEN","Kissmetrics","KISSMETRICS","Lotame","LOTAME","VWO","OPTIMIZELY","Optimizely","FULLSTORY","Fullstory","BUGSNAG","TVSQUARED","clientToServerNames","CUSTOMERIO","FACEBOOK_PIXEL","HS","TVSQUUARED","MessageType","TRACK","PAGE","IDENTIFY","ECommerceEvents","PRODUCTS_SEARCHED","PRODUCT_LIST_VIEWED","PRODUCT_LIST_FILTERED","PROMOTION_VIEWED","PROMOTION_CLICKED","PRODUCT_CLICKED","PRODUCT_VIEWED","PRODUCT_ADDED","PRODUCT_REMOVED","CART_VIEWED","CHECKOUT_STARTED","CHECKOUT_STEP_VIEWED","CHECKOUT_STEP_COMPLETED","PAYMENT_INFO_ENTERED","ORDER_UPDATED","ORDER_COMPLETED","ORDER_REFUNDED","ORDER_CANCELLED","COUPON_ENTERED","COUPON_APPLIED","COUPON_DENIED","COUPON_REMOVED","PRODUCT_ADDED_TO_WISHLIST","PRODUCT_REMOVED_FROM_WISHLIST","WISH_LIST_PRODUCT_ADDED_TO_CART","PRODUCT_SHARED","CART_SHARED","PRODUCT_REVIEWED","CONFIG_URL","replacer","value","generateUUID","d","Date","getTime","performance","now","c","r","Math","random","floor","getCurrentTimeFormatted","toISOString","handleError","error","analyticsInstance","sampleAdBlockTest","errorMessage","message","undefined","Event","target","localName","src","id","includes","page","path","title","sendAdblockPageOptions","getDefaultPageProperties","canonicalUrl","getCanonicalUrl","referrer","hashIndex","getUrl","tag","tags","getElementsByTagName","getAttribute","getRevenue","properties","eventName","revenue","match","total","val","parseFloat","isNaN","getCurrency","tranformToRudderNames","integrationObject","keys","forEach","hasOwnProperty","findAllEnabledDestinations","sdkSuppliedIntegrations","configPlaneEnabledIntegrations","enabledList","allValue","intg","intgValue","_typeof","name","rejectArr","compact","call","type","rejectarray","rejectobject","arr","ret","k","symbolValueOf","bigIntValueOf","ScriptLoader","js","async","parentNode","insertBefore","config","hubId","hubID","hubspotJs","rudderElement","traits","context","traitsValue","getOwnPropertyDescriptor","hubspotkey","userProperties","user_properties","_hsq","eventValue","objProto","owns","toStr","Symbol","valueOf","BigInt","isActualNaN","NON_HOST_TYPES","number","string","base64Regex","hexRegex","is","defined","empty","equal","other","hosted","instance","constructor","nil","undef","isStandardArguments","isOldArguments","array","arraylike","object","callee","isArray","bool","isFinite","Boolean","Number","date","valid","element","HTMLElement","nodeType","alert","infinite","Infinity","decimal","divisibleBy","n","isDividendInfinite","isDivisorInfinite","isNonZeroNumber","integer","maximum","others","TypeError","minimum","nan","even","odd","ge","gt","le","lt","within","start","finish","primitive","setInterval","regexp","base64","test","hex","symbol","bigint","expr","globals","p","unique","props","_","prefixed","map","require$$0","require$$1","toFunction","defaultToFunction","objectToFunction","Function","prop","stripNested","get","re","RegExp","$0","$1","has","ctx","trackingID","sendUserId","dimensions","metrics","contentGroupings","nonInteraction","anonymizeIp","useGoogleAmpClientId","domain","doubleClick","enhancedEcommerce","enhancedLinkAttribution","includeSearch","setAllMappedProps","siteSpeedSampleRate","sampleRate","trackCategorizedPages","trackNamedPages","optimizeContainerId","optimize","resetCustomDimensionsOnPage","enhancedEcommerceLoaded","eventWithCategoryFieldProductScoped","elementTo","pageCalled","dimensionsArray","to","startsWith","_this","from","metricsArray","contentGroupingsArray","GoogleAnalyticsObject","ga","q","l","loadScript","cookieDomain","defaults","allowLinker","useAmpClientId","ecommerce","userId","custom","metricsFunction","payload","params","filters","sorts","self","options","extractCheckoutOptions","products","data","eventCategory","category","orderId","order_id","eventAction","eventLabel","label","campaign","loadEnhancedEcommerce","each","product","productTrack","createProductTrack","enhancedEcommerceTrackProduct","step","option","pushEnhancedEcommerce","affiliation","tax","shipping","coupon","track","product_id","sku","quantity","enhancedEcommerceTrackProductAction","list","promotion_id","creative","position","item","impressionObj","list_id","brand","band","variant","price","getProductPosition","sorters","join","formatValue","campaignName","source","campaignSource","medium","campaignMedium","content","campaignContent","term","campaignKeyword","setCustomDimenionsAndMetrics","currency","eventProperties","pageTitle","pageview","pagePath","pageReferrer","resetCustomDimensions","property","gaplugins","group","round","action","toLowerCase","x","paymentMethod","shippingMethod","siteId","siteID","_ready","hotjarSiteId","h","o","t","j","hj","_hjSettings","hjid","hjsv","appendChild","anonymousId","conversionId","conversionID","pageLoadConversions","clickEventConversions","defaultPageConversion","dataLayer","gtag","conversionData","getConversionData","conversionLabel","sendToValue","transaction_id","send_to","eventTypeConversions","eventTypeConversion","analytics","accountId","settingsTolerance","isSPA","libraryTolerance","useExistingJquery","sendExperimentTrack","sendExperimentIdentify","account_id","settings_tolerance","library_tolerance","use_existing_jquery","_vwo_code","f","getElementById","removeChild","finished","load","b","innerText","onerror","init","settings_timer","setTimeout","setAttribute","styleSheet","cssText","createTextNode","encodeURIComponent","URL","_vwo_settings_timer","experimentViewedIdentify","experimentViewed","expId","variationId","_vwo_exp","comb_n","experimentId","variationName","identify","GoogleTagManager","containerID","w","s","rudderMessage","sendToGTMDatalayer","pageName","pageCategory","appKey","endPoint","dataCenter","dataCenterArr","gender","appboy","ab","User","Genders","FEMALE","MALE","OTHER","P","y","appboyQueue","getUser","getCachedFeed","Feed","getCachedContentCards","ContentCards","initialize","enableLogging","baseUrl","display","automaticallyShowNewInAppMessages","changeUser","openSession","address","avatar","birthday","email","firstname","lastname","phone","JSON","stringify","setAvatarImageUrl","setEmail","setFirstName","setGender","formatGender","setLastName","setPhoneNumber","setCountry","country","setHomeCity","city","setDateOfBirth","getUTCFullYear","getUTCMonth","getUTCDate","setCustomUserAttribute","currencyCode","del","productId","logPurchase","handlePurchase","handleReservedProperties","logCustomEvent","base64map","crypt","rotl","rotr","endian","randomBytes","bytes","bytesToWords","words","wordsToBytes","bytesToHex","hexToBytes","parseInt","substr","bytesToBase64","triplet","base64ToBytes","imod4","pow","charenc","utf8","stringToBytes","bin","unescape","bytesToString","escape","charCodeAt","String","fromCharCode","isBuffer","readFloatLE","isSlowBuffer","_isBuffer","require$$2","md5","encoding","Uint8Array","FF","_ff","GG","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","_blocksize","_digestsize","digestbytes","asBytes","asString","NAME","API_KEY","apiKey","APP_ID","appId","MOBILE_APP_ID","mobileAppId","intercomSettings","app_id","ic","readyState","intercom_code","attachEvent","rawPayload","userHash","user_hash","hideDefaultLauncher","hide_default_launcher","field","companies","company","company_id","companyFields","created_at","user_id","event_name","originalTimestamp","projectID","writeKey","ipAddon","uaAddon","urlAddon","referrerAddon","client","check","KeenTracking","projectId","initKeen","clearInterval","bind","assign","user","getAddOn","extendEvents","recordEvent","addOns","ip_address","input","ip","output","user_agent","ua_string","page_url","referrer_url","keen","addons","dest","sources","multiple","normalize","isFunction","normalizer","defaultNormalize","loop","normalizedKey","temp","child","prefixProperties","_kmq","_kmk","_kms","u","isEnvMobile","navigator","userAgent","toUnixTimestamp","nestedObj","flattenedObj","flatten","safe","extend","opts","delimiter","maxDepth","currentDepth","prev","isarray","isobject","newKey","clean","timestamp","prefix","iterator","_t","_d","KM","set","previousId","groupId","groupTraits","CustomerIO","_cio","concat","body","interval","_sf_async_config","useCanonical","uid","isVideo","video","sendNameAndCategoryAsTitle","subscriberEngagementKeys","replayEvents","failed","isFirstPageCallMade","loadConfig","isLoaded","pSUPERFLY","virtualPage","initAfterPage","author","sections","authors","_cbq","script","_isReady","then","time","Promise","resolve","_this2","pause","c2ID","comScoreBeaconParam","comScoreParams","beacon","mapComscoreParams","_comscore","el","comScoreBeaconParamsMap","c1","c2","hop","strCharAt","index","indexKeys","pred","results","isArrayLike","objectKeys","objToString","isNumber","arrayEach","baseEach","ks","collection","FacebookPixel","blacklistPiiProperties","categoryToContent","pixelId","eventsToEvents","eventCustomProperties","valueFieldIdentifier","advancedMapping","traitKeyToExternalId","legacyConversionPixelId","userIdAsPixelId","whitelistPiiProperties","_fbq","fbq","callMethod","queue","loaded","disablePushState","allowDuplicatePageViews","version","formatRevenue","buildPayLoad","standardTo","legacyTo","standard","legacy","reduce","filtered","eventID","messageId","contents","customProperties","contentIds","contentType","merge","content_ids","content_type","getContentType","useValue","content_name","product_name","content_category","item_price","pId","num_items","search_string","contentCategory","defaultValue","mappedTo","mapped","obj1","obj2","res","propObj1","propObj2","toFixed","isStandardEvent","dateFields","defaultPiiProperties","customPiiProperties","configuration","blacklistPiiHash","toISOTring","sha256","isPropertyPii","isProperyWhiteListed","CryptoJS","create","F","subtype","C","C_lib","lib","Base","overrides","mixIn","$super","propertyName","clone","WordArray","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","ceil","nBytes","rcache","m_w","m_z","mask","_r","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","max","_minBufferSize","nBytesReady","min","offset","_doProcessBlock","processedWords","C_algo","Hasher","cfg","_doReset","update","messageUpdate","finalize","_doFinalize","_createHelper","hasher","_createHmacHelper","HMAC","algo","Base64","_map","base64Chars","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","bits1","bits2","parseLoop","T","abs","sin","MD5","_hash","M","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","HmacMD5","W","SHA1","HmacSHA1","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","EvpKDF","keySize","iterations","compute","password","salt","derivedKey","derivedKeyWords","block","Cipher","C_mode","BlockCipherMode","CBC","Pkcs7","CipherParams","OpenSSLFormatter","SerializableCipher","OpenSSLKdf","PasswordBasedCipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","_key","process","dataUpdate","ivSize","selectCipherStrategy","cipher","encrypt","decrypt","ciphertext","StreamCipher","mode","iv","Encryptor","Decryptor","_cipher","_iv","xorBlock","_prevBlock","processBlock","encryptBlock","thisBlock","decryptBlock","pad","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","BlockCipher","modeCreator","_mode","__creator","finalProcessedBlocks","cipherParams","formatter","format","OpenSSL","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","_parse","kdf","execute","derivedParams","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","x2","x4","x8","RCON","AES","_nRounds","_keyPriorReset","keyWords","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","_doCryptBlock","nRounds","s0","s1","s2","s3","t0","t1","t2","t3","copy","flags","multiline","global","ignoreCase","ms","plural","long","short","namespace","disabled","enabled","curr","prevTime","diff","useColors","color","selectColor","coerce","formatters","formatArgs","logFn","stack","enable","namespaces","save","skips","names","prevColor","colors","storage","debug","humanize","lastC","removeItem","documentElement","style","firebug","exception","table","chrome","local","localStorage","localstorage","v","all","encode","maxage","expires","toUTCString","samesite","secure","cookie","pair","toDrop","resultsLength","isObject","isPlainObject","shallowCombiner","deepCombiner","defaultsDeep","defaultsWith","combiner","drop","rest","objectTypes","freeExports","root","freeGlobal","runInContext","SyntaxError","nativeJSON","objectProto","getClass","isProperty","attempt","func","errorFunc","isExtended","isSupported","serialized","stringifySupported","toJSON","parseSupported","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","charIndexBuggy","forOwn","Properties","dontEnums","size","isConstructor","hasProperty","Escapes","toPaddedString","width","serializeDate","getData","year","month","hours","minutes","seconds","milliseconds","Months","getDay","dateToJSON","nativeStringify","filter","nativeToJSON","escapeChar","character","charCode","escaped","reEscape","quote","lastIndex","whitespace","className","serialize","indentation","pop","Index","Source","Unescapes","abort","lex","begin","isSigned","walk","hasMembers","previousJSON","JSON3","isRestored","levels","last","Cookie","_options","topDomain","remove","store","win","doc","defaultVal","clear","transact","transactionFn","getAll","deserialize","isLocalStorageNameSupported","setItem","getItem","addBehavior","storageOwner","storageContainer","ActiveXObject","open","write","close","frames","withIEStorage","storeFunction","unshift","forbiddenCharsRegex","ieKeyFix","removeAttribute","attributes","XMLDocument","attr","testKey","Store","substring","encryptValue","decryptValue","lotameStorage","Storage","LotameStorage","bcpUrlSettingsPixel","bcpUrlSettingsIframe","dspUrlSettingsPixel","dspUrlSettingsIframe","mappings","mapping","LOTAME_SYNCH_CALLBACK","height","image","iframe","currentTime","urlSettings","dspUrl","compileUrl","dspUrlTemplate","addPixel","addIFrame","setLotameSynchTime","methodToCallbackMapping","syncPixel","destination","replaceKey","regex","bcpUrl","_this3","bcpUrlTemplate","isPixelToBeSynched","lastSynchedTime","getLotameSynchTime","referrerOverride","optimizelyEffectiveReferrer","sendDataToRudder","campaignState","experiment","variation","integrations","audiences","audiencesMap","audience","audienceIds","sort","audienceNames","values","campaignId","experimentName","audienceId","audienceName","isInCampaignHoldback","sendExperimentTrackAsNonInteractive","customCampaignProperties","rudderProp","optimizelyProp","revenueOnlyOnOrderCompleted","customExperimentProperties","initOptimizelyIntegration","sendCampaignData","newActiveCampaign","state","optimizely","getCampaignStates","isActive","checkReferrer","getRedirectInfo","activeCampaigns","handler","registerCurrentlyActiveCampaigns","Bugsnag","releaseStage","setIntervalHandler","initBugsnagClient","bugsnag","bugsnagClient","traitsFinal","notify","camelCase","pascalCase","toLocaleUpperCase","toLocaleLowerCase","isLastCharLower","isLastCharUpper","isLastLastCharUpper","preserveCamelCase","p1","HubSpot","FBPixel","fs_org","fs_debug_mode","_fs_debug","_fs_host","_fs_script","_fs_org","_fs_namespace","g","_api","crossOrigin","setUserVars","shutdown","restart","consent","identifyAccount","acctId","clearUserCookie","_w","FS","getFSProperties","FS_properties","camelCaseField","fieldName","typeSuffix","camelcase","_tvq","isReady","rev","brandId","clientId","eventWhiteList","customMetrics","productType","whitelist","wl","session","prod","promo","cm","setCustomVariable","RudderApp","build","RudderLibraryInfo","RudderOSInfo","RudderScreenInfo","density","RudderContext","app","library","os","screen","devicePixelRatio","locale","language","browserLanguage","device","network","RudderMessage","channel","messageType","checkForKey","SCREEN","RudderElement","rudderProperty","rudderUserProperty","RudderElementBuilder","inputRudderProperty","rudderPropertyBuilder","inputRudderUserProperty","rudderUserPropertyBuilder","eventType","setUserId","setType","setEventName","setProperty","setUserProperty","getRandomValues","crypto","msCrypto","rnds8","rnds","byteToHex","_nodeId","_clockseq","buf","bth","_lastMSecs","_lastNSecs","node","clockseq","seedBytes","rng","msecs","nsecs","dt","tl","tmh","bytesToUuid","ii","uuid","v4","v1","inMemoryStore","isSupportedNatively","defaultEngine","inMemoryEngine","optionalEngine","engine","originalEngine","compoundKey","_createValidKey","json","quotaExceeded","code","isQuotaExceeded","_swapEngine","getOriginalEngine","defaultClock","clearTimeout","clock","Schedule","tasks","nextId","run","task","timeout","_handle","cancel","cancelAll","setClock","newClock","resetClock","fmt","disable","Queue","maxItems","maxAttempts","backoff","MIN_RETRY_DELAY","minRetryDelay","MAX_RETRY_DELAY","maxRetryDelay","FACTOR","backoffFactor","JITTER","backoffJitter","timeouts","ACK_TIMER","RECLAIM_TIMER","RECLAIM_TIMEOUT","RECLAIM_WAIT","IN_PROGRESS","QUEUE","RECLAIM_START","RECLAIM_END","ACK","_schedule","_processId","_store","_ack","_checkReclaim","_processHead","_running","stop","shouldRetry","attemptNumber","getDelay","rand","deviation","toPrecision","addItem","_enqueue","requeue","entry","inProgress","toRun","enqueue","done","inProgressSize","shift","_reclaim","tryReclaim","findOtherQueues","our","their","RudderPayload","batch","queueOptions","eventRepository","eventsBuffer","batchSize","payloadQueue","sentAt","processQueueElement","headers","repo","eventsPayload","xhr","XMLHttpRequest","setRequestHeader","btoa","onreadystatechange","status","send","queueFn","ontimeout","statusText","getElementContent","Authorization","AnonymousId","addDomEventHandlers","rudderanalytics","srcElement","isTextNode","shouldTrackDomEvent","formValues","tagName","elements","formElement","shouldTrackElement","isValueToBeTrackedFromTrackingList","trackValues","getElementsByName","checked","targetElementList","curEl","getClassName","isExplicitNoTrack","isTag","elementsJson","isValueToBeTracked","elem","classes","tag_name","attrLength","field_value","nthChild","nthOfType","currentElem","previousElementSibling","nth_child","nth_of_type","getPropertiesFromElement","elementText","text","childNodes","Node","TEXT_NODE","textValue","nodeValue","getText","event_type","el_attr_href","el_text","form_values","trackWindowEvent","register_event","useCapture","isElementNode","baseVal","includeList","elAttributesLength","previousSibling","queryDefaults","EventRepository","autoTrackHandlersRegistered","autoTrackFeatureEnabled","initialized","clientIntegrations","loadOnlyIntegrations","clientIntegrationObjects","successfullyLoadedIntegration","failedToBeLoadedIntegration","toBeProcessedArray","toBeProcessedByIntegrationArray","sendAdblockPage","clientSuppliedCallbacks","readyCallback","executeReadyCallback","getUserId","userTraits","getUserTraits","getGroupId","getGroupTraits","getAnonymousId","setAnonymousId","setGroupId","setUserTraits","setGroupTraits","response","useAutoTracking","destinations","destinationDefinition","useNativeSDK","intgArray","intgInstance","intgClass","isInitialized","after","methodName","succesfulLoadedIntersectClientSuppliedIntegrations","isFailed","sendSampleRequest","processPage","processTrack","processIdentify","processAndSendDataToDestinations","getPageProperties","trackPage","trackEvent","identifyUser","processOptionsParam","toplevelElements","getContextPageProperties","defaultPageProperties","optionPageProperties","contextPageProperties","serverUrl","configUrl","isValidWriteKey","isValidServerUrl","getUserProvidedConfigUrl","tranformedCallbackMapping","registerCallbacks","initializeUser","valTrackingList","cb_","onload","responseText","getJSONTrimmed","processResponse","_this4","calledFromLoad","_this5","qObj","returnObj","queryObject","querystring","eventProps","getEventPropertiesFromQueryObject","ajs_uid","ajs_aid","ajs_event","initializeCallbacks","eventsPushedAlready","argumentsArray","method","pushDataToAnalyticsArray","parseQueryString","ready","alias"],"mappings":"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"} \ No newline at end of file diff --git a/dist/rudder-sdk-js/index.js b/dist/rudder-sdk-js/index.js index 61e5819190..3e77d19033 100644 --- a/dist/rudder-sdk-js/index.js +++ b/dist/rudder-sdk-js/index.js @@ -670,7 +670,8 @@ Optimizely: "OPTIMIZELY", FULLSTORY: "FULLSTORY", Fullstory: "FULLSTORY", - BUGSNAG: "BUGSNAG" + BUGSNAG: "BUGSNAG", + TVSQUARED: "TVSQUARED" }; // from client native integration name to server identified display name @@ -693,7 +694,8 @@ LOTAME: "Lotame", VWO: "VWO", OPTIMIZELY: "Optimizely", - FULLSTORY: "Fullstory" + FULLSTORY: "Fullstory", + TVSQUUARED: "TVSquared" }; // Message Type enumeration @@ -735,7 +737,7 @@ PRODUCT_REVIEWED: "Product Reviewed" }; // Enumeration for integrations supported - var CONFIG_URL = "https://api.rudderlabs.com/sourceConfig/?p=npm&v=1.0.10"; + var CONFIG_URL = "https://api.rudderlabs.com/sourceConfig/?p=npm&v=1.0.11"; var MAX_WAIT_FOR_INTEGRATION_LOAD = 10000; var INTEGRATION_LOAD_CHECK_INTERVAL = 1000; /* module.exports = { @@ -12693,6 +12695,123 @@ return Fullstory; }(); + var TVSquared = /*#__PURE__*/function () { + function TVSquared(config) { + _classCallCheck(this, TVSquared); + + this.isLoaded = function () { + logger.debug("in TVSqaured isLoaded"); + return !!(window._tvq && window._tvq.push !== Array.prototype.push); + }; + + this.isReady = function () { + logger.debug("in TVSqaured isReady"); + return !!(window._tvq && window._tvq.push !== Array.prototype.push); + }; + + this.page = function () { + window._tvq.push(["trackPageView"]); + }; + + this.formatRevenue = function (revenue) { + var rev = revenue; + rev = parseFloat(rev.toString().replace(/^[^\d.]*/, "")); + return rev; + }; + + this.brandId = config.brandId; + this.clientId = config.clientId; + this.eventWhiteList = config.eventWhiteList || []; + this.customMetrics = config.customMetrics || []; + this.name = "TVSquared"; + } + + _createClass(TVSquared, [{ + key: "init", + value: function init() { + logger.debug("===in init TVSquared==="); + window._tvq = window._tvq || []; + var url = document.location.protocol === "https:" ? "https://" : "http://"; + url += "collector-".concat(this.clientId, ".tvsquared.com/"); + + window._tvq.push(["setSiteId", this.brandId]); + + window._tvq.push(["setTrackerUrl", "".concat(url, "tv2track.php")]); + + ScriptLoader("TVSquared-integration", "".concat(url, "tv2track.js")); + } + }, { + key: "track", + value: function track(rudderElement) { + var _rudderElement$messag = rudderElement.message, + event = _rudderElement$messag.event, + userId = _rudderElement$messag.userId, + anonymousId = _rudderElement$messag.anonymousId; + var _rudderElement$messag2 = rudderElement.message.properties, + revenue = _rudderElement$messag2.revenue, + productType = _rudderElement$messag2.productType, + category = _rudderElement$messag2.category, + order_id = _rudderElement$messag2.order_id, + promotion_id = _rudderElement$messag2.promotion_id; + var i; + var j; + var whitelist = this.eventWhiteList.slice(); + whitelist = whitelist.filter(function (wl) { + return wl.event !== ""; + }); + + for (i = 0; i < whitelist.length; i += 1) { + if (event.toUpperCase() === whitelist[i].event.toUpperCase()) { + break; + } + + if (i === whitelist.length - 1) { + return; + } + } + + var session = { + user: userId || anonymousId || "" + }; + var action = { + rev: revenue ? this.formatRevenue(revenue) : "", + prod: category || productType || "", + id: order_id || "", + promo: promotion_id || "" + }; + var customMetrics = this.customMetrics.slice(); + customMetrics = customMetrics.filter(function (cm) { + return cm.propertyName !== ""; + }); + + if (customMetrics.length) { + for (j = 0; j < customMetrics.length; j += 1) { + var key = customMetrics[j].propertyName; + var value = rudderElement.message.properties[key]; + + if (value) { + action[key] = value; + } + } + } + + window._tvq.push([function () { + this.setCustomVariable(5, "session", JSON.stringify(session), "visit"); + }]); + + if (event.toUpperCase() !== "RESPONSE") { + window._tvq.push([function () { + this.setCustomVariable(5, event, JSON.stringify(action), "page"); + }]); + + window._tvq.push(["trackPageView"]); + } + } + }]); + + return TVSquared; + }(); + // (config-plan name, native destination.name , exported integration name(this one below)) var integrations = { @@ -12713,7 +12832,8 @@ LOTAME: Lotame, OPTIMIZELY: Optimizely, BUGSNAG: Bugsnag, - FULLSTORY: Fullstory + FULLSTORY: Fullstory, + TVSQUARED: TVSquared }; // Application class @@ -12723,7 +12843,7 @@ this.build = "1.0.0"; this.name = "RudderLabs JavaScript SDK"; this.namespace = "com.rudderlabs.javascript"; - this.version = "1.0.10"; + this.version = "1.0.11"; }; // Library information class @@ -12731,7 +12851,7 @@ _classCallCheck(this, RudderLibraryInfo); this.name = "RudderLabs JavaScript SDK"; - this.version = "1.0.10"; + this.version = "1.0.11"; }; // Operating System information class diff --git a/dist/rudder-sdk-js/package.json b/dist/rudder-sdk-js/package.json index 9087a99fdf..b38cc49483 100644 --- a/dist/rudder-sdk-js/package.json +++ b/dist/rudder-sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "rudder-sdk-js", - "version": "1.0.10", + "version": "1.0.11", "description": "Rudder Javascript SDK", "main": "index.js", "types": "index.d.ts", diff --git a/integrations/TVSquared/browser.js b/integrations/TVSquared/browser.js new file mode 100644 index 0000000000..db94117a14 --- /dev/null +++ b/integrations/TVSquared/browser.js @@ -0,0 +1,104 @@ +/* eslint-disable camelcase */ +/* eslint-disable no-underscore-dangle */ +import ScriptLoader from "../ScriptLoader"; +import logger from "../../utils/logUtil"; + +class TVSquared { + constructor(config) { + this.brandId = config.brandId; + this.clientId = config.clientId; + this.eventWhiteList = config.eventWhiteList || []; + this.customMetrics = config.customMetrics || []; + this.name = "TVSquared"; + } + + init() { + logger.debug("===in init TVSquared==="); + window._tvq = window._tvq || []; + let url = document.location.protocol === "https:" ? "https://" : "http://"; + url += `collector-${this.clientId}.tvsquared.com/`; + window._tvq.push(["setSiteId", this.brandId]); + window._tvq.push(["setTrackerUrl", `${url}tv2track.php`]); + ScriptLoader("TVSquared-integration", `${url}tv2track.js`); + } + + isLoaded = () => { + logger.debug("in TVSqaured isLoaded"); + return !!(window._tvq && window._tvq.push !== Array.prototype.push); + }; + + isReady = () => { + logger.debug("in TVSqaured isReady"); + return !!(window._tvq && window._tvq.push !== Array.prototype.push); + }; + + page = () => { + window._tvq.push(["trackPageView"]); + }; + + track(rudderElement) { + const { event, userId, anonymousId } = rudderElement.message; + const { + revenue, + productType, + category, + order_id, + promotion_id, + } = rudderElement.message.properties; + let i; + let j; + let whitelist = this.eventWhiteList.slice(); + whitelist = whitelist.filter((wl) => { + return wl.event !== ""; + }); + for (i = 0; i < whitelist.length; i += 1) { + if (event.toUpperCase() === whitelist[i].event.toUpperCase()) { + break; + } + if (i === whitelist.length - 1) { + return; + } + } + + const session = { user: userId || anonymousId || "" }; + const action = { + rev: revenue ? this.formatRevenue(revenue) : "", + prod: category || productType || "", + id: order_id || "", + promo: promotion_id || "", + }; + let customMetrics = this.customMetrics.slice(); + customMetrics = customMetrics.filter((cm) => { + return cm.propertyName !== ""; + }); + if (customMetrics.length) { + for (j = 0; j < customMetrics.length; j += 1) { + const key = customMetrics[j].propertyName; + const value = rudderElement.message.properties[key]; + if (value) { + action[key] = value; + } + } + } + window._tvq.push([ + function () { + this.setCustomVariable(5, "session", JSON.stringify(session), "visit"); + }, + ]); + if (event.toUpperCase() !== "RESPONSE") { + window._tvq.push([ + function () { + this.setCustomVariable(5, event, JSON.stringify(action), "page"); + }, + ]); + window._tvq.push(["trackPageView"]); + } + }; + + formatRevenue = (revenue) => { + let rev = revenue; + rev = parseFloat(rev.toString().replace(/^[^\d.]*/, "")); + return rev; + }; +} +export default TVSquared; diff --git a/integrations/TVSquared/index.js b/integrations/TVSquared/index.js new file mode 100644 index 0000000000..5af5065035 --- /dev/null +++ b/integrations/TVSquared/index.js @@ -0,0 +1,3 @@ +import TVSquared from "./browser"; + +export default TVSquared; diff --git a/integrations/client_server_name.js b/integrations/client_server_name.js index 18e07e319d..2babefcd23 100644 --- a/integrations/client_server_name.js +++ b/integrations/client_server_name.js @@ -19,6 +19,7 @@ const clientToServerNames = { VWO: "VWO", OPTIMIZELY: "Optimizely", FULLSTORY: "Fullstory", + TVSQUUARED: "TVSquared" }; export { clientToServerNames }; diff --git a/integrations/index.js b/integrations/index.js index 39c209f4fe..83d43e5c69 100644 --- a/integrations/index.js +++ b/integrations/index.js @@ -16,6 +16,7 @@ import * as Lotame from "./Lotame"; import * as Optimizely from "./Optimizely"; import * as Bugsnag from "./Bugsnag"; import * as Fullstory from "./Fullstory"; +import * as TVSquared from "./TVSquared"; // the key names should match the destination.name value to keep partity everywhere // (config-plan name, native destination.name , exported integration name(this one below)) @@ -39,6 +40,7 @@ const integrations = { OPTIMIZELY: Optimizely.default, BUGSNAG: Bugsnag.default, FULLSTORY: Fullstory.default, + TVSQUARED: TVSquared.default, }; export { integrations }; diff --git a/integrations/integration_cname.js b/integrations/integration_cname.js index 9a6f0e2f93..70067a3677 100644 --- a/integrations/integration_cname.js +++ b/integrations/integration_cname.js @@ -42,6 +42,7 @@ const commonNames = { FULLSTORY: "FULLSTORY", Fullstory: "FULLSTORY", BUGSNAG: "BUGSNAG", + TVSQUARED: "TVSQUARED", }; export { commonNames }; diff --git a/package.json b/package.json index 59c992a05b..5a25e7b62a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-analytics", - "version": "1.1.4", + "version": "1.1.5", "description": "", "main": "./dist/browser.min.js", "size-limit": [