mixpanel-browser 2.74.0 → 2.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/.github/workflows/integration-tests.yml +2 -2
  3. package/.github/workflows/unit-tests.yml +3 -3
  4. package/CHANGELOG.md +15 -0
  5. package/README.md +2 -2
  6. package/build.sh +10 -8
  7. package/dist/async-modules/mixpanel-recorder-bIS4LMGd.js +23595 -0
  8. package/dist/async-modules/mixpanel-recorder-hFoTniVR.min.js +2 -0
  9. package/dist/async-modules/mixpanel-recorder-hFoTniVR.min.js.map +1 -0
  10. package/dist/async-modules/mixpanel-targeting-BcAPS-Mz.js +2520 -0
  11. package/dist/async-modules/mixpanel-targeting-VOeN7RWY.min.js +2 -0
  12. package/dist/async-modules/mixpanel-targeting-VOeN7RWY.min.js.map +1 -0
  13. package/dist/mixpanel-core.cjs.d.ts +68 -0
  14. package/dist/mixpanel-core.cjs.js +802 -337
  15. package/dist/mixpanel-recorder.js +828 -40
  16. package/dist/mixpanel-recorder.min.js +1 -1
  17. package/dist/mixpanel-recorder.min.js.map +1 -1
  18. package/dist/mixpanel-targeting.js +2520 -0
  19. package/dist/mixpanel-targeting.min.js +2 -0
  20. package/dist/mixpanel-targeting.min.js.map +1 -0
  21. package/dist/mixpanel-with-async-modules.cjs.d.ts +590 -0
  22. package/dist/mixpanel-with-async-modules.cjs.js +9867 -0
  23. package/dist/mixpanel-with-async-recorder.cjs.d.ts +68 -0
  24. package/dist/mixpanel-with-async-recorder.cjs.js +802 -337
  25. package/dist/mixpanel-with-recorder.d.ts +68 -0
  26. package/dist/mixpanel-with-recorder.js +1591 -343
  27. package/dist/mixpanel-with-recorder.min.d.ts +68 -0
  28. package/dist/mixpanel-with-recorder.min.js +1 -1
  29. package/dist/mixpanel.amd.d.ts +68 -0
  30. package/dist/mixpanel.amd.js +2124 -345
  31. package/dist/mixpanel.cjs.d.ts +68 -0
  32. package/dist/mixpanel.cjs.js +2124 -345
  33. package/dist/mixpanel.globals.js +802 -337
  34. package/dist/mixpanel.min.js +185 -175
  35. package/dist/mixpanel.module.d.ts +68 -0
  36. package/dist/mixpanel.module.js +2124 -345
  37. package/dist/mixpanel.umd.d.ts +68 -0
  38. package/dist/mixpanel.umd.js +2124 -345
  39. package/dist/rrweb-bundled.js +119 -5
  40. package/dist/rrweb-compiled.js +116 -5
  41. package/logo.svg +5 -0
  42. package/package.json +5 -3
  43. package/rollup.config.mjs +189 -40
  44. package/src/autocapture/index.js +10 -27
  45. package/src/config.js +9 -3
  46. package/src/flags/index.js +269 -9
  47. package/src/index.d.ts +68 -0
  48. package/src/loaders/loader-module.js +1 -0
  49. package/src/mixpanel-core.js +83 -109
  50. package/src/recorder/index.js +2 -1
  51. package/src/recorder/recorder.js +5 -1
  52. package/src/recorder/rrweb-network-plugin.js +649 -0
  53. package/src/recorder/session-recording.js +31 -11
  54. package/src/recorder-manager.js +216 -0
  55. package/src/request-batcher.js +1 -1
  56. package/src/targeting/event-matcher.js +42 -0
  57. package/src/targeting/index.js +11 -0
  58. package/src/targeting/loader.js +36 -0
  59. package/src/utils.js +14 -9
  60. package/testServer.js +55 -0
  61. /package/src/loaders/{loader-module-with-async-recorder.js → loader-module-with-async-modules.js} +0 -0
@@ -0,0 +1,2 @@
1
+ (function(){"use strict";var v;if(typeof window=="undefined"){var H={hostname:""};v={crypto:{randomUUID:function(){throw Error("unsupported")}},navigator:{userAgent:"",onLine:!0},document:{createElement:function(){return{}},location:H,referrer:""},screen:{width:0,height:0},location:H,addEventListener:function(){},removeEventListener:function(){},dispatchEvent:function(){},CustomEvent:function(){}}}else v=window;var ye={LIB_VERSION:"2.76.0"},ve="__mp_targeting",q=v.setImmediate,S,$,F,V=Object.prototype.toString,me=typeof q!="undefined"?function(r){return q(r)}:setTimeout;try{Object.defineProperty({},"x",{}),S=function(r,o,n,f){return Object.defineProperty(r,o,{value:n,writable:!0,configurable:f!==!1})}}catch(e){S=function(o,n,f){return o[n]=f,o}}F=(function(){var r,o,n;function f(t,i){this.fn=t,this.self=i,this.next=void 0}return{add:function(i,s){n=new f(i,s),o?o.next=n:r=n,o=n,n=void 0},drain:function(){var i=r;for(r=o=$=void 0;i;)i.fn.call(i.self),i=i.next}}})();function T(e,r){F.add(e,r),$||($=me(F.drain))}function X(e){var r,o=typeof e;return e!==null&&(o==="object"||o==="function")&&(r=e.then),typeof r=="function"?r:!1}function j(){for(var e=0;e<this.chain.length;e++)we(this,this.state===1?this.chain[e].success:this.chain[e].failure,this.chain[e]);this.chain.length=0}function we(e,r,o){var n,f;try{r===!1?o.reject(e.msg):(r===!0?n=e.msg:n=r.call(void 0,e.msg),n===o.promise?o.reject(TypeError("Promise-chain cycle")):(f=X(n))?f.call(n,o.resolve,o.reject):o.resolve(n))}catch(t){o.reject(t)}}function Y(e){var r,o=this;if(!o.triggered){o.triggered=!0,o.def&&(o=o.def);try{(r=X(e))?T(function(){var n=new ee(o);try{r.call(e,function(){Y.apply(n,arguments)},function(){C.apply(n,arguments)})}catch(f){C.call(n,f)}}):(o.msg=e,o.state=1,o.chain.length>0&&T(j,o))}catch(n){C.call(new ee(o),n)}}}function C(e){var r=this;r.triggered||(r.triggered=!0,r.def&&(r=r.def),r.msg=e,r.state=2,r.chain.length>0&&T(j,r))}function Z(e,r,o,n){for(var f=0;f<r.length;f++)(function(i){e.resolve(r[i]).then(function(a){o(i,a)},n)})(f)}function ee(e){this.def=e,this.triggered=!1}function Ae(e){this.promise=e,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function b(e){if(typeof e!="function")throw TypeError("Not a function");if(this.__NPO__!==0)throw TypeError("Not a promise");this.__NPO__=1;var r=new Ae(this);this.then=function(n,f){var t={success:typeof n=="function"?n:!0,failure:typeof f=="function"?f:!1};return t.promise=new this.constructor(function(s,a){if(typeof s!="function"||typeof a!="function")throw TypeError("Not a function");t.resolve=s,t.reject=a}),r.chain.push(t),r.state!==0&&T(j,r),t.promise},this.catch=function(n){return this.then(void 0,n)};try{e.call(void 0,function(n){Y.call(r,n)},function(n){C.call(r,n)})}catch(o){C.call(r,o)}}var re=S({},"constructor",b,!1);b.prototype=re,S(re,"__NPO__",0,!1),S(b,"resolve",function(r){var o=this;return r&&typeof r=="object"&&r.__NPO__===1?r:new o(function(f,t){if(typeof f!="function"||typeof t!="function")throw TypeError("Not a function");f(r)})}),S(b,"reject",function(r){return new this(function(n,f){if(typeof n!="function"||typeof f!="function")throw TypeError("Not a function");f(r)})}),S(b,"all",function(r){var o=this;return V.call(r)!=="[object Array]"?o.reject(TypeError("Not an array")):r.length===0?o.resolve([]):new o(function(f,t){if(typeof f!="function"||typeof t!="function")throw TypeError("Not a function");var i=r.length,s=Array(i),a=0;Z(o,r,function(h,g){s[h]=g,++a===i&&f(s)},t)})}),S(b,"race",function(r){var o=this;return V.call(r)!=="[object Array]"?o.reject(TypeError("Not an array")):new o(function(f,t){if(typeof f!="function"||typeof t!="function")throw TypeError("Not a function");Z(o,r,function(s,a){f(a)},t)})}),typeof Promise!="undefined"&&Promise.toString().indexOf("[native code]");var k=Array.prototype,Se=Function.prototype,te=Object.prototype,E=k.slice,B=te.toString,M=te.hasOwnProperty;v.console;var I=v.navigator,A=v.document,D=v.opera,ne=v.screen,P=I.userAgent,R=Se.bind,ie=k.forEach,oe=k.indexOf,ue=k.map,Oe=Array.isArray,L={},u={trim:function(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}};u.bind=function(e,r){var o,n;if(R&&e.bind===R)return R.apply(e,E.call(arguments,1));if(!u.isFunction(e))throw new TypeError;return o=E.call(arguments,2),n=function(){if(!(this instanceof n))return e.apply(r,o.concat(E.call(arguments)));var f={};f.prototype=e.prototype;var t=new f;f.prototype=null;var i=e.apply(t,o.concat(E.call(arguments)));return Object(i)===i?i:t},n},u.each=function(e,r,o){if(e!=null){if(ie&&e.forEach===ie)e.forEach(r,o);else if(e.length===+e.length){for(var n=0,f=e.length;n<f;n++)if(n in e&&r.call(o,e[n],n,e)===L)return}else for(var t in e)if(M.call(e,t)&&r.call(o,e[t],t,e)===L)return}},u.extend=function(e){return u.each(E.call(arguments,1),function(r){for(var o in r)r[o]!==void 0&&(e[o]=r[o])}),e},u.isArray=Oe||function(e){return B.call(e)==="[object Array]"},u.isFunction=function(e){return typeof e=="function"},u.isArguments=function(e){return!!(e&&M.call(e,"callee"))},u.toArray=function(e){return e?e.toArray?e.toArray():u.isArray(e)||u.isArguments(e)?E.call(e):u.values(e):[]},u.map=function(e,r,o){if(ue&&e.map===ue)return e.map(r,o);var n=[];return u.each(e,function(f){n.push(r.call(o,f))}),n},u.keys=function(e){var r=[];return e===null||u.each(e,function(o,n){r[r.length]=n}),r},u.values=function(e){var r=[];return e===null||u.each(e,function(o){r[r.length]=o}),r},u.include=function(e,r){var o=!1;return e===null?o:oe&&e.indexOf===oe?e.indexOf(r)!=-1:(u.each(e,function(n){if(o||(o=n===r))return L}),o)},u.includes=function(e,r){return e.indexOf(r)!==-1},u.inherit=function(e,r){return e.prototype=new r,e.prototype.constructor=e,e.superclass=r.prototype,e},u.isObject=function(e){return e===Object(e)&&!u.isArray(e)},u.isEmptyObject=function(e){if(u.isObject(e)){for(var r in e)if(M.call(e,r))return!1;return!0}return!1},u.isUndefined=function(e){return e===void 0},u.isString=function(e){return B.call(e)=="[object String]"},u.isDate=function(e){return B.call(e)=="[object Date]"},u.isNumber=function(e){return B.call(e)=="[object Number]"},u.isElement=function(e){return!!(e&&e.nodeType===1)},u.encodeDates=function(e){return u.each(e,function(r,o){u.isDate(r)?e[o]=u.formatDate(r):u.isObject(r)&&(e[o]=u.encodeDates(r))}),e},u.timestamp=function(){return Date.now=Date.now||function(){return+new Date},Date.now()},u.formatDate=function(e){function r(o){return o<10?"0"+o:o}return e.getUTCFullYear()+"-"+r(e.getUTCMonth()+1)+"-"+r(e.getUTCDate())+"T"+r(e.getUTCHours())+":"+r(e.getUTCMinutes())+":"+r(e.getUTCSeconds())},u.strip_empty_properties=function(e){var r={};return u.each(e,function(o,n){u.isString(o)&&o.length>0&&(r[n]=o)}),r},u.truncate=function(e,r){var o;return typeof e=="string"?o=e.slice(0,r):u.isArray(e)?(o=[],u.each(e,function(n){o.push(u.truncate(n,r))})):u.isObject(e)?(o={},u.each(e,function(n,f){o[f]=u.truncate(n,r)})):o=e,o},u.JSONEncode=(function(){return function(e){var r=e,o=function(f){var t=/[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,i={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return t.lastIndex=0,t.test(f)?'"'+f.replace(t,function(s){var a=i[s];return typeof a=="string"?a:"\\u"+("0000"+s.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+f+'"'},n=function(f,t){var i="",s=" ",a=0,c="",h="",g=0,l=i,d=[],p=t[f];switch(p&&typeof p=="object"&&typeof p.toJSON=="function"&&(p=p.toJSON(f)),typeof p){case"string":return o(p);case"number":return isFinite(p)?String(p):"null";case"boolean":case"null":return String(p);case"object":if(!p)return"null";if(i+=s,d=[],B.apply(p)==="[object Array]"){for(g=p.length,a=0;a<g;a+=1)d[a]=n(a,p)||"null";return h=d.length===0?"[]":i?"[\n"+i+d.join(",\n"+i)+"\n"+l+"]":"["+d.join(",")+"]",i=l,h}for(c in p)M.call(p,c)&&(h=n(c,p),h&&d.push(o(c)+(i?": ":":")+h));return h=d.length===0?"{}":i?"{"+d.join(",")+l+"}":"{"+d.join(",")+"}",i=l,h}};return n("",{"":r})}})(),u.JSONDecode=(function(){var e,r,o={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:" "},n,f=function(d){var p=new SyntaxError(d);throw p.at=e,p.text=n,p},t=function(d){return d&&d!==r&&f("Expected '"+d+"' instead of '"+r+"'"),r=n.charAt(e),e+=1,r},i=function(){var d,p="";for(r==="-"&&(p="-",t("-"));r>="0"&&r<="9";)p+=r,t();if(r===".")for(p+=".";t()&&r>="0"&&r<="9";)p+=r;if(r==="e"||r==="E")for(p+=r,t(),(r==="-"||r==="+")&&(p+=r,t());r>="0"&&r<="9";)p+=r,t();if(d=+p,!isFinite(d))f("Bad number");else return d},s=function(){var d,p,m="",y;if(r==='"')for(;t();){if(r==='"')return t(),m;if(r==="\\")if(t(),r==="u"){for(y=0,p=0;p<4&&(d=parseInt(t(),16),!!isFinite(d));p+=1)y=y*16+d;m+=String.fromCharCode(y)}else if(typeof o[r]=="string")m+=o[r];else break;else m+=r}f("Bad string")},a=function(){for(;r&&r<=" ";)t()},c=function(){switch(r){case"t":return t("t"),t("r"),t("u"),t("e"),!0;case"f":return t("f"),t("a"),t("l"),t("s"),t("e"),!1;case"n":return t("n"),t("u"),t("l"),t("l"),null}f('Unexpected "'+r+'"')},h,g=function(){var d=[];if(r==="["){if(t("["),a(),r==="]")return t("]"),d;for(;r;){if(d.push(h()),a(),r==="]")return t("]"),d;t(","),a()}}f("Bad array")},l=function(){var d,p={};if(r==="{"){if(t("{"),a(),r==="}")return t("}"),p;for(;r;){if(d=s(),a(),t(":"),Object.hasOwnProperty.call(p,d)&&f('Duplicate key "'+d+'"'),p[d]=h(),a(),r==="}")return t("}"),p;t(","),a()}}f("Bad object")};return h=function(){switch(a(),r){case"{":return l();case"[":return g();case'"':return s();case"-":return i();default:return r>="0"&&r<="9"?i():c()}},function(d){var p;return n=d,e=0,r=" ",p=h(),a(),r&&f("Syntax error"),p}})(),u.base64Encode=function(e){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o,n,f,t,i,s,a,c,h=0,g=0,l="",d=[];if(!e)return e;e=u.utf8Encode(e);do o=e.charCodeAt(h++),n=e.charCodeAt(h++),f=e.charCodeAt(h++),c=o<<16|n<<8|f,t=c>>18&63,i=c>>12&63,s=c>>6&63,a=c&63,d[g++]=r.charAt(t)+r.charAt(i)+r.charAt(s)+r.charAt(a);while(h<e.length);switch(l=d.join(""),e.length%3){case 1:l=l.slice(0,-2)+"==";break;case 2:l=l.slice(0,-1)+"=";break}return l},u.utf8Encode=function(e){e=(e+"").replace(/\r\n/g,"\n").replace(/\r/g,"\n");var r="",o,n,f=0,t;for(o=n=0,f=e.length,t=0;t<f;t++){var i=e.charCodeAt(t),s=null;i<128?n++:i>127&&i<2048?s=String.fromCharCode(i>>6|192,i&63|128):s=String.fromCharCode(i>>12|224,i>>6&63|128,i&63|128),s!==null&&(n>o&&(r+=e.substring(o,n)),r+=s,o=n=t+1)}return n>o&&(r+=e.substring(o,e.length)),r},u.UUID=function(){try{return v.crypto.randomUUID()}catch(o){for(var e=new Array(36),r=0;r<36;r++)e[r]=Math.floor(Math.random()*16);return e[14]=4,e[19]=e[19]&=-5,e[19]=e[19]|=8,e[8]=e[13]=e[18]=e[23]="-",u.map(e,function(n){return n.toString(16)}).join("")}};var fe=["ahrefsbot","ahrefssiteaudit","amazonbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","facebookexternal","petalbot","pinterest","screaming frog","yahoo! slurp","yandex","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleweblight","mediapartners-google","storebot-google"];u.isBlockedUA=function(e){var r;for(e=e.toLowerCase(),r=0;r<fe.length;r++)if(e.indexOf(fe[r])!==-1)return!0;return!1},u.HTTPBuildQuery=function(e,r){var o,n,f=[];return u.isUndefined(r)&&(r="&"),u.each(e,function(t,i){o=encodeURIComponent(t.toString()),n=encodeURIComponent(i),f[f.length]=n+"="+o}),f.join(r)},u.getQueryParam=function(e,r){r=r.replace(/[[]/g,"\\[").replace(/[\]]/g,"\\]");var o="[\\?&]"+r+"=([^&#]*)",n=new RegExp(o),f=n.exec(e);if(f===null||f&&typeof f[1]!="string"&&f[1].length)return"";var t=f[1];try{t=decodeURIComponent(t)}catch(i){}return t.replace(/\+/g," ")},u.cookie={get:function(e){for(var r=e+"=",o=A.cookie.split(";"),n=0;n<o.length;n++){for(var f=o[n];f.charAt(0)==" ";)f=f.substring(1,f.length);if(f.indexOf(r)===0)return decodeURIComponent(f.substring(r.length,f.length))}return null},parse:function(e){var r;try{r=u.JSONDecode(u.cookie.get(e))||{}}catch(o){}return r},set_seconds:function(e,r,o,n,f,t,i){var s="",a="",c="";if(i)s="; domain="+i;else if(n){var h=de(A.location.hostname);s=h?"; domain=."+h:""}if(o){var g=new Date;g.setTime(g.getTime()+o*1e3),a="; expires="+g.toGMTString()}t&&(f=!0,c="; SameSite=None"),f&&(c+="; secure"),A.cookie=e+"="+encodeURIComponent(r)+a+"; path=/"+s+c},set:function(e,r,o,n,f,t,i){var s="",a="",c="";if(i)s="; domain="+i;else if(n){var h=de(A.location.hostname);s=h?"; domain=."+h:""}if(o){var g=new Date;g.setTime(g.getTime()+o*24*60*60*1e3),a="; expires="+g.toGMTString()}t&&(f=!0,c="; SameSite=None"),f&&(c+="; secure");var l=e+"="+encodeURIComponent(r)+a+"; path=/"+s+c;return A.cookie=l,l},remove:function(e,r,o){u.cookie.set(e,"",-1,r,!1,!1,o)}};var ae=function(e){var r=!0;try{var o="__mplss_"+pe(8),n="xyz";e.setItem(o,n),e.getItem(o)!==n&&(r=!1),e.removeItem(o)}catch(f){r=!1}return r},W=null,_e=function(e,r){return W!==null&&!r?W:W=ae(e||v.localStorage)},J=null,be=function(e,r){return J!==null&&!r?J:J=ae(e||v.sessionStorage)};function se(e,r,o){var n=function(f){};return{is_supported:function(f){var t=o(e,f);return t},error:n,get:function(f){try{return e.getItem(f)}catch(t){}return null},parse:function(f){try{return u.JSONDecode(e.getItem(f))||{}}catch(t){}return null},set:function(f,t){try{e.setItem(f,t)}catch(i){}},remove:function(f){try{e.removeItem(f)}catch(t){}}}}var ce=null,le=null;try{ce=v.localStorage,le=v.sessionStorage}catch(e){}u.localStorage=se(ce,"localStorage",_e),u.sessionStorage=se(le,"sessionStorage",be),u.register_event=(function(){var e=function(n,f,t,i,s){if(n)if(n.addEventListener&&!i)n.addEventListener(f,t,!!s);else{var a="on"+f,c=n[a];n[a]=r(n,t,c)}};function r(n,f,t){var i=function(s){if(s=s||o(v.event),!!s){var a=!0,c,h;return u.isFunction(t)&&(c=t(s)),h=f.call(n,s),(c===!1||h===!1)&&(a=!1),a}};return i}function o(n){return n&&(n.preventDefault=o.preventDefault,n.stopPropagation=o.stopPropagation),n}return o.preventDefault=function(){this.returnValue=!1},o.stopPropagation=function(){this.cancelBubble=!0},e})();var Ee=new RegExp('^(\\w*)\\[(\\w+)([=~\\|\\^\\$\\*]?)=?"?([^\\]"]*)"?\\]$');u.dom_query=(function(){function e(f){return f.all?f.all:f.getElementsByTagName("*")}var r=/[\t\r\n]/g;function o(f,t){var i=" "+t+" ";return(" "+f.className+" ").replace(r," ").indexOf(i)>=0}function n(f){if(!A.getElementsByTagName)return[];var t=f.split(" "),i,s,a,c,h,g,l,d,p,m,y=[A];for(g=0;g<t.length;g++){if(i=t[g].replace(/^\s+/,"").replace(/\s+$/,""),i.indexOf("#")>-1){s=i.split("#"),a=s[0];var K=s[1],Q=A.getElementById(K);if(!Q||a&&Q.nodeName.toLowerCase()!=a)return[];y=[Q];continue}if(i.indexOf(".")>-1){s=i.split("."),a=s[0];var Ue=s[1];for(a||(a="*"),c=[],h=0,l=0;l<y.length;l++)for(a=="*"?p=e(y[l]):p=y[l].getElementsByTagName(a),d=0;d<p.length;d++)c[h++]=p[d];for(y=[],m=0,l=0;l<c.length;l++)c[l].className&&u.isString(c[l].className)&&o(c[l],Ue)&&(y[m++]=c[l]);continue}var N=i.match(Ee);if(N){a=N[1];var O=N[2],$e=N[3],x=N[4];for(a||(a="*"),c=[],h=0,l=0;l<y.length;l++)for(a=="*"?p=e(y[l]):p=y[l].getElementsByTagName(a),d=0;d<p.length;d++)c[h++]=p[d];y=[],m=0;var _;switch($e){case"=":_=function(w){return w.getAttribute(O)==x};break;case"~":_=function(w){return w.getAttribute(O).match(new RegExp("\\b"+x+"\\b"))};break;case"|":_=function(w){return w.getAttribute(O).match(new RegExp("^"+x+"-?"))};break;case"^":_=function(w){return w.getAttribute(O).indexOf(x)===0};break;case"$":_=function(w){return w.getAttribute(O).lastIndexOf(x)==w.getAttribute(O).length-x.length};break;case"*":_=function(w){return w.getAttribute(O).indexOf(x)>-1};break;default:_=function(w){return w.getAttribute(O)}}for(y=[],m=0,l=0;l<c.length;l++)_(c[l])&&(y[m++]=c[l]);continue}for(a=i,c=[],h=0,l=0;l<y.length;l++)for(p=y[l].getElementsByTagName(a),d=0;d<p.length;d++)c[h++]=p[d];y=c}return y}return function(f){return u.isElement(f)?[f]:u.isObject(f)&&!u.isUndefined(f.length)?f:n.call(this,f)}})();var xe=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","utm_id","utm_source_platform","utm_campaign_id","utm_creative_format","utm_marketing_tactic"],Pe=["dclid","fbclid","gclid","ko_click_id","li_fat_id","msclkid","sccid","ttclid","twclid","wbraid"];u.info={campaignParams:function(e){var r="",o={};return u.each(xe,function(n){r=u.getQueryParam(A.URL,n),r.length?o[n]=r:e!==void 0&&(o[n]=e)}),o},clickParams:function(){var e="",r={};return u.each(Pe,function(o){e=u.getQueryParam(A.URL,o),e.length&&(r[o]=e)}),r},marketingParams:function(){return u.extend(u.info.campaignParams(),u.info.clickParams())},searchEngine:function(e){return e.search("https?://(.*)google.([^/?]*)")===0?"google":e.search("https?://(.*)bing.com")===0?"bing":e.search("https?://(.*)yahoo.com")===0?"yahoo":e.search("https?://(.*)duckduckgo.com")===0?"duckduckgo":null},searchInfo:function(e){var r=u.info.searchEngine(e),o=r!="yahoo"?"q":"p",n={};if(r!==null){n.$search_engine=r;var f=u.getQueryParam(e,o);f.length&&(n.mp_keyword=f)}return n},browser:function(e,r,o){return r=r||"",o||u.includes(e," OPR/")?u.includes(e,"Mini")?"Opera Mini":"Opera":/(BlackBerry|PlayBook|BB10)/i.test(e)?"BlackBerry":u.includes(e,"IEMobile")||u.includes(e,"WPDesktop")?"Internet Explorer Mobile":u.includes(e,"SamsungBrowser/")?"Samsung Internet":u.includes(e,"Edge")||u.includes(e,"Edg/")?"Microsoft Edge":u.includes(e,"FBIOS")?"Facebook Mobile":u.includes(e,"Whale/")?"Whale Browser":u.includes(e,"Chrome")?"Chrome":u.includes(e,"CriOS")?"Chrome iOS":u.includes(e,"UCWEB")||u.includes(e,"UCBrowser")?"UC Browser":u.includes(e,"FxiOS")?"Firefox iOS":u.includes(r,"Apple")?u.includes(e,"Mobile")?"Mobile Safari":"Safari":u.includes(e,"Android")?"Android Mobile":u.includes(e,"Konqueror")?"Konqueror":u.includes(e,"Firefox")?"Firefox":u.includes(e,"MSIE")||u.includes(e,"Trident/")?"Internet Explorer":u.includes(e,"Gecko")?"Mozilla":""},browserVersion:function(e,r,o){var n=u.info.browser(e,r,o),f={"Internet Explorer Mobile":/rv:(\d+(\.\d+)?)/,"Microsoft Edge":/Edge?\/(\d+(\.\d+)?)/,Chrome:/Chrome\/(\d+(\.\d+)?)/,"Chrome iOS":/CriOS\/(\d+(\.\d+)?)/,"UC Browser":/(UCBrowser|UCWEB)\/(\d+(\.\d+)?)/,Safari:/Version\/(\d+(\.\d+)?)/,"Mobile Safari":/Version\/(\d+(\.\d+)?)/,Opera:/(Opera|OPR)\/(\d+(\.\d+)?)/,Firefox:/Firefox\/(\d+(\.\d+)?)/,"Firefox iOS":/FxiOS\/(\d+(\.\d+)?)/,Konqueror:/Konqueror:(\d+(\.\d+)?)/,BlackBerry:/BlackBerry (\d+(\.\d+)?)/,"Android Mobile":/android\s(\d+(\.\d+)?)/,"Samsung Internet":/SamsungBrowser\/(\d+(\.\d+)?)/,"Internet Explorer":/(rv:|MSIE )(\d+(\.\d+)?)/,Mozilla:/rv:(\d+(\.\d+)?)/,"Whale Browser":/Whale\/(\d+(\.\d+)?)/},t=f[n];if(t===void 0)return null;var i=e.match(t);return i?parseFloat(i[i.length-2]):null},os:function(){var e=P;return/Windows/i.test(e)?/Phone/.test(e)||/WPDesktop/.test(e)?"Windows Phone":"Windows":/(iPhone|iPad|iPod)/.test(e)?"iOS":/Android/.test(e)?"Android":/(BlackBerry|PlayBook|BB10)/i.test(e)?"BlackBerry":/Mac/i.test(e)?"Mac OS X":/Linux/.test(e)?"Linux":/CrOS/.test(e)?"Chrome OS":""},device:function(e){return/Windows Phone/i.test(e)||/WPDesktop/.test(e)?"Windows Phone":/iPad/.test(e)?"iPad":/iPod/.test(e)?"iPod Touch":/iPhone/.test(e)?"iPhone":/(BlackBerry|PlayBook|BB10)/i.test(e)?"BlackBerry":/Android/.test(e)?"Android":""},referringDomain:function(e){var r=e.split("/");return r.length>=3?r[2]:""},currentUrl:function(){return v.location.href},properties:function(e){return typeof e!="object"&&(e={}),u.extend(u.strip_empty_properties({$os:u.info.os(),$browser:u.info.browser(P,I.vendor,D),$referrer:A.referrer,$referring_domain:u.info.referringDomain(A.referrer),$device:u.info.device(P)}),{$current_url:u.info.currentUrl(),$browser_version:u.info.browserVersion(P,I.vendor,D),$screen_height:ne.height,$screen_width:ne.width,mp_lib:"web",$lib_version:ye.LIB_VERSION,$insert_id:pe(),time:u.timestamp()/1e3},u.strip_empty_properties(e))},people_properties:function(){return u.extend(u.strip_empty_properties({$os:u.info.os(),$browser:u.info.browser(P,I.vendor,D)}),{$browser_version:u.info.browserVersion(P,I.vendor,D)})},mpPageViewProperties:function(){return u.strip_empty_properties({current_page_title:A.title,current_domain:v.location.hostname,current_url_path:v.location.pathname,current_url_protocol:v.location.protocol,current_url_search:v.location.search})}};var pe=function(e){var r=Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10);return e?r.substring(0,e):r},Ce=/[a-z0-9][a-z0-9-]*\.[a-z]+$/i,Be=/[a-z0-9][a-z0-9-]+\.[a-z.]{2,6}$/i,de=function(e){var r=Be,o=e.split("."),n=o[o.length-1];(n.length>4||n==="com"||n==="org")&&(r=Ce);var f=e.match(r);return f?f[0]:""},z=null,G=null;typeof JSON!="undefined"&&(z=JSON.stringify,G=JSON.parse),z=z||u.JSONEncode,G=G||u.JSONDecode,u.info=u.info,u.info.browser=u.info.browser,u.info.browserVersion=u.info.browserVersion,u.info.device=u.info.device,u.info.properties=u.info.properties,u.isBlockedUA=u.isBlockedUA,u.isEmptyObject=u.isEmptyObject,u.isObject=u.isObject,u.JSONDecode=u.JSONDecode,u.JSONEncode=u.JSONEncode,u.toArray=u.toArray,u.NPO=b;function Ie(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var U={exports:{}},Ne=U.exports,he;function Te(){return he||(he=1,(function(e,r){(function(o,n){e.exports=n()})(Ne,function(){Array.isArray||(Array.isArray=function(t){return Object.prototype.toString.call(t)==="[object Array]"});function o(t){for(var i=[],s=0,a=t.length;s<a;s++)i.indexOf(t[s])===-1&&i.push(t[s]);return i}var n={},f={"==":function(t,i){return t==i},"===":function(t,i){return t===i},"!=":function(t,i){return t!=i},"!==":function(t,i){return t!==i},">":function(t,i){return t>i},">=":function(t,i){return t>=i},"<":function(t,i,s){return s===void 0?t<i:t<i&&i<s},"<=":function(t,i,s){return s===void 0?t<=i:t<=i&&i<=s},"!!":function(t){return n.truthy(t)},"!":function(t){return!n.truthy(t)},"%":function(t,i){return t%i},log:function(t){return console.log(t),t},in:function(t,i){return!i||typeof i.indexOf=="undefined"?!1:i.indexOf(t)!==-1},cat:function(){return Array.prototype.join.call(arguments,"")},substr:function(t,i,s){if(s<0){var a=String(t).substr(i);return a.substr(0,a.length+s)}return String(t).substr(i,s)},"+":function(){return Array.prototype.reduce.call(arguments,function(t,i){return parseFloat(t,10)+parseFloat(i,10)},0)},"*":function(){return Array.prototype.reduce.call(arguments,function(t,i){return parseFloat(t,10)*parseFloat(i,10)})},"-":function(t,i){return i===void 0?-t:t-i},"/":function(t,i){return t/i},min:function(){return Math.min.apply(this,arguments)},max:function(){return Math.max.apply(this,arguments)},merge:function(){return Array.prototype.reduce.call(arguments,function(t,i){return t.concat(i)},[])},var:function(t,i){var s=i===void 0?null:i,a=this;if(typeof t=="undefined"||t===""||t===null)return a;for(var c=String(t).split("."),h=0;h<c.length;h++)if(a==null||(a=a[c[h]],a===void 0))return s;return a},missing:function(){for(var t=[],i=Array.isArray(arguments[0])?arguments[0]:arguments,s=0;s<i.length;s++){var a=i[s],c=n.apply({var:a},this);(c===null||c==="")&&t.push(a)}return t},missing_some:function(t,i){var s=n.apply({missing:i},this);return i.length-s.length>=t?[]:s}};return n.is_logic=function(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1},n.truthy=function(t){return Array.isArray(t)&&t.length===0?!1:!!t},n.get_operator=function(t){return Object.keys(t)[0]},n.get_values=function(t){return t[n.get_operator(t)]},n.apply=function(t,i){if(Array.isArray(t))return t.map(function(y){return n.apply(y,i)});if(!n.is_logic(t))return t;var s=n.get_operator(t),a=t[s],c,h,g,l,d;if(Array.isArray(a)||(a=[a]),s==="if"||s=="?:"){for(c=0;c<a.length-1;c+=2)if(n.truthy(n.apply(a[c],i)))return n.apply(a[c+1],i);return a.length===c+1?n.apply(a[c],i):null}else if(s==="and"){for(c=0;c<a.length;c+=1)if(h=n.apply(a[c],i),!n.truthy(h))return h;return h}else if(s==="or"){for(c=0;c<a.length;c+=1)if(h=n.apply(a[c],i),n.truthy(h))return h;return h}else{if(s==="filter")return l=n.apply(a[0],i),g=a[1],Array.isArray(l)?l.filter(function(y){return n.truthy(n.apply(g,y))}):[];if(s==="map")return l=n.apply(a[0],i),g=a[1],Array.isArray(l)?l.map(function(y){return n.apply(g,y)}):[];if(s==="reduce")return l=n.apply(a[0],i),g=a[1],d=typeof a[2]!="undefined"?n.apply(a[2],i):null,Array.isArray(l)?l.reduce(function(y,K){return n.apply(g,{current:K,accumulator:y})},d):d;if(s==="all"){if(l=n.apply(a[0],i),g=a[1],!Array.isArray(l)||!l.length)return!1;for(c=0;c<l.length;c+=1)if(!n.truthy(n.apply(g,l[c])))return!1;return!0}else if(s==="none"){if(l=n.apply(a[0],i),g=a[1],!Array.isArray(l)||!l.length)return!0;for(c=0;c<l.length;c+=1)if(n.truthy(n.apply(g,l[c])))return!1;return!0}else if(s==="some"){if(l=n.apply(a[0],i),g=a[1],!Array.isArray(l)||!l.length)return!1;for(c=0;c<l.length;c+=1)if(n.truthy(n.apply(g,l[c])))return!0;return!1}}if(a=a.map(function(y){return n.apply(y,i)}),f.hasOwnProperty(s)&&typeof f[s]=="function")return f[s].apply(i,a);if(s.indexOf(".")>0){var p=String(s).split("."),m=f;for(c=0;c<p.length;c++){if(!m.hasOwnProperty(p[c]))throw new Error("Unrecognized operation "+s+" (failed at "+p.slice(0,c+1).join(".")+")");m=m[p[c]]}return m.apply(i,a)}throw new Error("Unrecognized operation "+s)},n.uses_data=function(t){var i=[];if(n.is_logic(t)){var s=n.get_operator(t),a=t[s];Array.isArray(a)||(a=[a]),s==="var"?i.push(a[0]):a.forEach(function(c){i.push.apply(i,n.uses_data(c))})}return o(i)},n.add_operation=function(t,i){f[t]=i},n.rm_operation=function(t){delete f[t]},n.rule_like=function(t,i){if(i===t||i==="@")return!0;if(i==="number")return typeof t=="number";if(i==="string")return typeof t=="string";if(i==="array")return Array.isArray(t)&&!n.is_logic(t);if(n.is_logic(i)){if(n.is_logic(t)){var s=n.get_operator(i),a=n.get_operator(t);if(s==="@"||s===a)return n.rule_like(n.get_values(t,!1),n.get_values(i,!1))}return!1}if(Array.isArray(i))if(Array.isArray(t)){if(i.length!==t.length)return!1;for(var c=0;c<i.length;c+=1)if(!n.rule_like(t[c],i[c]))return!1;return!0}else return!1;return!1},n})})(U)),U.exports}var ke=Te(),Me=Ie(ke),De=function(e,r,o){if(e!==o.event_name)return{matches:!1};var n=o.property_filters,f=!0;if(n&&!u.isEmptyObject(n))try{f=Me.apply(n,r||{})}catch(t){return{matches:!1,error:t.toString()}}return{matches:f}},ge={};ge.eventMatchesCriteria=De,v[ve]=Promise.resolve(ge)})();
2
+ //# sourceMappingURL=mixpanel-targeting-VOeN7RWY.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixpanel-targeting-VOeN7RWY.min.js","sources":["../../src/window.js","../../src/config.js","../../src/promise-polyfill.js","../../src/utils.js","../../node_modules/json-logic-js/logic.js","../../src/targeting/event-matcher.js","../../src/targeting/index.js"],"sourcesContent":["// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar win;\nif (typeof(window) === 'undefined') {\n var loc = {\n hostname: ''\n };\n win = {\n crypto: {randomUUID: function() {throw Error('unsupported');}},\n navigator: { userAgent: '', onLine: true },\n document: {\n createElement: function() { return {}; },\n location: loc,\n referrer: ''\n },\n screen: { width: 0, height: 0 },\n location: loc,\n addEventListener: function() {},\n removeEventListener: function() {},\n dispatchEvent: function() {},\n CustomEvent: function () {}\n };\n} else {\n win = window;\n}\n\nexport { win as window };\n","export var Config = {\n DEBUG: false,\n LIB_VERSION: '2.76.0'\n};\n\n// Window global names for async modules\nexport var TARGETING_GLOBAL_NAME = '__mp_targeting';\nexport var RECORDER_GLOBAL_NAME = '__mp_recorder';\n\n// Constants that are injected at build-time for the names of async modules.\nexport var RECORDER_FILENAME = '__MP_RECORDER_FILENAME__';\nexport var TARGETING_FILENAME = '__MP_TARGETING_FILENAME__';\n","import { window } from './window';\n/**\n * Promise polyfill sourced from https://github.com/getify/native-promise-only.\n * Modified to\n * - remove UMD wrapper and export as an object, so that we don't globally polyfill Promise.\n * - rename access notation for dynamically referenced props to avoid minification, e.g. this.__NPO__ -> this['__NPO__']\n*/\n\n/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n/*jshint validthis:true */\n'use strict';\n\nvar setImmediate = window['setImmediate'];\nvar builtInProp, cycle, schedulingQueue,\n ToString = Object.prototype.toString,\n timer = (typeof setImmediate !== 'undefined') ?\n function timer(fn) { return setImmediate(fn); } :\n setTimeout;\n\n// dammit, IE8.\ntry {\n Object.defineProperty({},'x',{});\n builtInProp = function builtInProp(obj,name,val,config) {\n return Object.defineProperty(obj,name,{\n value: val,\n writable: true,\n configurable: config !== false\n });\n };\n}\ncatch (err) {\n builtInProp = function builtInProp(obj,name,val) {\n obj[name] = val;\n return obj;\n };\n}\n\n// Note: using a queue instead of array for efficiency\nschedulingQueue = (function Queue() {\n var first, last, item;\n\n function Item(fn,self) {\n this.fn = fn;\n this.self = self;\n this.next = void 0;\n }\n\n return {\n add: function add(fn,self) {\n item = new Item(fn,self);\n if (last) {\n last.next = item;\n }\n else {\n first = item;\n }\n last = item;\n item = void 0;\n },\n drain: function drain() {\n var f = first;\n first = last = cycle = void 0;\n\n while (f) {\n f.fn.call(f.self);\n f = f.next;\n }\n }\n };\n})();\n\nfunction schedule(fn,self) {\n schedulingQueue.add(fn,self);\n if (!cycle) {\n cycle = timer(schedulingQueue.drain);\n }\n}\n\n// promise duck typing\nfunction isThenable(o) {\n var _then, oType = typeof o;\n\n if (o !== null && (oType === 'object' || oType === 'function')) {\n _then = o.then;\n }\n return typeof _then === 'function' ? _then : false;\n}\n\nfunction notify() {\n for (var i=0; i<this.chain.length; i++) {\n notifyIsolated(\n this,\n (this.state === 1) ? this.chain[i].success : this.chain[i].failure,\n this.chain[i]\n );\n }\n this.chain.length = 0;\n}\n\n// NOTE: This is a separate function to isolate\n// the `try..catch` so that other code can be\n// optimized better\nfunction notifyIsolated(self,cb,chain) {\n var ret, _then;\n try {\n if (cb === false) {\n chain.reject(self.msg);\n }\n else {\n if (cb === true) {\n ret = self.msg;\n }\n else {\n ret = cb.call(void 0,self.msg);\n }\n\n if (ret === chain.promise) {\n chain.reject(TypeError('Promise-chain cycle'));\n }\n // eslint-disable-next-line no-cond-assign\n else if (_then = isThenable(ret)) {\n _then.call(ret,chain.resolve,chain.reject);\n }\n else {\n chain.resolve(ret);\n }\n }\n }\n catch (err) {\n chain.reject(err);\n }\n}\n\nfunction resolve(msg) {\n var _then, self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n try {\n // eslint-disable-next-line no-cond-assign\n if (_then = isThenable(msg)) {\n schedule(function(){\n var defWrapper = new MakeDefWrapper(self);\n try {\n _then.call(msg,\n function $resolve$(){ resolve.apply(defWrapper,arguments); },\n function $reject$(){ reject.apply(defWrapper,arguments); }\n );\n }\n catch (err) {\n reject.call(defWrapper,err);\n }\n });\n }\n else {\n self.msg = msg;\n self.state = 1;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n }\n }\n catch (err) {\n reject.call(new MakeDefWrapper(self),err);\n }\n}\n\nfunction reject(msg) {\n var self = this;\n\n // already triggered?\n if (self.triggered) { return; }\n\n self.triggered = true;\n\n // unwrap\n if (self.def) {\n self = self.def;\n }\n\n self.msg = msg;\n self.state = 2;\n if (self.chain.length > 0) {\n schedule(notify,self);\n }\n}\n\nfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n for (var idx=0; idx<arr.length; idx++) {\n (function IIFE(idx){\n Constructor.resolve(arr[idx])\n .then(\n function $resolver$(msg){\n resolver(idx,msg);\n },\n rejecter\n );\n })(idx);\n }\n}\n\nfunction MakeDefWrapper(self) {\n this.def = self;\n this.triggered = false;\n}\n\nfunction MakeDef(self) {\n this.promise = self;\n this.state = 0;\n this.triggered = false;\n this.chain = [];\n this.msg = void 0;\n}\n\nfunction NpoPromise(executor) {\n if (typeof executor !== 'function') {\n throw TypeError('Not a function');\n }\n\n if (this['__NPO__'] !== 0) {\n throw TypeError('Not a promise');\n }\n\n // instance shadowing the inherited \"brand\"\n // to signal an already \"initialized\" promise\n this['__NPO__'] = 1;\n\n var def = new MakeDef(this);\n\n this['then'] = function then(success,failure) {\n var o = {\n success: typeof success === 'function' ? success : true,\n failure: typeof failure === 'function' ? failure : false\n };\n // Note: `then(..)` itself can be borrowed to be used against\n // a different promise constructor for making the chained promise,\n // by substituting a different `this` binding.\n o.promise = new this.constructor(function extractChain(resolve,reject) {\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n o.resolve = resolve;\n o.reject = reject;\n });\n def.chain.push(o);\n\n if (def.state !== 0) {\n schedule(notify,def);\n }\n\n return o.promise;\n };\n this['catch'] = function $catch$(failure) {\n return this.then(void 0,failure);\n };\n\n try {\n executor.call(\n void 0,\n function publicResolve(msg){\n resolve.call(def,msg);\n },\n function publicReject(msg) {\n reject.call(def,msg);\n }\n );\n }\n catch (err) {\n reject.call(def,err);\n }\n}\n\nvar PromisePrototype = builtInProp({},'constructor',NpoPromise,\n /*configurable=*/false\n);\n\n // Note: Android 4 cannot use `Object.defineProperty(..)` here\nNpoPromise.prototype = PromisePrototype;\n\n// built-in \"brand\" to signal an \"uninitialized\" promise\nbuiltInProp(PromisePrototype,'__NPO__',0,\n /*configurable=*/false\n);\n\nbuiltInProp(NpoPromise,'resolve',function Promise$resolve(msg) {\n var Constructor = this;\n\n // spec mandated checks\n // note: best \"isPromise\" check that's practical for now\n if (msg && typeof msg === 'object' && msg['__NPO__'] === 1) {\n return msg;\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n resolve(msg);\n });\n});\n\nbuiltInProp(NpoPromise,'reject',function Promise$reject(msg) {\n return new this(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n reject(msg);\n });\n});\n\nbuiltInProp(NpoPromise,'all',function Promise$all(arr) {\n var Constructor = this;\n\n // spec mandated checks\n if (ToString.call(arr) !== '[object Array]') {\n return Constructor.reject(TypeError('Not an array'));\n }\n if (arr.length === 0) {\n return Constructor.resolve([]);\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n var len = arr.length, msgs = Array(len), count = 0;\n\n iteratePromises(Constructor,arr,function resolver(idx,msg) {\n msgs[idx] = msg;\n if (++count === len) {\n resolve(msgs);\n }\n },reject);\n });\n});\n\nbuiltInProp(NpoPromise,'race',function Promise$race(arr) {\n var Constructor = this;\n\n // spec mandated checks\n if (ToString.call(arr) !== '[object Array]') {\n return Constructor.reject(TypeError('Not an array'));\n }\n\n return new Constructor(function executor(resolve,reject){\n if (typeof resolve !== 'function' || typeof reject !== 'function') {\n throw TypeError('Not a function');\n }\n\n iteratePromises(Constructor,arr,function resolver(idx,msg){\n resolve(msg);\n },reject);\n });\n});\n\nvar PromisePolyfill;\nif (typeof Promise !== 'undefined' && Promise.toString().indexOf('[native code]') !== -1) {\n PromisePolyfill = Promise;\n} else {\n PromisePolyfill = NpoPromise;\n}\n\nexport { PromisePolyfill as Promise, NpoPromise };\n","/* eslint camelcase: \"off\", eqeqeq: \"off\" */\nimport { Config } from './config';\nimport { NpoPromise, Promise } from './promise-polyfill';\nimport { window } from './window';\n\n// Maximum allowed session recording length\nvar MAX_RECORDING_MS = 24 * 60 * 60 * 1000; // 24 hours\n// Maximum allowed value for minimum session recording length\nvar MAX_VALUE_FOR_MIN_RECORDING_MS = 8 * 1000; // 8 seconds\n\n/*\n * Saved references to long variable names, so that closure compiler can\n * minimize file size.\n */\n\nvar ArrayProto = Array.prototype,\n FuncProto = Function.prototype,\n ObjProto = Object.prototype,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty,\n windowConsole = window.console,\n navigator = window.navigator,\n document = window.document,\n windowOpera = window.opera,\n screen = window.screen,\n userAgent = navigator.userAgent;\n\nvar nativeBind = FuncProto.bind,\n nativeForEach = ArrayProto.forEach,\n nativeIndexOf = ArrayProto.indexOf,\n nativeMap = ArrayProto.map,\n nativeIsArray = Array.isArray,\n breaker = {};\n\nvar _ = {\n trim: function(str) {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n};\n\n// Console override\nvar console = {\n /** @type {function(...*)} */\n log: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n try {\n windowConsole.log.apply(windowConsole, arguments);\n } catch (err) {\n _.each(arguments, function(arg) {\n windowConsole.log(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n warn: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel warning:'].concat(_.toArray(arguments));\n try {\n windowConsole.warn.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.warn(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n error: function() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.error(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n critical: function() {\n if (!_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function(arg) {\n windowConsole.error(arg);\n });\n }\n }\n }\n};\n\nvar log_func_with_prefix = function(func, prefix) {\n return function() {\n arguments[0] = '[' + prefix + '] ' + arguments[0];\n return func.apply(console, arguments);\n };\n};\nvar console_with_prefix = function(prefix) {\n return {\n log: log_func_with_prefix(console.log, prefix),\n error: log_func_with_prefix(console.error, prefix),\n critical: log_func_with_prefix(console.critical, prefix)\n };\n};\n\n\nvar safewrap = function(f) {\n return function() {\n try {\n return f.apply(this, arguments);\n } catch (e) {\n console.critical('Implementation error. Please turn on debug and contact support@mixpanel.com.');\n if (Config.DEBUG){\n console.critical(e);\n }\n }\n };\n};\n\nvar safewrapClass = function(klass) {\n var proto = klass.prototype;\n for (var func in proto) {\n if (typeof(proto[func]) === 'function') {\n proto[func] = safewrap(proto[func]);\n }\n }\n};\n\n\n// UNDERSCORE\n// Embed part of the Underscore Library\n_.bind = function(func, context) {\n var args, bound;\n if (nativeBind && func.bind === nativeBind) {\n return nativeBind.apply(func, slice.call(arguments, 1));\n }\n if (!_.isFunction(func)) {\n throw new TypeError();\n }\n args = slice.call(arguments, 2);\n bound = function() {\n if (!(this instanceof bound)) {\n return func.apply(context, args.concat(slice.call(arguments)));\n }\n var ctor = {};\n ctor.prototype = func.prototype;\n var self = new ctor();\n ctor.prototype = null;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) {\n return result;\n }\n return self;\n };\n return bound;\n};\n\n/**\n * @param {*=} obj\n * @param {function(...*)=} iterator\n * @param {Object=} context\n */\n_.each = function(obj, iterator, context) {\n if (obj === null || obj === undefined) {\n return;\n }\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) {\n return;\n }\n }\n } else {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === breaker) {\n return;\n }\n }\n }\n }\n};\n\n_.extend = function(obj) {\n _.each(slice.call(arguments, 1), function(source) {\n for (var prop in source) {\n if (source[prop] !== void 0) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n};\n\n_.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n};\n\n_.isFunction = function(f) {\n return typeof f === 'function';\n};\n\n_.isArguments = function(obj) {\n return !!(obj && hasOwnProperty.call(obj, 'callee'));\n};\n\n_.toArray = function(iterable) {\n if (!iterable) {\n return [];\n }\n if (iterable.toArray) {\n return iterable.toArray();\n }\n if (_.isArray(iterable)) {\n return slice.call(iterable);\n }\n if (_.isArguments(iterable)) {\n return slice.call(iterable);\n }\n return _.values(iterable);\n};\n\n_.map = function(arr, callback, context) {\n if (nativeMap && arr.map === nativeMap) {\n return arr.map(callback, context);\n } else {\n var results = [];\n _.each(arr, function(item) {\n results.push(callback.call(context, item));\n });\n return results;\n }\n};\n\n_.keys = function(obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function(value, key) {\n results[results.length] = key;\n });\n return results;\n};\n\n_.values = function(obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function(value) {\n results[results.length] = value;\n });\n return results;\n};\n\n_.include = function(obj, target) {\n var found = false;\n if (obj === null) {\n return found;\n }\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) {\n return obj.indexOf(target) != -1;\n }\n _.each(obj, function(value) {\n if (found || (found = (value === target))) {\n return breaker;\n }\n });\n return found;\n};\n\n_.includes = function(str, needle) {\n return str.indexOf(needle) !== -1;\n};\n\n// Underscore Addons\n_.inherit = function(subclass, superclass) {\n subclass.prototype = new superclass();\n subclass.prototype.constructor = subclass;\n subclass.superclass = superclass.prototype;\n return subclass;\n};\n\n_.isObject = function(obj) {\n return (obj === Object(obj) && !_.isArray(obj));\n};\n\n_.isEmptyObject = function(obj) {\n if (_.isObject(obj)) {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n return false;\n }\n }\n return true;\n }\n return false;\n};\n\n_.isUndefined = function(obj) {\n return obj === void 0;\n};\n\n_.isString = function(obj) {\n return toString.call(obj) == '[object String]';\n};\n\n_.isDate = function(obj) {\n return toString.call(obj) == '[object Date]';\n};\n\n_.isNumber = function(obj) {\n return toString.call(obj) == '[object Number]';\n};\n\n_.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n};\n\n_.encodeDates = function(obj) {\n _.each(obj, function(v, k) {\n if (_.isDate(v)) {\n obj[k] = _.formatDate(v);\n } else if (_.isObject(v)) {\n obj[k] = _.encodeDates(v); // recurse\n }\n });\n return obj;\n};\n\n_.timestamp = function() {\n Date.now = Date.now || function() {\n return +new Date;\n };\n return Date.now();\n};\n\n_.formatDate = function(d) {\n // YYYY-MM-DDTHH:MM:SS in UTC\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n return d.getUTCFullYear() + '-' +\n pad(d.getUTCMonth() + 1) + '-' +\n pad(d.getUTCDate()) + 'T' +\n pad(d.getUTCHours()) + ':' +\n pad(d.getUTCMinutes()) + ':' +\n pad(d.getUTCSeconds());\n};\n\n_.strip_empty_properties = function(p) {\n var ret = {};\n _.each(p, function(v, k) {\n if (_.isString(v) && v.length > 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function(obj, length) {\n var ret;\n\n if (typeof(obj) === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function(val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function(val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n\n return ret;\n};\n\n_.JSONEncode = (function() {\n return function(mixed_val) {\n var value = mixed_val;\n var quote = function(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function(a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n };\n\n var str = function(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' :\n gap ? '{' + partial.join(',') + '' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n})();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = (function() {\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function() {\n // Parse a number value.\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n\n string = function() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value, // Placeholder for the value function.\n array = function() {\n // Parse an array value.\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function() {\n // Parse an object value.\n var key,\n object = {};\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function(source) {\n var result;\n\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n return result;\n };\n})();\n\n_.base64Encode = function(data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n\n if (!data) {\n return data;\n }\n\n data = _.utf8Encode(data);\n\n do { // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n\n bits = o1 << 16 | o2 << 8 | o3;\n\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n\n enc = tmp_arr.join('');\n\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n\n return enc;\n};\n\n_.utf8Encode = function(string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n\n start = end = 0;\n stringl = string.length;\n\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n\n if (c1 < 128) {\n end++;\n } else if ((c1 > 127) && (c1 < 2048)) {\n enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);\n } else {\n enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n\n return utftext;\n};\n\n_.UUID = function() {\n try {\n // use native Crypto API when available\n return window['crypto']['randomUUID']();\n } catch (err) {\n // fall back to generating our own UUID\n // based on https://gist.github.com/scwood/3bff42cc005cc20ab7ec98f0d8e1d59d\n var uuid = new Array(36);\n for (var i = 0; i < 36; i++) {\n uuid[i] = Math.floor(Math.random() * 16);\n }\n uuid[14] = 4; // set bits 12-15 of time-high-and-version to 0100\n uuid[19] = uuid[19] &= ~(1 << 2); // set bit 6 of clock-seq-and-reserved to zero\n uuid[19] = uuid[19] |= (1 << 3); // set bit 7 of clock-seq-and-reserved to one\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n\n return _.map(uuid, function(x) {\n return x.toString(16);\n }).join('');\n }\n};\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = [\n 'ahrefsbot',\n 'ahrefssiteaudit',\n 'amazonbot',\n 'baiduspider',\n 'bingbot',\n 'bingpreview',\n 'chrome-lighthouse',\n 'facebookexternal',\n 'petalbot',\n 'pinterest',\n 'screaming frog',\n 'yahoo! slurp',\n 'yandex',\n\n // a whole bunch of goog-specific crawlers\n // https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n 'adsbot-google',\n 'apis-google',\n 'duplexweb-google',\n 'feedfetcher-google',\n 'google favicon',\n 'google web preview',\n 'google-read-aloud',\n 'googlebot',\n 'googleweblight',\n 'mediapartners-google',\n 'storebot-google'\n];\n_.isBlockedUA = function(ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function(formdata, arg_separator) {\n var use_val, use_key, tmp_arr = [];\n\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n\n _.each(formdata, function(val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n\n return tmp_arr.join(arg_separator);\n};\n\n_.getQueryParam = function(url, param) {\n // Expects a raw URL\n\n param = param.replace(/[[]/g, '\\\\[').replace(/[\\]]/g, '\\\\]');\n var regexS = '[\\\\?&]' + param + '=([^&#]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || (results && typeof(results[1]) !== 'string' && results[1].length)) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch(err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n\n parse: function(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n\n set_seconds: function(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + (seconds * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n\n set: function(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '', expires = '', secure = '';\n\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = '; expires=' + date.toGMTString();\n }\n\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document.cookie = new_cookie_val;\n return new_cookie_val;\n },\n\n remove: function(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\n\nvar _testStorageSupported = function (storage) {\n var supported = true;\n try {\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n return supported;\n};\n\nvar _localStorageSupported = null;\nvar localStorageSupported = function(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n return _localStorageSupported = _testStorageSupported(storage || window.localStorage);\n};\n\nvar _sessionStorageSupported = null;\nvar sessionStorageSupported = function(storage, forceCheck) {\n if (_sessionStorageSupported !== null && !forceCheck) {\n return _sessionStorageSupported;\n }\n return _sessionStorageSupported = _testStorageSupported(storage || window.sessionStorage);\n};\n\nfunction _storageWrapper(storage, name, is_supported_fn) {\n var log_error = function(msg) {\n console.error(name + ' error: ' + msg);\n };\n\n return {\n is_supported: function(forceCheck) {\n var supported = is_supported_fn(storage, forceCheck);\n if (!supported) {\n console.error(name + ' unsupported');\n }\n return supported;\n },\n error: log_error,\n get: function(key) {\n try {\n return storage.getItem(key);\n } catch (err) {\n log_error(err);\n }\n return null;\n },\n parse: function(key) {\n try {\n return _.JSONDecode(storage.getItem(key)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function(key, value) {\n try {\n storage.setItem(key, value);\n } catch (err) {\n log_error(err);\n }\n },\n remove: function(key) {\n try {\n storage.removeItem(key);\n } catch (err) {\n log_error(err);\n }\n }\n };\n}\n\n// Safari errors out accessing localStorage/sessionStorage when cookies are disabled,\n// so create dummy storage wrappers that silently fail as a fallback.\nvar windowLocalStorage = null, windowSessionStorage = null;\ntry {\n windowLocalStorage = window.localStorage;\n windowSessionStorage = window.sessionStorage;\n // eslint-disable-next-line no-empty\n} catch (_err) {}\n\n_.localStorage = _storageWrapper(windowLocalStorage, 'localStorage', localStorageSupported);\n_.sessionStorage = _storageWrapper(windowSessionStorage, 'sessionStorage', sessionStorageSupported);\n\n_.register_event = (function() {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n\n var ret = true;\n var old_result, new_result;\n\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n\n if ((false === old_result) || (false === new_result)) {\n ret = false;\n }\n\n return ret;\n };\n\n return handler;\n }\n\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function() {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function() {\n this.cancelBubble = true;\n };\n\n return register_event;\n})();\n\n\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n\n_.dom_query = (function() {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelector('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n\n var bad_whitespace = /[\\t\\r\\n]/g;\n\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return ((' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0);\n }\n\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document.getElementById(id);\n if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className &&\n _.isString(found[j].className) && // some SVG elements have classNames which are not strings\n hasClass(found[j], className)\n ) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=': // Equality\n checkFunction = function(e) {\n return (e.getAttribute(attrName) == attrValue);\n };\n break;\n case '~': // Match one of space seperated words\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b')));\n };\n break;\n case '|': // Match start with value followed by optional hyphen\n checkFunction = function(e) {\n return (e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?')));\n };\n break;\n case '^': // Match starts with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) === 0);\n };\n break;\n case '$': // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function(e) {\n return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length);\n };\n break;\n case '*': // Match ends with value\n checkFunction = function(e) {\n return (e.getAttribute(attrName).indexOf(attrValue) > -1);\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n\n return function(query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n})();\n\nvar CAMPAIGN_KEYWORDS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_id', 'utm_source_platform','utm_campaign_id', 'utm_creative_format', 'utm_marketing_tactic'];\nvar CLICK_IDS = ['dclid', 'fbclid', 'gclid', 'ko_click_id', 'li_fat_id', 'msclkid', 'sccid', 'ttclid', 'twclid', 'wbraid'];\n\n_.info = {\n campaignParams: function(default_value) {\n var kw = '',\n params = {};\n _.each(CAMPAIGN_KEYWORDS, function(kwkey) {\n kw = _.getQueryParam(document.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n } else if (default_value !== undefined) {\n params[kwkey] = default_value;\n }\n });\n\n return params;\n },\n\n clickParams: function() {\n var id = '',\n params = {};\n _.each(CLICK_IDS, function(idkey) {\n id = _.getQueryParam(document.URL, idkey);\n if (id.length) {\n params[idkey] = id;\n }\n });\n\n return params;\n },\n\n marketingParams: function() {\n return _.extend(_.info.campaignParams(), _.info.clickParams());\n },\n\n searchEngine: function(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n\n searchInfo: function(referrer) {\n var search = _.info.searchEngine(referrer),\n param = (search != 'yahoo') ? 'q' : 'p',\n ret = {};\n\n if (search !== null) {\n ret['$search_engine'] = search;\n\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n\n return ret;\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Whale/')) {\n // https://user-agents.net/browsers/whale-browser\n return 'Whale Browser';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser' : /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/,\n 'Whale Browser': /Whale\\/(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n\n os: function() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n\n device: function(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n\n referringDomain: function(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n\n currentUrl: function() {\n return window.location.href;\n },\n\n properties: function(extra_props) {\n if (typeof extra_props !== 'object') {\n extra_props = {};\n }\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera),\n '$referrer': document.referrer,\n '$referring_domain': _.info.referringDomain(document.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': _.info.currentUrl(),\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n }, _.strip_empty_properties(extra_props));\n },\n\n people_properties: function() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator.vendor, windowOpera)\n });\n },\n\n mpPageViewProperties: function() {\n return _.strip_empty_properties({\n 'current_page_title': document.title,\n 'current_domain': window.location.hostname,\n 'current_url_path': window.location.pathname,\n 'current_url_protocol': window.location.protocol,\n 'current_url_search': window.location.search\n });\n }\n};\n\n/**\n * Returns a throttled function that will only run at most every `waitMs` and returns a promise that resolves with the next invocation.\n * Throttled calls will build up a batch of args and invoke the callback with all args since the last invocation.\n */\nvar batchedThrottle = function (fn, waitMs) {\n var timeoutPromise = null;\n var throttledItems = [];\n return function (item) {\n var self = this;\n throttledItems.push(item);\n\n if (!timeoutPromise) {\n timeoutPromise = new Promise(function (resolve) {\n setTimeout(function () {\n var returnValue = fn.apply(self, [throttledItems]);\n timeoutPromise = null;\n throttledItems = [];\n resolve(returnValue);\n }, waitMs);\n });\n }\n return timeoutPromise;\n };\n};\n\nvar cheap_guid = function(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n/**\n * Generates a W3C traceparent header for easy interop with distributed tracing systems i.e Open Telemetry\n * https://www.w3.org/TR/trace-context/#traceparent-header\n*/\nvar generateTraceparent = function() {\n var traceID = _.UUID().replace(/-/g, '');\n var parentID = _.UUID().replace(/-/g, '').substring(0, 16);\n\n // Sampled trace\n var traceFlags = '01';\n\n return '00-' + traceID + '-' + parentID + '-' + traceFlags;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\n\n/**\n * Check whether we have network connection. default to true for browsers that don't support navigator.onLine (IE)\n * @returns {boolean}\n */\nvar isOnline = function() {\n var onLine = window.navigator['onLine'];\n return _.isUndefined(onLine) || onLine;\n};\n\nvar NOOP_FUNC = function () {};\n\nvar urlMatchesRegexList = function (url, regexList) {\n var matches = false;\n for (var i = 0; i < regexList.length; i++) {\n if (url.match(regexList[i])) {\n matches = true;\n break;\n }\n }\n return matches;\n};\n\nvar JSONStringify = null, JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n/**\n * Determines if CompressionStream API should be used.\n * Returns false for Safari 16.4 and 16.5 which have breaking CompressionStream bugs.\n * https://bugs.webkit.org/show_bug.cgi?id=254021\n * fixed in 16.6 https://developer.apple.com/documentation/safari-release-notes/safari-16_6-release-notes\n */\nvar canUseCompressionStream = function(userAgent, vendor, opera) {\n if (!window.CompressionStream) {\n return false;\n }\n\n var browser = _.info.browser(userAgent, vendor, opera);\n var version = _.info.browserVersion(userAgent, vendor, opera);\n if (browser === 'Safari' || browser === 'Mobile Safari') {\n if (version >= 16.4 && version < 16.6) {\n return false;\n }\n }\n\n return true;\n};\n\n// UNMINIFIED EXPORTS (for closure compiler)\n_['info'] = _.info;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['device'] = _.info.device;\n_['info']['properties'] = _.info.properties;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['isObject'] = _.isObject;\n_['JSONDecode'] = _.JSONDecode;\n_['JSONEncode'] = _.JSONEncode;\n_['toArray'] = _.toArray;\n_['NPO'] = NpoPromise;\n\nexport {\n _,\n batchedThrottle,\n canUseCompressionStream,\n cheap_guid,\n console_with_prefix,\n console,\n document,\n extract_domain,\n generateTraceparent,\n JSONParse,\n JSONStringify,\n isOnline,\n localStorageSupported,\n MAX_RECORDING_MS,\n MAX_VALUE_FOR_MIN_RECORDING_MS,\n navigator,\n NOOP_FUNC,\n safewrap,\n safewrapClass,\n slice,\n urlMatchesRegexList,\n userAgent,\n windowOpera,\n};\n","/* globals define,module */\n/*\nUsing a Universal Module Loader that should be browser, require, and AMD friendly\nhttp://ricostacruz.com/cheatsheets/umdjs.html\n*/\n;(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n root.jsonLogic = factory();\n }\n}(this, function() {\n \"use strict\";\n /* globals console:false */\n\n if ( ! Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === \"[object Array]\";\n };\n }\n\n /**\n * Return an array that contains no duplicates (original not modified)\n * @param {array} array Original reference array\n * @return {array} New array with no duplicates\n */\n function arrayUnique(array) {\n var a = [];\n for (var i=0, l=array.length; i<l; i++) {\n if (a.indexOf(array[i]) === -1) {\n a.push(array[i]);\n }\n }\n return a;\n }\n\n var jsonLogic = {};\n var operations = {\n \"==\": function(a, b) {\n return a == b;\n },\n \"===\": function(a, b) {\n return a === b;\n },\n \"!=\": function(a, b) {\n return a != b;\n },\n \"!==\": function(a, b) {\n return a !== b;\n },\n \">\": function(a, b) {\n return a > b;\n },\n \">=\": function(a, b) {\n return a >= b;\n },\n \"<\": function(a, b, c) {\n return (c === undefined) ? a < b : (a < b) && (b < c);\n },\n \"<=\": function(a, b, c) {\n return (c === undefined) ? a <= b : (a <= b) && (b <= c);\n },\n \"!!\": function(a) {\n return jsonLogic.truthy(a);\n },\n \"!\": function(a) {\n return !jsonLogic.truthy(a);\n },\n \"%\": function(a, b) {\n return a % b;\n },\n \"log\": function(a) {\n console.log(a); return a;\n },\n \"in\": function(a, b) {\n if (!b || typeof b.indexOf === \"undefined\") return false;\n return (b.indexOf(a) !== -1);\n },\n \"cat\": function() {\n return Array.prototype.join.call(arguments, \"\");\n },\n \"substr\": function(source, start, end) {\n if (end < 0) {\n // JavaScript doesn't support negative end, this emulates PHP behavior\n var temp = String(source).substr(start);\n return temp.substr(0, temp.length + end);\n }\n return String(source).substr(start, end);\n },\n \"+\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) + parseFloat(b, 10);\n }, 0);\n },\n \"*\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return parseFloat(a, 10) * parseFloat(b, 10);\n });\n },\n \"-\": function(a, b) {\n if (b === undefined) {\n return -a;\n } else {\n return a - b;\n }\n },\n \"/\": function(a, b) {\n return a / b;\n },\n \"min\": function() {\n return Math.min.apply(this, arguments);\n },\n \"max\": function() {\n return Math.max.apply(this, arguments);\n },\n \"merge\": function() {\n return Array.prototype.reduce.call(arguments, function(a, b) {\n return a.concat(b);\n }, []);\n },\n \"var\": function(a, b) {\n var not_found = (b === undefined) ? null : b;\n var data = this;\n if (typeof a === \"undefined\" || a===\"\" || a===null) {\n return data;\n }\n var sub_props = String(a).split(\".\");\n for (var i = 0; i < sub_props.length; i++) {\n if (data === null || data === undefined) {\n return not_found;\n }\n // Descending into data\n data = data[sub_props[i]];\n if (data === undefined) {\n return not_found;\n }\n }\n return data;\n },\n \"missing\": function() {\n /*\n Missing can receive many keys as many arguments, like {\"missing:[1,2]}\n Missing can also receive *one* argument that is an array of keys,\n which typically happens if it's actually acting on the output of another command\n (like 'if' or 'merge')\n */\n\n var missing = [];\n var keys = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = jsonLogic.apply({\"var\": key}, this);\n if (value === null || value === \"\") {\n missing.push(key);\n }\n }\n\n return missing;\n },\n \"missing_some\": function(need_count, options) {\n // missing_some takes two arguments, how many (minimum) items must be present, and an array of keys (just like 'missing') to check for presence.\n var are_missing = jsonLogic.apply({\"missing\": options}, this);\n\n if (options.length - are_missing.length >= need_count) {\n return [];\n } else {\n return are_missing;\n }\n },\n };\n\n jsonLogic.is_logic = function(logic) {\n return (\n typeof logic === \"object\" && // An object\n logic !== null && // but not null\n ! Array.isArray(logic) && // and not an array\n Object.keys(logic).length === 1 // with exactly one key\n );\n };\n\n /*\n This helper will defer to the JsonLogic spec as a tie-breaker when different language interpreters define different behavior for the truthiness of primitives. E.g., PHP considers empty arrays to be falsy, but Javascript considers them to be truthy. JsonLogic, as an ecosystem, needs one consistent answer.\n\n Spec and rationale here: http://jsonlogic.com/truthy\n */\n jsonLogic.truthy = function(value) {\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n return !! value;\n };\n\n\n jsonLogic.get_operator = function(logic) {\n return Object.keys(logic)[0];\n };\n\n jsonLogic.get_values = function(logic) {\n return logic[jsonLogic.get_operator(logic)];\n };\n\n jsonLogic.apply = function(logic, data) {\n // Does this array contain logic? Only one way to find out.\n if (Array.isArray(logic)) {\n return logic.map(function(l) {\n return jsonLogic.apply(l, data);\n });\n }\n // You've recursed to a primitive, stop!\n if ( ! jsonLogic.is_logic(logic) ) {\n return logic;\n }\n\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n var i;\n var current;\n var scopedLogic;\n var scopedData;\n var initial;\n\n // easy syntax for unary operators, like {\"var\" : \"x\"} instead of strict {\"var\" : [\"x\"]}\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n // 'if', 'and', and 'or' violate the normal rule of depth-first calculating consequents, let each manage recursion as needed.\n if (op === \"if\" || op == \"?:\") {\n /* 'if' should be called with a odd number of parameters, 3 or greater\n This works on the pattern:\n if( 0 ){ 1 }else{ 2 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else{ 4 };\n if( 0 ){ 1 }else if( 2 ){ 3 }else if( 4 ){ 5 }else{ 6 };\n\n The implementation is:\n For pairs of values (0,1 then 2,3 then 4,5 etc)\n If the first evaluates truthy, evaluate and return the second\n If the first evaluates falsy, jump to the next pair (e.g, 0,1 to 2,3)\n given one parameter, evaluate and return it. (it's an Else and all the If/ElseIf were false)\n given 0 parameters, return NULL (not great practice, but there was no Else)\n */\n for (i = 0; i < values.length - 1; i += 2) {\n if ( jsonLogic.truthy( jsonLogic.apply(values[i], data) ) ) {\n return jsonLogic.apply(values[i+1], data);\n }\n }\n if (values.length === i+1) {\n return jsonLogic.apply(values[i], data);\n }\n return null;\n } else if (op === \"and\") { // Return first falsy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( ! jsonLogic.truthy(current)) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"or\") {// Return first truthy, or last\n for (i=0; i < values.length; i+=1) {\n current = jsonLogic.apply(values[i], data);\n if ( jsonLogic.truthy(current) ) {\n return current;\n }\n }\n return current; // Last\n } else if (op === \"filter\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n // Return only the elements from the array in the first argument,\n // that return truthy when passed to the logic in the second argument.\n // For parity with JavaScript, reindex the returned array\n return scopedData.filter(function(datum) {\n return jsonLogic.truthy( jsonLogic.apply(scopedLogic, datum));\n });\n } else if (op === \"map\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData)) {\n return [];\n }\n\n return scopedData.map(function(datum) {\n return jsonLogic.apply(scopedLogic, datum);\n });\n } else if (op === \"reduce\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n initial = typeof values[2] !== \"undefined\" ? jsonLogic.apply(values[2], data) : null;\n\n if ( ! Array.isArray(scopedData)) {\n return initial;\n }\n\n return scopedData.reduce(\n function(accumulator, current) {\n return jsonLogic.apply(\n scopedLogic,\n {current: current, accumulator: accumulator}\n );\n },\n initial\n );\n } else if (op === \"all\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n // All of an empty set is false. Note, some and none have correct fallback after the for loop\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( ! jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First falsy, short circuit\n }\n }\n return true; // All were truthy\n } else if (op === \"none\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return true;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return false; // First truthy, short circuit\n }\n }\n return true; // None were truthy\n } else if (op === \"some\") {\n scopedData = jsonLogic.apply(values[0], data);\n scopedLogic = values[1];\n\n if ( ! Array.isArray(scopedData) || ! scopedData.length) {\n return false;\n }\n for (i=0; i < scopedData.length; i+=1) {\n if ( jsonLogic.truthy( jsonLogic.apply(scopedLogic, scopedData[i]) )) {\n return true; // First truthy, short circuit\n }\n }\n return false; // None were truthy\n }\n\n // Everyone else gets immediate depth-first recursion\n values = values.map(function(val) {\n return jsonLogic.apply(val, data);\n });\n\n\n // The operation is called with \"data\" bound to its \"this\" and \"values\" passed as arguments.\n // Structured commands like % or > can name formal arguments while flexible commands (like missing or merge) can operate on the pseudo-array arguments\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n if (operations.hasOwnProperty(op) && typeof operations[op] === \"function\") {\n return operations[op].apply(data, values);\n } else if (op.indexOf(\".\") > 0) { // Contains a dot, and not in the 0th position\n var sub_ops = String(op).split(\".\");\n var operation = operations;\n for (i = 0; i < sub_ops.length; i++) {\n if (!operation.hasOwnProperty(sub_ops[i])) {\n throw new Error(\"Unrecognized operation \" + op +\n \" (failed at \" + sub_ops.slice(0, i+1).join(\".\") + \")\");\n }\n // Descending into operations\n operation = operation[sub_ops[i]];\n }\n\n return operation.apply(data, values);\n }\n\n throw new Error(\"Unrecognized operation \" + op );\n };\n\n jsonLogic.uses_data = function(logic) {\n var collection = [];\n\n if (jsonLogic.is_logic(logic)) {\n var op = jsonLogic.get_operator(logic);\n var values = logic[op];\n\n if ( ! Array.isArray(values)) {\n values = [values];\n }\n\n if (op === \"var\") {\n // This doesn't cover the case where the arg to var is itself a rule.\n collection.push(values[0]);\n } else {\n // Recursion!\n values.forEach(function(val) {\n collection.push.apply(collection, jsonLogic.uses_data(val) );\n });\n }\n }\n\n return arrayUnique(collection);\n };\n\n jsonLogic.add_operation = function(name, code) {\n operations[name] = code;\n };\n\n jsonLogic.rm_operation = function(name) {\n delete operations[name];\n };\n\n jsonLogic.rule_like = function(rule, pattern) {\n // console.log(\"Is \". JSON.stringify(rule) . \" like \" . JSON.stringify(pattern) . \"?\");\n if (pattern === rule) {\n return true;\n } // TODO : Deep object equivalency?\n if (pattern === \"@\") {\n return true;\n } // Wildcard!\n if (pattern === \"number\") {\n return (typeof rule === \"number\");\n }\n if (pattern === \"string\") {\n return (typeof rule === \"string\");\n }\n if (pattern === \"array\") {\n // !logic test might be superfluous in JavaScript\n return Array.isArray(rule) && ! jsonLogic.is_logic(rule);\n }\n\n if (jsonLogic.is_logic(pattern)) {\n if (jsonLogic.is_logic(rule)) {\n var pattern_op = jsonLogic.get_operator(pattern);\n var rule_op = jsonLogic.get_operator(rule);\n\n if (pattern_op === \"@\" || pattern_op === rule_op) {\n // echo \"\\nOperators match, go deeper\\n\";\n return jsonLogic.rule_like(\n jsonLogic.get_values(rule, false),\n jsonLogic.get_values(pattern, false)\n );\n }\n }\n return false; // pattern is logic, rule isn't, can't be eq\n }\n\n if (Array.isArray(pattern)) {\n if (Array.isArray(rule)) {\n if (pattern.length !== rule.length) {\n return false;\n }\n /*\n Note, array order MATTERS, because we're using this array test logic to consider arguments, where order can matter. (e.g., + is commutative, but '-' or 'if' or 'var' are NOT)\n */\n for (var i = 0; i < pattern.length; i += 1) {\n // If any fail, we fail\n if ( ! jsonLogic.rule_like(rule[i], pattern[i])) {\n return false;\n }\n }\n return true; // If they *all* passed, we pass\n } else {\n return false; // Pattern is array, rule isn't\n }\n }\n\n // Not logic, not array, not a === match for rule.\n return false;\n };\n\n return jsonLogic;\n}));\n","import { _ } from '../utils';\nimport jsonLogic from 'json-logic-js';\n\n/**\n * Check if an event matches the given criteria\n * @param {string} eventName - The name of the event being checked\n * @param {Object} properties - Event properties to evaluate against property filters\n * @param {Object} criteria - Criteria to match against, with:\n * - event_name: string - Required event name (case-sensitive match)\n * - property_filters: Object - Optional JsonLogic filters for properties\n * @returns {Object} Result object with:\n * - matches: boolean - Whether the event matches the criteria\n * - error: string|undefined - Error message if evaluation failed\n */\nvar eventMatchesCriteria = function(eventName, properties, criteria) {\n // Check exact event name match (case-sensitive)\n if (eventName !== criteria.event_name) {\n return { matches: false };\n }\n\n // Evaluate property filters using JsonLogic\n var propertyFilters = criteria.property_filters;\n var filtersMatch = true; // default to true if no filters\n\n if (propertyFilters && !_.isEmptyObject(propertyFilters)) {\n try {\n // Use properties as-is for case-sensitive matching\n filtersMatch = jsonLogic.apply(propertyFilters, properties || {});\n } catch (error) {\n return {\n matches: false,\n error: error.toString()\n };\n }\n }\n\n return { matches: filtersMatch };\n};\n\nexport {\n eventMatchesCriteria\n};\n","import { window } from '../window';\nimport { TARGETING_GLOBAL_NAME } from '../config';\nimport { eventMatchesCriteria } from './event-matcher';\n\n// Create targeting library object\nvar targetingLibrary = {};\ntargetingLibrary['eventMatchesCriteria'] = eventMatchesCriteria;\n\n// Set global Promise (use bracket notation to prevent minification)\n// This is the ONE AND ONLY global - matches recorder pattern\nwindow[TARGETING_GLOBAL_NAME] = Promise.resolve(targetingLibrary);\n"],"names":["win","loc","Config","TARGETING_GLOBAL_NAME","setImmediate","window","builtInProp","cycle","schedulingQueue","ToString","timer","fn","obj","name","val","config","err","first","last","item","Item","self","f","schedule","isThenable","o","_then","oType","notify","i","notifyIsolated","cb","chain","ret","resolve","msg","defWrapper","MakeDefWrapper","reject","iteratePromises","Constructor","arr","resolver","rejecter","idx","MakeDef","NpoPromise","executor","def","success","failure","PromisePrototype","len","msgs","count","ArrayProto","FuncProto","ObjProto","slice","toString","hasOwnProperty","navigator","document","windowOpera","screen","userAgent","nativeBind","nativeForEach","nativeIndexOf","nativeMap","nativeIsArray","breaker","_","str","func","context","args","bound","ctor","result","iterator","l","key","source","prop","iterable","callback","results","value","target","found","needle","subclass","superclass","v","k","d","pad","n","p","length","mixed_val","quote","string","escapable","meta","a","c","holder","gap","indent","mind","partial","at","ch","escapee","text","error","m","e","next","number","hex","uffff","white","word","array","object","data","b64","o1","o2","o3","h1","h2","h3","h4","bits","ac","enc","tmp_arr","utftext","start","end","stringl","c1","uuid","x","BLOCKED_UA_STRS","ua","formdata","arg_separator","use_val","use_key","url","param","regexS","regex","nameEQ","ca","cookie","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","days","new_cookie_val","_testStorageSupported","storage","supported","cheap_guid","_localStorageSupported","localStorageSupported","forceCheck","_sessionStorageSupported","sessionStorageSupported","_storageWrapper","is_supported_fn","log_error","windowLocalStorage","windowSessionStorage","_err","register_event","element","type","handler","oldSchool","useCapture","ontype","old_handler","makeHandler","new_handler","old_handlers","event","fixEvent","old_result","new_result","TOKEN_MATCH_REGEX","getAllChildren","bad_whitespace","hasClass","elem","selector","className","getElementsBySelector","tokens","token","tagName","foundCount","j","elements","currentContextIndex","currentContext","id","token_match","attrName","attrOperator","attrValue","checkFunction","query","CAMPAIGN_KEYWORDS","CLICK_IDS","default_value","kw","params","kwkey","idkey","referrer","search","keyword","user_agent","vendor","opera","browser","versionRegexs","matches","split","extra_props","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","hostname","domain_regex","parts","tld","JSONStringify","JSONParse","root","factory","module","this","arg","arrayUnique","jsonLogic","operations","b","temp","not_found","sub_props","missing","keys","need_count","options","are_missing","logic","op","values","current","scopedLogic","scopedData","initial","datum","accumulator","sub_ops","operation","collection","code","rule","pattern","pattern_op","rule_op","eventMatchesCriteria","eventName","properties","criteria","propertyFilters","filtersMatch","targetingLibrary"],"mappings":"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","x_google_ignoreList":[4]}
@@ -1,3 +1,5 @@
1
+ import type { RulesLogic } from 'json-logic-js';
2
+
1
3
  export type Persistence = "cookie" | "localStorage";
2
4
 
3
5
  export type ApiPayloadFormat = "base64" | "json";
@@ -8,6 +10,16 @@ export type Query = string | Element | Element[];
8
10
 
9
11
  export type RemoteSettingType = "disabled" | "fallback" | "strict";
10
12
 
13
+
14
+ export interface EventTriggerProps {
15
+ percentage: number;
16
+ property_filters?: RulesLogic;
17
+ }
18
+
19
+ export interface RecordingEventTriggers {
20
+ [eventName: string]: EventTriggerProps;
21
+ }
22
+
11
23
  export interface Dict {
12
24
  [key: string]: any;
13
25
  }
@@ -225,6 +237,9 @@ export interface Config {
225
237
  recorder_src: string;
226
238
  record_block_class: string | RegExp;
227
239
  record_block_selector: string;
240
+ record_console: boolean;
241
+ record_network: boolean;
242
+ record_network_options: NetworkRecordOptions;
228
243
  record_collect_fonts: boolean;
229
244
  record_idle_timeout_ms: number;
230
245
  record_inline_images: boolean;
@@ -239,6 +254,7 @@ export interface Config {
239
254
  record_max_ms: number;
240
255
  record_sessions_percent: number;
241
256
  record_canvas: boolean;
257
+ recording_event_triggers: RecordingEventTriggers;
242
258
  record_heatmap_data: boolean;
243
259
  remote_settings_mode: RemoteSettingType;
244
260
  hooks: {
@@ -518,5 +534,57 @@ export function get_session_recording_properties():
518
534
  | { $mp_replay_id?: string }
519
535
  | {};
520
536
 
537
+ // Network Recording Plugin Types
538
+ export type InitiatorType =
539
+ | 'audio'
540
+ | 'beacon'
541
+ | 'body'
542
+ | 'css'
543
+ | 'early-hint'
544
+ | 'embed'
545
+ | 'fetch'
546
+ | 'frame'
547
+ | 'iframe'
548
+ | 'icon'
549
+ | 'image'
550
+ | 'img'
551
+ | 'input'
552
+ | 'link'
553
+ | 'navigation'
554
+ | 'object'
555
+ | 'ping'
556
+ | 'script'
557
+ | 'track'
558
+ | 'video'
559
+ | 'xmlhttprequest';
560
+
561
+ export interface NetworkRequest {
562
+ url: string;
563
+ method?: string;
564
+ initiatorType: InitiatorType;
565
+ status?: number;
566
+ startTime: number;
567
+ endTime: number;
568
+ timeOrigin: number;
569
+ requestHeaders?: Record<string, string>;
570
+ requestBody?: string;
571
+ responseHeaders?: Record<string, string>;
572
+ responseBody?: string;
573
+ }
574
+
575
+ export interface NetworkRecordOptions {
576
+ initiatorTypes?: InitiatorType[];
577
+ ignoreRequestUrls?: string[];
578
+ ignoreRequestFn?: (data: NetworkRequest) => boolean;
579
+ recordHeaders?: { request: string[]; response: string[] };
580
+ recordBodyUrls?: { request: string[]; response: string[] };
581
+ recordInitialRequests?: boolean;
582
+ }
583
+
584
+ export interface NetworkData {
585
+ requests: NetworkRequest[];
586
+ isInitial?: boolean;
587
+ }
588
+
521
589
  declare const mixpanel: OverridedMixpanel;
522
590
  export default mixpanel;