diff --git a/dist/browser.js b/dist/browser.js index f305c023b0..7cc48cc59f 100644 --- a/dist/browser.js +++ b/dist/browser.js @@ -7793,15 +7793,8 @@ var rudderanalytics = (function (exports) { var standardTo; var legacyTo; standardTo = standard.reduce(function (filtered, standard) { - var key; - Object.keys(standard).forEach(function (k) { - if (k !== "from") { - key = k; - } - }); - if (standard.from === event) { - filtered.push(key); + filtered.push(standard.to); } return filtered; diff --git a/dist/rudder-analytics-map.min.js b/dist/rudder-analytics-map.min.js index 386fc8dcdf..86a71fc6a0 100644 --- a/dist/rudder-analytics-map.min.js +++ b/dist/rudder-analytics-map.min.js @@ -1,2 +1,2 @@ -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 n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1?t:t+e:window.location.href,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("canonical"===e.getAttribute("rel"))return e.getAttribute("href")}function I(e,t){var n=e.revenue;return!n&&t&&t.match(/^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i)&&(n=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}}(n)}function _(e){Object.keys(e).forEach((function(t){e.hasOwnProperty(t)&&(h[t]&&(e[h[t]]=e[t]),"All"!=t&&null!=h[t]&&h[t]!=t&&delete e[t])}))}function E(e,n){var r=[];if(!n||0==n.length)return r;var i=!0;return"string"==typeof n[0]?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t]&&0==e[t]&&(n=!1),n&&r.push(t)}else null!=e[t]&&1==e[t]&&r.push(t)})),r):"object"==t(n[0])?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t.name]&&0==e[t.name]&&(n=!1),n&&r.push(t)}else null!=e[t.name]&&1==e[t.name]&&r.push(t)})),r):void 0}var A={TRACK:"track",PAGE:"page",IDENTIFY:"identify"},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);var n=document.createElement("script");n.src=t,n.async=!0,n.type="text/javascript",n.id=e;var r=document.getElementsByTagName("script")[0];p("==script==",r),r.parentNode.insertBefore(n,r)}var O=function(){function e(t){n(this,e),this.hubId=t.hubID,this.name="HS"}return i(e,[{key:"init",value:function(){T("hubspot-integration","http://js.hs-scripts.com/"+this.hubId+".js"),p("===in init HS===")}},{key:"identify",value:function(e){p("in HubspotAnalyticsManager identify");var n=e.message.context.traits,r={};for(var i in n)if(Object.getOwnPropertyDescriptor(n,i)&&n[i]){var o=i;"[object Date]"==toString.call(n[i])?r[o]=n[i].getTime():r[o]=n[i]}var s=e.message.context.user_properties;for(var a in s){if(Object.getOwnPropertyDescriptor(s,a)&&s[a])r[a]=s[a]}(p(r),void 0!==("undefined"==typeof window?"undefined":t(window)))&&(window._hsq=window._hsq||[]).push(["identify",r])}},{key:"track",value:function(e){p("in HubspotAnalyticsManager track");var t=window._hsq=window._hsq||[],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:function(e){p("in HubspotAnalyticsManager page");var 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:function(){return p("in hubspot isLoaded"),!(!window._hsq||window._hsq.push===Array.prototype.push)}},{key:"isReady",value:function(){return!(!window._hsq||window._hsq.push===Array.prototype.push)}}]),e}(),S=Object.prototype.toString;var P=function e(t){var 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 null===e?"null":void 0===e?"undefined":e!=e?"nan":e&&1===e.nodeType?"element":null!=(t=e)&&(t._isBuffer||t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t))?"buffer":typeof(e=e.valueOf?e.valueOf():Object.prototype.valueOf.apply(e));var t}(t);if("object"===n){var r={};for(var i in t)t.hasOwnProperty(i)&&(r[i]=e(t[i]));return r}if("array"===n){r=new Array(t.length);for(var o=0,s=t.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 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=31},t.storage="undefined"!=typeof chrome&&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())}))),F=(q.log,q.formatArgs,q.save,q.load,q.useColors,q.storage,q.colors,q("cookie")),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||{};var r=z(e)+"="+z(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i1)))/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)}var A=t.stringify;t.stringify=function(e,t,n){var r=u.prototype.toJSON;u.prototype.toJSON=E;var i=A(e,t,n);return u.prototype.toJSON=r,i}}else{var C=function(e){var t=e.charCodeAt(0),n=k[t];return n||"\\u00"+I(2,t.toString(16))},T=/[\x00-\x1f\x22\x5c]/g,O=function(e){return T.lastIndex=0,'"'+(T.test(e)?e.replace(T,C):e)+'"'},S=function(e,t,n,r,i,o,s){var a,c,d,p,f,g,m,v,b;if(y((function(){a=t[e]})),"object"==typeof a&&a&&(a.getUTCFullYear&&"[object Date]"==h.call(a)&&a.toJSON===u.prototype.toJSON?a=_(a):"function"==typeof a.toJSON&&(a=a.toJSON(e))),n&&(a=n.call(t,e,a)),null==a)return void 0===a?a:"null";switch("object"==(c=typeof a)&&(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("object"==typeof a){for(m=s.length;m--;)if(s[m]===a)throw l();if(s.push(a),p=[],v=o,o+=i,"[object Array]"==d){for(g=0,m=a.length;g0)for(r>10&&(r=10),i="";i.length=48&&i<=57||i>=97&&i<=102||i>=65&&i<=70||D();e+=R("0x"+o.slice(t,P));break;default:D()}else{if(34==i)break;for(i=o.charCodeAt(P),t=P;i>=32&&92!=i&&34!=i;)i=o.charCodeAt(++P);e+=o.slice(t,P)}if(34==o.charCodeAt(P))return P++,e;D();default:if(t=P,45==i&&(r=!0,i=o.charCodeAt(++P)),i>=48&&i<=57){for(48==i&&((i=o.charCodeAt(P+1))>=48&&i<=57)&&D(),r=!1;P=48&&i<=57);P++);if(46==o.charCodeAt(P)){for(n=++P;n57);n++);n==P&&D(),P=n}if(101==(i=o.charCodeAt(P))||69==i){for(43!=(i=o.charCodeAt(++P))&&45!=i||P++,n=P;n57);n++);n==P&&D(),P=n}return+o.slice(t,P)}r&&D();var a=o.slice(P,P+4);if("true"==a)return P+=4,!0;if("fals"==a&&101==o.charCodeAt(P+4))return P+=5,!1;if("null"==a)return P+=4,null;D()}return"$"},L=function(e){var t,n;if("$"==e&&D(),"string"==typeof e){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&&"string"==typeof e&&"@"==(b?e.charAt(0):e[0])&&":"==U()||D(),t[e.slice(1)]=L(U());return t}D()}return e},M=function(e,t,n){var r=N(e,t,n);void 0===r?delete e[t]:e[t]=r},N=function(e,t,n){var r,i=e[t];if("object"==typeof i&&i)if("[object Array]"==h.call(i))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){var n,r;return P=0,x=""+e,n=L(U()),"$"!=U()&&D(),P=x=null,t&&"[object Function]"==h.call(t)?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{var a=i.JSON,u=i.JSON3,c=!1,l=s(i,i.JSON3={noConflict:function(){return c||(c=!0,i.JSON=a,i.JSON3=u,a=u=null),l}});i.JSON={parse:l.parse,stringify:l.stringify}}}).call(x)})),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){var t=document.createElement("a");return t.href=e,{href:t.href,host:t.host||location.host,port:"0"===t.port||""===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 0==e.indexOf("//")||!!~e.indexOf("://")},t.isRelative=function(e){return!t.isAbsolute(e)},t.isCrossDomain=function(e){e=t.parse(e);var n=t.parse(window.location.href);return e.hostname!==n.hostname||e.port!==n.port||e.protocol!==n.protocol}})),le=(ce.parse,ce.isAbsolute,ce.isRelative,ce.isCrossDomain,R((function(e,t){(t=e.exports=function(e){function r(){}function o(){var e=o,r=+new Date,s=r-(n||r);e.diff=s,e.prev=n,e.curr=r,n=r,null==e.useColors&&(e.useColors=t.useColors()),null==e.color&&e.useColors&&(e.color=i());var a=Array.prototype.slice.call(arguments);a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&(a=["%o"].concat(a));var u=0;a[0]=a[0].replace(/%([a-z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=t.formatters[r];if("function"==typeof i){var o=a[u];n=i.call(e,o),a.splice(u,1),u--}return n})),"function"==typeof t.formatArgs&&(a=t.formatArgs.apply(e,a));var c=o.log||t.log||console.log.bind(console);c.apply(e,a)}r.enabled=!1,o.enabled=!0;var 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(var n=(e||"").split(/[\s,]+/),r=n.length,i=0;i=31},t.storage="undefined"!=typeof chrome&&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())}))),pe=(de.log,de.formatArgs,de.save,de.load,de.useColors,de.storage,de.colors,de("cookie")),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||{};var r=me(e)+"="+me(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i=0;--o)i.push(t.slice(o).join("."));return i},r.cookie=fe,t=e.exports=r})),we=new(function(){function e(t){n(this,e),this._options={},this.options(t)}return i(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="."+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:function(e,t){try{return t=ue.stringify(t),K(e,t,P(this._options)),!0}catch(e){return!1}}},{key:"get",value:function(e){var t;try{return t=(t=K(e))?ue.parse(t):null}catch(e){return t||null}}},{key:"remove",value:function(e){try{return K(e,null,P(this._options)),!0}catch(e){return!1}}}]),e}())({}),ke=function(){var e,t={},n="undefined"!=typeof window?window:x,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){null==r&&(r=n,n=null),null==n&&(n={});var i=t.get(e,n);r(i),t.set(e,i)},t.getAll=function(){var 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("string"==typeof e)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){var 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(var r=0;rdocument.w=window<\/script>'),o.close(),i=o.w.frames[0].document,e=i.createElement("div")}catch(t){e=r.createElement("div"),i=r.body}var s=function(n){return function(){var r=Array.prototype.slice.call(arguments,0);r.unshift(e),i.appendChild(e),e.addBehavior("#default#userData"),e.load("localStorage");var o=n.apply(t,r);return i.removeChild(e),o}},a=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g"),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);var 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){var t=e.XMLDocument.documentElement.attributes;e.load("localStorage");for(var 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{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}(),Ie=new(function(){function e(t){n(this,e),this._options={},this.enabled=!1,this.options(t)}return i(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;se(e,{enabled:!0}),this.enabled=e.enabled&&ke.enabled,this._options=e}},{key:"set",value:function(e,t){return!!this.enabled&&ke.set(e,t)}},{key:"get",value:function(e){return this.enabled?ke.get(e):null}},{key:"remove",value:function(e){return!!this.enabled&&ke.remove(e)}}]),e}())({}),_e="rl_user_id",Ee="rl_trait",Ae="rl_anonymous_id",Ce="rl_group_id",Te="rl_group_trait",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:function(e,t){this.storage.set(e,t)}},{key:"setUserId",value:function(e){"string"==typeof e?this.storage.set(_e,e):f("[Storage] setUserId:: userId should be string")}},{key:"setUserTraits",value:function(e){this.storage.set(Ee,e)}},{key:"setGroupId",value:function(e){"string"==typeof e?this.storage.set(Ce,e):f("[Storage] setGroupId:: groupId should be string")}},{key:"setGroupTraits",value:function(e){this.storage.set(Te,e)}},{key:"setAnonymousId",value:function(e){"string"==typeof e?this.storage.set(Ae,e):f("[Storage] setAnonymousId:: anonymousId should be string")}},{key:"getItem",value:function(e){return this.storage.get(e)}},{key:"getUserId",value:function(){return this.storage.get(_e)}},{key:"getUserTraits",value:function(){return this.storage.get(Ee)}},{key:"getGroupId",value:function(){return this.storage.get(Ce)}},{key:"getGroupTraits",value:function(){return this.storage.get(Te)}},{key:"getAnonymousId",value:function(){return this.storage.get(Ae)}},{key:"removeItem",value:function(e){return this.storage.remove(e)}},{key:"clear",value:function(){this.storage.remove(_e),this.storage.remove(Ee)}}]),e}()),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(){!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});var e=Oe.getUserId();e&&""!==e&&ga("rudder_ga.set","userId",e),p("===in init GA===")}},{key:"identify",value:function(e){var t=""!==e.message.userId?e.message.userId:e.message.anonymousId;ga("rudder_ga.set","userId",t),p("in GoogleAnalyticsManager identify")}},{key:"track",value:function(e){var t=e.message.event,n=e.message.event,r=e.message.event,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:function(e){p("in GoogleAnalyticsManager page");var t=e.message.properties&&e.message.properties.path?e.message.properties.path:void 0,n=e.message.properties&&e.message.properties.title?e.message.properties.title:void 0,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:function(){return p("in GA isLoaded"),!!window.gaplugins}},{key:"isReady",value:function(){return!!window.gaplugins}}]),e}(),Pe=function(){function e(t){n(this,e),this.siteId=t.siteID,this.name="HOTJAR",this._ready=!1}return i(e,[{key:"init",value:function(){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:function(e){if(e.message.userId||e.message.anonymousId){var t=e.message.context.traits;window.hj("identify",e.message.userId,t)}else p("[Hotjar] identify:: user id is required")}},{key:"track",value:function(e){p("[Hotjar] track:: method not supported")}},{key:"page",value:function(e){p("[Hotjar] page:: method not supported")}},{key:"isLoaded",value:function(){return this._ready}},{key:"isReady",value:function(){return this._ready}}]),e}(),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(){!function(e,t,n){p("in script loader=== "+e);var r=n.createElement("script");r.src=t,r.async=1,r.type="text/javascript",r.id=e;var 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:function(e){p("[GoogleAds] identify:: method not supported")}},{key:"track",value:function(e){p("in GoogleAdsAnalyticsManager track");var t=this.getConversionData(this.clickEventConversions,e.message.event);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName,i=this.conversionId+"/"+n,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:function(e){p("in GoogleAdsAnalyticsManager page");var t=this.getConversionData(this.pageLoadConversions,e.message.name);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName;window.gtag("event",r,{send_to:this.conversionId+"/"+n})}}},{key:"getConversionData",value:function(e,t){var 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:function(){return window.dataLayer.push!==Array.prototype.push}},{key:"isReady",value:function(){return window.dataLayer.push!==Array.prototype.push}}]),e}(),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:function(){p("===in init VWO===");var e=this.accountId,t=this.settingsTolerance,n=this.libraryTolerance,r=this.useExistingJquery,i=this.isSPA;window._vwo_code=function(){var o=!1,s=document;return{use_existing_jquery:function(){return r},library_tolerance:function(){return n},finish:function(){if(!o){o=!0;var e=s.getElementById("_vis_opt_path_hides");e&&e.parentNode.removeChild(e)}},finished:function(){return o},load:function(e){var 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:function(){var n=setTimeout("_vwo_code.finish()",t),r=s.createElement("style"),o="body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}",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:function(){var e=this;window.VWO=window.VWO||[];var t=this;window.VWO.push(["onVariationApplied",function(n){if(n){p("Variation Applied");var r=n[1],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:function(e){p("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;p("Revenue",t),window.VWO=window.VWO||[],window.VWO.push(["track.revenueConversion",t])}}},{key:"page",value:function(e){p("method not supported")}},{key:"isLoaded",value:function(){return!!window._vwo_code}},{key:"isReady",value:function(){return!!window._vwo_code}}]),e}(),je=function(){function e(t){n(this,e),this.containerID=t.containerID,this.name="GOOGLETAGMANAGER"}return i(e,[{key:"init",value:function(){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"});var o=t.getElementsByTagName(n)[0],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:function(e){p("[GTM] identify:: method not supported")}},{key:"track",value:function(e){p("===in track GoogleTagManager===");var t=e.message,n=a({event:t.event,userId:t.userId,anonymousId:t.anonymousId},t.properties);this.sendToGTMDatalayer(n)}},{key:"page",value:function(e){p("===in page GoogleTagManager===");var t,n=e.message,r=n.name,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");var o=a({event:t,userId:n.userId,anonymousId:n.anonymousId},n.properties);this.sendToGTMDatalayer(o)}},{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}(),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){var i=t.dataCenter.trim().split("-");"eu"===i[0].toLowerCase()?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: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(){p("===in init Braze==="),function(e,t,n,r,i){e.appboy={},e.appboyQueue=[];for(var 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>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&n.rotl(e,8)|4278255360&n.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n>>6*(3-o)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,i=0;r>>6-2*i);return n}};e.exports=n}()})),Le={utf8:{stringToBytes:function(e){return Le.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(Le.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n>>24)|4278255360&(a[f]<<24|a[f]>>>8);a[u>>>5]|=128<>>9<<4)]=u;var h=o._ff,g=o._gg,y=o._hh,m=o._ii;for(f=0;f>>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){var a=e+(t&n|~t&r)+(i>>>0)+s;return(a<>>32-o)+t},o._gg=function(e,t,n,r,i,o,s){var a=e+(t&r|n&~r)+(i>>>0)+s;return(a<>>32-o)+t},o._hh=function(e,t,n,r,i,o,s){var a=e+(t^n^r)+(i>>>0)+s;return(a<>>32-o)+t},o._ii=function(e,t,n,r,i,o,s){var a=e+(n^(t|~r))+(i>>>0)+s;return(a<>>32-o)+t},o._blocksize=16,o._digestsize=16,e.exports=function(e,n){if(null==e)throw new Error("Illegal argument "+e);var r=t.wordsToBytes(o(e,n));return n&&n.asBytes?r:n&&n.asString?i.bytesToString(r):t.bytesToHex(r)}}()})),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: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 n=document,r=function e(){e.c(arguments)};r.q=[],r.c=function(e){r.q.push(e)},e.Intercom=r;var i=function(){var e=n.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://widget.intercom.io/widget/"+window.intercomSettings.app_id;var t=n.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)};"complete"===document.readyState?(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:function(){window.Intercom("update")}},{key:"identify",value:function(e){var n={},r=e.message.context;if(null!=(r.Intercom?r.Intercom:null)){var i=r.Intercom.user_hash?r.Intercom.user_hash:null;null!=i&&(n.user_hash=i);var o=r.Intercom.hideDefaultLauncher?r.Intercom.hideDefaultLauncher:null;null!=o&&(n.hide_default_launcher=o)}Object.keys(r.traits).forEach((function(e){if(r.traits.hasOwnProperty(e)){var i=r.traits[e];if("company"===e){var o=[],s={};"string"==typeof r.traits[e]&&(s.company_id=Ke(r.traits[e]));var a="object"==t(r.traits[e])&&Object.keys(r.traits[e])||[];a.forEach((function(t){a.hasOwnProperty(t)&&("id"!=t?s[t]=r.traits[e][t]:s.company_id=r.traits[e][t])})),"object"!=t(r.traits[e])||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:function(e){var t={},n=e.message;(n.properties?Object.keys(n.properties):null).forEach((function(e){var 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:function(){return!!window.intercom_code}},{key:"isReady",value:function(){return!!window.intercom_code}}]),e}(),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:function(){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:function(e){p("in Keen identify");var t=e.message.context.traits,n=e.message.userId?e.message.userId:e.message.anonymousId,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:function(e){p("in Keen track");var t=e.message.event,n=e.message.properties;n=this.getAddOn(n),this.client.recordEvent(t,n)}},{key:"page",value:function(e){p("in Keen page");var t=e.message.name,n=e.message.properties?e.message.properties.category:void 0,r="Loaded a Page";t&&(r="Viewed "+t+" page"),n&&t&&(r="Viewed "+n+" "+t+" page");var i=e.message.properties;i=this.getAddOn(i),this.client.recordEvent(r,i)}},{key:"isLoaded",value:function(){return p("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}(),Ve=Object.prototype,ze=Ve.hasOwnProperty,Je=Ve.toString;"function"==typeof Symbol&&(qe=Symbol.prototype.valueOf),"function"==typeof BigInt&&(Fe=BigInt.prototype.valueOf);var We=function(e){return e!=e},$e={boolean:1,number:1,string:1,undefined:1},Ye=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,Qe=/^[A-Fa-f0-9]+$/,Ze={};Ze.a=Ze.type=function(e,t){return typeof e===t},Ze.defined=function(e){return void 0!==e},Ze.empty=function(e){var t,n=Je.call(e);if("[object Array]"===n||"[object Arguments]"===n||"[object String]"===n)return 0===e.length;if("[object Object]"===n){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;var n,r=Je.call(e);if(r!==Je.call(t))return!1;if("[object Object]"===r){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("[object Array]"===r){if((n=e.length)!==t.length)return!1;for(;n--;)if(!Ze.equal(e[n],t[n]))return!1;return!0}return"[object Function]"===r?e.prototype===t.prototype:"[object Date]"===r&&e.getTime()===t.getTime()},Ze.hosted=function(e,t){var n=typeof t[e];return"object"===n?!!t[e]:!$e[n]},Ze.instance=Ze.instanceof=function(e,t){return e instanceof t},Ze.nil=Ze.null=function(e){return null===e},Ze.undef=Ze.undefined=function(e){return void 0===e},Ze.args=Ze.arguments=function(e){var t="[object Arguments]"===Je.call(e),n=!Ze.array(e)&&Ze.arraylike(e)&&Ze.object(e)&&Ze.fn(e.callee);return t||n},Ze.array=Array.isArray||function(e){return"[object Array]"===Je.call(e)},Ze.args.empty=function(e){return Ze.args(e)&&0===e.length},Ze.array.empty=function(e){return Ze.array(e)&&0===e.length},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"[object Boolean]"===Je.call(e)},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"[object Date]"===Je.call(e)},Ze.date.valid=function(e){return Ze.date(e)&&!isNaN(Number(e))},Ze.element=function(e){return void 0!==e&&"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&1===e.nodeType},Ze.error=function(e){return"[object Error]"===Je.call(e)},Ze.fn=Ze.function=function(e){if("undefined"!=typeof window&&e===window.alert)return!0;var t=Je.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t||"[object AsyncFunction]"===t},Ze.number=function(e){return"[object Number]"===Je.call(e)},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){var n=Ze.infinite(e),r=Ze.infinite(t),i=Ze.number(e)&&!We(e)&&Ze.number(t)&&!We(t)&&0!==t;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(var n=t.length;--n>=0;)if(e=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&&e<=n},Ze.object=function(e){return"[object Object]"===Je.call(e)},Ze.primitive=function(e){return!e||!("object"==typeof e||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"[object RegExp]"===Je.call(e)},Ze.string=function(e){return"[object String]"===Je.call(e)},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"function"==typeof Symbol&&"[object Symbol]"===Je.call(e)&&"symbol"==typeof qe.call(e)},Ze.bigint=function(e){return"function"==typeof BigInt&&"[object BigInt]"===Je.call(e)&&"bigint"==typeof Fe.call(e)};var Xe,et=Ze,tt=Object.prototype.hasOwnProperty,nt=function(e){for(var t=Array.prototype.slice.call(arguments,1),n=0;n-1&&s.push([a,n[a]])}},{key:"initAfterPage",value:function(){var e,t=this;e=function(){var e,n,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:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,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:function(){p("===in init Comscore init===")}},{key:"identify",value:function(e){p("in Comscore identify")}},{key:"track",value:function(e){p("in Comscore track")}},{key:"page",value:function(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:function(e){p("=====in loadConfig====="),this.comScoreParams=this.mapComscoreParams(e.message.properties),window._comscore=window._comscore||[],window._comscore.push(this.comScoreParams)}},{key:"initAfterPage",value:function(){p("=====in initAfterPage====="),function(){var e=document.createElement("script"),t=document.getElementsByTagName("script")[0];e.async=!0,e.src=("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,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:function(e){p("=====in mapComscoreParams=====");var t=this.comScoreBeaconParam,n={};return Object.keys(t).forEach((function(r){if(r in e){var i=t[r],o=e[r];n[i]=o}})),n.c1="2",n.c2=this.c2ID,p("=====in mapComscoreParams=====",n),n}},{key:"isLoaded",value:function(){return p("in Comscore isLoaded"),!this.isFirstPageCallMade||!!window.COMSCORE}},{key:"isReady",value:function(){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=0&&et.date(f))l[p]=f.toISOTring().split("T")[0];else if(a.hasOwnProperty(p))a[p]&&"string"==typeof f&&(l[p]=sha256(f));else{var h=r.indexOf(p)>=0,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:function(e){this.storage.setItem(Nt,e)}},{key:"getLotameSynchTime",value:function(){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){var 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){var t=e.key,n=e.value;i.mappings[t]=n}))}return i(e,[{key:"init",value:function(){p("===in init Lotame==="),window.LOTAME_SYNCH_CALLBACK=function(){}}},{key:"addPixel",value:function(e,t,n){p("Adding pixel for :: "+e);var 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:function(e){p("Adding iframe for :: "+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;"),p("IFrame :: "+t),document.getElementsByTagName("body")[0].appendChild(t)}},{key:"syncPixel",value:function(e){var t=this;if(p("===== in syncPixel ======"),p("Firing DSP Pixel URLs"),this.dspUrlSettingsPixel&&this.dspUrlSettingsPixel.length>0){var n=Date.now();this.dspUrlSettingsPixel.forEach((function(r){var 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){var r=Date.now();this.dspUrlSettingsIframe.forEach((function(n){var 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:function(e,t){return Object.keys(e).forEach((function(n){if(e.hasOwnProperty(n)){var r=new RegExp("{{"+n+"}}","gi");t=t.replace(r,e[n])}})),t}},{key:"identify",value:function(e){p("in Lotame identify");var t=e.message.userId;this.syncPixel(t)}},{key:"track",value:function(e){p("track not supported for lotame")}},{key:"page",value:function(e){var t=this;if(p("in Lotame page"),p("Firing BCP Pixel URLs"),this.bcpUrlSettingsPixel&&this.bcpUrlSettingsPixel.length>0){var n=Date.now();this.bcpUrlSettingsPixel.forEach((function(e){var 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){var r=Date.now();this.bcpUrlSettingsIframe.forEach((function(e){var 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:function(){var e=this.storage.getLotameSynchTime(),t=Date.now();return!e||Math.floor((t-e)/864e5)>=7}},{key:"isLoaded",value:function(){return p("in Lotame isLoaded"),!0}},{key:"isReady",value:function(){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;var t=new Gt;t.version="";var 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:function(e){return this.properties[e]}},{key:"addProperty",value:function(e,t){this.properties[e]=t}},{key:"validateFor",value:function(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:function(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:function(e){this.message.type=e}},{key:"setProperty",value:function(e){this.message.properties=e}},{key:"setUserProperty",value:function(e){this.message.user_properties=e}},{key:"setUserId",value:function(e){this.message.userId=e}},{key:"setEventName",value:function(e){this.message.event=e}},{key:"updateTraits",value:function(e){this.message.context.traits=e}},{key:"getElementContent",value:function(){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:function(e){return this.rudderProperty=e,this}},{key:"setPropertyBuilder",value:function(e){return this.rudderProperty=e.build(),this}},{key:"setUserProperty",value:function(e){return this.rudderUserProperty=e,this}},{key:"setUserPropertyBuilder",value:function(e){return this.rudderUserProperty=e.build(),this}},{key:"setEvent",value:function(e){return this.event=e,this}},{key:"setUserId",value:function(e){return this.userId=e,this}},{key:"setChannel",value:function(e){return this.channel=e,this}},{key:"setType",value:function(e){return this.type=e,this}},{key:"build",value:function(){var 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){var t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(t){var n=new Uint8Array(16);e.exports=function(){return t(n),n}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(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);var Xt,en,tn=function(e,t){var n=t||0,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("")},nn=0,rn=0;var on=function(e,t,n){var r=t&&n||0,i=t||[],o=(e=e||{}).node||Xt,s=void 0!==e.clockseq?e.clockseq:en;if(null==o||null==s){var a=Yt();null==o&&(o=Xt=[1|a[0],a[1],a[2],a[3],a[4],a[5]]),null==s&&(s=en=16383&(a[6]<<8|a[7]))}var u=void 0!==e.msecs?e.msecs:(new Date).getTime(),c=void 0!==e.nsecs?e.nsecs:rn+1,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;var 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;var 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(var f=0;f<6;++f)i[r+f]=o[f];return t||tn(i)};var sn=function(e,t,n){var r=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var i=(e=e||{}).random||(e.rng||Yt)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t)for(var o=0;o<16;++o)t[r+o]=i[o];return t||tn(i)},an=sn;an.v1=on,an.v4=sn;var un=an,cn=un.v4,ln={_data:{},length:0,setItem:function(e,t){return this._data[e]=t,this.length=Pt(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=Pt(this._data).length,null},clear:function(){this._data={},this.length=0},key:function(e){return Pt(this._data)[e]}};var dn={defaultEngine:function(){try{if(!window.localStorage)return!1;var e=cn();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:ln,inMemoryEngine:ln},pn=dn.defaultEngine,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){var n=this._createValidKey(e);if(n)try{this.engine.setItem(n,ue.stringify(t))}catch(n){(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})(n)&&(this._swapEngine(),this.set(e,t))}},hn.prototype.get=function(e){try{var t=this.engine.getItem(this._createValidKey(e));return null===t?null:ue.parse(t)}catch(e){return null}},hn.prototype.remove=function(e){this.engine.removeItem(this._createValidKey(e))},hn.prototype._createValidKey=function(e){var t,n=this.name,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(){var e=this;Lt((function(t){var n=e.get(t);fn.setItem([e.name,e.id,t].join("."),n),e.remove(t)}),this.keys),this.engine=fn};var gn=hn;var yn={setTimeout:function(e,t){return window.setTimeout(e,t)},clearTimeout:function(e){return window.clearTimeout(e)},Date:window.Date},mn=yn;function vn(){this.tasks={},this.nextId=1}vn.prototype.now=function(){return+new mn.Date},vn.prototype.run=function(e,t){var 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){var n=this;return function(){return delete n.tasks[e],t()}},vn.setClock=function(e){mn=e},vn.resetClock=function(){mn=yn};var bn=vn,wn=kn;function kn(e){return kn.enabled(e)?function(t){t=In(t);var n=new Date,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(var t=(e||"").split(/[\s,]+/),n=t.length,r=0;r=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;tthis.maxAttempts)},Tn.prototype.getDelay=function(e){var t=this.backoff.MIN_RETRY_DELAY*Math.pow(this.backoff.FACTOR,e);if(this.backoff.JITTER){var n=Math.random(),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){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()},Tn.prototype._processHead=function(){var e=this,t=this._store;this._schedule.cancel(this._processId);var n=t.get(this.keys.QUEUE)||[],r=t.get(this.keys.IN_PROGRESS)||{},i=this._schedule.now(),o=[];function s(n,r){o.push({item:n.item,done:function(i,o){var 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(var a=Object.keys(r).length;n.length&&n[0].time<=i&&a++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(){var e=this;Lt((function(t){t.id!==e.id&&(e._schedule.now()-t.get(e.keys.ACK)=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:function(e,t){var n=e.getElementContent(),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);var 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){var t=function(t){var 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){var n=e.target||e.srcElement,r=void 0;Ln(n)&&(n=n.parentNode);if(jn(n,e)){if("form"==n.tagName.toLowerCase()){r={};for(var i=0;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}var Fn=function(e,t,n){var r=!1;return n=n||Kn,i.count=e,0===e?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):0!==i.count||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=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.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:function(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 null!=qt[e.name]})),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:function(e){var t=this,n=this;if(p("supported intgs ",qt),!e||0==e.length)return this.readyCallback&&this.readyCallback(),void(this.toBeProcessedByIntegrationArray=[]);e.forEach((function(e){try{p("[Analytics] init :: trying to initialize integration name:: ",e.name);var 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:function(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){var n=t[0];t.shift(),Object.keys(t[0].message.integrations).length>0&&_(t[0].message.integrations);for(var r=E(t[0].message.integrations,e.clientIntegrationObjects),i=0;i1&&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:function(e,n,r,i,o){"function"==typeof i&&(o=i,i=null),"function"==typeof r&&(o=r,i=r=null),"function"==typeof n&&(o=n,i=r=n=null),"object"===t(e)&&(i=n,r=e,n=e=null),"object"===t(n)&&(i=r,r=n,n=null),"string"==typeof e&&"string"!=typeof n&&(n=e,e=null),this.sendAdblockPage&&"RudderJS-Initiated"!=e&&this.sendSampleRequest(),this.processPage(e,n,r,i,o)}},{key:"track",value:function(e,t,n,r){"function"==typeof n&&(r=n,n=null),"function"==typeof t&&(r=t,n=null,t=null),this.processTrack(e,t,n,r)}},{key:"identify",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.userId),this.processIdentify(e,n,r,i)}},{key:"alias",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(n)&&(r=n,n=null);var 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:function(e,n,r,i){if(arguments.length){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.groupId),this.groupId=e,this.storage.setGroupId(this.groupId);var o=(new Wt).setType("group").build();if(n)for(var 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:function(e,t,n,r,i){var 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:function(e,t,n,r){var i=(new Wt).setType("track").build();e&&i.setEventName(e),t?i.setProperty(t):i.setProperty({}),this.trackEvent(i,n,r)}},{key:"processIdentify",value:function(e,t,n,r){e&&this.userId&&e!==this.userId&&this.reset(),this.userId=e,this.storage.setUserId(this.userId);var i=(new Wt).setType("identify").build();if(t){for(var o in t)this.userTraits[o]=t[o];this.storage.setUserTraits(this.userTraits)}this.identifyUser(i,n,r)}},{key:"identifyUser",value:function(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=Object.assign({},e.message.context.traits),this.storage.setUserTraits(this.userTraits)),this.processAndSendDataToDestinations("identify",e,t,n)}},{key:"trackPage",value:function(e,t,n){this.processAndSendDataToDestinations("page",e,t,n)}},{key:"trackEvent",value:function(e,t,n){this.processAndSendDataToDestinations("track",e,t,n)}},{key:"processAndSendDataToDestinations",value:function(e,t,n,r){try{this.anonymousId||this.setAnonymousId(),t.message.context.page=w(),t.message.context.traits=Object.assign({},this.userTraits),p("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=Object.assign({},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]),"All"!=e&&null!=g[e]&&g[e]!=e&&delete i[e])})),Gn.call(this,t,e),p(e+" is called "),r&&r()}catch(e){b(e)}var i}},{key:"processOptionsParam",value:function(e,t){var n=["integrations","anonymousId","originalTimestamp"];for(var r in t)if(n.includes(r))e.message[r]=t[r];else if("context"!==r)e.message.context[r]=t[r];else for(var i in t[r])e.message.context[i]=t[r][i]}},{key:"getPageProperties",value:function(e){var t=w();for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e}},{key:"reset",value:function(){this.userId="",this.userTraits={},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||m(),this.storage.setAnonymousId(this.anonymousId)}},{key:"load",value:function(e,n,r){var i=this;p("inside load ");var o="https://api.rudderlabs.com/sourceConfig/?p=web&v=1.1.2";if(!e||!n||0==n.length)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&&"object"==t(r.sendAdblockPageOptions)&&(this.sendAdblockPageOptions=r.sendAdblockPageOptions),r&&r.clientSuppliedCallbacks){var 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){var i,o=r.bind(e);(i=new XMLHttpRequest).open("GET",t,!0),i.setRequestHeader("Authorization","Basic "+btoa(n+":")),i.onload=function(){var e=i.status;200==e?(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:function(e){"function"!=typeof e?f("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)&&(p("registerCallbacks",e,t.clientSuppliedCallbacks[e]),t.on(e,t.clientSuppliedCallbacks[e]))}))}},{key:"sendSampleRequest",value:function(){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);var Vn=!!window.rudderanalytics&&window.rudderanalytics.push==Array.prototype.push,zn=window.rudderanalytics?window.rudderanalytics[0]:[];if(zn.length>0&&"load"==zn[0]){var Jn=zn[0];zn.shift(),p("=====from init, calling method:: ",Jn),Hn[Jn].apply(Hn,u(zn))}if(Vn){for(var Wn=1;Wne.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1?t:t+e:window.location.href,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("canonical"===e.getAttribute("rel"))return e.getAttribute("href")}function I(e,t){var n=e.revenue;return!n&&t&&t.match(/^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i)&&(n=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}}(n)}function _(e){Object.keys(e).forEach((function(t){e.hasOwnProperty(t)&&(h[t]&&(e[h[t]]=e[t]),"All"!=t&&null!=h[t]&&h[t]!=t&&delete e[t])}))}function E(e,n){var r=[];if(!n||0==n.length)return r;var i=!0;return"string"==typeof n[0]?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t]&&0==e[t]&&(n=!1),n&&r.push(t)}else null!=e[t]&&1==e[t]&&r.push(t)})),r):"object"==t(n[0])?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t.name]&&0==e[t.name]&&(n=!1),n&&r.push(t)}else null!=e[t.name]&&1==e[t.name]&&r.push(t)})),r):void 0}var A={TRACK:"track",PAGE:"page",IDENTIFY:"identify"},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);var n=document.createElement("script");n.src=t,n.async=!0,n.type="text/javascript",n.id=e;var r=document.getElementsByTagName("script")[0];p("==script==",r),r.parentNode.insertBefore(n,r)}var O=function(){function e(t){n(this,e),this.hubId=t.hubID,this.name="HS"}return i(e,[{key:"init",value:function(){T("hubspot-integration","http://js.hs-scripts.com/"+this.hubId+".js"),p("===in init HS===")}},{key:"identify",value:function(e){p("in HubspotAnalyticsManager identify");var n=e.message.context.traits,r={};for(var i in n)if(Object.getOwnPropertyDescriptor(n,i)&&n[i]){var o=i;"[object Date]"==toString.call(n[i])?r[o]=n[i].getTime():r[o]=n[i]}var s=e.message.context.user_properties;for(var a in s){if(Object.getOwnPropertyDescriptor(s,a)&&s[a])r[a]=s[a]}(p(r),void 0!==("undefined"==typeof window?"undefined":t(window)))&&(window._hsq=window._hsq||[]).push(["identify",r])}},{key:"track",value:function(e){p("in HubspotAnalyticsManager track");var t=window._hsq=window._hsq||[],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:function(e){p("in HubspotAnalyticsManager page");var 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:function(){return p("in hubspot isLoaded"),!(!window._hsq||window._hsq.push===Array.prototype.push)}},{key:"isReady",value:function(){return!(!window._hsq||window._hsq.push===Array.prototype.push)}}]),e}(),S=Object.prototype.toString;var P=function e(t){var 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 null===e?"null":void 0===e?"undefined":e!=e?"nan":e&&1===e.nodeType?"element":null!=(t=e)&&(t._isBuffer||t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t))?"buffer":typeof(e=e.valueOf?e.valueOf():Object.prototype.valueOf.apply(e));var t}(t);if("object"===n){var r={};for(var i in t)t.hasOwnProperty(i)&&(r[i]=e(t[i]));return r}if("array"===n){r=new Array(t.length);for(var o=0,s=t.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 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=31},t.storage="undefined"!=typeof chrome&&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())}))),F=(q.log,q.formatArgs,q.save,q.load,q.useColors,q.storage,q.colors,q("cookie")),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||{};var r=z(e)+"="+z(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i1)))/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)}var A=t.stringify;t.stringify=function(e,t,n){var r=u.prototype.toJSON;u.prototype.toJSON=E;var i=A(e,t,n);return u.prototype.toJSON=r,i}}else{var C=function(e){var t=e.charCodeAt(0),n=k[t];return n||"\\u00"+I(2,t.toString(16))},T=/[\x00-\x1f\x22\x5c]/g,O=function(e){return T.lastIndex=0,'"'+(T.test(e)?e.replace(T,C):e)+'"'},S=function(e,t,n,r,i,o,s){var a,c,d,p,f,g,m,v,b;if(y((function(){a=t[e]})),"object"==typeof a&&a&&(a.getUTCFullYear&&"[object Date]"==h.call(a)&&a.toJSON===u.prototype.toJSON?a=_(a):"function"==typeof a.toJSON&&(a=a.toJSON(e))),n&&(a=n.call(t,e,a)),null==a)return void 0===a?a:"null";switch("object"==(c=typeof a)&&(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("object"==typeof a){for(m=s.length;m--;)if(s[m]===a)throw l();if(s.push(a),p=[],v=o,o+=i,"[object Array]"==d){for(g=0,m=a.length;g0)for(r>10&&(r=10),i="";i.length=48&&i<=57||i>=97&&i<=102||i>=65&&i<=70||D();e+=R("0x"+o.slice(t,P));break;default:D()}else{if(34==i)break;for(i=o.charCodeAt(P),t=P;i>=32&&92!=i&&34!=i;)i=o.charCodeAt(++P);e+=o.slice(t,P)}if(34==o.charCodeAt(P))return P++,e;D();default:if(t=P,45==i&&(r=!0,i=o.charCodeAt(++P)),i>=48&&i<=57){for(48==i&&((i=o.charCodeAt(P+1))>=48&&i<=57)&&D(),r=!1;P=48&&i<=57);P++);if(46==o.charCodeAt(P)){for(n=++P;n57);n++);n==P&&D(),P=n}if(101==(i=o.charCodeAt(P))||69==i){for(43!=(i=o.charCodeAt(++P))&&45!=i||P++,n=P;n57);n++);n==P&&D(),P=n}return+o.slice(t,P)}r&&D();var a=o.slice(P,P+4);if("true"==a)return P+=4,!0;if("fals"==a&&101==o.charCodeAt(P+4))return P+=5,!1;if("null"==a)return P+=4,null;D()}return"$"},L=function(e){var t,n;if("$"==e&&D(),"string"==typeof e){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&&"string"==typeof e&&"@"==(b?e.charAt(0):e[0])&&":"==U()||D(),t[e.slice(1)]=L(U());return t}D()}return e},M=function(e,t,n){var r=N(e,t,n);void 0===r?delete e[t]:e[t]=r},N=function(e,t,n){var r,i=e[t];if("object"==typeof i&&i)if("[object Array]"==h.call(i))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){var n,r;return P=0,x=""+e,n=L(U()),"$"!=U()&&D(),P=x=null,t&&"[object Function]"==h.call(t)?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{var a=i.JSON,u=i.JSON3,c=!1,l=s(i,i.JSON3={noConflict:function(){return c||(c=!0,i.JSON=a,i.JSON3=u,a=u=null),l}});i.JSON={parse:l.parse,stringify:l.stringify}}}).call(x)})),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){var t=document.createElement("a");return t.href=e,{href:t.href,host:t.host||location.host,port:"0"===t.port||""===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 0==e.indexOf("//")||!!~e.indexOf("://")},t.isRelative=function(e){return!t.isAbsolute(e)},t.isCrossDomain=function(e){e=t.parse(e);var n=t.parse(window.location.href);return e.hostname!==n.hostname||e.port!==n.port||e.protocol!==n.protocol}})),le=(ce.parse,ce.isAbsolute,ce.isRelative,ce.isCrossDomain,R((function(e,t){(t=e.exports=function(e){function r(){}function o(){var e=o,r=+new Date,s=r-(n||r);e.diff=s,e.prev=n,e.curr=r,n=r,null==e.useColors&&(e.useColors=t.useColors()),null==e.color&&e.useColors&&(e.color=i());var a=Array.prototype.slice.call(arguments);a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&(a=["%o"].concat(a));var u=0;a[0]=a[0].replace(/%([a-z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=t.formatters[r];if("function"==typeof i){var o=a[u];n=i.call(e,o),a.splice(u,1),u--}return n})),"function"==typeof t.formatArgs&&(a=t.formatArgs.apply(e,a));var c=o.log||t.log||console.log.bind(console);c.apply(e,a)}r.enabled=!1,o.enabled=!0;var 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(var n=(e||"").split(/[\s,]+/),r=n.length,i=0;i=31},t.storage="undefined"!=typeof chrome&&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())}))),pe=(de.log,de.formatArgs,de.save,de.load,de.useColors,de.storage,de.colors,de("cookie")),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||{};var r=me(e)+"="+me(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i=0;--o)i.push(t.slice(o).join("."));return i},r.cookie=fe,t=e.exports=r})),we=new(function(){function e(t){n(this,e),this._options={},this.options(t)}return i(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="."+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:function(e,t){try{return t=ue.stringify(t),K(e,t,P(this._options)),!0}catch(e){return!1}}},{key:"get",value:function(e){var t;try{return t=(t=K(e))?ue.parse(t):null}catch(e){return t||null}}},{key:"remove",value:function(e){try{return K(e,null,P(this._options)),!0}catch(e){return!1}}}]),e}())({}),ke=function(){var e,t={},n="undefined"!=typeof window?window:x,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){null==r&&(r=n,n=null),null==n&&(n={});var i=t.get(e,n);r(i),t.set(e,i)},t.getAll=function(){var 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("string"==typeof e)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){var 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(var r=0;rdocument.w=window<\/script>'),o.close(),i=o.w.frames[0].document,e=i.createElement("div")}catch(t){e=r.createElement("div"),i=r.body}var s=function(n){return function(){var r=Array.prototype.slice.call(arguments,0);r.unshift(e),i.appendChild(e),e.addBehavior("#default#userData"),e.load("localStorage");var o=n.apply(t,r);return i.removeChild(e),o}},a=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g"),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);var 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){var t=e.XMLDocument.documentElement.attributes;e.load("localStorage");for(var 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{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}(),Ie=new(function(){function e(t){n(this,e),this._options={},this.enabled=!1,this.options(t)}return i(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;se(e,{enabled:!0}),this.enabled=e.enabled&&ke.enabled,this._options=e}},{key:"set",value:function(e,t){return!!this.enabled&&ke.set(e,t)}},{key:"get",value:function(e){return this.enabled?ke.get(e):null}},{key:"remove",value:function(e){return!!this.enabled&&ke.remove(e)}}]),e}())({}),_e="rl_user_id",Ee="rl_trait",Ae="rl_anonymous_id",Ce="rl_group_id",Te="rl_group_trait",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:function(e,t){this.storage.set(e,t)}},{key:"setUserId",value:function(e){"string"==typeof e?this.storage.set(_e,e):f("[Storage] setUserId:: userId should be string")}},{key:"setUserTraits",value:function(e){this.storage.set(Ee,e)}},{key:"setGroupId",value:function(e){"string"==typeof e?this.storage.set(Ce,e):f("[Storage] setGroupId:: groupId should be string")}},{key:"setGroupTraits",value:function(e){this.storage.set(Te,e)}},{key:"setAnonymousId",value:function(e){"string"==typeof e?this.storage.set(Ae,e):f("[Storage] setAnonymousId:: anonymousId should be string")}},{key:"getItem",value:function(e){return this.storage.get(e)}},{key:"getUserId",value:function(){return this.storage.get(_e)}},{key:"getUserTraits",value:function(){return this.storage.get(Ee)}},{key:"getGroupId",value:function(){return this.storage.get(Ce)}},{key:"getGroupTraits",value:function(){return this.storage.get(Te)}},{key:"getAnonymousId",value:function(){return this.storage.get(Ae)}},{key:"removeItem",value:function(e){return this.storage.remove(e)}},{key:"clear",value:function(){this.storage.remove(_e),this.storage.remove(Ee)}}]),e}()),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(){!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});var e=Oe.getUserId();e&&""!==e&&ga("rudder_ga.set","userId",e),p("===in init GA===")}},{key:"identify",value:function(e){var t=""!==e.message.userId?e.message.userId:e.message.anonymousId;ga("rudder_ga.set","userId",t),p("in GoogleAnalyticsManager identify")}},{key:"track",value:function(e){var t=e.message.event,n=e.message.event,r=e.message.event,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:function(e){p("in GoogleAnalyticsManager page");var t=e.message.properties&&e.message.properties.path?e.message.properties.path:void 0,n=e.message.properties&&e.message.properties.title?e.message.properties.title:void 0,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:function(){return p("in GA isLoaded"),!!window.gaplugins}},{key:"isReady",value:function(){return!!window.gaplugins}}]),e}(),Pe=function(){function e(t){n(this,e),this.siteId=t.siteID,this.name="HOTJAR",this._ready=!1}return i(e,[{key:"init",value:function(){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:function(e){if(e.message.userId||e.message.anonymousId){var t=e.message.context.traits;window.hj("identify",e.message.userId,t)}else p("[Hotjar] identify:: user id is required")}},{key:"track",value:function(e){p("[Hotjar] track:: method not supported")}},{key:"page",value:function(e){p("[Hotjar] page:: method not supported")}},{key:"isLoaded",value:function(){return this._ready}},{key:"isReady",value:function(){return this._ready}}]),e}(),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(){!function(e,t,n){p("in script loader=== "+e);var r=n.createElement("script");r.src=t,r.async=1,r.type="text/javascript",r.id=e;var 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:function(e){p("[GoogleAds] identify:: method not supported")}},{key:"track",value:function(e){p("in GoogleAdsAnalyticsManager track");var t=this.getConversionData(this.clickEventConversions,e.message.event);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName,i=this.conversionId+"/"+n,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:function(e){p("in GoogleAdsAnalyticsManager page");var t=this.getConversionData(this.pageLoadConversions,e.message.name);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName;window.gtag("event",r,{send_to:this.conversionId+"/"+n})}}},{key:"getConversionData",value:function(e,t){var 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:function(){return window.dataLayer.push!==Array.prototype.push}},{key:"isReady",value:function(){return window.dataLayer.push!==Array.prototype.push}}]),e}(),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:function(){p("===in init VWO===");var e=this.accountId,t=this.settingsTolerance,n=this.libraryTolerance,r=this.useExistingJquery,i=this.isSPA;window._vwo_code=function(){var o=!1,s=document;return{use_existing_jquery:function(){return r},library_tolerance:function(){return n},finish:function(){if(!o){o=!0;var e=s.getElementById("_vis_opt_path_hides");e&&e.parentNode.removeChild(e)}},finished:function(){return o},load:function(e){var 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:function(){var n=setTimeout("_vwo_code.finish()",t),r=s.createElement("style"),o="body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}",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:function(){var e=this;window.VWO=window.VWO||[];var t=this;window.VWO.push(["onVariationApplied",function(n){if(n){p("Variation Applied");var r=n[1],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:function(e){p("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;p("Revenue",t),window.VWO=window.VWO||[],window.VWO.push(["track.revenueConversion",t])}}},{key:"page",value:function(e){p("method not supported")}},{key:"isLoaded",value:function(){return!!window._vwo_code}},{key:"isReady",value:function(){return!!window._vwo_code}}]),e}(),je=function(){function e(t){n(this,e),this.containerID=t.containerID,this.name="GOOGLETAGMANAGER"}return i(e,[{key:"init",value:function(){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"});var o=t.getElementsByTagName(n)[0],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:function(e){p("[GTM] identify:: method not supported")}},{key:"track",value:function(e){p("===in track GoogleTagManager===");var t=e.message,n=a({event:t.event,userId:t.userId,anonymousId:t.anonymousId},t.properties);this.sendToGTMDatalayer(n)}},{key:"page",value:function(e){p("===in page GoogleTagManager===");var t,n=e.message,r=n.name,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");var o=a({event:t,userId:n.userId,anonymousId:n.anonymousId},n.properties);this.sendToGTMDatalayer(o)}},{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}(),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){var i=t.dataCenter.trim().split("-");"eu"===i[0].toLowerCase()?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: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(){p("===in init Braze==="),function(e,t,n,r,i){e.appboy={},e.appboyQueue=[];for(var 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>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&n.rotl(e,8)|4278255360&n.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n>>6*(3-o)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,i=0;r>>6-2*i);return n}};e.exports=n}()})),Le={utf8:{stringToBytes:function(e){return Le.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(Le.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n>>24)|4278255360&(a[f]<<24|a[f]>>>8);a[u>>>5]|=128<>>9<<4)]=u;var h=o._ff,g=o._gg,y=o._hh,m=o._ii;for(f=0;f>>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){var a=e+(t&n|~t&r)+(i>>>0)+s;return(a<>>32-o)+t},o._gg=function(e,t,n,r,i,o,s){var a=e+(t&r|n&~r)+(i>>>0)+s;return(a<>>32-o)+t},o._hh=function(e,t,n,r,i,o,s){var a=e+(t^n^r)+(i>>>0)+s;return(a<>>32-o)+t},o._ii=function(e,t,n,r,i,o,s){var a=e+(n^(t|~r))+(i>>>0)+s;return(a<>>32-o)+t},o._blocksize=16,o._digestsize=16,e.exports=function(e,n){if(null==e)throw new Error("Illegal argument "+e);var r=t.wordsToBytes(o(e,n));return n&&n.asBytes?r:n&&n.asString?i.bytesToString(r):t.bytesToHex(r)}}()})),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: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 n=document,r=function e(){e.c(arguments)};r.q=[],r.c=function(e){r.q.push(e)},e.Intercom=r;var i=function(){var e=n.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://widget.intercom.io/widget/"+window.intercomSettings.app_id;var t=n.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)};"complete"===document.readyState?(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:function(){window.Intercom("update")}},{key:"identify",value:function(e){var n={},r=e.message.context;if(null!=(r.Intercom?r.Intercom:null)){var i=r.Intercom.user_hash?r.Intercom.user_hash:null;null!=i&&(n.user_hash=i);var o=r.Intercom.hideDefaultLauncher?r.Intercom.hideDefaultLauncher:null;null!=o&&(n.hide_default_launcher=o)}Object.keys(r.traits).forEach((function(e){if(r.traits.hasOwnProperty(e)){var i=r.traits[e];if("company"===e){var o=[],s={};"string"==typeof r.traits[e]&&(s.company_id=Ke(r.traits[e]));var a="object"==t(r.traits[e])&&Object.keys(r.traits[e])||[];a.forEach((function(t){a.hasOwnProperty(t)&&("id"!=t?s[t]=r.traits[e][t]:s.company_id=r.traits[e][t])})),"object"!=t(r.traits[e])||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:function(e){var t={},n=e.message;(n.properties?Object.keys(n.properties):null).forEach((function(e){var 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:function(){return!!window.intercom_code}},{key:"isReady",value:function(){return!!window.intercom_code}}]),e}(),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:function(){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:function(e){p("in Keen identify");var t=e.message.context.traits,n=e.message.userId?e.message.userId:e.message.anonymousId,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:function(e){p("in Keen track");var t=e.message.event,n=e.message.properties;n=this.getAddOn(n),this.client.recordEvent(t,n)}},{key:"page",value:function(e){p("in Keen page");var t=e.message.name,n=e.message.properties?e.message.properties.category:void 0,r="Loaded a Page";t&&(r="Viewed "+t+" page"),n&&t&&(r="Viewed "+n+" "+t+" page");var i=e.message.properties;i=this.getAddOn(i),this.client.recordEvent(r,i)}},{key:"isLoaded",value:function(){return p("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}(),Ve=Object.prototype,ze=Ve.hasOwnProperty,Je=Ve.toString;"function"==typeof Symbol&&(qe=Symbol.prototype.valueOf),"function"==typeof BigInt&&(Fe=BigInt.prototype.valueOf);var We=function(e){return e!=e},$e={boolean:1,number:1,string:1,undefined:1},Ye=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,Qe=/^[A-Fa-f0-9]+$/,Ze={};Ze.a=Ze.type=function(e,t){return typeof e===t},Ze.defined=function(e){return void 0!==e},Ze.empty=function(e){var t,n=Je.call(e);if("[object Array]"===n||"[object Arguments]"===n||"[object String]"===n)return 0===e.length;if("[object Object]"===n){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;var n,r=Je.call(e);if(r!==Je.call(t))return!1;if("[object Object]"===r){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("[object Array]"===r){if((n=e.length)!==t.length)return!1;for(;n--;)if(!Ze.equal(e[n],t[n]))return!1;return!0}return"[object Function]"===r?e.prototype===t.prototype:"[object Date]"===r&&e.getTime()===t.getTime()},Ze.hosted=function(e,t){var n=typeof t[e];return"object"===n?!!t[e]:!$e[n]},Ze.instance=Ze.instanceof=function(e,t){return e instanceof t},Ze.nil=Ze.null=function(e){return null===e},Ze.undef=Ze.undefined=function(e){return void 0===e},Ze.args=Ze.arguments=function(e){var t="[object Arguments]"===Je.call(e),n=!Ze.array(e)&&Ze.arraylike(e)&&Ze.object(e)&&Ze.fn(e.callee);return t||n},Ze.array=Array.isArray||function(e){return"[object Array]"===Je.call(e)},Ze.args.empty=function(e){return Ze.args(e)&&0===e.length},Ze.array.empty=function(e){return Ze.array(e)&&0===e.length},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"[object Boolean]"===Je.call(e)},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"[object Date]"===Je.call(e)},Ze.date.valid=function(e){return Ze.date(e)&&!isNaN(Number(e))},Ze.element=function(e){return void 0!==e&&"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&1===e.nodeType},Ze.error=function(e){return"[object Error]"===Je.call(e)},Ze.fn=Ze.function=function(e){if("undefined"!=typeof window&&e===window.alert)return!0;var t=Je.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t||"[object AsyncFunction]"===t},Ze.number=function(e){return"[object Number]"===Je.call(e)},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){var n=Ze.infinite(e),r=Ze.infinite(t),i=Ze.number(e)&&!We(e)&&Ze.number(t)&&!We(t)&&0!==t;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(var n=t.length;--n>=0;)if(e=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&&e<=n},Ze.object=function(e){return"[object Object]"===Je.call(e)},Ze.primitive=function(e){return!e||!("object"==typeof e||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"[object RegExp]"===Je.call(e)},Ze.string=function(e){return"[object String]"===Je.call(e)},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"function"==typeof Symbol&&"[object Symbol]"===Je.call(e)&&"symbol"==typeof qe.call(e)},Ze.bigint=function(e){return"function"==typeof BigInt&&"[object BigInt]"===Je.call(e)&&"bigint"==typeof Fe.call(e)};var Xe,et=Ze,tt=Object.prototype.hasOwnProperty,nt=function(e){for(var t=Array.prototype.slice.call(arguments,1),n=0;n-1&&s.push([a,n[a]])}},{key:"initAfterPage",value:function(){var e,t=this;e=function(){var e,n,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:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,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:function(){p("===in init Comscore init===")}},{key:"identify",value:function(e){p("in Comscore identify")}},{key:"track",value:function(e){p("in Comscore track")}},{key:"page",value:function(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:function(e){p("=====in loadConfig====="),this.comScoreParams=this.mapComscoreParams(e.message.properties),window._comscore=window._comscore||[],window._comscore.push(this.comScoreParams)}},{key:"initAfterPage",value:function(){p("=====in initAfterPage====="),function(){var e=document.createElement("script"),t=document.getElementsByTagName("script")[0];e.async=!0,e.src=("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,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:function(e){p("=====in mapComscoreParams=====");var t=this.comScoreBeaconParam,n={};return Object.keys(t).forEach((function(r){if(r in e){var i=t[r],o=e[r];n[i]=o}})),n.c1="2",n.c2=this.c2ID,p("=====in mapComscoreParams=====",n),n}},{key:"isLoaded",value:function(){return p("in Comscore isLoaded"),!this.isFirstPageCallMade||!!window.COMSCORE}},{key:"isReady",value:function(){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=0&&et.date(f))l[p]=f.toISOTring().split("T")[0];else if(a.hasOwnProperty(p))a[p]&&"string"==typeof f&&(l[p]=sha256(f));else{var h=r.indexOf(p)>=0,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:function(e){this.storage.setItem(Nt,e)}},{key:"getLotameSynchTime",value:function(){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){var 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){var t=e.key,n=e.value;i.mappings[t]=n}))}return i(e,[{key:"init",value:function(){p("===in init Lotame==="),window.LOTAME_SYNCH_CALLBACK=function(){}}},{key:"addPixel",value:function(e,t,n){p("Adding pixel for :: "+e);var 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:function(e){p("Adding iframe for :: "+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;"),p("IFrame :: "+t),document.getElementsByTagName("body")[0].appendChild(t)}},{key:"syncPixel",value:function(e){var t=this;if(p("===== in syncPixel ======"),p("Firing DSP Pixel URLs"),this.dspUrlSettingsPixel&&this.dspUrlSettingsPixel.length>0){var n=Date.now();this.dspUrlSettingsPixel.forEach((function(r){var 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){var r=Date.now();this.dspUrlSettingsIframe.forEach((function(n){var 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:function(e,t){return Object.keys(e).forEach((function(n){if(e.hasOwnProperty(n)){var r=new RegExp("{{"+n+"}}","gi");t=t.replace(r,e[n])}})),t}},{key:"identify",value:function(e){p("in Lotame identify");var t=e.message.userId;this.syncPixel(t)}},{key:"track",value:function(e){p("track not supported for lotame")}},{key:"page",value:function(e){var t=this;if(p("in Lotame page"),p("Firing BCP Pixel URLs"),this.bcpUrlSettingsPixel&&this.bcpUrlSettingsPixel.length>0){var n=Date.now();this.bcpUrlSettingsPixel.forEach((function(e){var 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){var r=Date.now();this.bcpUrlSettingsIframe.forEach((function(e){var 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:function(){var e=this.storage.getLotameSynchTime(),t=Date.now();return!e||Math.floor((t-e)/864e5)>=7}},{key:"isLoaded",value:function(){return p("in Lotame isLoaded"),!0}},{key:"isReady",value:function(){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;var t=new Gt;t.version="";var 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:function(e){return this.properties[e]}},{key:"addProperty",value:function(e,t){this.properties[e]=t}},{key:"validateFor",value:function(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:function(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:function(e){this.message.type=e}},{key:"setProperty",value:function(e){this.message.properties=e}},{key:"setUserProperty",value:function(e){this.message.user_properties=e}},{key:"setUserId",value:function(e){this.message.userId=e}},{key:"setEventName",value:function(e){this.message.event=e}},{key:"updateTraits",value:function(e){this.message.context.traits=e}},{key:"getElementContent",value:function(){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:function(e){return this.rudderProperty=e,this}},{key:"setPropertyBuilder",value:function(e){return this.rudderProperty=e.build(),this}},{key:"setUserProperty",value:function(e){return this.rudderUserProperty=e,this}},{key:"setUserPropertyBuilder",value:function(e){return this.rudderUserProperty=e.build(),this}},{key:"setEvent",value:function(e){return this.event=e,this}},{key:"setUserId",value:function(e){return this.userId=e,this}},{key:"setChannel",value:function(e){return this.channel=e,this}},{key:"setType",value:function(e){return this.type=e,this}},{key:"build",value:function(){var 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){var t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(t){var n=new Uint8Array(16);e.exports=function(){return t(n),n}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(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);var Xt,en,tn=function(e,t){var n=t||0,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("")},nn=0,rn=0;var on=function(e,t,n){var r=t&&n||0,i=t||[],o=(e=e||{}).node||Xt,s=void 0!==e.clockseq?e.clockseq:en;if(null==o||null==s){var a=Yt();null==o&&(o=Xt=[1|a[0],a[1],a[2],a[3],a[4],a[5]]),null==s&&(s=en=16383&(a[6]<<8|a[7]))}var u=void 0!==e.msecs?e.msecs:(new Date).getTime(),c=void 0!==e.nsecs?e.nsecs:rn+1,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;var 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;var 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(var f=0;f<6;++f)i[r+f]=o[f];return t||tn(i)};var sn=function(e,t,n){var r=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var i=(e=e||{}).random||(e.rng||Yt)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t)for(var o=0;o<16;++o)t[r+o]=i[o];return t||tn(i)},an=sn;an.v1=on,an.v4=sn;var un=an,cn=un.v4,ln={_data:{},length:0,setItem:function(e,t){return this._data[e]=t,this.length=Pt(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=Pt(this._data).length,null},clear:function(){this._data={},this.length=0},key:function(e){return Pt(this._data)[e]}};var dn={defaultEngine:function(){try{if(!window.localStorage)return!1;var e=cn();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:ln,inMemoryEngine:ln},pn=dn.defaultEngine,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){var n=this._createValidKey(e);if(n)try{this.engine.setItem(n,ue.stringify(t))}catch(n){(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})(n)&&(this._swapEngine(),this.set(e,t))}},hn.prototype.get=function(e){try{var t=this.engine.getItem(this._createValidKey(e));return null===t?null:ue.parse(t)}catch(e){return null}},hn.prototype.remove=function(e){this.engine.removeItem(this._createValidKey(e))},hn.prototype._createValidKey=function(e){var t,n=this.name,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(){var e=this;Lt((function(t){var n=e.get(t);fn.setItem([e.name,e.id,t].join("."),n),e.remove(t)}),this.keys),this.engine=fn};var gn=hn;var yn={setTimeout:function(e,t){return window.setTimeout(e,t)},clearTimeout:function(e){return window.clearTimeout(e)},Date:window.Date},mn=yn;function vn(){this.tasks={},this.nextId=1}vn.prototype.now=function(){return+new mn.Date},vn.prototype.run=function(e,t){var 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){var n=this;return function(){return delete n.tasks[e],t()}},vn.setClock=function(e){mn=e},vn.resetClock=function(){mn=yn};var bn=vn,wn=kn;function kn(e){return kn.enabled(e)?function(t){t=In(t);var n=new Date,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(var t=(e||"").split(/[\s,]+/),n=t.length,r=0;r=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;tthis.maxAttempts)},Tn.prototype.getDelay=function(e){var t=this.backoff.MIN_RETRY_DELAY*Math.pow(this.backoff.FACTOR,e);if(this.backoff.JITTER){var n=Math.random(),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){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()},Tn.prototype._processHead=function(){var e=this,t=this._store;this._schedule.cancel(this._processId);var n=t.get(this.keys.QUEUE)||[],r=t.get(this.keys.IN_PROGRESS)||{},i=this._schedule.now(),o=[];function s(n,r){o.push({item:n.item,done:function(i,o){var 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(var a=Object.keys(r).length;n.length&&n[0].time<=i&&a++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(){var e=this;Lt((function(t){t.id!==e.id&&(e._schedule.now()-t.get(e.keys.ACK)=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:function(e,t){var n=e.getElementContent(),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);var 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){var t=function(t){var 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){var n=e.target||e.srcElement,r=void 0;Ln(n)&&(n=n.parentNode);if(jn(n,e)){if("form"==n.tagName.toLowerCase()){r={};for(var i=0;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}var Fn=function(e,t,n){var r=!1;return n=n||Kn,i.count=e,0===e?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):0!==i.count||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=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.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:function(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 null!=qt[e.name]})),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:function(e){var t=this,n=this;if(p("supported intgs ",qt),!e||0==e.length)return this.readyCallback&&this.readyCallback(),void(this.toBeProcessedByIntegrationArray=[]);e.forEach((function(e){try{p("[Analytics] init :: trying to initialize integration name:: ",e.name);var 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:function(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){var n=t[0];t.shift(),Object.keys(t[0].message.integrations).length>0&&_(t[0].message.integrations);for(var r=E(t[0].message.integrations,e.clientIntegrationObjects),i=0;i1&&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:function(e,n,r,i,o){"function"==typeof i&&(o=i,i=null),"function"==typeof r&&(o=r,i=r=null),"function"==typeof n&&(o=n,i=r=n=null),"object"===t(e)&&(i=n,r=e,n=e=null),"object"===t(n)&&(i=r,r=n,n=null),"string"==typeof e&&"string"!=typeof n&&(n=e,e=null),this.sendAdblockPage&&"RudderJS-Initiated"!=e&&this.sendSampleRequest(),this.processPage(e,n,r,i,o)}},{key:"track",value:function(e,t,n,r){"function"==typeof n&&(r=n,n=null),"function"==typeof t&&(r=t,n=null,t=null),this.processTrack(e,t,n,r)}},{key:"identify",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.userId),this.processIdentify(e,n,r,i)}},{key:"alias",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(n)&&(r=n,n=null);var 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:function(e,n,r,i){if(arguments.length){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.groupId),this.groupId=e,this.storage.setGroupId(this.groupId);var o=(new Wt).setType("group").build();if(n)for(var 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:function(e,t,n,r,i){var 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:function(e,t,n,r){var i=(new Wt).setType("track").build();e&&i.setEventName(e),t?i.setProperty(t):i.setProperty({}),this.trackEvent(i,n,r)}},{key:"processIdentify",value:function(e,t,n,r){e&&this.userId&&e!==this.userId&&this.reset(),this.userId=e,this.storage.setUserId(this.userId);var i=(new Wt).setType("identify").build();if(t){for(var o in t)this.userTraits[o]=t[o];this.storage.setUserTraits(this.userTraits)}this.identifyUser(i,n,r)}},{key:"identifyUser",value:function(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=Object.assign({},e.message.context.traits),this.storage.setUserTraits(this.userTraits)),this.processAndSendDataToDestinations("identify",e,t,n)}},{key:"trackPage",value:function(e,t,n){this.processAndSendDataToDestinations("page",e,t,n)}},{key:"trackEvent",value:function(e,t,n){this.processAndSendDataToDestinations("track",e,t,n)}},{key:"processAndSendDataToDestinations",value:function(e,t,n,r){try{this.anonymousId||this.setAnonymousId(),t.message.context.page=w(),t.message.context.traits=Object.assign({},this.userTraits),p("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=Object.assign({},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]),"All"!=e&&null!=g[e]&&g[e]!=e&&delete i[e])})),Gn.call(this,t,e),p(e+" is called "),r&&r()}catch(e){b(e)}var i}},{key:"processOptionsParam",value:function(e,t){var n=["integrations","anonymousId","originalTimestamp"];for(var r in t)if(n.includes(r))e.message[r]=t[r];else if("context"!==r)e.message.context[r]=t[r];else for(var i in t[r])e.message.context[i]=t[r][i]}},{key:"getPageProperties",value:function(e){var t=w();for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e}},{key:"reset",value:function(){this.userId="",this.userTraits={},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||m(),this.storage.setAnonymousId(this.anonymousId)}},{key:"load",value:function(e,n,r){var i=this;p("inside load ");var o="https://api.rudderlabs.com/sourceConfig/?p=web&v=1.1.2";if(!e||!n||0==n.length)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&&"object"==t(r.sendAdblockPageOptions)&&(this.sendAdblockPageOptions=r.sendAdblockPageOptions),r&&r.clientSuppliedCallbacks){var 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){var i,o=r.bind(e);(i=new XMLHttpRequest).open("GET",t,!0),i.setRequestHeader("Authorization","Basic "+btoa(n+":")),i.onload=function(){var e=i.status;200==e?(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:function(e){"function"!=typeof e?f("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)&&(p("registerCallbacks",e,t.clientSuppliedCallbacks[e]),t.on(e,t.clientSuppliedCallbacks[e]))}))}},{key:"sendSampleRequest",value:function(){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);var Vn=!!window.rudderanalytics&&window.rudderanalytics.push==Array.prototype.push,zn=window.rudderanalytics?window.rudderanalytics[0]:[];if(zn.length>0&&"load"==zn[0]){var Jn=zn[0];zn.shift(),p("=====from init, calling method:: ",Jn),Hn[Jn].apply(Hn,u(zn))}if(Vn){for(var Wn=1;Wne.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1?t:t+e:window.location.href,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("canonical"===e.getAttribute("rel"))return e.getAttribute("href")}function I(e,t){var n=e.revenue;return!n&&t&&t.match(/^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i)&&(n=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}}(n)}function _(e){Object.keys(e).forEach((function(t){e.hasOwnProperty(t)&&(h[t]&&(e[h[t]]=e[t]),"All"!=t&&null!=h[t]&&h[t]!=t&&delete e[t])}))}function E(e,n){var r=[];if(!n||0==n.length)return r;var i=!0;return"string"==typeof n[0]?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t]&&0==e[t]&&(n=!1),n&&r.push(t)}else null!=e[t]&&1==e[t]&&r.push(t)})),r):"object"==t(n[0])?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t.name]&&0==e[t.name]&&(n=!1),n&&r.push(t)}else null!=e[t.name]&&1==e[t.name]&&r.push(t)})),r):void 0}var A={TRACK:"track",PAGE:"page",IDENTIFY:"identify"},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);var n=document.createElement("script");n.src=t,n.async=!0,n.type="text/javascript",n.id=e;var r=document.getElementsByTagName("script")[0];p("==script==",r),r.parentNode.insertBefore(n,r)}var O=function(){function e(t){n(this,e),this.hubId=t.hubID,this.name="HS"}return i(e,[{key:"init",value:function(){T("hubspot-integration","http://js.hs-scripts.com/"+this.hubId+".js"),p("===in init HS===")}},{key:"identify",value:function(e){p("in HubspotAnalyticsManager identify");var n=e.message.context.traits,r={};for(var i in n)if(Object.getOwnPropertyDescriptor(n,i)&&n[i]){var o=i;"[object Date]"==toString.call(n[i])?r[o]=n[i].getTime():r[o]=n[i]}var s=e.message.context.user_properties;for(var a in s){if(Object.getOwnPropertyDescriptor(s,a)&&s[a])r[a]=s[a]}(p(r),void 0!==("undefined"==typeof window?"undefined":t(window)))&&(window._hsq=window._hsq||[]).push(["identify",r])}},{key:"track",value:function(e){p("in HubspotAnalyticsManager track");var t=window._hsq=window._hsq||[],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:function(e){p("in HubspotAnalyticsManager page");var 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:function(){return p("in hubspot isLoaded"),!(!window._hsq||window._hsq.push===Array.prototype.push)}},{key:"isReady",value:function(){return!(!window._hsq||window._hsq.push===Array.prototype.push)}}]),e}(),S=Object.prototype.toString;var P=function e(t){var 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 null===e?"null":void 0===e?"undefined":e!=e?"nan":e&&1===e.nodeType?"element":null!=(t=e)&&(t._isBuffer||t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t))?"buffer":typeof(e=e.valueOf?e.valueOf():Object.prototype.valueOf.apply(e));var t}(t);if("object"===n){var r={};for(var i in t)t.hasOwnProperty(i)&&(r[i]=e(t[i]));return r}if("array"===n){r=new Array(t.length);for(var o=0,s=t.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 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=31},t.storage="undefined"!=typeof chrome&&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())}))),F=(q.log,q.formatArgs,q.save,q.load,q.useColors,q.storage,q.colors,q("cookie")),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||{};var r=z(e)+"="+z(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i1)))/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)}var A=t.stringify;t.stringify=function(e,t,n){var r=u.prototype.toJSON;u.prototype.toJSON=E;var i=A(e,t,n);return u.prototype.toJSON=r,i}}else{var C=function(e){var t=e.charCodeAt(0),n=k[t];return n||"\\u00"+I(2,t.toString(16))},T=/[\x00-\x1f\x22\x5c]/g,O=function(e){return T.lastIndex=0,'"'+(T.test(e)?e.replace(T,C):e)+'"'},S=function(e,t,n,r,i,o,s){var a,c,d,p,f,g,m,v,b;if(y((function(){a=t[e]})),"object"==typeof a&&a&&(a.getUTCFullYear&&"[object Date]"==h.call(a)&&a.toJSON===u.prototype.toJSON?a=_(a):"function"==typeof a.toJSON&&(a=a.toJSON(e))),n&&(a=n.call(t,e,a)),null==a)return void 0===a?a:"null";switch("object"==(c=typeof a)&&(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("object"==typeof a){for(m=s.length;m--;)if(s[m]===a)throw l();if(s.push(a),p=[],v=o,o+=i,"[object Array]"==d){for(g=0,m=a.length;g0)for(r>10&&(r=10),i="";i.length=48&&i<=57||i>=97&&i<=102||i>=65&&i<=70||D();e+=R("0x"+o.slice(t,P));break;default:D()}else{if(34==i)break;for(i=o.charCodeAt(P),t=P;i>=32&&92!=i&&34!=i;)i=o.charCodeAt(++P);e+=o.slice(t,P)}if(34==o.charCodeAt(P))return P++,e;D();default:if(t=P,45==i&&(r=!0,i=o.charCodeAt(++P)),i>=48&&i<=57){for(48==i&&((i=o.charCodeAt(P+1))>=48&&i<=57)&&D(),r=!1;P=48&&i<=57);P++);if(46==o.charCodeAt(P)){for(n=++P;n57);n++);n==P&&D(),P=n}if(101==(i=o.charCodeAt(P))||69==i){for(43!=(i=o.charCodeAt(++P))&&45!=i||P++,n=P;n57);n++);n==P&&D(),P=n}return+o.slice(t,P)}r&&D();var a=o.slice(P,P+4);if("true"==a)return P+=4,!0;if("fals"==a&&101==o.charCodeAt(P+4))return P+=5,!1;if("null"==a)return P+=4,null;D()}return"$"},L=function(e){var t,n;if("$"==e&&D(),"string"==typeof e){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&&"string"==typeof e&&"@"==(b?e.charAt(0):e[0])&&":"==U()||D(),t[e.slice(1)]=L(U());return t}D()}return e},M=function(e,t,n){var r=N(e,t,n);void 0===r?delete e[t]:e[t]=r},N=function(e,t,n){var r,i=e[t];if("object"==typeof i&&i)if("[object Array]"==h.call(i))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){var n,r;return P=0,x=""+e,n=L(U()),"$"!=U()&&D(),P=x=null,t&&"[object Function]"==h.call(t)?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{var a=i.JSON,u=i.JSON3,c=!1,l=s(i,i.JSON3={noConflict:function(){return c||(c=!0,i.JSON=a,i.JSON3=u,a=u=null),l}});i.JSON={parse:l.parse,stringify:l.stringify}}}).call(x)})),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){var t=document.createElement("a");return t.href=e,{href:t.href,host:t.host||location.host,port:"0"===t.port||""===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 0==e.indexOf("//")||!!~e.indexOf("://")},t.isRelative=function(e){return!t.isAbsolute(e)},t.isCrossDomain=function(e){e=t.parse(e);var n=t.parse(window.location.href);return e.hostname!==n.hostname||e.port!==n.port||e.protocol!==n.protocol}})),le=(ce.parse,ce.isAbsolute,ce.isRelative,ce.isCrossDomain,R((function(e,t){(t=e.exports=function(e){function r(){}function o(){var e=o,r=+new Date,s=r-(n||r);e.diff=s,e.prev=n,e.curr=r,n=r,null==e.useColors&&(e.useColors=t.useColors()),null==e.color&&e.useColors&&(e.color=i());var a=Array.prototype.slice.call(arguments);a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&(a=["%o"].concat(a));var u=0;a[0]=a[0].replace(/%([a-z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=t.formatters[r];if("function"==typeof i){var o=a[u];n=i.call(e,o),a.splice(u,1),u--}return n})),"function"==typeof t.formatArgs&&(a=t.formatArgs.apply(e,a));var c=o.log||t.log||console.log.bind(console);c.apply(e,a)}r.enabled=!1,o.enabled=!0;var 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(var n=(e||"").split(/[\s,]+/),r=n.length,i=0;i=31},t.storage="undefined"!=typeof chrome&&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())}))),pe=(de.log,de.formatArgs,de.save,de.load,de.useColors,de.storage,de.colors,de("cookie")),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||{};var r=me(e)+"="+me(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i=0;--o)i.push(t.slice(o).join("."));return i},r.cookie=fe,t=e.exports=r})),we=new(function(){function e(t){n(this,e),this._options={},this.options(t)}return i(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="."+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:function(e,t){try{return t=ue.stringify(t),K(e,t,P(this._options)),!0}catch(e){return!1}}},{key:"get",value:function(e){var t;try{return t=(t=K(e))?ue.parse(t):null}catch(e){return t||null}}},{key:"remove",value:function(e){try{return K(e,null,P(this._options)),!0}catch(e){return!1}}}]),e}())({}),ke=function(){var e,t={},n="undefined"!=typeof window?window:x,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){null==r&&(r=n,n=null),null==n&&(n={});var i=t.get(e,n);r(i),t.set(e,i)},t.getAll=function(){var 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("string"==typeof e)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){var 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(var r=0;rdocument.w=window<\/script>'),o.close(),i=o.w.frames[0].document,e=i.createElement("div")}catch(t){e=r.createElement("div"),i=r.body}var s=function(n){return function(){var r=Array.prototype.slice.call(arguments,0);r.unshift(e),i.appendChild(e),e.addBehavior("#default#userData"),e.load("localStorage");var o=n.apply(t,r);return i.removeChild(e),o}},a=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g"),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);var 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){var t=e.XMLDocument.documentElement.attributes;e.load("localStorage");for(var 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{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}(),Ie=new(function(){function e(t){n(this,e),this._options={},this.enabled=!1,this.options(t)}return i(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;se(e,{enabled:!0}),this.enabled=e.enabled&&ke.enabled,this._options=e}},{key:"set",value:function(e,t){return!!this.enabled&&ke.set(e,t)}},{key:"get",value:function(e){return this.enabled?ke.get(e):null}},{key:"remove",value:function(e){return!!this.enabled&&ke.remove(e)}}]),e}())({}),_e="rl_user_id",Ee="rl_trait",Ae="rl_anonymous_id",Ce="rl_group_id",Te="rl_group_trait",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:function(e,t){this.storage.set(e,t)}},{key:"setUserId",value:function(e){"string"==typeof e?this.storage.set(_e,e):f("[Storage] setUserId:: userId should be string")}},{key:"setUserTraits",value:function(e){this.storage.set(Ee,e)}},{key:"setGroupId",value:function(e){"string"==typeof e?this.storage.set(Ce,e):f("[Storage] setGroupId:: groupId should be string")}},{key:"setGroupTraits",value:function(e){this.storage.set(Te,e)}},{key:"setAnonymousId",value:function(e){"string"==typeof e?this.storage.set(Ae,e):f("[Storage] setAnonymousId:: anonymousId should be string")}},{key:"getItem",value:function(e){return this.storage.get(e)}},{key:"getUserId",value:function(){return this.storage.get(_e)}},{key:"getUserTraits",value:function(){return this.storage.get(Ee)}},{key:"getGroupId",value:function(){return this.storage.get(Ce)}},{key:"getGroupTraits",value:function(){return this.storage.get(Te)}},{key:"getAnonymousId",value:function(){return this.storage.get(Ae)}},{key:"removeItem",value:function(e){return this.storage.remove(e)}},{key:"clear",value:function(){this.storage.remove(_e),this.storage.remove(Ee)}}]),e}()),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(){!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});var e=Oe.getUserId();e&&""!==e&&ga("rudder_ga.set","userId",e),p("===in init GA===")}},{key:"identify",value:function(e){var t=""!==e.message.userId?e.message.userId:e.message.anonymousId;ga("rudder_ga.set","userId",t),p("in GoogleAnalyticsManager identify")}},{key:"track",value:function(e){var t=e.message.event,n=e.message.event,r=e.message.event,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:function(e){p("in GoogleAnalyticsManager page");var t=e.message.properties&&e.message.properties.path?e.message.properties.path:void 0,n=e.message.properties&&e.message.properties.title?e.message.properties.title:void 0,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:function(){return p("in GA isLoaded"),!!window.gaplugins}},{key:"isReady",value:function(){return!!window.gaplugins}}]),e}(),Pe=function(){function e(t){n(this,e),this.siteId=t.siteID,this.name="HOTJAR",this._ready=!1}return i(e,[{key:"init",value:function(){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:function(e){if(e.message.userId||e.message.anonymousId){var t=e.message.context.traits;window.hj("identify",e.message.userId,t)}else p("[Hotjar] identify:: user id is required")}},{key:"track",value:function(e){p("[Hotjar] track:: method not supported")}},{key:"page",value:function(e){p("[Hotjar] page:: method not supported")}},{key:"isLoaded",value:function(){return this._ready}},{key:"isReady",value:function(){return this._ready}}]),e}(),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(){!function(e,t,n){p("in script loader=== "+e);var r=n.createElement("script");r.src=t,r.async=1,r.type="text/javascript",r.id=e;var 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:function(e){p("[GoogleAds] identify:: method not supported")}},{key:"track",value:function(e){p("in GoogleAdsAnalyticsManager track");var t=this.getConversionData(this.clickEventConversions,e.message.event);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName,i=this.conversionId+"/"+n,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:function(e){p("in GoogleAdsAnalyticsManager page");var t=this.getConversionData(this.pageLoadConversions,e.message.name);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName;window.gtag("event",r,{send_to:this.conversionId+"/"+n})}}},{key:"getConversionData",value:function(e,t){var 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:function(){return window.dataLayer.push!==Array.prototype.push}},{key:"isReady",value:function(){return window.dataLayer.push!==Array.prototype.push}}]),e}(),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:function(){p("===in init VWO===");var e=this.accountId,t=this.settingsTolerance,n=this.libraryTolerance,r=this.useExistingJquery,i=this.isSPA;window._vwo_code=function(){var o=!1,s=document;return{use_existing_jquery:function(){return r},library_tolerance:function(){return n},finish:function(){if(!o){o=!0;var e=s.getElementById("_vis_opt_path_hides");e&&e.parentNode.removeChild(e)}},finished:function(){return o},load:function(e){var 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:function(){var n=setTimeout("_vwo_code.finish()",t),r=s.createElement("style"),o="body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}",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:function(){var e=this;window.VWO=window.VWO||[];var t=this;window.VWO.push(["onVariationApplied",function(n){if(n){p("Variation Applied");var r=n[1],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:function(e){p("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;p("Revenue",t),window.VWO=window.VWO||[],window.VWO.push(["track.revenueConversion",t])}}},{key:"page",value:function(e){p("method not supported")}},{key:"isLoaded",value:function(){return!!window._vwo_code}},{key:"isReady",value:function(){return!!window._vwo_code}}]),e}(),je=function(){function e(t){n(this,e),this.containerID=t.containerID,this.name="GOOGLETAGMANAGER"}return i(e,[{key:"init",value:function(){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"});var o=t.getElementsByTagName(n)[0],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:function(e){p("[GTM] identify:: method not supported")}},{key:"track",value:function(e){p("===in track GoogleTagManager===");var t=e.message,n=a({event:t.event,userId:t.userId,anonymousId:t.anonymousId},t.properties);this.sendToGTMDatalayer(n)}},{key:"page",value:function(e){p("===in page GoogleTagManager===");var t,n=e.message,r=n.name,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");var o=a({event:t,userId:n.userId,anonymousId:n.anonymousId},n.properties);this.sendToGTMDatalayer(o)}},{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}(),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){var i=t.dataCenter.trim().split("-");"eu"===i[0].toLowerCase()?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: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(){p("===in init Braze==="),function(e,t,n,r,i){e.appboy={},e.appboyQueue=[];for(var 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>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&n.rotl(e,8)|4278255360&n.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n>>6*(3-o)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,i=0;r>>6-2*i);return n}};e.exports=n}()})),Le={utf8:{stringToBytes:function(e){return Le.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(Le.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n>>24)|4278255360&(a[f]<<24|a[f]>>>8);a[u>>>5]|=128<>>9<<4)]=u;var h=o._ff,g=o._gg,y=o._hh,m=o._ii;for(f=0;f>>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){var a=e+(t&n|~t&r)+(i>>>0)+s;return(a<>>32-o)+t},o._gg=function(e,t,n,r,i,o,s){var a=e+(t&r|n&~r)+(i>>>0)+s;return(a<>>32-o)+t},o._hh=function(e,t,n,r,i,o,s){var a=e+(t^n^r)+(i>>>0)+s;return(a<>>32-o)+t},o._ii=function(e,t,n,r,i,o,s){var a=e+(n^(t|~r))+(i>>>0)+s;return(a<>>32-o)+t},o._blocksize=16,o._digestsize=16,e.exports=function(e,n){if(null==e)throw new Error("Illegal argument "+e);var r=t.wordsToBytes(o(e,n));return n&&n.asBytes?r:n&&n.asString?i.bytesToString(r):t.bytesToHex(r)}}()})),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: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 n=document,r=function e(){e.c(arguments)};r.q=[],r.c=function(e){r.q.push(e)},e.Intercom=r;var i=function(){var e=n.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://widget.intercom.io/widget/"+window.intercomSettings.app_id;var t=n.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)};"complete"===document.readyState?(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:function(){window.Intercom("update")}},{key:"identify",value:function(e){var n={},r=e.message.context;if(null!=(r.Intercom?r.Intercom:null)){var i=r.Intercom.user_hash?r.Intercom.user_hash:null;null!=i&&(n.user_hash=i);var o=r.Intercom.hideDefaultLauncher?r.Intercom.hideDefaultLauncher:null;null!=o&&(n.hide_default_launcher=o)}Object.keys(r.traits).forEach((function(e){if(r.traits.hasOwnProperty(e)){var i=r.traits[e];if("company"===e){var o=[],s={};"string"==typeof r.traits[e]&&(s.company_id=Ke(r.traits[e]));var a="object"==t(r.traits[e])&&Object.keys(r.traits[e])||[];a.forEach((function(t){a.hasOwnProperty(t)&&("id"!=t?s[t]=r.traits[e][t]:s.company_id=r.traits[e][t])})),"object"!=t(r.traits[e])||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:function(e){var t={},n=e.message;(n.properties?Object.keys(n.properties):null).forEach((function(e){var 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:function(){return!!window.intercom_code}},{key:"isReady",value:function(){return!!window.intercom_code}}]),e}(),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:function(){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:function(e){p("in Keen identify");var t=e.message.context.traits,n=e.message.userId?e.message.userId:e.message.anonymousId,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:function(e){p("in Keen track");var t=e.message.event,n=e.message.properties;n=this.getAddOn(n),this.client.recordEvent(t,n)}},{key:"page",value:function(e){p("in Keen page");var t=e.message.name,n=e.message.properties?e.message.properties.category:void 0,r="Loaded a Page";t&&(r="Viewed "+t+" page"),n&&t&&(r="Viewed "+n+" "+t+" page");var i=e.message.properties;i=this.getAddOn(i),this.client.recordEvent(r,i)}},{key:"isLoaded",value:function(){return p("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}(),Ve=Object.prototype,ze=Ve.hasOwnProperty,Je=Ve.toString;"function"==typeof Symbol&&(qe=Symbol.prototype.valueOf),"function"==typeof BigInt&&(Fe=BigInt.prototype.valueOf);var We=function(e){return e!=e},$e={boolean:1,number:1,string:1,undefined:1},Ye=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,Qe=/^[A-Fa-f0-9]+$/,Ze={};Ze.a=Ze.type=function(e,t){return typeof e===t},Ze.defined=function(e){return void 0!==e},Ze.empty=function(e){var t,n=Je.call(e);if("[object Array]"===n||"[object Arguments]"===n||"[object String]"===n)return 0===e.length;if("[object Object]"===n){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;var n,r=Je.call(e);if(r!==Je.call(t))return!1;if("[object Object]"===r){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("[object Array]"===r){if((n=e.length)!==t.length)return!1;for(;n--;)if(!Ze.equal(e[n],t[n]))return!1;return!0}return"[object Function]"===r?e.prototype===t.prototype:"[object Date]"===r&&e.getTime()===t.getTime()},Ze.hosted=function(e,t){var n=typeof t[e];return"object"===n?!!t[e]:!$e[n]},Ze.instance=Ze.instanceof=function(e,t){return e instanceof t},Ze.nil=Ze.null=function(e){return null===e},Ze.undef=Ze.undefined=function(e){return void 0===e},Ze.args=Ze.arguments=function(e){var t="[object Arguments]"===Je.call(e),n=!Ze.array(e)&&Ze.arraylike(e)&&Ze.object(e)&&Ze.fn(e.callee);return t||n},Ze.array=Array.isArray||function(e){return"[object Array]"===Je.call(e)},Ze.args.empty=function(e){return Ze.args(e)&&0===e.length},Ze.array.empty=function(e){return Ze.array(e)&&0===e.length},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"[object Boolean]"===Je.call(e)},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"[object Date]"===Je.call(e)},Ze.date.valid=function(e){return Ze.date(e)&&!isNaN(Number(e))},Ze.element=function(e){return void 0!==e&&"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&1===e.nodeType},Ze.error=function(e){return"[object Error]"===Je.call(e)},Ze.fn=Ze.function=function(e){if("undefined"!=typeof window&&e===window.alert)return!0;var t=Je.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t||"[object AsyncFunction]"===t},Ze.number=function(e){return"[object Number]"===Je.call(e)},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){var n=Ze.infinite(e),r=Ze.infinite(t),i=Ze.number(e)&&!We(e)&&Ze.number(t)&&!We(t)&&0!==t;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(var n=t.length;--n>=0;)if(e=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&&e<=n},Ze.object=function(e){return"[object Object]"===Je.call(e)},Ze.primitive=function(e){return!e||!("object"==typeof e||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"[object RegExp]"===Je.call(e)},Ze.string=function(e){return"[object String]"===Je.call(e)},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"function"==typeof Symbol&&"[object Symbol]"===Je.call(e)&&"symbol"==typeof qe.call(e)},Ze.bigint=function(e){return"function"==typeof BigInt&&"[object BigInt]"===Je.call(e)&&"bigint"==typeof Fe.call(e)};var Xe,et=Ze,tt=Object.prototype.hasOwnProperty,nt=function(e){for(var t=Array.prototype.slice.call(arguments,1),n=0;n-1&&s.push([a,n[a]])}},{key:"initAfterPage",value:function(){var e,t=this;e=function(){var e,n,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:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,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:function(){p("===in init Comscore init===")}},{key:"identify",value:function(e){p("in Comscore identify")}},{key:"track",value:function(e){p("in Comscore track")}},{key:"page",value:function(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:function(e){p("=====in loadConfig====="),this.comScoreParams=this.mapComscoreParams(e.message.properties),window._comscore=window._comscore||[],window._comscore.push(this.comScoreParams)}},{key:"initAfterPage",value:function(){p("=====in initAfterPage====="),function(){var e=document.createElement("script"),t=document.getElementsByTagName("script")[0];e.async=!0,e.src=("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,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:function(e){p("=====in mapComscoreParams=====");var t=this.comScoreBeaconParam,n={};return Object.keys(t).forEach((function(r){if(r in e){var i=t[r],o=e[r];n[i]=o}})),n.c1="2",n.c2=this.c2ID,p("=====in mapComscoreParams=====",n),n}},{key:"isLoaded",value:function(){return p("in Comscore isLoaded"),!this.isFirstPageCallMade||!!window.COMSCORE}},{key:"isReady",value:function(){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=0&&et.date(f))l[p]=f.toISOTring().split("T")[0];else if(a.hasOwnProperty(p))a[p]&&"string"==typeof f&&(l[p]=sha256(f));else{var h=r.indexOf(p)>=0,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:function(e){this.storage.setItem(Nt,e)}},{key:"getLotameSynchTime",value:function(){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){var 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){var t=e.key,n=e.value;i.mappings[t]=n}))}return i(e,[{key:"init",value:function(){p("===in init Lotame==="),window.LOTAME_SYNCH_CALLBACK=function(){}}},{key:"addPixel",value:function(e,t,n){p("Adding pixel for :: "+e);var 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:function(e){p("Adding iframe for :: "+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;"),p("IFrame :: "+t),document.getElementsByTagName("body")[0].appendChild(t)}},{key:"syncPixel",value:function(e){var t=this;if(p("===== in syncPixel ======"),p("Firing DSP Pixel URLs"),this.dspUrlSettingsPixel&&this.dspUrlSettingsPixel.length>0){var n=Date.now();this.dspUrlSettingsPixel.forEach((function(r){var 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){var r=Date.now();this.dspUrlSettingsIframe.forEach((function(n){var 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:function(e,t){return Object.keys(e).forEach((function(n){if(e.hasOwnProperty(n)){var r=new RegExp("{{"+n+"}}","gi");t=t.replace(r,e[n])}})),t}},{key:"identify",value:function(e){p("in Lotame identify");var t=e.message.userId;this.syncPixel(t)}},{key:"track",value:function(e){p("track not supported for lotame")}},{key:"page",value:function(e){var t=this;if(p("in Lotame page"),p("Firing BCP Pixel URLs"),this.bcpUrlSettingsPixel&&this.bcpUrlSettingsPixel.length>0){var n=Date.now();this.bcpUrlSettingsPixel.forEach((function(e){var 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){var r=Date.now();this.bcpUrlSettingsIframe.forEach((function(e){var 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:function(){var e=this.storage.getLotameSynchTime(),t=Date.now();return!e||Math.floor((t-e)/864e5)>=7}},{key:"isLoaded",value:function(){return p("in Lotame isLoaded"),!0}},{key:"isReady",value:function(){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;var t=new Gt;t.version="";var 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:function(e){return this.properties[e]}},{key:"addProperty",value:function(e,t){this.properties[e]=t}},{key:"validateFor",value:function(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:function(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:function(e){this.message.type=e}},{key:"setProperty",value:function(e){this.message.properties=e}},{key:"setUserProperty",value:function(e){this.message.user_properties=e}},{key:"setUserId",value:function(e){this.message.userId=e}},{key:"setEventName",value:function(e){this.message.event=e}},{key:"updateTraits",value:function(e){this.message.context.traits=e}},{key:"getElementContent",value:function(){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:function(e){return this.rudderProperty=e,this}},{key:"setPropertyBuilder",value:function(e){return this.rudderProperty=e.build(),this}},{key:"setUserProperty",value:function(e){return this.rudderUserProperty=e,this}},{key:"setUserPropertyBuilder",value:function(e){return this.rudderUserProperty=e.build(),this}},{key:"setEvent",value:function(e){return this.event=e,this}},{key:"setUserId",value:function(e){return this.userId=e,this}},{key:"setChannel",value:function(e){return this.channel=e,this}},{key:"setType",value:function(e){return this.type=e,this}},{key:"build",value:function(){var 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){var t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(t){var n=new Uint8Array(16);e.exports=function(){return t(n),n}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(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);var Xt,en,tn=function(e,t){var n=t||0,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("")},nn=0,rn=0;var on=function(e,t,n){var r=t&&n||0,i=t||[],o=(e=e||{}).node||Xt,s=void 0!==e.clockseq?e.clockseq:en;if(null==o||null==s){var a=Yt();null==o&&(o=Xt=[1|a[0],a[1],a[2],a[3],a[4],a[5]]),null==s&&(s=en=16383&(a[6]<<8|a[7]))}var u=void 0!==e.msecs?e.msecs:(new Date).getTime(),c=void 0!==e.nsecs?e.nsecs:rn+1,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;var 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;var 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(var f=0;f<6;++f)i[r+f]=o[f];return t||tn(i)};var sn=function(e,t,n){var r=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var i=(e=e||{}).random||(e.rng||Yt)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t)for(var o=0;o<16;++o)t[r+o]=i[o];return t||tn(i)},an=sn;an.v1=on,an.v4=sn;var un=an,cn=un.v4,ln={_data:{},length:0,setItem:function(e,t){return this._data[e]=t,this.length=Pt(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=Pt(this._data).length,null},clear:function(){this._data={},this.length=0},key:function(e){return Pt(this._data)[e]}};var dn={defaultEngine:function(){try{if(!window.localStorage)return!1;var e=cn();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:ln,inMemoryEngine:ln},pn=dn.defaultEngine,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){var n=this._createValidKey(e);if(n)try{this.engine.setItem(n,ue.stringify(t))}catch(n){(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})(n)&&(this._swapEngine(),this.set(e,t))}},hn.prototype.get=function(e){try{var t=this.engine.getItem(this._createValidKey(e));return null===t?null:ue.parse(t)}catch(e){return null}},hn.prototype.remove=function(e){this.engine.removeItem(this._createValidKey(e))},hn.prototype._createValidKey=function(e){var t,n=this.name,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(){var e=this;Lt((function(t){var n=e.get(t);fn.setItem([e.name,e.id,t].join("."),n),e.remove(t)}),this.keys),this.engine=fn};var gn=hn;var yn={setTimeout:function(e,t){return window.setTimeout(e,t)},clearTimeout:function(e){return window.clearTimeout(e)},Date:window.Date},mn=yn;function vn(){this.tasks={},this.nextId=1}vn.prototype.now=function(){return+new mn.Date},vn.prototype.run=function(e,t){var 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){var n=this;return function(){return delete n.tasks[e],t()}},vn.setClock=function(e){mn=e},vn.resetClock=function(){mn=yn};var bn=vn,wn=kn;function kn(e){return kn.enabled(e)?function(t){t=In(t);var n=new Date,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(var t=(e||"").split(/[\s,]+/),n=t.length,r=0;r=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;tthis.maxAttempts)},Tn.prototype.getDelay=function(e){var t=this.backoff.MIN_RETRY_DELAY*Math.pow(this.backoff.FACTOR,e);if(this.backoff.JITTER){var n=Math.random(),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){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()},Tn.prototype._processHead=function(){var e=this,t=this._store;this._schedule.cancel(this._processId);var n=t.get(this.keys.QUEUE)||[],r=t.get(this.keys.IN_PROGRESS)||{},i=this._schedule.now(),o=[];function s(n,r){o.push({item:n.item,done:function(i,o){var 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(var a=Object.keys(r).length;n.length&&n[0].time<=i&&a++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(){var e=this;Lt((function(t){t.id!==e.id&&(e._schedule.now()-t.get(e.keys.ACK)=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:function(e,t){var n=e.getElementContent(),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);var 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){var t=function(t){var 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){var n=e.target||e.srcElement,r=void 0;Ln(n)&&(n=n.parentNode);if(jn(n,e)){if("form"==n.tagName.toLowerCase()){r={};for(var i=0;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}var Fn=function(e,t,n){var r=!1;return n=n||Kn,i.count=e,0===e?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):0!==i.count||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=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.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:function(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 null!=qt[e.name]})),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:function(e){var t=this,n=this;if(p("supported intgs ",qt),!e||0==e.length)return this.readyCallback&&this.readyCallback(),void(this.toBeProcessedByIntegrationArray=[]);e.forEach((function(e){try{p("[Analytics] init :: trying to initialize integration name:: ",e.name);var 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:function(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){var n=t[0];t.shift(),Object.keys(t[0].message.integrations).length>0&&_(t[0].message.integrations);for(var r=E(t[0].message.integrations,e.clientIntegrationObjects),i=0;i1&&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:function(e,n,r,i,o){"function"==typeof i&&(o=i,i=null),"function"==typeof r&&(o=r,i=r=null),"function"==typeof n&&(o=n,i=r=n=null),"object"===t(e)&&(i=n,r=e,n=e=null),"object"===t(n)&&(i=r,r=n,n=null),"string"==typeof e&&"string"!=typeof n&&(n=e,e=null),this.sendAdblockPage&&"RudderJS-Initiated"!=e&&this.sendSampleRequest(),this.processPage(e,n,r,i,o)}},{key:"track",value:function(e,t,n,r){"function"==typeof n&&(r=n,n=null),"function"==typeof t&&(r=t,n=null,t=null),this.processTrack(e,t,n,r)}},{key:"identify",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.userId),this.processIdentify(e,n,r,i)}},{key:"alias",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(n)&&(r=n,n=null);var 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:function(e,n,r,i){if(arguments.length){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.groupId),this.groupId=e,this.storage.setGroupId(this.groupId);var o=(new Wt).setType("group").build();if(n)for(var 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:function(e,t,n,r,i){var 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:function(e,t,n,r){var i=(new Wt).setType("track").build();e&&i.setEventName(e),t?i.setProperty(t):i.setProperty({}),this.trackEvent(i,n,r)}},{key:"processIdentify",value:function(e,t,n,r){e&&this.userId&&e!==this.userId&&this.reset(),this.userId=e,this.storage.setUserId(this.userId);var i=(new Wt).setType("identify").build();if(t){for(var o in t)this.userTraits[o]=t[o];this.storage.setUserTraits(this.userTraits)}this.identifyUser(i,n,r)}},{key:"identifyUser",value:function(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=Object.assign({},e.message.context.traits),this.storage.setUserTraits(this.userTraits)),this.processAndSendDataToDestinations("identify",e,t,n)}},{key:"trackPage",value:function(e,t,n){this.processAndSendDataToDestinations("page",e,t,n)}},{key:"trackEvent",value:function(e,t,n){this.processAndSendDataToDestinations("track",e,t,n)}},{key:"processAndSendDataToDestinations",value:function(e,t,n,r){try{this.anonymousId||this.setAnonymousId(),t.message.context.page=w(),t.message.context.traits=Object.assign({},this.userTraits),p("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=Object.assign({},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]),"All"!=e&&null!=g[e]&&g[e]!=e&&delete i[e])})),Gn.call(this,t,e),p(e+" is called "),r&&r()}catch(e){b(e)}var i}},{key:"processOptionsParam",value:function(e,t){var n=["integrations","anonymousId","originalTimestamp"];for(var r in t)if(n.includes(r))e.message[r]=t[r];else if("context"!==r)e.message.context[r]=t[r];else for(var i in t[r])e.message.context[i]=t[r][i]}},{key:"getPageProperties",value:function(e){var t=w();for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e}},{key:"reset",value:function(){this.userId="",this.userTraits={},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||m(),this.storage.setAnonymousId(this.anonymousId)}},{key:"load",value:function(e,n,r){var i=this;p("inside load ");var o="https://api.rudderlabs.com/sourceConfig/?p=web&v=1.1.2";if(!e||!n||0==n.length)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&&"object"==t(r.sendAdblockPageOptions)&&(this.sendAdblockPageOptions=r.sendAdblockPageOptions),r&&r.clientSuppliedCallbacks){var 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){var i,o=r.bind(e);(i=new XMLHttpRequest).open("GET",t,!0),i.setRequestHeader("Authorization","Basic "+btoa(n+":")),i.onload=function(){var e=i.status;200==e?(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:function(e){"function"!=typeof e?f("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)&&(p("registerCallbacks",e,t.clientSuppliedCallbacks[e]),t.on(e,t.clientSuppliedCallbacks[e]))}))}},{key:"sendSampleRequest",value:function(){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);var Vn=!!window.rudderanalytics&&window.rudderanalytics.push==Array.prototype.push,zn=window.rudderanalytics?window.rudderanalytics[0]:[];if(zn.length>0&&"load"==zn[0]){var Jn=zn[0];zn.shift(),p("=====from init, calling method:: ",Jn),Hn[Jn].apply(Hn,u(zn))}if(Vn){for(var Wn=1;Wne.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1?t:t+e:window.location.href,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("canonical"===e.getAttribute("rel"))return e.getAttribute("href")}function I(e,t){var n=e.revenue;return!n&&t&&t.match(/^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i)&&(n=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}}(n)}function _(e){Object.keys(e).forEach((function(t){e.hasOwnProperty(t)&&(h[t]&&(e[h[t]]=e[t]),"All"!=t&&null!=h[t]&&h[t]!=t&&delete e[t])}))}function E(e,n){var r=[];if(!n||0==n.length)return r;var i=!0;return"string"==typeof n[0]?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t]&&0==e[t]&&(n=!1),n&&r.push(t)}else null!=e[t]&&1==e[t]&&r.push(t)})),r):"object"==t(n[0])?(null!=e.All&&(i=e.All),n.forEach((function(t){if(i){var n=!0;null!=e[t.name]&&0==e[t.name]&&(n=!1),n&&r.push(t)}else null!=e[t.name]&&1==e[t.name]&&r.push(t)})),r):void 0}var A={TRACK:"track",PAGE:"page",IDENTIFY:"identify"},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);var n=document.createElement("script");n.src=t,n.async=!0,n.type="text/javascript",n.id=e;var r=document.getElementsByTagName("script")[0];p("==script==",r),r.parentNode.insertBefore(n,r)}var O=function(){function e(t){n(this,e),this.hubId=t.hubID,this.name="HS"}return i(e,[{key:"init",value:function(){T("hubspot-integration","http://js.hs-scripts.com/"+this.hubId+".js"),p("===in init HS===")}},{key:"identify",value:function(e){p("in HubspotAnalyticsManager identify");var n=e.message.context.traits,r={};for(var i in n)if(Object.getOwnPropertyDescriptor(n,i)&&n[i]){var o=i;"[object Date]"==toString.call(n[i])?r[o]=n[i].getTime():r[o]=n[i]}var s=e.message.context.user_properties;for(var a in s){if(Object.getOwnPropertyDescriptor(s,a)&&s[a])r[a]=s[a]}(p(r),void 0!==("undefined"==typeof window?"undefined":t(window)))&&(window._hsq=window._hsq||[]).push(["identify",r])}},{key:"track",value:function(e){p("in HubspotAnalyticsManager track");var t=window._hsq=window._hsq||[],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:function(e){p("in HubspotAnalyticsManager page");var 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:function(){return p("in hubspot isLoaded"),!(!window._hsq||window._hsq.push===Array.prototype.push)}},{key:"isReady",value:function(){return!(!window._hsq||window._hsq.push===Array.prototype.push)}}]),e}(),S=Object.prototype.toString;var P=function e(t){var 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 null===e?"null":void 0===e?"undefined":e!=e?"nan":e&&1===e.nodeType?"element":null!=(t=e)&&(t._isBuffer||t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t))?"buffer":typeof(e=e.valueOf?e.valueOf():Object.prototype.valueOf.apply(e));var t}(t);if("object"===n){var r={};for(var i in t)t.hasOwnProperty(i)&&(r[i]=e(t[i]));return r}if("array"===n){r=new Array(t.length);for(var o=0,s=t.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 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=31},t.storage="undefined"!=typeof chrome&&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())}))),F=(q.log,q.formatArgs,q.save,q.load,q.useColors,q.storage,q.colors,q("cookie")),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||{};var r=z(e)+"="+z(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i1)))/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)}var A=t.stringify;t.stringify=function(e,t,n){var r=u.prototype.toJSON;u.prototype.toJSON=E;var i=A(e,t,n);return u.prototype.toJSON=r,i}}else{var C=function(e){var t=e.charCodeAt(0),n=k[t];return n||"\\u00"+I(2,t.toString(16))},T=/[\x00-\x1f\x22\x5c]/g,O=function(e){return T.lastIndex=0,'"'+(T.test(e)?e.replace(T,C):e)+'"'},S=function(e,t,n,r,i,o,s){var a,c,d,p,f,g,m,v,b;if(y((function(){a=t[e]})),"object"==typeof a&&a&&(a.getUTCFullYear&&"[object Date]"==h.call(a)&&a.toJSON===u.prototype.toJSON?a=_(a):"function"==typeof a.toJSON&&(a=a.toJSON(e))),n&&(a=n.call(t,e,a)),null==a)return void 0===a?a:"null";switch("object"==(c=typeof a)&&(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("object"==typeof a){for(m=s.length;m--;)if(s[m]===a)throw l();if(s.push(a),p=[],v=o,o+=i,"[object Array]"==d){for(g=0,m=a.length;g0)for(r>10&&(r=10),i="";i.length=48&&i<=57||i>=97&&i<=102||i>=65&&i<=70||D();e+=R("0x"+o.slice(t,P));break;default:D()}else{if(34==i)break;for(i=o.charCodeAt(P),t=P;i>=32&&92!=i&&34!=i;)i=o.charCodeAt(++P);e+=o.slice(t,P)}if(34==o.charCodeAt(P))return P++,e;D();default:if(t=P,45==i&&(r=!0,i=o.charCodeAt(++P)),i>=48&&i<=57){for(48==i&&((i=o.charCodeAt(P+1))>=48&&i<=57)&&D(),r=!1;P=48&&i<=57);P++);if(46==o.charCodeAt(P)){for(n=++P;n57);n++);n==P&&D(),P=n}if(101==(i=o.charCodeAt(P))||69==i){for(43!=(i=o.charCodeAt(++P))&&45!=i||P++,n=P;n57);n++);n==P&&D(),P=n}return+o.slice(t,P)}r&&D();var a=o.slice(P,P+4);if("true"==a)return P+=4,!0;if("fals"==a&&101==o.charCodeAt(P+4))return P+=5,!1;if("null"==a)return P+=4,null;D()}return"$"},L=function(e){var t,n;if("$"==e&&D(),"string"==typeof e){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&&"string"==typeof e&&"@"==(b?e.charAt(0):e[0])&&":"==U()||D(),t[e.slice(1)]=L(U());return t}D()}return e},M=function(e,t,n){var r=N(e,t,n);void 0===r?delete e[t]:e[t]=r},N=function(e,t,n){var r,i=e[t];if("object"==typeof i&&i)if("[object Array]"==h.call(i))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){var n,r;return P=0,x=""+e,n=L(U()),"$"!=U()&&D(),P=x=null,t&&"[object Function]"==h.call(t)?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{var a=i.JSON,u=i.JSON3,c=!1,l=s(i,i.JSON3={noConflict:function(){return c||(c=!0,i.JSON=a,i.JSON3=u,a=u=null),l}});i.JSON={parse:l.parse,stringify:l.stringify}}}).call(x)})),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){var t=document.createElement("a");return t.href=e,{href:t.href,host:t.host||location.host,port:"0"===t.port||""===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 0==e.indexOf("//")||!!~e.indexOf("://")},t.isRelative=function(e){return!t.isAbsolute(e)},t.isCrossDomain=function(e){e=t.parse(e);var n=t.parse(window.location.href);return e.hostname!==n.hostname||e.port!==n.port||e.protocol!==n.protocol}})),le=(ce.parse,ce.isAbsolute,ce.isRelative,ce.isCrossDomain,R((function(e,t){(t=e.exports=function(e){function r(){}function o(){var e=o,r=+new Date,s=r-(n||r);e.diff=s,e.prev=n,e.curr=r,n=r,null==e.useColors&&(e.useColors=t.useColors()),null==e.color&&e.useColors&&(e.color=i());var a=Array.prototype.slice.call(arguments);a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&(a=["%o"].concat(a));var u=0;a[0]=a[0].replace(/%([a-z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=t.formatters[r];if("function"==typeof i){var o=a[u];n=i.call(e,o),a.splice(u,1),u--}return n})),"function"==typeof t.formatArgs&&(a=t.formatArgs.apply(e,a));var c=o.log||t.log||console.log.bind(console);c.apply(e,a)}r.enabled=!1,o.enabled=!0;var 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(var n=(e||"").split(/[\s,]+/),r=n.length,i=0;i=31},t.storage="undefined"!=typeof chrome&&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())}))),pe=(de.log,de.formatArgs,de.save,de.load,de.useColors,de.storage,de.colors,de("cookie")),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||{};var r=me(e)+"="+me(t);null==t&&(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(){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,n={},r=e.split(/ *; */);if(""==r[0])return n;for(var i=0;i=0;--o)i.push(t.slice(o).join("."));return i},r.cookie=fe,t=e.exports=r})),we=new(function(){function e(t){n(this,e),this._options={},this.options(t)}return i(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="."+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:function(e,t){try{return t=ue.stringify(t),K(e,t,P(this._options)),!0}catch(e){return!1}}},{key:"get",value:function(e){var t;try{return t=(t=K(e))?ue.parse(t):null}catch(e){return t||null}}},{key:"remove",value:function(e){try{return K(e,null,P(this._options)),!0}catch(e){return!1}}}]),e}())({}),ke=function(){var e,t={},n="undefined"!=typeof window?window:x,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){null==r&&(r=n,n=null),null==n&&(n={});var i=t.get(e,n);r(i),t.set(e,i)},t.getAll=function(){var 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("string"==typeof e)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){var 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(var r=0;rdocument.w=window<\/script>'),o.close(),i=o.w.frames[0].document,e=i.createElement("div")}catch(t){e=r.createElement("div"),i=r.body}var s=function(n){return function(){var r=Array.prototype.slice.call(arguments,0);r.unshift(e),i.appendChild(e),e.addBehavior("#default#userData"),e.load("localStorage");var o=n.apply(t,r);return i.removeChild(e),o}},a=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g"),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);var 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){var t=e.XMLDocument.documentElement.attributes;e.load("localStorage");for(var 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{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}(),Ie=new(function(){function e(t){n(this,e),this._options={},this.enabled=!1,this.options(t)}return i(e,[{key:"options",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(0===arguments.length)return this._options;se(e,{enabled:!0}),this.enabled=e.enabled&&ke.enabled,this._options=e}},{key:"set",value:function(e,t){return!!this.enabled&&ke.set(e,t)}},{key:"get",value:function(e){return this.enabled?ke.get(e):null}},{key:"remove",value:function(e){return!!this.enabled&&ke.remove(e)}}]),e}())({}),_e="rl_user_id",Ee="rl_trait",Ae="rl_anonymous_id",Ce="rl_group_id",Te="rl_group_trait",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:function(e,t){this.storage.set(e,t)}},{key:"setUserId",value:function(e){"string"==typeof e?this.storage.set(_e,e):f("[Storage] setUserId:: userId should be string")}},{key:"setUserTraits",value:function(e){this.storage.set(Ee,e)}},{key:"setGroupId",value:function(e){"string"==typeof e?this.storage.set(Ce,e):f("[Storage] setGroupId:: groupId should be string")}},{key:"setGroupTraits",value:function(e){this.storage.set(Te,e)}},{key:"setAnonymousId",value:function(e){"string"==typeof e?this.storage.set(Ae,e):f("[Storage] setAnonymousId:: anonymousId should be string")}},{key:"getItem",value:function(e){return this.storage.get(e)}},{key:"getUserId",value:function(){return this.storage.get(_e)}},{key:"getUserTraits",value:function(){return this.storage.get(Ee)}},{key:"getGroupId",value:function(){return this.storage.get(Ce)}},{key:"getGroupTraits",value:function(){return this.storage.get(Te)}},{key:"getAnonymousId",value:function(){return this.storage.get(Ae)}},{key:"removeItem",value:function(e){return this.storage.remove(e)}},{key:"clear",value:function(){this.storage.remove(_e),this.storage.remove(Ee)}}]),e}()),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(){!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});var e=Oe.getUserId();e&&""!==e&&ga("rudder_ga.set","userId",e),p("===in init GA===")}},{key:"identify",value:function(e){var t=""!==e.message.userId?e.message.userId:e.message.anonymousId;ga("rudder_ga.set","userId",t),p("in GoogleAnalyticsManager identify")}},{key:"track",value:function(e){var t=e.message.event,n=e.message.event,r=e.message.event,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:function(e){p("in GoogleAnalyticsManager page");var t=e.message.properties&&e.message.properties.path?e.message.properties.path:void 0,n=e.message.properties&&e.message.properties.title?e.message.properties.title:void 0,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:function(){return p("in GA isLoaded"),!!window.gaplugins}},{key:"isReady",value:function(){return!!window.gaplugins}}]),e}(),Pe=function(){function e(t){n(this,e),this.siteId=t.siteID,this.name="HOTJAR",this._ready=!1}return i(e,[{key:"init",value:function(){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:function(e){if(e.message.userId||e.message.anonymousId){var t=e.message.context.traits;window.hj("identify",e.message.userId,t)}else p("[Hotjar] identify:: user id is required")}},{key:"track",value:function(e){p("[Hotjar] track:: method not supported")}},{key:"page",value:function(e){p("[Hotjar] page:: method not supported")}},{key:"isLoaded",value:function(){return this._ready}},{key:"isReady",value:function(){return this._ready}}]),e}(),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(){!function(e,t,n){p("in script loader=== "+e);var r=n.createElement("script");r.src=t,r.async=1,r.type="text/javascript",r.id=e;var 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:function(e){p("[GoogleAds] identify:: method not supported")}},{key:"track",value:function(e){p("in GoogleAdsAnalyticsManager track");var t=this.getConversionData(this.clickEventConversions,e.message.event);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName,i=this.conversionId+"/"+n,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:function(e){p("in GoogleAdsAnalyticsManager page");var t=this.getConversionData(this.pageLoadConversions,e.message.name);if(t.conversionLabel){var n=t.conversionLabel,r=t.eventName;window.gtag("event",r,{send_to:this.conversionId+"/"+n})}}},{key:"getConversionData",value:function(e,t){var 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:function(){return window.dataLayer.push!==Array.prototype.push}},{key:"isReady",value:function(){return window.dataLayer.push!==Array.prototype.push}}]),e}(),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:function(){p("===in init VWO===");var e=this.accountId,t=this.settingsTolerance,n=this.libraryTolerance,r=this.useExistingJquery,i=this.isSPA;window._vwo_code=function(){var o=!1,s=document;return{use_existing_jquery:function(){return r},library_tolerance:function(){return n},finish:function(){if(!o){o=!0;var e=s.getElementById("_vis_opt_path_hides");e&&e.parentNode.removeChild(e)}},finished:function(){return o},load:function(e){var 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:function(){var n=setTimeout("_vwo_code.finish()",t),r=s.createElement("style"),o="body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}",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:function(){var e=this;window.VWO=window.VWO||[];var t=this;window.VWO.push(["onVariationApplied",function(n){if(n){p("Variation Applied");var r=n[1],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:function(e){p("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;p("Revenue",t),window.VWO=window.VWO||[],window.VWO.push(["track.revenueConversion",t])}}},{key:"page",value:function(e){p("method not supported")}},{key:"isLoaded",value:function(){return!!window._vwo_code}},{key:"isReady",value:function(){return!!window._vwo_code}}]),e}(),je=function(){function e(t){n(this,e),this.containerID=t.containerID,this.name="GOOGLETAGMANAGER"}return i(e,[{key:"init",value:function(){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"});var o=t.getElementsByTagName(n)[0],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:function(e){p("[GTM] identify:: method not supported")}},{key:"track",value:function(e){p("===in track GoogleTagManager===");var t=e.message,n=a({event:t.event,userId:t.userId,anonymousId:t.anonymousId},t.properties);this.sendToGTMDatalayer(n)}},{key:"page",value:function(e){p("===in page GoogleTagManager===");var t,n=e.message,r=n.name,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");var o=a({event:t,userId:n.userId,anonymousId:n.anonymousId},n.properties);this.sendToGTMDatalayer(o)}},{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}(),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){var i=t.dataCenter.trim().split("-");"eu"===i[0].toLowerCase()?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: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(){p("===in init Braze==="),function(e,t,n,r,i){e.appboy={},e.appboyQueue=[];for(var 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>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&n.rotl(e,8)|4278255360&n.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n>>6*(3-o)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,i=0;r>>6-2*i);return n}};e.exports=n}()})),Le={utf8:{stringToBytes:function(e){return Le.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(Le.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n>>24)|4278255360&(a[f]<<24|a[f]>>>8);a[u>>>5]|=128<>>9<<4)]=u;var h=o._ff,g=o._gg,y=o._hh,m=o._ii;for(f=0;f>>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){var a=e+(t&n|~t&r)+(i>>>0)+s;return(a<>>32-o)+t},o._gg=function(e,t,n,r,i,o,s){var a=e+(t&r|n&~r)+(i>>>0)+s;return(a<>>32-o)+t},o._hh=function(e,t,n,r,i,o,s){var a=e+(t^n^r)+(i>>>0)+s;return(a<>>32-o)+t},o._ii=function(e,t,n,r,i,o,s){var a=e+(n^(t|~r))+(i>>>0)+s;return(a<>>32-o)+t},o._blocksize=16,o._digestsize=16,e.exports=function(e,n){if(null==e)throw new Error("Illegal argument "+e);var r=t.wordsToBytes(o(e,n));return n&&n.asBytes?r:n&&n.asString?i.bytesToString(r):t.bytesToHex(r)}}()})),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: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 n=document,r=function e(){e.c(arguments)};r.q=[],r.c=function(e){r.q.push(e)},e.Intercom=r;var i=function(){var e=n.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://widget.intercom.io/widget/"+window.intercomSettings.app_id;var t=n.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)};"complete"===document.readyState?(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:function(){window.Intercom("update")}},{key:"identify",value:function(e){var n={},r=e.message.context;if(null!=(r.Intercom?r.Intercom:null)){var i=r.Intercom.user_hash?r.Intercom.user_hash:null;null!=i&&(n.user_hash=i);var o=r.Intercom.hideDefaultLauncher?r.Intercom.hideDefaultLauncher:null;null!=o&&(n.hide_default_launcher=o)}Object.keys(r.traits).forEach((function(e){if(r.traits.hasOwnProperty(e)){var i=r.traits[e];if("company"===e){var o=[],s={};"string"==typeof r.traits[e]&&(s.company_id=Ke(r.traits[e]));var a="object"==t(r.traits[e])&&Object.keys(r.traits[e])||[];a.forEach((function(t){a.hasOwnProperty(t)&&("id"!=t?s[t]=r.traits[e][t]:s.company_id=r.traits[e][t])})),"object"!=t(r.traits[e])||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:function(e){var t={},n=e.message;(n.properties?Object.keys(n.properties):null).forEach((function(e){var 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:function(){return!!window.intercom_code}},{key:"isReady",value:function(){return!!window.intercom_code}}]),e}(),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:function(){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:function(e){p("in Keen identify");var t=e.message.context.traits,n=e.message.userId?e.message.userId:e.message.anonymousId,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:function(e){p("in Keen track");var t=e.message.event,n=e.message.properties;n=this.getAddOn(n),this.client.recordEvent(t,n)}},{key:"page",value:function(e){p("in Keen page");var t=e.message.name,n=e.message.properties?e.message.properties.category:void 0,r="Loaded a Page";t&&(r="Viewed "+t+" page"),n&&t&&(r="Viewed "+n+" "+t+" page");var i=e.message.properties;i=this.getAddOn(i),this.client.recordEvent(r,i)}},{key:"isLoaded",value:function(){return p("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}(),Ve=Object.prototype,ze=Ve.hasOwnProperty,Je=Ve.toString;"function"==typeof Symbol&&(qe=Symbol.prototype.valueOf),"function"==typeof BigInt&&(Fe=BigInt.prototype.valueOf);var We=function(e){return e!=e},$e={boolean:1,number:1,string:1,undefined:1},Ye=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,Qe=/^[A-Fa-f0-9]+$/,Ze={};Ze.a=Ze.type=function(e,t){return typeof e===t},Ze.defined=function(e){return void 0!==e},Ze.empty=function(e){var t,n=Je.call(e);if("[object Array]"===n||"[object Arguments]"===n||"[object String]"===n)return 0===e.length;if("[object Object]"===n){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;var n,r=Je.call(e);if(r!==Je.call(t))return!1;if("[object Object]"===r){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("[object Array]"===r){if((n=e.length)!==t.length)return!1;for(;n--;)if(!Ze.equal(e[n],t[n]))return!1;return!0}return"[object Function]"===r?e.prototype===t.prototype:"[object Date]"===r&&e.getTime()===t.getTime()},Ze.hosted=function(e,t){var n=typeof t[e];return"object"===n?!!t[e]:!$e[n]},Ze.instance=Ze.instanceof=function(e,t){return e instanceof t},Ze.nil=Ze.null=function(e){return null===e},Ze.undef=Ze.undefined=function(e){return void 0===e},Ze.args=Ze.arguments=function(e){var t="[object Arguments]"===Je.call(e),n=!Ze.array(e)&&Ze.arraylike(e)&&Ze.object(e)&&Ze.fn(e.callee);return t||n},Ze.array=Array.isArray||function(e){return"[object Array]"===Je.call(e)},Ze.args.empty=function(e){return Ze.args(e)&&0===e.length},Ze.array.empty=function(e){return Ze.array(e)&&0===e.length},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"[object Boolean]"===Je.call(e)},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"[object Date]"===Je.call(e)},Ze.date.valid=function(e){return Ze.date(e)&&!isNaN(Number(e))},Ze.element=function(e){return void 0!==e&&"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&1===e.nodeType},Ze.error=function(e){return"[object Error]"===Je.call(e)},Ze.fn=Ze.function=function(e){if("undefined"!=typeof window&&e===window.alert)return!0;var t=Je.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t||"[object AsyncFunction]"===t},Ze.number=function(e){return"[object Number]"===Je.call(e)},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){var n=Ze.infinite(e),r=Ze.infinite(t),i=Ze.number(e)&&!We(e)&&Ze.number(t)&&!We(t)&&0!==t;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(var n=t.length;--n>=0;)if(e=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&&e<=n},Ze.object=function(e){return"[object Object]"===Je.call(e)},Ze.primitive=function(e){return!e||!("object"==typeof e||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"[object RegExp]"===Je.call(e)},Ze.string=function(e){return"[object String]"===Je.call(e)},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"function"==typeof Symbol&&"[object Symbol]"===Je.call(e)&&"symbol"==typeof qe.call(e)},Ze.bigint=function(e){return"function"==typeof BigInt&&"[object BigInt]"===Je.call(e)&&"bigint"==typeof Fe.call(e)};var Xe,et=Ze,tt=Object.prototype.hasOwnProperty,nt=function(e){for(var t=Array.prototype.slice.call(arguments,1),n=0;n-1&&s.push([a,n[a]])}},{key:"initAfterPage",value:function(){var e,t=this;e=function(){var e,n,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:function(e){return new Promise((function(t){setTimeout(t,e)}))}},{key:"_isReady",value:function(e){var t=this,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:function(){p("===in init Comscore init===")}},{key:"identify",value:function(e){p("in Comscore identify")}},{key:"track",value:function(e){p("in Comscore track")}},{key:"page",value:function(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:function(e){p("=====in loadConfig====="),this.comScoreParams=this.mapComscoreParams(e.message.properties),window._comscore=window._comscore||[],window._comscore.push(this.comScoreParams)}},{key:"initAfterPage",value:function(){p("=====in initAfterPage====="),function(){var e=document.createElement("script"),t=document.getElementsByTagName("script")[0];e.async=!0,e.src=("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,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:function(e){p("=====in mapComscoreParams=====");var t=this.comScoreBeaconParam,n={};return Object.keys(t).forEach((function(r){if(r in e){var i=t[r],o=e[r];n[i]=o}})),n.c1="2",n.c2=this.c2ID,p("=====in mapComscoreParams=====",n),n}},{key:"isLoaded",value:function(){return p("in Comscore isLoaded"),!this.isFirstPageCallMade||!!window.COMSCORE}},{key:"isReady",value:function(){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=0&&et.date(f))l[p]=f.toISOTring().split("T")[0];else if(a.hasOwnProperty(p))a[p]&&"string"==typeof f&&(l[p]=sha256(f));else{var h=r.indexOf(p)>=0,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:function(e){this.storage.setItem(Nt,e)}},{key:"getLotameSynchTime",value:function(){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){var 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){var t=e.key,n=e.value;i.mappings[t]=n}))}return i(e,[{key:"init",value:function(){p("===in init Lotame==="),window.LOTAME_SYNCH_CALLBACK=function(){}}},{key:"addPixel",value:function(e,t,n){p("Adding pixel for :: "+e);var 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:function(e){p("Adding iframe for :: "+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;"),p("IFrame :: "+t),document.getElementsByTagName("body")[0].appendChild(t)}},{key:"syncPixel",value:function(e){var t=this;if(p("===== in syncPixel ======"),p("Firing DSP Pixel URLs"),this.dspUrlSettingsPixel&&this.dspUrlSettingsPixel.length>0){var n=Date.now();this.dspUrlSettingsPixel.forEach((function(r){var 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){var r=Date.now();this.dspUrlSettingsIframe.forEach((function(n){var 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:function(e,t){return Object.keys(e).forEach((function(n){if(e.hasOwnProperty(n)){var r=new RegExp("{{"+n+"}}","gi");t=t.replace(r,e[n])}})),t}},{key:"identify",value:function(e){p("in Lotame identify");var t=e.message.userId;this.syncPixel(t)}},{key:"track",value:function(e){p("track not supported for lotame")}},{key:"page",value:function(e){var t=this;if(p("in Lotame page"),p("Firing BCP Pixel URLs"),this.bcpUrlSettingsPixel&&this.bcpUrlSettingsPixel.length>0){var n=Date.now();this.bcpUrlSettingsPixel.forEach((function(e){var 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){var r=Date.now();this.bcpUrlSettingsIframe.forEach((function(e){var 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:function(){var e=this.storage.getLotameSynchTime(),t=Date.now();return!e||Math.floor((t-e)/864e5)>=7}},{key:"isLoaded",value:function(){return p("in Lotame isLoaded"),!0}},{key:"isReady",value:function(){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;var t=new Gt;t.version="";var 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:function(e){return this.properties[e]}},{key:"addProperty",value:function(e,t){this.properties[e]=t}},{key:"validateFor",value:function(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:function(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:function(e){this.message.type=e}},{key:"setProperty",value:function(e){this.message.properties=e}},{key:"setUserProperty",value:function(e){this.message.user_properties=e}},{key:"setUserId",value:function(e){this.message.userId=e}},{key:"setEventName",value:function(e){this.message.event=e}},{key:"updateTraits",value:function(e){this.message.context.traits=e}},{key:"getElementContent",value:function(){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:function(e){return this.rudderProperty=e,this}},{key:"setPropertyBuilder",value:function(e){return this.rudderProperty=e.build(),this}},{key:"setUserProperty",value:function(e){return this.rudderUserProperty=e,this}},{key:"setUserPropertyBuilder",value:function(e){return this.rudderUserProperty=e.build(),this}},{key:"setEvent",value:function(e){return this.event=e,this}},{key:"setUserId",value:function(e){return this.userId=e,this}},{key:"setChannel",value:function(e){return this.channel=e,this}},{key:"setType",value:function(e){return this.type=e,this}},{key:"build",value:function(){var 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){var t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(t){var n=new Uint8Array(16);e.exports=function(){return t(n),n}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(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);var Xt,en,tn=function(e,t){var n=t||0,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("")},nn=0,rn=0;var on=function(e,t,n){var r=t&&n||0,i=t||[],o=(e=e||{}).node||Xt,s=void 0!==e.clockseq?e.clockseq:en;if(null==o||null==s){var a=Yt();null==o&&(o=Xt=[1|a[0],a[1],a[2],a[3],a[4],a[5]]),null==s&&(s=en=16383&(a[6]<<8|a[7]))}var u=void 0!==e.msecs?e.msecs:(new Date).getTime(),c=void 0!==e.nsecs?e.nsecs:rn+1,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;var 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;var 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(var f=0;f<6;++f)i[r+f]=o[f];return t||tn(i)};var sn=function(e,t,n){var r=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var i=(e=e||{}).random||(e.rng||Yt)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t)for(var o=0;o<16;++o)t[r+o]=i[o];return t||tn(i)},an=sn;an.v1=on,an.v4=sn;var un=an,cn=un.v4,ln={_data:{},length:0,setItem:function(e,t){return this._data[e]=t,this.length=Pt(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=Pt(this._data).length,null},clear:function(){this._data={},this.length=0},key:function(e){return Pt(this._data)[e]}};var dn={defaultEngine:function(){try{if(!window.localStorage)return!1;var e=cn();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:ln,inMemoryEngine:ln},pn=dn.defaultEngine,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){var n=this._createValidKey(e);if(n)try{this.engine.setItem(n,ue.stringify(t))}catch(n){(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})(n)&&(this._swapEngine(),this.set(e,t))}},hn.prototype.get=function(e){try{var t=this.engine.getItem(this._createValidKey(e));return null===t?null:ue.parse(t)}catch(e){return null}},hn.prototype.remove=function(e){this.engine.removeItem(this._createValidKey(e))},hn.prototype._createValidKey=function(e){var t,n=this.name,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(){var e=this;Lt((function(t){var n=e.get(t);fn.setItem([e.name,e.id,t].join("."),n),e.remove(t)}),this.keys),this.engine=fn};var gn=hn;var yn={setTimeout:function(e,t){return window.setTimeout(e,t)},clearTimeout:function(e){return window.clearTimeout(e)},Date:window.Date},mn=yn;function vn(){this.tasks={},this.nextId=1}vn.prototype.now=function(){return+new mn.Date},vn.prototype.run=function(e,t){var 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){var n=this;return function(){return delete n.tasks[e],t()}},vn.setClock=function(e){mn=e},vn.resetClock=function(){mn=yn};var bn=vn,wn=kn;function kn(e){return kn.enabled(e)?function(t){t=In(t);var n=new Date,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(var t=(e||"").split(/[\s,]+/),n=t.length,r=0;r=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;tthis.maxAttempts)},Tn.prototype.getDelay=function(e){var t=this.backoff.MIN_RETRY_DELAY*Math.pow(this.backoff.FACTOR,e);if(this.backoff.JITTER){var n=Math.random(),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){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()},Tn.prototype._processHead=function(){var e=this,t=this._store;this._schedule.cancel(this._processId);var n=t.get(this.keys.QUEUE)||[],r=t.get(this.keys.IN_PROGRESS)||{},i=this._schedule.now(),o=[];function s(n,r){o.push({item:n.item,done:function(i,o){var 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(var a=Object.keys(r).length;n.length&&n[0].time<=i&&a++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(){var e=this;Lt((function(t){t.id!==e.id&&(e._schedule.now()-t.get(e.keys.ACK)=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:function(e,t){var n=e.getElementContent(),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);var 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){var t=function(t){var 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){var n=e.target||e.srcElement,r=void 0;Ln(n)&&(n=n.parentNode);if(jn(n,e)){if("form"==n.tagName.toLowerCase()){r={};for(var i=0;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}var Fn=function(e,t,n){var r=!1;return n=n||Kn,i.count=e,0===e?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):0!==i.count||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=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.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:function(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 null!=qt[e.name]})),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:function(e){var t=this,n=this;if(p("supported intgs ",qt),!e||0==e.length)return this.readyCallback&&this.readyCallback(),void(this.toBeProcessedByIntegrationArray=[]);e.forEach((function(e){try{p("[Analytics] init :: trying to initialize integration name:: ",e.name);var 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:function(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){var n=t[0];t.shift(),Object.keys(t[0].message.integrations).length>0&&_(t[0].message.integrations);for(var r=E(t[0].message.integrations,e.clientIntegrationObjects),i=0;i1&&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:function(e,n,r,i,o){"function"==typeof i&&(o=i,i=null),"function"==typeof r&&(o=r,i=r=null),"function"==typeof n&&(o=n,i=r=n=null),"object"===t(e)&&(i=n,r=e,n=e=null),"object"===t(n)&&(i=r,r=n,n=null),"string"==typeof e&&"string"!=typeof n&&(n=e,e=null),this.sendAdblockPage&&"RudderJS-Initiated"!=e&&this.sendSampleRequest(),this.processPage(e,n,r,i,o)}},{key:"track",value:function(e,t,n,r){"function"==typeof n&&(r=n,n=null),"function"==typeof t&&(r=t,n=null,t=null),this.processTrack(e,t,n,r)}},{key:"identify",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.userId),this.processIdentify(e,n,r,i)}},{key:"alias",value:function(e,n,r,i){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(n)&&(r=n,n=null);var 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:function(e,n,r,i){if(arguments.length){"function"==typeof r&&(i=r,r=null),"function"==typeof n&&(i=n,r=null,n=null),"object"==t(e)&&(r=n,n=e,e=this.groupId),this.groupId=e,this.storage.setGroupId(this.groupId);var o=(new Wt).setType("group").build();if(n)for(var 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:function(e,t,n,r,i){var 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:function(e,t,n,r){var i=(new Wt).setType("track").build();e&&i.setEventName(e),t?i.setProperty(t):i.setProperty({}),this.trackEvent(i,n,r)}},{key:"processIdentify",value:function(e,t,n,r){e&&this.userId&&e!==this.userId&&this.reset(),this.userId=e,this.storage.setUserId(this.userId);var i=(new Wt).setType("identify").build();if(t){for(var o in t)this.userTraits[o]=t[o];this.storage.setUserTraits(this.userTraits)}this.identifyUser(i,n,r)}},{key:"identifyUser",value:function(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=Object.assign({},e.message.context.traits),this.storage.setUserTraits(this.userTraits)),this.processAndSendDataToDestinations("identify",e,t,n)}},{key:"trackPage",value:function(e,t,n){this.processAndSendDataToDestinations("page",e,t,n)}},{key:"trackEvent",value:function(e,t,n){this.processAndSendDataToDestinations("track",e,t,n)}},{key:"processAndSendDataToDestinations",value:function(e,t,n,r){try{this.anonymousId||this.setAnonymousId(),t.message.context.page=w(),t.message.context.traits=Object.assign({},this.userTraits),p("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=Object.assign({},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]),"All"!=e&&null!=g[e]&&g[e]!=e&&delete i[e])})),Gn.call(this,t,e),p(e+" is called "),r&&r()}catch(e){b(e)}var i}},{key:"processOptionsParam",value:function(e,t){var n=["integrations","anonymousId","originalTimestamp"];for(var r in t)if(n.includes(r))e.message[r]=t[r];else if("context"!==r)e.message.context[r]=t[r];else for(var i in t[r])e.message.context[i]=t[r][i]}},{key:"getPageProperties",value:function(e){var t=w();for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e}},{key:"reset",value:function(){this.userId="",this.userTraits={},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||m(),this.storage.setAnonymousId(this.anonymousId)}},{key:"load",value:function(e,n,r){var i=this;p("inside load ");var o="https://api.rudderlabs.com/sourceConfig/?p=web&v=1.1.2";if(!e||!n||0==n.length)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&&"object"==t(r.sendAdblockPageOptions)&&(this.sendAdblockPageOptions=r.sendAdblockPageOptions),r&&r.clientSuppliedCallbacks){var 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){var i,o=r.bind(e);(i=new XMLHttpRequest).open("GET",t,!0),i.setRequestHeader("Authorization","Basic "+btoa(n+":")),i.onload=function(){var e=i.status;200==e?(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:function(e){"function"!=typeof e?f("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)&&(p("registerCallbacks",e,t.clientSuppliedCallbacks[e]),t.on(e,t.clientSuppliedCallbacks[e]))}))}},{key:"sendSampleRequest",value:function(){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);var Vn=!!window.rudderanalytics&&window.rudderanalytics.push==Array.prototype.push,zn=window.rudderanalytics?window.rudderanalytics[0]:[];if(zn.length>0&&"load"==zn[0]){var Jn=zn[0];zn.shift(),p("=====from init, calling method:: ",Jn),Hn[Jn].apply(Hn,u(zn))}if(Vn){for(var Wn=1;Wn -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 let key;\n Object.keys(standard).forEach((k) => {\n if (k !== \"from\") {\n key = k;\n }\n });\n if (standard.from === event) {\n filtered.push(key);\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":["../utils/logUtil.js","../integrations/integration_cname.js","../integrations/client_server_name.js","../utils/utils.js","../utils/constants.js","../integrations/ScriptLoader.js","../integrations/HubSpot/browser.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-url/index.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/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/is/index.js","../node_modules/md5/md5.js","../integrations/INTERCOM/browser.js","../integrations/Keen/browser.js","../node_modules/to-function/index.js","../node_modules/@ndhoule/extend/index.js","../node_modules/obj-case/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/Kissmetrics/browser.js","../integrations/CustomerIO/browser.js","../node_modules/on-body/index.js","../node_modules/uuid/lib/bytesToUuid.js","../integrations/Chartbeat/browser.js","../integrations/Comscore/browser.js","../node_modules/@ndhoule/keys/index.js","../node_modules/@ndhoule/each/index.js","../integrations/FBPixel/browser.js","../integrations/Lotame/LotameStorage.js","../integrations/index.js","../integrations/Lotame/browser.js","../utils/RudderApp.js","../utils/RudderInfo.js","../utils/RudderContext.js","../utils/RudderMessage.js","../utils/RudderElement.js","../utils/RudderElementBuilder.js","../utils/RudderPayload.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/component-emitter/index.js","../node_modules/@segment/localstorage-retry/lib/index.js","../utils/EventRepository.js","../utils/autotrack.js","../node_modules/after/index.js","../analytics.js"],"sourcesContent":["var LOG_LEVEL_INFO = 1,\n LOG_LEVEL_DEBUG = 2,\n LOG_LEVEL_WARN = 3,\n LOG_LEVEL_ERROR = 4,\n LOG_LEVEL = LOG_LEVEL_ERROR;\n\nvar logger = {\n\n setLogLevel : function(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 return\n } \n },\n\n info : function(){\n if(LOG_LEVEL <= LOG_LEVEL_INFO){\n console.info(...arguments);\n }\n },\n\n debug : function(){\n if(LOG_LEVEL <= LOG_LEVEL_DEBUG){\n console.debug(...arguments);\n }\n },\n\n warn : function(){\n if(LOG_LEVEL <= LOG_LEVEL_WARN){\n console.warn(...arguments);\n }\n },\n\n error : function(){\n if(LOG_LEVEL <= LOG_LEVEL_ERROR){\n console.error(...arguments);\n }\n }\n\n};\nexport default logger;","// for sdk side native integration identification\n// add a mapping from common names to index.js exported key names as identified by Rudder\nlet 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}\n\nexport {commonNames}","// from client native integration name to server identified display name\n// add a mapping from Rudder identified key names to Rudder server recognizable names\nlet 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}\n\nexport {clientToServerNames}","//import * as XMLHttpRequestNode from \"Xmlhttprequest\";\nimport logger from \"./logUtil\";\nimport {commonNames} from \"../integrations/integration_cname\"\nimport {clientToServerNames} from \"../integrations/client_server_name\"\n\nlet XMLHttpRequestNode;\nif (!process.browser) {\n XMLHttpRequestNode = require(\"Xmlhttprequest\");\n}\n\nlet btoaNode;\nif (!process.browser) {\n btoaNode = require(\"btoa\");\n}\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 } else {\n return value;\n }\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 let 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 let 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 if (process.browser) {\n var xhr = new XMLHttpRequest();\n } else {\n var xhr = new XMLHttpRequestNode.XMLHttpRequest();\n }\n xhr.open(\"GET\", url, false);\n xhr.onload = function() {\n let status = xhr.status;\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 let cb_ = callback.bind(context);\n\n if (process.browser) {\n var xhr = new XMLHttpRequest();\n } else {\n var xhr = new XMLHttpRequestNode.XMLHttpRequest();\n }\n xhr.open(\"GET\", url, true);\n if (process.browser) {\n xhr.setRequestHeader(\"Authorization\", \"Basic \" + btoa(writeKey + \":\"));\n } else {\n xhr.setRequestHeader(\"Authorization\", \"Basic \" + btoaNode(writeKey + \":\"));\n }\n\n xhr.onload = function() {\n let status = xhr.status;\n if (status == 200) {\n logger.debug(\"status 200 \" + \"calling callback\");\n cb_(200, xhr.responseText);\n } else {\n handleError(\n new Error(\n \"request failed with status: \" + xhr.status + \" for url: \" + url\n )\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 = undefined\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(\"RudderJS-Initiated\", \"ad-block page request\", {path: \"/ad-blocked\", title: errorMessage}, analyticsInstance.sendAdblockPageOptions)\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}\n\nfunction getDefaultPageProperties() {\n let canonicalUrl = getCanonicalUrl();\n let path = canonicalUrl ? canonicalUrl.pathname : window.location.pathname;\n let referrer = document.referrer;\n let search = window.location.search;\n let title = document.title;\n let url = getUrl(search);\n\n return {\n path: path,\n referrer: referrer,\n search: search,\n title: title,\n url: url\n };\n}\n\nfunction getUrl(search) {\n let canonicalUrl = getCanonicalUrl();\n let url = canonicalUrl\n ? canonicalUrl.indexOf(\"?\") > -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 diff --git a/dist/rudder-sdk-js/index.js b/dist/rudder-sdk-js/index.js index 18485d7941..7f43918f06 100644 --- a/dist/rudder-sdk-js/index.js +++ b/dist/rudder-sdk-js/index.js @@ -7796,15 +7796,8 @@ var standardTo; var legacyTo; standardTo = standard.reduce(function (filtered, standard) { - var key; - Object.keys(standard).forEach(function (k) { - if (k !== "from") { - key = k; - } - }); - if (standard.from === event) { - filtered.push(key); + filtered.push(standard.to); } return filtered; diff --git a/integrations/FbPixel/browser.js b/integrations/FbPixel/browser.js index 57a20550a1..e0020eb557 100644 --- a/integrations/FbPixel/browser.js +++ b/integrations/FbPixel/browser.js @@ -98,14 +98,8 @@ class FBPixel { var legacyTo; standardTo = standard.reduce((filtered, standard) => { - let key; - Object.keys(standard).forEach((k) => { - if (k !== "from") { - key = k; - } - }); if (standard.from === event) { - filtered.push(key); + filtered.push(standard.to); } return filtered; }, []); diff --git a/tests/html/script-test.html b/tests/html/script-test.html index 742b7790de..084a0c5191 100644 --- a/tests/html/script-test.html +++ b/tests/html/script-test.html @@ -37,11 +37,11 @@ } rudderanalytics.load( - "1bZb2lMHmBGSPWNiMgqHUKPq56l", + "1cuY42ftbhV4ufcEMc0UZjlkLwS", "http://localhost:8050", { logLevel: "DEBUG", - configUrl: "http://localhost:8050/sourceConfig" + } );