@gemx-dev/clarity-js 0.8.85 → 0.8.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/clarity.extended.js +1 -1
- package/build/clarity.insight.js +1 -1
- package/build/clarity.js +547 -370
- package/build/clarity.min.js +1 -1
- package/build/clarity.module.js +547 -370
- package/build/clarity.performance.js +1 -1
- package/package.json +1 -1
- package/src/core/config.ts +1 -0
- package/src/core/version.ts +1 -1
- package/src/data/gemx-upload.ts +51 -0
- package/src/data/gemx.ts +4 -0
- package/src/data/index.ts +11 -6
- package/src/data/upload.ts +35 -2
- package/src/interaction/click.ts +4 -0
- package/src/interaction/index.ts +2 -11
- package/src/interaction/scroll.ts +4 -0
- package/src/layout/dom.ts +4 -0
- package/src/layout/gemx-discover.ts +65 -0
- package/src/layout/index.ts +3 -0
- package/src/layout/mutation.ts +8 -0
- package/src/layout/target.ts +2 -4
- package/types/core.d.ts +1 -1
- package/types/data.d.ts +9 -0
- package/types/global.d.ts +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";var t=Object.freeze({__proto__:null,get flush(){return Kt},get queue(){return Ft},get start(){return Jt},get stop(){return Qt},get track(){return Ut}}),e=Object.freeze({__proto__:null,get check(){return oe},get compute(){return ue},get data(){return Gt},get start(){return ae},get stop(){return ce},get trigger(){return ie}}),n=Object.freeze({__proto__:null,get compute(){return ge},get data(){return se},get log(){return he},get reset(){return ve},get start(){return fe},get stop(){return pe},get updates(){return le}}),r=Object.freeze({__proto__:null,get compute(){return Oe},get config(){return Se},get consent(){return ke},get data(){return me},get start(){return be},get stop(){return we},get trackConsentv2(){return Ee}}),a=Object.freeze({__proto__:null,get callback(){return Ge},get callbacks(){return xe},get clear(){return Ue},get consent(){return Re},get consentv2(){return Xe},get data(){return Te},get electron(){return Me},get id(){return De},get metadata(){return Ae},get save(){return Ve},get shortid(){return Be},get start(){return ze},get stop(){return qe}}),o=Object.freeze({__proto__:null,get data(){return Fe},get envelope(){return $e},get start(){return Ke},get stop(){return Qe}}),i={projectId:null,delay:1e3,lean:!1,lite:!1,track:!0,content:!0,drop:[],mask:[],unmask:[],regions:[],cookies:[],fraud:!0,checksum:[],report:null,upload:null,fallback:null,upgrade:null,action:null,dob:null,delayDom:!1,throttleDom:!0,conversions:!1,includeSubdomains:!0,modules:[],diagnostics:!1,externalSession:!1,userId:null,sessionId:null};function u(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}var c=0;function s(){return performance.now()+performance.timeOrigin}function l(t){void 0===t&&(t=null);var e=0===c?s():c,n=t&&t.timeStamp>0?t.timeStamp:performance.now(),r=t&&t.view?t.view.performance.timeOrigin:performance.timeOrigin;return Math.max(Math.round(n+r-e),0)}var d="0.8.85";var f=/\S/gi,p=255,h=!0,g=null,v=null,m=null;function y(t,e,n,r,a){if(void 0===r&&(r=!1),t){if("input"==e&&("checkbox"===a||"radio"===a))return t;switch(n){case 0:return t;case 1:switch(e){case"*T":case"value":case"placeholder":case"click":return function(t){var e=-1,n=0,r=!1,a=!1,o=!1,i=null;I();for(var u=0;u<t.length;u++){var c=t.charCodeAt(u);if(r=r||c>=48&&c<=57,a=a||64===c,o=9===c||10===c||13===c||32===c,0===u||u===t.length-1||o){if(r||a){null===i&&(i=t.split(""));var s=t.substring(e+1,o?u:u+1);s=h&&null!==m?s.match(m)?s:S(s,"▪","▫"):_(s),i.splice(e+1-n,s.length,s),n+=s.length-1}o&&(r=!1,a=!1,e=u)}}return i?i.join(""):t}(t);case"input":case"change":return k(t)}return t;case 2:case 3:switch(e){case"*T":case"data-":return r?w(t):_(t);case"src":case"srcset":case"title":case"alt":case"href":case"xlink:href":return 3===n?(null==t?void 0:t.startsWith("blob:"))?"blob:":"":t;case"value":case"click":case"input":case"change":return k(t);case"placeholder":return _(t)}break;case 4:switch(e){case"*T":case"data-":return r?w(t):_(t);case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":return""}break;case 5:switch(e){case"*T":case"data-":return S(t,"▪","▫");case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":case"src":case"srcset":case"alt":case"title":return""}}}return t}function b(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var r=t;if(e)r="".concat("https://").concat("Electron");else{var a=i.drop;if(a&&a.length>0&&t&&t.indexOf("?")>0){var o=t.split("?"),u=o[0],c=o[1];r=u+"?"+c.split("&").map((function(t){return a.some((function(e){return 0===t.indexOf("".concat(e,"="))}))?"".concat(t.split("=")[0],"=").concat("*na*"):t})).join("&")}}return n&&(r=r.substring(0,p)),r}function w(t){var e=t.trim();if(e.length>0){var n=e[0],r=t.indexOf(n),a=t.substr(0,r),o=t.substr(r+e.length);return"".concat(a).concat(e.length.toString(36)).concat(o)}return t}function _(t){return t.replace(f,"•")}function S(t,e,n){return I(),t?t.replace(v,e).replace(g,n):t}function k(t){for(var e=5*(Math.floor(t.length/5)+1),n="",r=0;r<e;r++)n+=r>0&&r%5==0?" ":"•";return n}function I(){if(h&&null===g)try{g=new RegExp("\\p{N}","gu"),v=new RegExp("\\p{L}","gu"),m=new RegExp("\\p{Sc}","gu")}catch(t){h=!1}}var E=[],O=null;function T(){}var x=[];function M(){}function C(){}function j(){}function N(){}function z(){}var P=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:O,event:N,hashText:M,keys:x,log:T,observe:function(){},register:z,reset:function(){},sheetAdoptionState:[],sheetUpdateState:[],start:function(){},state:E,stop:function(){},track:j,trigger:C}),q=null;function A(t,e){In()&&t&&"string"==typeof t&&t.length<255&&(q=e&&"string"==typeof e&&e.length<255?{key:t,value:e}:{value:t},re(24))}var D,R=null,X=null;function H(t){t in R||(R[t]=0),t in X||(X[t]=0),R[t]++,X[t]++}function L(t,e){null!==e&&(t in R||(R[t]=0),t in X||(X[t]=0),R[t]+=e,X[t]+=e)}function U(t,e){null!==e&&!1===isNaN(e)&&(t in R||(R[t]=0),(e>R[t]||0===R[t])&&(X[t]=e,R[t]=e))}function G(t,e,n){return window.setTimeout(nn(t),e,n)}function V(t){return window.clearTimeout(t)}var Y=0,B=0,W=null;function Z(){W&&V(W),W=G(J,B),Y=l()}function J(){var t=l();D={gap:t-Y},re(25),D.gap<3e5?W=G(J,B):_n&&(A("clarityGemX","suspend"),Jn(),["mousemove","touchstart"].forEach((function(t){return an(document,t,En)})),["resize","scroll","pageshow"].forEach((function(t){return an(window,t,En)})))}var F=Object.freeze({__proto__:null,get data(){return D},reset:Z,start:function(){B=6e4,Y=0},stop:function(){V(W),Y=0,B=0}}),K=null;function Q(t){In()&&i.lean&&(i.lean=!1,K={key:t},Ge(),Ve(),i.upgrade&&i.upgrade(t),re(3),i.lite)}var $=Object.freeze({__proto__:null,get data(){return K},start:function(){!i.lean&&i.upgrade&&i.upgrade("Config"),K=null},stop:function(){K=null},upgrade:Q}),tt=function(){return tt=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var a in e=arguments[n])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t},tt.apply(this,arguments)};function et(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{c(r.next(t))}catch(t){o(t)}}function u(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,u)}c((r=r.apply(t,e||[])).next())}))}function nt(t,e){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){i.label=u[1];break}if(6===u[0]&&i.label<a[1]){i.label=a[1],a=u;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(u);break}a[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}var rt=null;function at(t,e){it(t,"string"==typeof e?[e]:e)}function ot(t,e,n,r){return void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null),et(this,void 0,void 0,(function(){var a,o;return nt(this,(function(i){switch(i.label){case 0:return o={},[4,st(t)];case 1:return o.userId=i.sent(),o.userHint=r||((u=t)&&u.length>=5?"".concat(u.substring(0,2)).concat(S(u.substring(2),"*","*")):S(u,"*","*")),it("userId",[(a=o).userId]),it("userHint",[a.userHint]),it("userType",[lt(t)]),e&&(it("sessionId",[e]),a.sessionId=e),n&&(it("pageId",[n]),a.pageId=n),[2,a]}var u}))}))}function it(t,e){if(In()&&t&&e&&"string"==typeof t&&t.length<255){for(var n=(t in rt?rt[t]:[]),r=0;r<e.length;r++)"string"==typeof e[r]&&e[r].length<255&&n.push(e[r]);rt[t]=n}}function ut(){re(34)}function ct(){rt={}}function st(t){return et(this,void 0,void 0,(function(){var e;return nt(this,(function(n){switch(n.label){case 0:return n.trys.push([0,4,,5]),crypto&&t?[4,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))]:[3,2];case 1:return e=n.sent(),[2,Array.prototype.map.call(new Uint8Array(e),(function(t){return("00"+t.toString(16)).slice(-2)})).join("")];case 2:return[2,""];case 3:return[3,5];case 4:return n.sent(),[2,""];case 5:return[2]}}))}))}function lt(t){return t&&t.indexOf("@")>0?"email":"string"}var dt=Object.freeze({__proto__:null,compute:ut,get data(){return rt},identify:ot,reset:ct,set:at,start:function(){ct()},stop:function(){ct()}}),ft="CompressionStream"in window;function pt(t){return et(this,void 0,void 0,(function(){var e,n;return nt(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),ft?(e=new ReadableStream({start:function(e){return et(this,void 0,void 0,(function(){return nt(this,(function(n){return e.enqueue(t),e.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),n=Uint8Array.bind,[4,ht(e)]):[3,2];case 1:return[2,new(n.apply(Uint8Array,[void 0,r.sent()]))];case 2:return[3,4];case 3:return r.sent(),[3,4];case 4:return[2,null]}}))}))}function ht(t){return et(this,void 0,void 0,(function(){var e,n,r,a,o;return nt(this,(function(i){switch(i.label){case 0:e=t.getReader(),n=[],r=!1,a=[],i.label=1;case 1:return r?[3,3]:[4,e.read()];case 2:return o=i.sent(),r=o.done,a=o.value,r?[2,n]:(n.push.apply(n,a),[3,1]);case 3:return[2,n]}}))}))}function gt(t,e){try{return!!t[e]}catch(t){return!1}}function vt(t){try{var e=decodeURIComponent(t);return[e!=t,e]}catch(t){}return[!1,t]}var mt=null,yt="^";function bt(t,e){var n;if(void 0===e&&(e=!1),gt(document,"cookie")){var r=document.cookie.split(";");if(r)for(var a=0;a<r.length;a++){var o=r[a].split("=");if(o.length>1&&o[0]&&o[0].trim()===t){for(var i=vt(o[1]),u=i[0],c=i[1];u;)u=(n=vt(c))[0],c=n[1];return e?c.endsWith("".concat("~","1"))?c.substring(0,c.length-2):null:c}}}return null}function wt(t,e,n){if((i.track||""==e)&&(navigator&&navigator.cookieEnabled||gt(document,"cookie"))){var r=function(t){return encodeURIComponent(t)}(e),a=new Date;a.setDate(a.getDate()+n);var o=a?"expires="+a.toUTCString():"",u="".concat(t,"=").concat(r).concat(";").concat(o).concat(";path=/");try{if(null===mt){for(var c=location.hostname?location.hostname.split("."):[],s=c.length-1;s>=0;s--)if(mt=".".concat(c[s]).concat(mt||""),s<c.length-1&&(document.cookie="".concat(u).concat(";").concat("domain=").concat(mt),bt(t)===e))return;mt=""}}catch(t){mt=""}document.cookie=mt?"".concat(u).concat(";").concat("domain=").concat(mt):u}}var _t=Object.freeze({__proto__:null,COOKIE_SEP:yt,getCookie:bt,setCookie:wt,start:function(){mt=null},stop:function(){mt=null}}),St={excludeClassNames:[]},kt=tt({},St);var It=Object.freeze({__proto__:null,get:function(){return kt},set:function(t){kt=tt(tt({},kt),t)},start:function(){var t,e;kt={excludeClassNames:null!==(e=null===(t=null===window||void 0===window?void 0:window.GemXHeatmap)||void 0===t?void 0:t.excludeClassNames)&&void 0!==e?e:[]}},stop:function(){kt=tt({},St)}}),Et=null;function Ot(t){try{if(!Et)return;var e=function(t){try{return JSON.parse(t)}catch(t){return[]}}(t);e.forEach((function(t){Et(t)}))}catch(t){}}var Tt=[It,P,n,dt,e,P,_t,r,a,o,t,F,$,P];function xt(){R={},X={},H(5),Tt.forEach((function(t){return nn(t.start)()}))}function Mt(){Tt.slice().reverse().forEach((function(t){return nn(t.stop)()})),R={},X={}}function Ct(){ut(),ge(),re(0),ue(),Oe()}function jt(t,e,n,r){return"href"===t&&"LINK"===r?"".concat(t,"=").concat(e):"".concat(t,"=").concat(y(e,0===t.indexOf("data-")?"data-":t,n))}var Nt=[],zt=1,Pt=null;function qt(){Nt=[],function(t){var e=[t];for(;e.length>0;){for(var n=null,r=null,a=null,o=e.shift(),i=o.firstChild,u=o.parentElement?o.parentElement:o.parentNode?o.parentNode:null;i;)e.push(i),i=i.nextSibling;switch(o.nodeType){case Node.DOCUMENT_TYPE_NODE:var c=o;r="*D",n={name:c.name,publicId:c.publicId,systemId:c.systemId};break;case Node.TEXT_NODE:a=o.nodeValue,r=Pt.get(u)?"*T":r;break;case Node.ELEMENT_NODE:var s=o;n=At(s),r=["NOSCRIPT","SCRIPT","STYLE"].indexOf(s.tagName)<0?s.tagName:r}Dt(o,u,{tag:r,attributes:n,value:a})}}(document),function(t){et(this,void 0,void 0,(function(){var e,n,r,a,o,i,u,c,s,d,f,p,h;return nt(this,(function(g){switch(e=l(),n=[e,t],t){case 8:r=O,n.push(r.width),n.push(r.height),r.width,r.height,Ft(n);break;case 43:if((a=Nt).length>0){for(o=0,i=a;o<i.length;o++)for(u=i[o],c=u.metadata.privacy,s=u.data,d=0,f=["tag","attributes","value"];d<f.length;d++)if(s[p=f[d]])switch(p){case"tag":n.push(u.id),u.parent&&n.push(u.parent),u.previous&&n.push(u.previous),n.push(s[p]);break;case"attributes":for(h in s[p])void 0!==s[p][h]&&n.push(jt(h,s[p][h],c,s.tag));break;case"value":n.push(y(s[p],s.tag,c))}Ft(function(t){for(var e=[],n={},r=0,a=null,o=0;o<t.length;o++)if("string"==typeof t[o]){var i=t[o],u=n[i]||-1;u>=0?a?a.push(u):(a=[u],e.push(a),r++):(a=null,e.push(i),n[i]=r++)}else a=null,e.push(t[o]),r++;return e}(n),!0)}}return[2]}))}))}(43)}function At(t){var e={},n=t.attributes;if(n&&n.length>0)for(var r=0;r<n.length;r++)e[n[r].name]=n[r].value;return e}function Dt(t,e,n){if(t&&n&&n.tag){var r=function(t){return null===t?null:Pt.has(t)?Pt.get(t):(Pt.set(t,zt),zt++)}(t),a=e?Pt.get(e):null,o=t.previousSibling?Pt.get(t.previousSibling):null;Nt.push({id:r,parent:a,previous:o,children:[],data:n,selector:null,hash:null,region:null,metadata:{active:!0,suspend:!1,privacy:5,position:null,fraud:null,size:null}})}}var Rt,Xt,Ht,Lt,Ut,Gt,Vt=0,Yt=0,Bt=null,Wt=0,Zt=!1;function Jt(){Lt=!0,Vt=0,Yt=0,Zt=!1,Wt=0,Rt=[],Xt=[],Ht={},Ut=null}function Ft(t,e){if(void 0===e&&(e=!0),Lt){var n=l(),r=t.length>1?t[1]:null,a=JSON.stringify(t);switch(i.lean?!Zt&&Yt+a.length>10485760&&(Zt=!0):Zt=!1,r){case 5:if(Zt)break;Vt+=a.length;case 37:case 6:case 43:case 45:case 46:case 44:case 51:if(Zt)break;Yt+=a.length,Rt.push(a);break;default:Xt.push(a)}H(25);var o=function(){var t=!1===i.lean&&Vt>0?100:Fe.sequence*i.delay;return"string"==typeof i.upload?Math.max(Math.min(t,3e4),100):i.delay}();n-Wt>2*o&&(V(Bt),Bt=null),e&&null===Bt&&(25!==r&&Z(),Bt=G($t,o),Wt=n,oe(Yt))}}function Kt(){Lt&&(V(Bt),Bt=null,$t(!0))}function Qt(){V(Bt),$t(!0),Vt=0,Yt=0,Zt=!1,Wt=0,Rt=[],Xt=[],Ht={},Ut=null,Lt=!1}function $t(t){return void 0===t&&(t=!1),et(this,void 0,void 0,(function(){var e,n,r,a,o,u,c,s;return nt(this,(function(l){switch(l.label){case 0:return Lt?(Bt=null,(e=!1===i.lean&&Yt>0&&(Yt<1048576||Fe.sequence>0))&&U(1,1),Ct(),n=!0===t,Fe?(r=JSON.stringify($e(n)),a="[".concat(Xt.join(),"]"),o=e?"[".concat(Rt.join(),"]"):"",n&&o.length>0&&r.length+a.length+o.length>65536&&(o=""),u=function(t){return t.p.length>0?'{"e":'.concat(t.e,',"a":').concat(t.a,',"p":').concat(t.p,"}"):'{"e":'.concat(t.e,',"a":').concat(t.a,"}")}({e:r,a:a,p:o}),n?(s=null,[3,3]):[3,1]):[2]):[2];case 1:return[4,pt(u)];case 2:s=l.sent(),l.label=3;case 3:return L(2,(c=s)?c.length:u.length),te(u,c,Fe.sequence,n),Xt=[],e&&(Rt=[],Yt=0,Vt=0,Zt=!1),[2]}}))}))}function te(t,e,n,r){if(void 0===r&&(r=!1),"string"==typeof i.upload){var a=i.upload,o=!1;if(r&&navigator&&navigator.sendBeacon)try{(o=navigator.sendBeacon.bind(navigator)(a,t))&&ne(n)}catch(t){}if(!1===o){n in Ht?Ht[n].attempts++:Ht[n]={data:t,attempts:1};var u=new XMLHttpRequest;u.open("POST",a,!0),u.timeout=15e3,u.ontimeout=function(){en(new Error("".concat("Timeout"," : ").concat(a)))},null!==n&&(u.onreadystatechange=function(){nn(ee)(u,n)}),u.withCredentials=!0,e?(u.setRequestHeader("Accept","application/x-clarity-gzip"),u.send(e)):u.send(t)}}else if(i.upload){(0,i.upload)(t),ne(n)}}function ee(t,e){var n=Ht[e];t&&4===t.readyState&&n&&((t.status<200||t.status>208)&&n.attempts<=1?t.status>=400&&t.status<500?ie(6):(0===t.status&&(i.upload=i.fallback?i.fallback:i.upload),Ut={sequence:e,attempts:n.attempts,status:t.status},re(2),te(n.data,null,e)):(Ut={sequence:e,attempts:n.attempts,status:t.status},n.attempts>1&&re(2),200===t.status&&t.responseText&&function(t){for(var e=t&&t.length>0?t.split("\n"):[],n=0,r=e;n<r.length;n++){var a=r[n],o=a&&a.length>0?a.split(/ (.*)/):[""];switch(o[0]){case"END":ie(6);break;case"UPGRADE":Q("Auto");break;case"ACTION":i.action&&o.length>1&&i.action(o[1]);break;case"EXTRACT":case"MODULE":o.length>1&&o[1];break;case"SIGNAL":o.length>1&&Ot(o[1]);break;case"SNAPSHOT":i.lean=!1,qt()}}}(t.responseText),0===t.status&&(te(n.data,null,e,!0),ie(3)),t.status>=200&&t.status<=208&&ne(e),delete Ht[e]))}function ne(t){1===t&&(Ve(),Ge())}function re(t){var e=[l(),t];switch(t){case 4:var n=E;n&&n.data&&((e=[n.time,n.event]).push(n.data.visible),e.push(n.data.docWidth),e.push(n.data.docHeight),e.push(n.data.screenWidth),e.push(n.data.screenHeight),e.push(n.data.scrollX),e.push(n.data.scrollY),e.push(n.data.pointerX),e.push(n.data.pointerY),e.push(n.data.activityTime),e.push(n.data.scrollTime),e.push(n.data.pointerTime),e.push(n.data.moveX),e.push(n.data.moveY),e.push(n.data.moveTime),e.push(n.data.downX),e.push(n.data.downY),e.push(n.data.downTime),e.push(n.data.upX),e.push(n.data.upY),e.push(n.data.upTime),e.push(n.data.pointerPrevX),e.push(n.data.pointerPrevY),e.push(n.data.pointerPrevTime),e.push(n.data.modules),Ft(e,!1));break;case 25:e.push(D.gap),Ft(e);break;case 35:e.push(Gt.check),Ft(e,!1);break;case 3:e.push(K.key),Ft(e);break;case 2:e.push(Ut.sequence),e.push(Ut.attempts),e.push(Ut.status),Ft(e,!1);break;case 24:q.key&&e.push(q.key),e.push(q.value),Ft(e);break;case 34:var r=Object.keys(rt);if(r.length>0){for(var a=0,o=r;a<o.length;a++){var i=o[a];e.push(i),e.push(rt[i])}ct(),Ft(e,!1)}break;case 0:var u=Object.keys(X);if(u.length>0){for(var c=0,s=u;c<s.length;c++){var d=s[c],f=parseInt(d,10);e.push(f),e.push(Math.round(X[d]))}X={},Ft(e,!1)}break;case 1:var p=Object.keys(le);if(p.length>0){for(var h=0,g=p;h<g.length;h++){var v=g[h];f=parseInt(v,10);e.push(f),e.push(le[v])}ve(),Ft(e,!1)}break;case 36:var m=Object.keys(O);if(m.length>0){for(var y=0,b=m;y<b.length;y++){var w=b[y];f=parseInt(w,10);e.push(f),e.push([].concat.apply([],O[w]))}Ft(e,!1)}break;case 40:x.forEach((function(t){e.push(t);var n=[];for(var r in O[t]){var a=parseInt(r,10);n.push(a),n.push(O[t][r])}e.push(n)})),Ft(e,!1);break;case 47:e.push(me.source),e.push(me.ad_Storage),e.push(me.analytics_Storage),Ft(e,!1)}}function ae(){Gt={check:0}}function oe(t){if(0===Gt.check){var e=Gt.check;e=Fe.sequence>=128?1:e,e=Fe.pageNum>=128?7:e,e=l()>72e5?2:e,(e=t>10485760?2:e)!==Gt.check&&ie(e)}}function ie(t){Gt.check=t,5!==t&&(Ue(),Jn())}function ue(){0!==Gt.check&&re(35)}function ce(){Gt=null}var se=null,le=null,de=!1;function fe(){se={},le={},de=!1}function pe(){se={},le={},de=!1}function he(t,e){if(e&&(e="".concat(e),t in se||(se[t]=[]),se[t].indexOf(e)<0)){if(se[t].length>128)return void(de||(de=!0,ie(5)));se[t].push(e),t in le||(le[t]=[]),le[t].push(e)}}function ge(){re(1)}function ve(){le={},de=!1}var me=null,ye=!0;function be(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;ye=!0,(null==e?void 0:e.addListener)&&e.addListener(["ad_storage","analytics_storage"],_e)}function we(){ye=!0}function _e(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;if(null==e?void 0:e.getConsentState)try{var n=e.getConsentState("analytics_storage");Xe(function(t){var e={source:2,ad_Storage:1===t.ad_Storage?"granted":"denied",analytics_Storage:1===t.analytics_Storage?"granted":"denied"};return e}({ad_Storage:e.getConsentState("ad_storage"),analytics_Storage:n}))}catch(t){return}}function Se(t){Ie(t.analytics_Storage?1:0),me=t}function ke(){Ie(2)}function Ie(t){he(36,t.toString())}function Ee(t){me=t,re(47)}function Oe(){var t;if(ye&&(re(47),ye=!1,!i.track)){var e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;(null==e?void 0:e.usedUpdate)&&_e()}}var Te=null,xe=[],Me=0,Ce=null,je=!1,Ne={source:7,ad_Storage:"denied",analytics_Storage:"denied"};function ze(){var t,e,n,r=navigator&&"userAgent"in navigator?navigator.userAgent:"",a=null!==(n="undefined"!=typeof Intl&&(null===(e=null===(t=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===t?void 0:t.resolvedOptions())||void 0===e?void 0:e.timeZone))&&void 0!==n?n:"",o=(new Date).getTimezoneOffset().toString(),u=window.location.ancestorOrigins?Array.from(window.location.ancestorOrigins).toString():"",c=document&&document.title?document.title:"";Me=r.indexOf("Electron")>0?1:0;var s=function(){var t={session:Be(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},e=bt("_clsk",!i.includeSubdomains);if(e){var n=e.includes("^")?e.split("^"):e.split("|");n.length>=5&&t.ts-We(n[1])<18e5&&(t.session=n[0],t.count=We(n[2])+1,t.upgrade=We(n[3]),t.upload=n.length>=6?"".concat("https://").concat(n[5],"/").concat(n[4]):"".concat("https://").concat(n[4]))}return t}(),l=Ze(),d=i.projectId||function(t,e){void 0===e&&(e=null);for(var n,r=5381,a=r,o=0;o<t.length;o+=2)r=(r<<5)+r^t.charCodeAt(o),o+1<t.length&&(a=(a<<5)+a^t.charCodeAt(o+1));return n=Math.abs(r+11579*a),(e?n%Math.pow(2,e):n).toString(36)}(location.host),f=i.externalSession&&i.userId?i.userId:l.id,p=i.externalSession&&i.sessionId?i.sessionId:s.session;Te={projectId:d,userId:f,sessionId:p,pageNum:s.count},i.lean=i.track&&null!==s.upgrade?0===s.upgrade:i.lean,i.upload=i.track&&"string"==typeof i.upload&&s.upload&&s.upload.length>"https://".length?s.upload:i.upload,he(0,r),he(3,c),he(1,b(location.href,!!Me)),he(2,document.referrer),he(15,function(){var t=Be();if(i.track&>(window,"sessionStorage")){var e=sessionStorage.getItem("_cltk");t=e||t,sessionStorage.setItem("_cltk",t)}return t}()),he(16,document.documentElement.lang),he(17,document.dir),he(26,"".concat(window.devicePixelRatio)),he(28,l.dob.toString()),he(29,l.version.toString()),he(33,u),he(34,a),he(35,o),U(0,s.ts),U(1,0),U(35,Me);var h,g=null===window||void 0===window?void 0:window.Zone;g&&"__symbol__"in g&&U(39,1),navigator&&(he(9,navigator.language),U(33,navigator.hardwareConcurrency),U(32,navigator.maxTouchPoints),U(34,Math.round(navigator.deviceMemory)),(h=navigator.userAgentData)&&h.getHighEntropyValues?h.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var e;he(22,t.platform),he(23,t.platformVersion),null===(e=t.brands)||void 0===e||e.forEach((function(t){he(24,t.name+"~"+t.version)})),he(25,t.model),U(27,t.mobile?1:0)})):he(22,navigator.platform)),screen&&(U(14,Math.round(screen.width)),U(15,Math.round(screen.height)),U(16,Math.round(screen.colorDepth))),null===Ce&&(Ce={source:l.consent?6:0,ad_Storage:i.track?"granted":"denied",analytics_Storage:i.track?"granted":"denied"}),Pe(),Se(He(Ce)),i.externalSession||Ye(l)}function Pe(){if(!je&&"granted"===(null==Ce?void 0:Ce.analytics_Storage)&&"granted"===(null==Ce?void 0:Ce.ad_Storage)){for(var t=0,e=i.cookies;t<e.length;t++){var n=e[t],r=bt(n);r&&at(n,r)}je=!0}}function qe(){Te=null,je=!1,xe.forEach((function(t){t.called=!1}))}function Ae(t,e,n,r){void 0===e&&(e=!0),void 0===n&&(n=!1),void 0===r&&(r=!1);var a=i.lean?0:1,o=!1;Te&&(a||!1===e)&&(t(Te,!i.lean,r?Ce:void 0),o=!0),!n&&o||xe.push({callback:t,wait:e,recall:n,called:o,consentInfo:r})}function De(){return Te?[Te.userId,Te.sessionId,Te.pageNum].join("."):""}function Re(t){void 0===t&&(t=!0),Xe(t?{source:4,ad_Storage:"granted",analytics_Storage:"granted"}:{source:4,ad_Storage:"denied",analytics_Storage:"denied"})}function Xe(t,e){var n;if(void 0===t&&(t=Ne),void 0===e&&(e=5),In()){var r={source:null!==(n=t.source)&&void 0!==n?n:e,ad_Storage:Le(t.ad_Storage,null==Ce?void 0:Ce.ad_Storage),analytics_Storage:Le(t.analytics_Storage,null==Ce?void 0:Ce.analytics_Storage)};if(Ce&&r.ad_Storage===Ce.ad_Storage&&r.analytics_Storage===Ce.analytics_Storage)return Ce.source=r.source,Ee(He(Ce)),void ke();Ce=r,Ge(!0);var a=He(Ce);if(!a.analytics_Storage&&i.track)return i.track=!1,Ue(!0),Jn(),void window.setTimeout(Zn,250);In()&&a.analytics_Storage&&(i.track=!0,Ye(Ze(),1),Ve()),Pe(),Ee(a),ke()}}function He(t){var e;return{source:null!==(e=t.source)&&void 0!==e?e:255,ad_Storage:"granted"===t.ad_Storage?1:0,analytics_Storage:"granted"===t.analytics_Storage?1:0}}function Le(t,e){return void 0===e&&(e="denied"),"string"==typeof t?t.toLowerCase():e}function Ue(t){void 0===t&&(t=!1),wt("_clsk","",0),t&&wt("_clck","",0)}function Ge(t){void 0===t&&(t=!1),function(t,e){void 0===e&&(e=!1);if(xe.length>0)for(var n=0;n<xe.length;n++){var r=xe[n];r.callback&&(!r.called&&!e||r.consentInfo&&e)&&(!r.wait||t)&&(r.callback(Te,!i.lean,r.consentInfo?Ce:void 0),r.called=!0,r.recall||(xe.splice(n,1),n--))}}(i.lean?0:1,t)}function Ve(){if(Te&&i.track&&!i.externalSession){var t=Math.round(Date.now()),e=i.upload&&"string"==typeof i.upload?i.upload.replace("https://",""):"",n=i.lean?0:1;wt("_clsk",[Te.sessionId,t,Te.pageNum,n,e].join(yt),1)}}function Ye(t,e){void 0===e&&(e=null),e=null===e?t.consent:e;var n=Math.ceil((Date.now()+31536e6)/864e5),r=0===t.dob?null===i.dob?0:i.dob:t.dob;(null===t.expiry||Math.abs(n-t.expiry)>=1||t.consent!==e||t.dob!==r)&&wt("_clck",[Te.userId,2,n.toString(36),e,r].join(yt),365)}function Be(){var t=Math.floor(Math.random()*Math.pow(2,32));return window&&window.crypto&&window.crypto.getRandomValues&&Uint32Array&&(t=window.crypto.getRandomValues(new Uint32Array(1))[0]),t.toString(36)}function We(t,e){return void 0===e&&(e=10),parseInt(t,e)}function Ze(){var t={id:Be(),version:0,expiry:null,consent:0,dob:0},e=bt("_clck",!i.includeSubdomains);if(e&&e.length>0){var n=e.includes("^")?e.split("^"):e.split("|");n.length>1&&(t.version=We(n[1])),n.length>2&&(t.expiry=We(n[2],36)),n.length>3&&1===We(n[3])&&(t.consent=1),n.length>4&&We(n[1])>1&&(t.dob=We(n[4])),i.track=i.track||1===t.consent,t.id=i.track?n[0]:t.id}return t}var Je,Fe=null;function Ke(){var t=Te;Fe={version:d,sequence:0,start:0,duration:0,projectId:t.projectId,userId:t.userId,sessionId:t.sessionId,pageNum:t.pageNum,upload:0,end:0,applicationPlatform:0,url:""}}function Qe(){Fe=null}function $e(t){return Fe.start=Fe.start+Fe.duration,Fe.duration=l()-Fe.start,Fe.sequence++,Fe.upload=t&&"sendBeacon"in navigator?1:0,Fe.end=t?1:0,Fe.applicationPlatform=0,Fe.url=b(location.href,!1,!0),[Fe.version,Fe.sequence,Fe.start,Fe.duration,Fe.projectId,Fe.userId,Fe.sessionId,Fe.pageNum,Fe.upload,Fe.end,Fe.applicationPlatform,Fe.url]}function tn(){Je=[]}function en(t){if(Je&&-1===Je.indexOf(t.message)){var e=i.report;if(e&&e.length>0&&Fe){var n={v:Fe.version,p:Fe.projectId,u:Fe.userId,s:Fe.sessionId,n:Fe.pageNum};t.message&&(n.m=t.message),t.stack&&(n.e=t.stack);var r=new XMLHttpRequest;r.open("POST",e,!0),r.send(JSON.stringify(n)),Je.push(t.message)}}return t}function nn(t){return function(){var e=performance.now();try{t.apply(this,arguments)}catch(t){throw en(t)}var n=performance.now()-e;L(4,n),n>30&&(H(7),U(6,n),t.dn&&"".concat(t.dn,"-").concat(n))}}var rn=new Map;function an(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=!0),n=nn(n);try{t[u("addEventListener")](e,n,{capture:r,passive:a}),function(t){return rn.has(t)}(t)||rn.set(t,[]),rn.get(t).push({event:e,listener:n,options:{capture:r,passive:a}})}catch(t){}}function on(){rn.forEach((function(t,e){!function(t,e){t.forEach((function(t){try{e[u("removeEventListener")](t.event,t.listener,{capture:t.options.capture,passive:t.options.passive})}catch(t){}})),rn.delete(e)}(t,e)})),rn=new Map}var un=null,cn=null,sn=null,ln=0;function dn(){return!(ln++>20)}function fn(){ln=0,sn!==hn()&&(Jn(),window.setTimeout(pn,250))}function pn(){Zn(),U(29,1)}function hn(){return location.href?location.href.replace(location.hash,""):location.href}var gn=[],vn=null,mn=null,yn=null;function bn(){gn=[],vn=null,mn=null}function wn(){var t=gn.shift();t&&(vn=t,t.task().then((function(){t.id===De()&&(t.resolve(),vn=null,wn())})).catch((function(e){t.id===De()&&(e&&(e.name,e.message,e.stack),vn=null,wn())})))}var _n=!1;function Sn(){_n=!0,c=s(),bn(),on(),tn(),function(){if(sn=hn(),ln=0,an(window,"popstate",fn),null===un)try{un=history.pushState,history.pushState=function(){un.apply(this,arguments),In()&&dn()&&fn()}}catch(t){un=null}if(null===cn)try{cn=history.replaceState,history.replaceState=function(){cn.apply(this,arguments),In()&&dn()&&fn()}}catch(t){cn=null}}()}function kn(){sn=null,ln=0,tn(),on(),bn(),c=0,_n=!1}function In(){return _n}function En(){Zn(),A("clarityGemX","restart")}var On=null;function Tn(){On=null}function xn(t){On={fetchStart:Math.round(t.fetchStart),connectStart:Math.round(t.connectStart),connectEnd:Math.round(t.connectEnd),requestStart:Math.round(t.requestStart),responseStart:Math.round(t.responseStart),responseEnd:Math.round(t.responseEnd),domInteractive:Math.round(t.domInteractive),domComplete:Math.round(t.domComplete),loadEventStart:Math.round(t.loadEventStart),loadEventEnd:Math.round(t.loadEventEnd),redirectCount:Math.round(t.redirectCount),size:t.transferSize?t.transferSize:0,type:t.type,protocol:t.nextHopProtocol,encodedSize:t.encodedBodySize?t.encodedBodySize:0,decodedSize:t.decodedBodySize?t.decodedBodySize:0},function(t){et(this,void 0,void 0,(function(){var e,n;return nt(this,(function(r){return e=l(),n=[e,t],29===t&&(n.push(On.fetchStart),n.push(On.connectStart),n.push(On.connectEnd),n.push(On.requestStart),n.push(On.responseStart),n.push(On.responseEnd),n.push(On.domInteractive),n.push(On.domComplete),n.push(On.loadEventStart),n.push(On.loadEventEnd),n.push(On.redirectCount),n.push(On.size),n.push(On.type),n.push(On.protocol),n.push(On.encodedSize),n.push(On.decodedSize),Tn(),Ft(n)),[2]}))}))}(29)}var Mn,Cn=0,jn=1/0,Nn=0,zn=0,Pn=[],qn=new Map,An=function(){return Cn||0},Dn=function(){if(!Pn.length)return-1;var t=Math.min(Pn.length-1,Math.floor((An()-zn)/50));return Pn[t].latency},Rn=function(){zn=An(),Pn.length=0,qn.clear()},Xn=function(t){if(t.interactionId&&!(t.duration<40)){!function(t){"interactionCount"in performance?Cn=performance.interactionCount:t.interactionId&&(jn=Math.min(jn,t.interactionId),Nn=Math.max(Nn,t.interactionId),Cn=Nn?(Nn-jn)/7+1:0)}(t);var e=Pn[Pn.length-1],n=qn.get(t.interactionId);if(n||Pn.length<10||t.duration>(null==e?void 0:e.latency)){if(n)t.duration>n.latency&&(n.latency=t.duration);else{var r={id:t.interactionId,latency:t.duration};qn.set(r.id,r),Pn.push(r)}Pn.sort((function(t,e){return e.latency-t.latency})),Pn.length>10&&Pn.splice(10).forEach((function(t){return qn.delete(t.id)}))}}},Hn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint","event"];function Ln(){try{Mn&&Mn.disconnect(),Mn=new PerformanceObserver(nn(Un));for(var t=0,e=Hn;t<e.length;t++){var n=e[t];PerformanceObserver.supportedEntryTypes.indexOf(n)>=0&&("layout-shift"===n&&L(9,0),Mn.observe({type:n,buffered:!0}))}}catch(t){}}function Un(t){!function(t){for(var e=(!("visibilityState"in document)||"visible"===document.visibilityState),n=0;n<t.length;n++){var r=t[n];switch(r.entryType){case"navigation":xn(r);break;case"resource":var a=r.name;he(4,Vn(a)),a!==i.upload&&a!==i.fallback||U(28,r.duration);break;case"longtask":H(7);break;case"first-input":e&&U(10,r.processingStart-r.startTime);break;case"event":e&&"PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&(Xn(r),he(37,Dn().toString()));break;case"layout-shift":e&&!r.hadRecentInput&&L(9,1e3*r.value);break;case"largest-contentful-paint":e&&U(8,r.startTime)}}}(t.getEntries())}var Gn=null;function Vn(t){return Gn||(Gn=document.createElement("a")),Gn.href=t,Gn.host}var Yn=[P,P,P],Bn=[P,P,P,Object.freeze({__proto__:null,start:function(){Tn(),function(){navigator&&navigator.connection&&he(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?an(window,"load",G.bind(this,Ln,0)):Ln())}()},stop:function(){Mn&&Mn.disconnect(),Mn=null,Rn(),Gn=null,Tn()}}),P],Wn=Bn;function Zn(t){void 0===t&&(t=null),Wn="gemx"===t.mode?Yn:Bn,function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===_n&&"undefined"!=typeof Promise&&window.MutationObserver&&document.createTreeWalker&&"now"in Date&&"now"in performance&&"undefined"!=typeof WeakMap&&!t}catch(t){return!1}}()&&(!function(t){if(null===t||_n)return!1;for(var e in t)e in i&&(i[e]=t[e])}(t),Sn(),xt(),Wn.forEach((function(t){return nn(t.start)()})),null===t&&$n())}function Jn(){In()&&(Wn.slice().reverse().forEach((function(t){return nn(t.stop)()})),Mt(),kn(),void 0!==Kn&&(Kn[Qn]=function(){(Kn[Qn].q=Kn[Qn].q||[]).push(arguments),"start"===arguments[0]&&Kn[Qn].q.unshift(Kn[Qn].q.pop())&&$n()}))}var Fn=Object.freeze({__proto__:null,consent:Re,consentv2:Xe,dlog:he,event:A,hashText:M,identify:ot,maxMetric:U,measure:nn,metadata:Ae,pause:function(){In()&&(A("clarityGemX","pause"),null===mn&&(mn=new Promise((function(t){yn=t}))))},queue:Ft,register:z,resume:function(){In()&&(mn&&(yn(),mn=null,null===vn&&wn()),A("clarityGemX","resume"))},schedule:function(t,e){return void 0===e&&(e=0),et(this,void 0,void 0,(function(){var n,r,a;return nt(this,(function(o){for(n=0,r=gn;n<r.length;n++)if(r[n].task===t)return[2];return a=new Promise((function(n){gn[1===e?"unshift":"push"]({task:t,resolve:n,id:De()})})),null===vn&&null===mn&&wn(),[2,a]}))}))},set:at,signal:function(t){Et=t},start:Zn,stop:Jn,time:l,upgrade:Q,version:d}),Kn=window,Qn="clarityGemX";function $n(){if(void 0!==Kn){if(Kn[Qn]&&Kn[Qn].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=Kn[Qn]&&Kn[Qn].q||[];for(Kn[Qn]=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return Fn[t].apply(Fn,e)},Kn[Qn].v=d;t.length>0;)Kn[Qn].apply(Kn,t.shift())}}$n()}();
|
|
1
|
+
!function(){"use strict";var t=Object.freeze({__proto__:null,get flush(){return oe},get inject(){return ue},get queue(){return ae},get start(){return re},get stop(){return ce},get track(){return Zt},get uploadNow(){return ie}}),e=Object.freeze({__proto__:null,get check(){return ge},get compute(){return me},get data(){return Ft},get start(){return he},get stop(){return ye},get trigger(){return ve}}),n=Object.freeze({__proto__:null,get compute(){return Ee},get data(){return we},get log(){return Ie},get reset(){return Oe},get start(){return Se},get stop(){return ke},get updates(){return be}}),r=Object.freeze({__proto__:null,get compute(){return qe},get config(){return je},get consent(){return ze},get data(){return Te},get start(){return Me},get stop(){return Ce},get trackConsentv2(){return Ae}}),a=Object.freeze({__proto__:null,get callback(){return $e},get callbacks(){return Re},get clear(){return Qe},get consent(){return Je},get consentv2(){return Ze},get data(){return De},get electron(){return Xe},get id(){return We},get metadata(){return Ye},get save(){return tn},get shortid(){return nn},get start(){return Ge},get stop(){return Ve}}),o=Object.freeze({__proto__:null,get data(){return un},get envelope(){return ln},get start(){return cn},get stop(){return sn}}),i={projectId:null,delay:1e3,lean:!1,lite:!1,track:!0,content:!0,drop:[],mask:[],unmask:[],regions:[],cookies:[],fraud:!0,checksum:[],report:null,upload:null,fallback:null,upgrade:null,action:null,dob:null,delayDom:!1,throttleDom:!0,conversions:!1,includeSubdomains:!0,modules:[],diagnostics:!1,externalSession:!1,userId:null,sessionId:null,mode:"gemx"};function u(t){return window.Zone&&"__symbol__"in window.Zone?window.Zone.__symbol__(t):t}var c=0;function s(){return performance.now()+performance.timeOrigin}function l(t){void 0===t&&(t=null);var e=0===c?s():c,n=t&&t.timeStamp>0?t.timeStamp:performance.now(),r=t&&t.view?t.view.performance.timeOrigin:performance.timeOrigin;return Math.max(Math.round(n+r-e),0)}var d="0.8.87";var f=/\S/gi,p=255,h=!0,g=null,v=null,m=null;function y(t,e,n,r,a){if(void 0===r&&(r=!1),t){if("input"==e&&("checkbox"===a||"radio"===a))return t;switch(n){case 0:return t;case 1:switch(e){case"*T":case"value":case"placeholder":case"click":return function(t){var e=-1,n=0,r=!1,a=!1,o=!1,i=null;I();for(var u=0;u<t.length;u++){var c=t.charCodeAt(u);if(r=r||c>=48&&c<=57,a=a||64===c,o=9===c||10===c||13===c||32===c,0===u||u===t.length-1||o){if(r||a){null===i&&(i=t.split(""));var s=t.substring(e+1,o?u:u+1);s=h&&null!==m?s.match(m)?s:S(s,"▪","▫"):_(s),i.splice(e+1-n,s.length,s),n+=s.length-1}o&&(r=!1,a=!1,e=u)}}return i?i.join(""):t}(t);case"input":case"change":return k(t)}return t;case 2:case 3:switch(e){case"*T":case"data-":return r?b(t):_(t);case"src":case"srcset":case"title":case"alt":case"href":case"xlink:href":return 3===n?(null==t?void 0:t.startsWith("blob:"))?"blob:":"":t;case"value":case"click":case"input":case"change":return k(t);case"placeholder":return _(t)}break;case 4:switch(e){case"*T":case"data-":return r?b(t):_(t);case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":return""}break;case 5:switch(e){case"*T":case"data-":return S(t,"▪","▫");case"value":case"input":case"click":case"change":return Array(5).join("•");case"checksum":case"src":case"srcset":case"alt":case"title":return""}}}return t}function w(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var r=t;if(e)r="".concat("https://").concat("Electron");else{var a=i.drop;if(a&&a.length>0&&t&&t.indexOf("?")>0){var o=t.split("?"),u=o[0],c=o[1];r=u+"?"+c.split("&").map((function(t){return a.some((function(e){return 0===t.indexOf("".concat(e,"="))}))?"".concat(t.split("=")[0],"=").concat("*na*"):t})).join("&")}}return n&&(r=r.substring(0,p)),r}function b(t){var e=t.trim();if(e.length>0){var n=e[0],r=t.indexOf(n),a=t.substr(0,r),o=t.substr(r+e.length);return"".concat(a).concat(e.length.toString(36)).concat(o)}return t}function _(t){return t.replace(f,"•")}function S(t,e,n){return I(),t?t.replace(v,e).replace(g,n):t}function k(t){for(var e=5*(Math.floor(t.length/5)+1),n="",r=0;r<e;r++)n+=r>0&&r%5==0?" ":"•";return n}function I(){if(h&&null===g)try{g=new RegExp("\\p{N}","gu"),v=new RegExp("\\p{L}","gu"),m=new RegExp("\\p{Sc}","gu")}catch(t){h=!1}}var E=[],O=null;function T(){}var x=[];function M(){}function C(){}function N(){}function j(){}function z(){}var P=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:O,event:j,hashText:M,keys:x,log:T,observe:function(){},register:z,reset:function(){},sheetAdoptionState:[],sheetUpdateState:[],start:function(){},state:E,stop:function(){},track:N,trigger:C}),A=null;function q(t,e){Pn()&&t&&"string"==typeof t&&t.length<255&&(A=e&&"string"==typeof e&&e.length<255?{key:t,value:e}:{value:t},pe(24))}var D,R=null,X=null;function H(t){t in R||(R[t]=0),t in X||(X[t]=0),R[t]++,X[t]++}function L(t,e){null!==e&&(t in R||(R[t]=0),t in X||(X[t]=0),R[t]+=e,X[t]+=e)}function U(t,e){null!==e&&!1===isNaN(e)&&(t in R||(R[t]=0),(e>R[t]||0===R[t])&&(X[t]=e,R[t]=e))}function G(t,e,n){return window.setTimeout(pn(t),e,n)}function B(t){return window.clearTimeout(t)}var V=0,Y=0,W=null;function J(){W&&B(W),W=G(Z,Y),V=l()}function Z(){var t=l();D={gap:t-V},pe(25),D.gap<3e5?W=G(Z,Y):Nn&&(q("clarityGemX","suspend"),or(),["mousemove","touchstart"].forEach((function(t){return gn(document,t,An)})),["resize","scroll","pageshow"].forEach((function(t){return gn(window,t,An)})))}var F=Object.freeze({__proto__:null,get data(){return D},reset:J,start:function(){Y=6e4,V=0},stop:function(){B(W),V=0,Y=0}}),K=null;function Q(t){Pn()&&i.lean&&(i.lean=!1,K={key:t},$e(),tn(),i.upgrade&&i.upgrade(t),pe(3),i.lite)}var $=Object.freeze({__proto__:null,get data(){return K},start:function(){!i.lean&&i.upgrade&&i.upgrade("Config"),K=null},stop:function(){K=null},upgrade:Q}),tt=function(){return tt=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var a in e=arguments[n])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t},tt.apply(this,arguments)};function et(t,e,n,r){return new(n||(n=Promise))((function(a,o){function i(t){try{c(r.next(t))}catch(t){o(t)}}function u(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,u)}c((r=r.apply(t,e||[])).next())}))}function nt(t,e){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(a=2&u[0]?r.return:u[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,u[1])).done)return a;switch(r=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){i.label=u[1];break}if(6===u[0]&&i.label<a[1]){i.label=a[1],a=u;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(u);break}a[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}var rt=null;function at(t,e){it(t,"string"==typeof e?[e]:e)}function ot(t,e,n,r){return void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null),et(this,void 0,void 0,(function(){var a,o;return nt(this,(function(i){switch(i.label){case 0:return o={},[4,st(t)];case 1:return o.userId=i.sent(),o.userHint=r||((u=t)&&u.length>=5?"".concat(u.substring(0,2)).concat(S(u.substring(2),"*","*")):S(u,"*","*")),it("userId",[(a=o).userId]),it("userHint",[a.userHint]),it("userType",[lt(t)]),e&&(it("sessionId",[e]),a.sessionId=e),n&&(it("pageId",[n]),a.pageId=n),[2,a]}var u}))}))}function it(t,e){if(Pn()&&t&&e&&"string"==typeof t&&t.length<255){for(var n=(t in rt?rt[t]:[]),r=0;r<e.length;r++)"string"==typeof e[r]&&e[r].length<255&&n.push(e[r]);rt[t]=n}}function ut(){pe(34)}function ct(){rt={}}function st(t){return et(this,void 0,void 0,(function(){var e;return nt(this,(function(n){switch(n.label){case 0:return n.trys.push([0,4,,5]),crypto&&t?[4,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))]:[3,2];case 1:return e=n.sent(),[2,Array.prototype.map.call(new Uint8Array(e),(function(t){return("00"+t.toString(16)).slice(-2)})).join("")];case 2:return[2,""];case 3:return[3,5];case 4:return n.sent(),[2,""];case 5:return[2]}}))}))}function lt(t){return t&&t.indexOf("@")>0?"email":"string"}var dt=Object.freeze({__proto__:null,compute:ut,get data(){return rt},identify:ot,reset:ct,set:at,start:function(){ct()},stop:function(){ct()}}),ft="CompressionStream"in window;function pt(t){return et(this,void 0,void 0,(function(){var e,n;return nt(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),ft?(e=new ReadableStream({start:function(e){return et(this,void 0,void 0,(function(){return nt(this,(function(n){return e.enqueue(t),e.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),n=Uint8Array.bind,[4,ht(e)]):[3,2];case 1:return[2,new(n.apply(Uint8Array,[void 0,r.sent()]))];case 2:return[3,4];case 3:return r.sent(),[3,4];case 4:return[2,null]}}))}))}function ht(t){return et(this,void 0,void 0,(function(){var e,n,r,a,o;return nt(this,(function(i){switch(i.label){case 0:e=t.getReader(),n=[],r=!1,a=[],i.label=1;case 1:return r?[3,3]:[4,e.read()];case 2:return o=i.sent(),r=o.done,a=o.value,r?[2,n]:(n.push.apply(n,a),[3,1]);case 3:return[2,n]}}))}))}function gt(t,e){try{return!!t[e]}catch(t){return!1}}function vt(t){try{var e=decodeURIComponent(t);return[e!=t,e]}catch(t){}return[!1,t]}var mt=null,yt="^";function wt(t,e){var n;if(void 0===e&&(e=!1),gt(document,"cookie")){var r=document.cookie.split(";");if(r)for(var a=0;a<r.length;a++){var o=r[a].split("=");if(o.length>1&&o[0]&&o[0].trim()===t){for(var i=vt(o[1]),u=i[0],c=i[1];u;)u=(n=vt(c))[0],c=n[1];return e?c.endsWith("".concat("~","1"))?c.substring(0,c.length-2):null:c}}}return null}function bt(t,e,n){if((i.track||""==e)&&(navigator&&navigator.cookieEnabled||gt(document,"cookie"))){var r=function(t){return encodeURIComponent(t)}(e),a=new Date;a.setDate(a.getDate()+n);var o=a?"expires="+a.toUTCString():"",u="".concat(t,"=").concat(r).concat(";").concat(o).concat(";path=/");try{if(null===mt){for(var c=location.hostname?location.hostname.split("."):[],s=c.length-1;s>=0;s--)if(mt=".".concat(c[s]).concat(mt||""),s<c.length-1&&(document.cookie="".concat(u).concat(";").concat("domain=").concat(mt),wt(t)===e))return;mt=""}}catch(t){mt=""}document.cookie=mt?"".concat(u).concat(";").concat("domain=").concat(mt):u}}var _t=Object.freeze({__proto__:null,COOKIE_SEP:yt,getCookie:wt,setCookie:bt,start:function(){mt=null},stop:function(){mt=null}}),St={excludeClassNames:[],ignoreMutationClassNames:[],discoverTrigger:null},kt=tt({},St);var It=Object.freeze({__proto__:null,get:function(){return kt},set:function(t){kt=tt(tt({},kt),t)},start:function(){var t,e,n,r,a,o;kt={excludeClassNames:null!==(e=null===(t=null===window||void 0===window?void 0:window.GemXHeatmap)||void 0===t?void 0:t.excludeClassNames)&&void 0!==e?e:[],ignoreMutationClassNames:null!==(r=null===(n=null===window||void 0===window?void 0:window.GemXHeatmap)||void 0===n?void 0:n.ignoreMutationClassNames)&&void 0!==r?r:[],discoverTrigger:null!==(o=null===(a=null===window||void 0===window?void 0:window.GemXHeatmap)||void 0===a?void 0:a.discoverTrigger)&&void 0!==o?o:null}},stop:function(){kt=tt({},St)}}),Et=[],Ot=0,Tt=!1,xt=0,Mt=null;function Ct(){return Tt}function Nt(t,e){Et.push(t),Ot+=e,xt>0&&Ot>=xt&&Mt&&Mt()}var jt=null;function zt(t){try{if(!jt)return;var e=function(t){try{return JSON.parse(t)}catch(t){return[]}}(t);e.forEach((function(t){jt(t)}))}catch(t){}}var Pt=[It,Object.freeze({__proto__:null,config:function(t,e){return xt=null!=t?t:0,Mt=null!=e?e:null,!0},drain:function(){Tt=!1;var t=Et;return Et=[],Ot=0,t},getBytes:function(){return Ot},hold:Nt,isActive:Ct,start:function(){Et=[],Ot=0,Tt=!0},stop:function(){Et=[],Ot=0,Tt=!1,xt=0,Mt=null}}),P,n,dt,e,P,_t,r,a,o,t,F,$,P];function At(){R={},X={},H(5),Pt.forEach((function(t){return pn(t.start)()}))}function qt(){Pt.slice().reverse().forEach((function(t){return pn(t.stop)()})),R={},X={}}function Dt(){me(),qe(),"gemx"!==i.mode&&(ut(),Ee(),pe(0))}function Rt(t,e,n,r){return"href"===t&&"LINK"===r?"".concat(t,"=").concat(e):"".concat(t,"=").concat(y(e,0===t.indexOf("data-")?"data-":t,n))}var Xt=[],Ht=1,Lt=null;function Ut(){Xt=[],function(t){var e=[t];for(;e.length>0;){for(var n=null,r=null,a=null,o=e.shift(),i=o.firstChild,u=o.parentElement?o.parentElement:o.parentNode?o.parentNode:null;i;)e.push(i),i=i.nextSibling;switch(o.nodeType){case Node.DOCUMENT_TYPE_NODE:var c=o;r="*D",n={name:c.name,publicId:c.publicId,systemId:c.systemId};break;case Node.TEXT_NODE:a=o.nodeValue,r=Lt.get(u)?"*T":r;break;case Node.ELEMENT_NODE:var s=o;n=Gt(s),r=["NOSCRIPT","SCRIPT","STYLE"].indexOf(s.tagName)<0?s.tagName:r}Bt(o,u,{tag:r,attributes:n,value:a})}}(document),function(t){et(this,void 0,void 0,(function(){var e,n,r,a,o,i,u,c,s,d,f,p,h;return nt(this,(function(g){switch(e=l(),n=[e,t],t){case 8:r=O,n.push(r.width),n.push(r.height),r.width,r.height,ae(n);break;case 43:if((a=Xt).length>0){for(o=0,i=a;o<i.length;o++)for(u=i[o],c=u.metadata.privacy,s=u.data,d=0,f=["tag","attributes","value"];d<f.length;d++)if(s[p=f[d]])switch(p){case"tag":n.push(u.id),u.parent&&n.push(u.parent),u.previous&&n.push(u.previous),n.push(s[p]);break;case"attributes":for(h in s[p])void 0!==s[p][h]&&n.push(Rt(h,s[p][h],c,s.tag));break;case"value":n.push(y(s[p],s.tag,c))}ae(function(t){for(var e=[],n={},r=0,a=null,o=0;o<t.length;o++)if("string"==typeof t[o]){var i=t[o],u=n[i]||-1;u>=0?a?a.push(u):(a=[u],e.push(a),r++):(a=null,e.push(i),n[i]=r++)}else a=null,e.push(t[o]),r++;return e}(n),!0)}}return[2]}))}))}(43)}function Gt(t){var e={},n=t.attributes;if(n&&n.length>0)for(var r=0;r<n.length;r++)e[n[r].name]=n[r].value;return e}function Bt(t,e,n){if(t&&n&&n.tag){var r=function(t){return null===t?null:Lt.has(t)?Lt.get(t):(Lt.set(t,Ht),Ht++)}(t),a=e?Lt.get(e):null,o=t.previousSibling?Lt.get(t.previousSibling):null;Xt.push({id:r,parent:a,previous:o,children:[],data:n,selector:null,hash:null,region:null,metadata:{active:!0,suspend:!1,privacy:5,position:null,fraud:null,size:null}})}}var Vt,Yt,Wt,Jt,Zt,Ft,Kt=0,Qt=0,$t=null,te=0,ee=!1,ne=!1;function re(){Jt=!0,Kt=0,Qt=0,ee=!1,ne=!1,te=0,Vt=[],Yt=[],Wt={},Zt=null}function ae(t,e){if(void 0===e&&(e=!0),Jt){var n=l(),r=t.length>1?t[1]:null,a=JSON.stringify(t);switch(i.lean?!ee&&Qt+a.length>10485760&&(ee=!0):ee=!1,r){case 5:if(ee)break;if(Ct()){Nt(t,a.length);break}Kt+=a.length;case 37:case 6:case 43:case 45:case 46:case 44:case 51:if(ee)break;Ct()&&Nt(t,a.length),Qt+=a.length,Vt.push(a);break;default:Yt.push(a)}H(25);var o=function(){var t=!1===i.lean&&Kt>0?100:un.sequence*i.delay;return"string"==typeof i.upload?Math.max(Math.min(t,3e4),100):i.delay}();n-te>2*o&&(B($t),$t=null),e&&null===$t&&(25!==r&&J(),$t=G(se,o),te=n,ge(Qt))}}function oe(){Jt&&(B($t),$t=null,se(!0))}function ie(){Jt&&(B($t),$t=null,se(!1))}function ue(t){ne=!0;for(var e=0,n=t;e<n.length;e++){var r=n[e],a=JSON.stringify(r);Kt+=a.length,Qt+=a.length,Vt.push(a)}}function ce(){B($t),se(!0),Kt=0,Qt=0,ee=!1,te=0,Vt=[],Yt=[],Wt={},Zt=null,Jt=!1}function se(t){return void 0===t&&(t=!1),et(this,void 0,void 0,(function(){var e,n,r,a,o,u,c,s;return nt(this,(function(l){switch(l.label){case 0:return Jt?($t=null,(e=(ne||!1===i.lean)&&Qt>0&&(Qt<1048576||un.sequence>0))&&U(1,1),Dt(),n=!0===t,un?(r=JSON.stringify(ln(n)),a="[".concat(Yt.join(),"]"),o=e?"[".concat(Vt.join(),"]"):"",n&&o.length>0&&r.length+a.length+o.length>65536&&(o=""),u=function(t){return t.p.length>0?'{"e":'.concat(t.e,',"a":').concat(t.a,',"p":').concat(t.p,"}"):'{"e":'.concat(t.e,',"a":').concat(t.a,"}")}({e:r,a:a,p:o}),n?(s=null,[3,3]):[3,1]):[2]):[2];case 1:return[4,pt(u)];case 2:s=l.sent(),l.label=3;case 3:return L(2,(c=s)?c.length:u.length),le(u,c,un.sequence,n),Yt=[],e&&(Vt=[],Qt=0,Kt=0,ee=!1,ne=!1),[2]}}))}))}function le(t,e,n,r){if(void 0===r&&(r=!1),"string"==typeof i.upload){var a=i.upload,o=!1;if(r&&navigator&&navigator.sendBeacon)try{(o=navigator.sendBeacon.bind(navigator)(a,t))&&fe(n)}catch(t){}if(!1===o){n in Wt?Wt[n].attempts++:Wt[n]={data:t,attempts:1};var u=new XMLHttpRequest;u.open("POST",a,!0),u.timeout=15e3,u.ontimeout=function(){fn(new Error("".concat("Timeout"," : ").concat(a)))},null!==n&&(u.onreadystatechange=function(){pn(de)(u,n)}),u.withCredentials=!0,e?(u.setRequestHeader("Accept","application/x-clarity-gzip"),u.send(e)):u.send(t)}}else if(i.upload){(0,i.upload)(t,ne?"gemx-discover":void 0),fe(n)}}function de(t,e){var n=Wt[e];t&&4===t.readyState&&n&&((t.status<200||t.status>208)&&n.attempts<=1?t.status>=400&&t.status<500?ve(6):(0===t.status&&(i.upload=i.fallback?i.fallback:i.upload),Zt={sequence:e,attempts:n.attempts,status:t.status},pe(2),le(n.data,null,e)):(Zt={sequence:e,attempts:n.attempts,status:t.status},n.attempts>1&&pe(2),200===t.status&&t.responseText&&function(t){for(var e=t&&t.length>0?t.split("\n"):[],n=0,r=e;n<r.length;n++){var a=r[n],o=a&&a.length>0?a.split(/ (.*)/):[""];switch(o[0]){case"END":ve(6);break;case"UPGRADE":Q("Auto");break;case"ACTION":i.action&&o.length>1&&i.action(o[1]);break;case"EXTRACT":case"MODULE":o.length>1&&o[1];break;case"SIGNAL":o.length>1&&zt(o[1]);break;case"SNAPSHOT":i.lean=!1,Ut()}}}(t.responseText),0===t.status&&(le(n.data,null,e,!0),ve(3)),t.status>=200&&t.status<=208&&fe(e),delete Wt[e]))}function fe(t){1===t&&(tn(),$e())}function pe(t){var e=[l(),t];switch(t){case 4:var n=E;n&&n.data&&((e=[n.time,n.event]).push(n.data.visible),e.push(n.data.docWidth),e.push(n.data.docHeight),e.push(n.data.screenWidth),e.push(n.data.screenHeight),e.push(n.data.scrollX),e.push(n.data.scrollY),e.push(n.data.pointerX),e.push(n.data.pointerY),e.push(n.data.activityTime),e.push(n.data.scrollTime),e.push(n.data.pointerTime),e.push(n.data.moveX),e.push(n.data.moveY),e.push(n.data.moveTime),e.push(n.data.downX),e.push(n.data.downY),e.push(n.data.downTime),e.push(n.data.upX),e.push(n.data.upY),e.push(n.data.upTime),e.push(n.data.pointerPrevX),e.push(n.data.pointerPrevY),e.push(n.data.pointerPrevTime),e.push(n.data.modules),ae(e,!1));break;case 25:e.push(D.gap),ae(e);break;case 35:e.push(Ft.check),ae(e,!1);break;case 3:e.push(K.key),ae(e);break;case 2:e.push(Zt.sequence),e.push(Zt.attempts),e.push(Zt.status),ae(e,!1);break;case 24:A.key&&e.push(A.key),e.push(A.value),ae(e);break;case 34:var r=Object.keys(rt);if(r.length>0){for(var a=0,o=r;a<o.length;a++){var i=o[a];e.push(i),e.push(rt[i])}ct(),ae(e,!1)}break;case 0:var u=Object.keys(X);if(u.length>0){for(var c=0,s=u;c<s.length;c++){var d=s[c],f=parseInt(d,10);e.push(f),e.push(Math.round(X[d]))}X={},ae(e,!1)}break;case 1:var p=Object.keys(be);if(p.length>0){for(var h=0,g=p;h<g.length;h++){var v=g[h];f=parseInt(v,10);e.push(f),e.push(be[v])}Oe(),ae(e,!1)}break;case 36:var m=Object.keys(O);if(m.length>0){for(var y=0,w=m;y<w.length;y++){var b=w[y];f=parseInt(b,10);e.push(f),e.push([].concat.apply([],O[b]))}ae(e,!1)}break;case 40:x.forEach((function(t){e.push(t);var n=[];for(var r in O[t]){var a=parseInt(r,10);n.push(a),n.push(O[t][r])}e.push(n)})),ae(e,!1);break;case 47:e.push(Te.source),e.push(Te.ad_Storage),e.push(Te.analytics_Storage),ae(e,!1)}}function he(){Ft={check:0}}function ge(t){if(0===Ft.check){var e=Ft.check;e=un.sequence>=128?1:e,e=un.pageNum>=128?7:e,e=l()>72e5?2:e,(e=t>10485760?2:e)!==Ft.check&&ve(e)}}function ve(t){Ft.check=t,5!==t&&(Qe(),or())}function me(){0!==Ft.check&&pe(35)}function ye(){Ft=null}var we=null,be=null,_e=!1;function Se(){we={},be={},_e=!1}function ke(){we={},be={},_e=!1}function Ie(t,e){if(e&&(e="".concat(e),t in we||(we[t]=[]),we[t].indexOf(e)<0)){if(we[t].length>128)return void(_e||(_e=!0,ve(5)));we[t].push(e),t in be||(be[t]=[]),be[t].push(e)}}function Ee(){pe(1)}function Oe(){be={},_e=!1}var Te=null,xe=!0;function Me(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;xe=!0,(null==e?void 0:e.addListener)&&e.addListener(["ad_storage","analytics_storage"],Ne)}function Ce(){xe=!0}function Ne(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;if(null==e?void 0:e.getConsentState)try{var n=e.getConsentState("analytics_storage");Ze(function(t){var e={source:2,ad_Storage:1===t.ad_Storage?"granted":"denied",analytics_Storage:1===t.analytics_Storage?"granted":"denied"};return e}({ad_Storage:e.getConsentState("ad_storage"),analytics_Storage:n}))}catch(t){return}}function je(t){Pe(t.analytics_Storage?1:0),Te=t}function ze(){Pe(2)}function Pe(t){Ie(36,t.toString())}function Ae(t){Te=t,pe(47)}function qe(){var t;if(xe&&(pe(47),xe=!1,!i.track)){var e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;(null==e?void 0:e.usedUpdate)&&Ne()}}var De=null,Re=[],Xe=0,He=null,Le=!1,Ue={source:7,ad_Storage:"denied",analytics_Storage:"denied"};function Ge(){var t,e,n,r=navigator&&"userAgent"in navigator?navigator.userAgent:"",a=null!==(n="undefined"!=typeof Intl&&(null===(e=null===(t=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===t?void 0:t.resolvedOptions())||void 0===e?void 0:e.timeZone))&&void 0!==n?n:"",o=(new Date).getTimezoneOffset().toString(),u=window.location.ancestorOrigins?Array.from(window.location.ancestorOrigins).toString():"",c=document&&document.title?document.title:"";Xe=r.indexOf("Electron")>0?1:0;var s=function(){var t={session:nn(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},e=wt("_clsk",!i.includeSubdomains);if(e){var n=e.includes("^")?e.split("^"):e.split("|");n.length>=5&&t.ts-rn(n[1])<18e5&&(t.session=n[0],t.count=rn(n[2])+1,t.upgrade=rn(n[3]),t.upload=n.length>=6?"".concat("https://").concat(n[5],"/").concat(n[4]):"".concat("https://").concat(n[4]))}return t}(),l=an(),d=i.projectId||function(t,e){void 0===e&&(e=null);for(var n,r=5381,a=r,o=0;o<t.length;o+=2)r=(r<<5)+r^t.charCodeAt(o),o+1<t.length&&(a=(a<<5)+a^t.charCodeAt(o+1));return n=Math.abs(r+11579*a),(e?n%Math.pow(2,e):n).toString(36)}(location.host),f=i.externalSession&&i.userId?i.userId:l.id,p=i.externalSession&&i.sessionId?i.sessionId:s.session;De={projectId:d,userId:f,sessionId:p,pageNum:s.count},i.lean=i.track&&null!==s.upgrade?0===s.upgrade:i.lean,i.upload=i.track&&"string"==typeof i.upload&&s.upload&&s.upload.length>"https://".length?s.upload:i.upload,Ie(0,r),Ie(3,c),Ie(1,w(location.href,!!Xe)),Ie(2,document.referrer),Ie(15,function(){var t=nn();if(i.track&>(window,"sessionStorage")){var e=sessionStorage.getItem("_cltk");t=e||t,sessionStorage.setItem("_cltk",t)}return t}()),Ie(16,document.documentElement.lang),Ie(17,document.dir),Ie(26,"".concat(window.devicePixelRatio)),Ie(28,l.dob.toString()),Ie(29,l.version.toString()),Ie(33,u),Ie(34,a),Ie(35,o),U(0,s.ts),U(1,0),U(35,Xe);var h,g=null===window||void 0===window?void 0:window.Zone;g&&"__symbol__"in g&&U(39,1),navigator&&(Ie(9,navigator.language),U(33,navigator.hardwareConcurrency),U(32,navigator.maxTouchPoints),U(34,Math.round(navigator.deviceMemory)),(h=navigator.userAgentData)&&h.getHighEntropyValues?h.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var e;Ie(22,t.platform),Ie(23,t.platformVersion),null===(e=t.brands)||void 0===e||e.forEach((function(t){Ie(24,t.name+"~"+t.version)})),Ie(25,t.model),U(27,t.mobile?1:0)})):Ie(22,navigator.platform)),screen&&(U(14,Math.round(screen.width)),U(15,Math.round(screen.height)),U(16,Math.round(screen.colorDepth))),null===He&&(He={source:l.consent?6:0,ad_Storage:i.track?"granted":"denied",analytics_Storage:i.track?"granted":"denied"}),Be(),je(Fe(He)),i.externalSession||en(l)}function Be(){if(!Le&&"granted"===(null==He?void 0:He.analytics_Storage)&&"granted"===(null==He?void 0:He.ad_Storage)){for(var t=0,e=i.cookies;t<e.length;t++){var n=e[t],r=wt(n);r&&at(n,r)}Le=!0}}function Ve(){De=null,Le=!1,Re.forEach((function(t){t.called=!1}))}function Ye(t,e,n,r){void 0===e&&(e=!0),void 0===n&&(n=!1),void 0===r&&(r=!1);var a=i.lean?0:1,o=!1;De&&(a||!1===e)&&(t(De,!i.lean,r?He:void 0),o=!0),!n&&o||Re.push({callback:t,wait:e,recall:n,called:o,consentInfo:r})}function We(){return De?[De.userId,De.sessionId,De.pageNum].join("."):""}function Je(t){void 0===t&&(t=!0),Ze(t?{source:4,ad_Storage:"granted",analytics_Storage:"granted"}:{source:4,ad_Storage:"denied",analytics_Storage:"denied"})}function Ze(t,e){var n;if(void 0===t&&(t=Ue),void 0===e&&(e=5),Pn()){var r={source:null!==(n=t.source)&&void 0!==n?n:e,ad_Storage:Ke(t.ad_Storage,null==He?void 0:He.ad_Storage),analytics_Storage:Ke(t.analytics_Storage,null==He?void 0:He.analytics_Storage)};if(He&&r.ad_Storage===He.ad_Storage&&r.analytics_Storage===He.analytics_Storage)return He.source=r.source,Ae(Fe(He)),void ze();He=r,$e(!0);var a=Fe(He);if(!a.analytics_Storage&&i.track)return i.track=!1,Qe(!0),or(),void window.setTimeout(ar,250);Pn()&&a.analytics_Storage&&(i.track=!0,en(an(),1),tn()),Be(),Ae(a),ze()}}function Fe(t){var e;return{source:null!==(e=t.source)&&void 0!==e?e:255,ad_Storage:"granted"===t.ad_Storage?1:0,analytics_Storage:"granted"===t.analytics_Storage?1:0}}function Ke(t,e){return void 0===e&&(e="denied"),"string"==typeof t?t.toLowerCase():e}function Qe(t){void 0===t&&(t=!1),bt("_clsk","",0),t&&bt("_clck","",0)}function $e(t){void 0===t&&(t=!1),function(t,e){void 0===e&&(e=!1);if(Re.length>0)for(var n=0;n<Re.length;n++){var r=Re[n];r.callback&&(!r.called&&!e||r.consentInfo&&e)&&(!r.wait||t)&&(r.callback(De,!i.lean,r.consentInfo?He:void 0),r.called=!0,r.recall||(Re.splice(n,1),n--))}}(i.lean?0:1,t)}function tn(){if(De&&i.track&&!i.externalSession){var t=Math.round(Date.now()),e=i.upload&&"string"==typeof i.upload?i.upload.replace("https://",""):"",n=i.lean?0:1;bt("_clsk",[De.sessionId,t,De.pageNum,n,e].join(yt),1)}}function en(t,e){void 0===e&&(e=null),e=null===e?t.consent:e;var n=Math.ceil((Date.now()+31536e6)/864e5),r=0===t.dob?null===i.dob?0:i.dob:t.dob;(null===t.expiry||Math.abs(n-t.expiry)>=1||t.consent!==e||t.dob!==r)&&bt("_clck",[De.userId,2,n.toString(36),e,r].join(yt),365)}function nn(){var t=Math.floor(Math.random()*Math.pow(2,32));return window&&window.crypto&&window.crypto.getRandomValues&&Uint32Array&&(t=window.crypto.getRandomValues(new Uint32Array(1))[0]),t.toString(36)}function rn(t,e){return void 0===e&&(e=10),parseInt(t,e)}function an(){var t={id:nn(),version:0,expiry:null,consent:0,dob:0},e=wt("_clck",!i.includeSubdomains);if(e&&e.length>0){var n=e.includes("^")?e.split("^"):e.split("|");n.length>1&&(t.version=rn(n[1])),n.length>2&&(t.expiry=rn(n[2],36)),n.length>3&&1===rn(n[3])&&(t.consent=1),n.length>4&&rn(n[1])>1&&(t.dob=rn(n[4])),i.track=i.track||1===t.consent,t.id=i.track?n[0]:t.id}return t}var on,un=null;function cn(){var t=De;un={version:d,sequence:0,start:0,duration:0,projectId:t.projectId,userId:t.userId,sessionId:t.sessionId,pageNum:t.pageNum,upload:0,end:0,applicationPlatform:0,url:""}}function sn(){un=null}function ln(t){return un.start=un.start+un.duration,un.duration=l()-un.start,un.sequence++,un.upload=t&&"sendBeacon"in navigator?1:0,un.end=t?1:0,un.applicationPlatform=0,un.url=w(location.href,!1,!0),[un.version,un.sequence,un.start,un.duration,un.projectId,un.userId,un.sessionId,un.pageNum,un.upload,un.end,un.applicationPlatform,un.url]}function dn(){on=[]}function fn(t){if(on&&-1===on.indexOf(t.message)){var e=i.report;if(e&&e.length>0&&un){var n={v:un.version,p:un.projectId,u:un.userId,s:un.sessionId,n:un.pageNum};t.message&&(n.m=t.message),t.stack&&(n.e=t.stack);var r=new XMLHttpRequest;r.open("POST",e,!0),r.send(JSON.stringify(n)),on.push(t.message)}}return t}function pn(t){return function(){var e=performance.now();try{t.apply(this,arguments)}catch(t){throw fn(t)}var n=performance.now()-e;L(4,n),n>30&&(H(7),U(6,n),t.dn&&"".concat(t.dn,"-").concat(n))}}var hn=new Map;function gn(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=!0),n=pn(n);try{t[u("addEventListener")](e,n,{capture:r,passive:a}),function(t){return hn.has(t)}(t)||hn.set(t,[]),hn.get(t).push({event:e,listener:n,options:{capture:r,passive:a}})}catch(t){}}function vn(){hn.forEach((function(t,e){!function(t,e){t.forEach((function(t){try{e[u("removeEventListener")](t.event,t.listener,{capture:t.options.capture,passive:t.options.passive})}catch(t){}})),hn.delete(e)}(t,e)})),hn=new Map}var mn=null,yn=null,wn=null,bn=0;function _n(){return!(bn++>20)}function Sn(){bn=0,wn!==In()&&(or(),window.setTimeout(kn,250))}function kn(){ar(),U(29,1)}function In(){return location.href?location.href.replace(location.hash,""):location.href}var En=[],On=null,Tn=null,xn=null;function Mn(){En=[],On=null,Tn=null}function Cn(){var t=En.shift();t&&(On=t,t.task().then((function(){t.id===We()&&(t.resolve(),On=null,Cn())})).catch((function(e){t.id===We()&&(e&&(e.name,e.message,e.stack),On=null,Cn())})))}var Nn=!1;function jn(){Nn=!0,c=s(),Mn(),vn(),dn(),function(){if(wn=In(),bn=0,gn(window,"popstate",Sn),null===mn)try{mn=history.pushState,history.pushState=function(){mn.apply(this,arguments),Pn()&&_n()&&Sn()}}catch(t){mn=null}if(null===yn)try{yn=history.replaceState,history.replaceState=function(){yn.apply(this,arguments),Pn()&&_n()&&Sn()}}catch(t){yn=null}}()}function zn(){wn=null,bn=0,dn(),vn(),Mn(),c=0,Nn=!1}function Pn(){return Nn}function An(){ar(),q("clarityGemX","restart")}var qn=null;function Dn(){qn=null}function Rn(t){qn={fetchStart:Math.round(t.fetchStart),connectStart:Math.round(t.connectStart),connectEnd:Math.round(t.connectEnd),requestStart:Math.round(t.requestStart),responseStart:Math.round(t.responseStart),responseEnd:Math.round(t.responseEnd),domInteractive:Math.round(t.domInteractive),domComplete:Math.round(t.domComplete),loadEventStart:Math.round(t.loadEventStart),loadEventEnd:Math.round(t.loadEventEnd),redirectCount:Math.round(t.redirectCount),size:t.transferSize?t.transferSize:0,type:t.type,protocol:t.nextHopProtocol,encodedSize:t.encodedBodySize?t.encodedBodySize:0,decodedSize:t.decodedBodySize?t.decodedBodySize:0},function(t){et(this,void 0,void 0,(function(){var e,n;return nt(this,(function(r){return e=l(),n=[e,t],29===t&&(n.push(qn.fetchStart),n.push(qn.connectStart),n.push(qn.connectEnd),n.push(qn.requestStart),n.push(qn.responseStart),n.push(qn.responseEnd),n.push(qn.domInteractive),n.push(qn.domComplete),n.push(qn.loadEventStart),n.push(qn.loadEventEnd),n.push(qn.redirectCount),n.push(qn.size),n.push(qn.type),n.push(qn.protocol),n.push(qn.encodedSize),n.push(qn.decodedSize),Dn(),ae(n)),[2]}))}))}(29)}var Xn,Hn=0,Ln=1/0,Un=0,Gn=0,Bn=[],Vn=new Map,Yn=function(){return Hn||0},Wn=function(){if(!Bn.length)return-1;var t=Math.min(Bn.length-1,Math.floor((Yn()-Gn)/50));return Bn[t].latency},Jn=function(){Gn=Yn(),Bn.length=0,Vn.clear()},Zn=function(t){if(t.interactionId&&!(t.duration<40)){!function(t){"interactionCount"in performance?Hn=performance.interactionCount:t.interactionId&&(Ln=Math.min(Ln,t.interactionId),Un=Math.max(Un,t.interactionId),Hn=Un?(Un-Ln)/7+1:0)}(t);var e=Bn[Bn.length-1],n=Vn.get(t.interactionId);if(n||Bn.length<10||t.duration>(null==e?void 0:e.latency)){if(n)t.duration>n.latency&&(n.latency=t.duration);else{var r={id:t.interactionId,latency:t.duration};Vn.set(r.id,r),Bn.push(r)}Bn.sort((function(t,e){return e.latency-t.latency})),Bn.length>10&&Bn.splice(10).forEach((function(t){return Vn.delete(t.id)}))}}},Fn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint","event"];function Kn(){try{Xn&&Xn.disconnect(),Xn=new PerformanceObserver(pn(Qn));for(var t=0,e=Fn;t<e.length;t++){var n=e[t];PerformanceObserver.supportedEntryTypes.indexOf(n)>=0&&("layout-shift"===n&&L(9,0),Xn.observe({type:n,buffered:!0}))}}catch(t){}}function Qn(t){!function(t){for(var e=(!("visibilityState"in document)||"visible"===document.visibilityState),n=0;n<t.length;n++){var r=t[n];switch(r.entryType){case"navigation":Rn(r);break;case"resource":var a=r.name;Ie(4,tr(a)),a!==i.upload&&a!==i.fallback||U(28,r.duration);break;case"longtask":H(7);break;case"first-input":e&&U(10,r.processingStart-r.startTime);break;case"event":e&&"PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&(Zn(r),Ie(37,Wn().toString()));break;case"layout-shift":e&&!r.hadRecentInput&&L(9,1e3*r.value);break;case"largest-contentful-paint":e&&U(8,r.startTime)}}}(t.getEntries())}var $n=null;function tr(t){return $n||($n=document.createElement("a")),$n.href=t,$n.host}var er=[P,P,P],nr=[P,P,P,Object.freeze({__proto__:null,start:function(){Dn(),function(){navigator&&navigator.connection&&Ie(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?gn(window,"load",G.bind(this,Kn,0)):Kn())}()},stop:function(){Xn&&Xn.disconnect(),Xn=null,Jn(),$n=null,Dn()}}),P],rr=nr;function ar(t){void 0===t&&(t=null),rr="gemx"===t.mode?er:nr,function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===Nn&&"undefined"!=typeof Promise&&window.MutationObserver&&document.createTreeWalker&&"now"in Date&&"now"in performance&&"undefined"!=typeof WeakMap&&!t}catch(t){return!1}}()&&(!function(t){if(null===t||Nn)return!1;for(var e in t)e in i&&(i[e]=t[e])}(t),jn(),At(),rr.forEach((function(t){return pn(t.start)()})),null===t&&sr())}function or(){Pn()&&(rr.slice().reverse().forEach((function(t){return pn(t.stop)()})),qt(),zn(),void 0!==ur&&(ur[cr]=function(){(ur[cr].q=ur[cr].q||[]).push(arguments),"start"===arguments[0]&&ur[cr].q.unshift(ur[cr].q.pop())&&sr()}))}var ir=Object.freeze({__proto__:null,consent:Je,consentv2:Ze,dlog:Ie,event:q,hashText:M,identify:ot,maxMetric:U,measure:pn,metadata:Ye,pause:function(){Pn()&&(q("clarityGemX","pause"),null===Tn&&(Tn=new Promise((function(t){xn=t}))))},queue:ae,register:z,resume:function(){Pn()&&(Tn&&(xn(),Tn=null,null===On&&Cn()),q("clarityGemX","resume"))},schedule:function(t,e){return void 0===e&&(e=0),et(this,void 0,void 0,(function(){var n,r,a;return nt(this,(function(o){for(n=0,r=En;n<r.length;n++)if(r[n].task===t)return[2];return a=new Promise((function(n){En[1===e?"unshift":"push"]({task:t,resolve:n,id:We()})})),null===On&&null===Tn&&Cn(),[2,a]}))}))},set:at,signal:function(t){jt=t},start:ar,stop:or,time:l,upgrade:Q,version:d}),ur=window,cr="clarityGemX";function sr(){if(void 0!==ur){if(ur[cr]&&ur[cr].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=ur[cr]&&ur[cr].q||[];for(ur[cr]=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return ir[t].apply(ir,e)},ur[cr].v=d;t.length>0;)ur[cr].apply(ur,t.shift())}}sr()}();
|
package/package.json
CHANGED
package/src/core/config.ts
CHANGED
package/src/core/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
let version = "0.8.
|
|
1
|
+
let version = "0.8.87";
|
|
2
2
|
export default version;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Token } from "@clarity-types/data";
|
|
2
|
+
|
|
3
|
+
// Deferred upload buffer for GemX mode.
|
|
4
|
+
// Buffers ALL playback events until discoverTrigger conditions are met.
|
|
5
|
+
// Scheduling and trigger logic lives in layout/gemx-discover.ts.
|
|
6
|
+
let buffer: Token[][] = [];
|
|
7
|
+
let bufferBytes = 0;
|
|
8
|
+
let active = false;
|
|
9
|
+
let maxBytes = 0;
|
|
10
|
+
|
|
11
|
+
let onBytesLimit: (() => void) | null = null;
|
|
12
|
+
|
|
13
|
+
export function start(): void {
|
|
14
|
+
buffer = [];
|
|
15
|
+
bufferBytes = 0;
|
|
16
|
+
active = true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function config(bytesLimit?: number, onLimit?: () => void): boolean {
|
|
20
|
+
maxBytes = bytesLimit ?? 0;
|
|
21
|
+
onBytesLimit = onLimit ?? null;
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function stop(): void {
|
|
26
|
+
buffer = [];
|
|
27
|
+
bufferBytes = 0;
|
|
28
|
+
active = false;
|
|
29
|
+
maxBytes = 0;
|
|
30
|
+
onBytesLimit = null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function isActive(): boolean { return active; }
|
|
34
|
+
|
|
35
|
+
export function getBytes(): number { return bufferBytes; }
|
|
36
|
+
|
|
37
|
+
export function hold(tokens: Token[], byteLength: number): void {
|
|
38
|
+
buffer.push(tokens);
|
|
39
|
+
bufferBytes += byteLength;
|
|
40
|
+
if (maxBytes > 0 && bufferBytes >= maxBytes && onBytesLimit) {
|
|
41
|
+
onBytesLimit();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function drain(): Token[][] {
|
|
46
|
+
active = false;
|
|
47
|
+
const pending = buffer;
|
|
48
|
+
buffer = [];
|
|
49
|
+
bufferBytes = 0;
|
|
50
|
+
return pending;
|
|
51
|
+
}
|
package/src/data/gemx.ts
CHANGED
|
@@ -2,6 +2,8 @@ import { GemXConfig } from "@clarity-types/data";
|
|
|
2
2
|
|
|
3
3
|
const defaultConfig: GemXConfig = {
|
|
4
4
|
excludeClassNames: [],
|
|
5
|
+
ignoreMutationClassNames: [],
|
|
6
|
+
discoverTrigger: null,
|
|
5
7
|
};
|
|
6
8
|
|
|
7
9
|
let _config: GemXConfig = { ...defaultConfig };
|
|
@@ -9,6 +11,8 @@ let _config: GemXConfig = { ...defaultConfig };
|
|
|
9
11
|
export function start(): void {
|
|
10
12
|
_config = {
|
|
11
13
|
excludeClassNames: (window?.GemXHeatmap?.excludeClassNames ?? []),
|
|
14
|
+
ignoreMutationClassNames: (window?.GemXHeatmap?.ignoreMutationClassNames ?? []),
|
|
15
|
+
discoverTrigger: (window?.GemXHeatmap?.discoverTrigger ?? null),
|
|
12
16
|
};
|
|
13
17
|
}
|
|
14
18
|
|
package/src/data/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ import * as envelope from "@src/data/envelope";
|
|
|
5
5
|
import * as dimension from "@src/data/dimension";
|
|
6
6
|
import * as metadata from "@src/data/metadata";
|
|
7
7
|
import { Module } from "@clarity-types/core";
|
|
8
|
+
import config from "@src/core/config";
|
|
8
9
|
import * as metric from "@src/data/metric";
|
|
9
10
|
import * as ping from "@src/data/ping";
|
|
10
11
|
import * as limit from "@src/data/limit";
|
|
@@ -15,6 +16,7 @@ import * as variable from "@src/data/variable";
|
|
|
15
16
|
import * as extract from "@src/data/extract";
|
|
16
17
|
import * as cookie from "@src/data/cookie";
|
|
17
18
|
import * as gemx from "@src/data/gemx";
|
|
19
|
+
import * as gemxUpload from "@src/data/gemx-upload";
|
|
18
20
|
export { event } from "@src/data/custom";
|
|
19
21
|
export { consent, consentv2, metadata } from "@src/data/metadata";
|
|
20
22
|
export { upgrade } from "@src/data/upgrade";
|
|
@@ -23,7 +25,7 @@ export { signal } from "@src/data/signal";
|
|
|
23
25
|
export { max as maxMetric } from "@src/data/metric";
|
|
24
26
|
export { log as dlog } from "@src/data/dimension";
|
|
25
27
|
|
|
26
|
-
const modules: Module[] = [gemx, baseline, dimension, variable, limit, summary, cookie, consent, metadata, envelope, upload, ping, upgrade, extract];
|
|
28
|
+
const modules: Module[] = [gemx, gemxUpload, baseline, dimension, variable, limit, summary, cookie, consent, metadata, envelope, upload, ping, upgrade, extract];
|
|
27
29
|
|
|
28
30
|
export function start(): void {
|
|
29
31
|
// Metric needs to be initialized before we can start measuring. so metric is not wrapped in measure
|
|
@@ -41,12 +43,15 @@ export function stop(): void {
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export function compute(): void {
|
|
44
|
-
variable.compute();
|
|
45
46
|
baseline.compute();
|
|
46
|
-
dimension.compute();
|
|
47
|
-
metric.compute();
|
|
48
|
-
summary.compute();
|
|
49
47
|
limit.compute();
|
|
50
|
-
extract.compute();
|
|
51
48
|
consent.compute();
|
|
49
|
+
|
|
50
|
+
if (config.mode !== "gemx") {
|
|
51
|
+
variable.compute();
|
|
52
|
+
dimension.compute();
|
|
53
|
+
metric.compute();
|
|
54
|
+
summary.compute();
|
|
55
|
+
extract.compute();
|
|
56
|
+
}
|
|
52
57
|
}
|
package/src/data/upload.ts
CHANGED
|
@@ -22,6 +22,7 @@ import { report } from "@src/core/report";
|
|
|
22
22
|
import { signalsEvent } from "@src/data/signal";
|
|
23
23
|
import { snapshot } from "@src/insight/snapshot";
|
|
24
24
|
import * as dynamic from "@src/core/dynamic";
|
|
25
|
+
import * as gemxUpload from "@src/data/gemx-upload";
|
|
25
26
|
|
|
26
27
|
let discoverBytes: number = 0;
|
|
27
28
|
let playbackBytes: number = 0;
|
|
@@ -32,6 +33,7 @@ let transit: Transit;
|
|
|
32
33
|
let active: boolean;
|
|
33
34
|
let queuedTime: number = 0;
|
|
34
35
|
let leanLimit = false;
|
|
36
|
+
let hasGemxPayload = false;
|
|
35
37
|
export let track: UploadData;
|
|
36
38
|
|
|
37
39
|
export function start(): void {
|
|
@@ -39,6 +41,7 @@ export function start(): void {
|
|
|
39
41
|
discoverBytes = 0;
|
|
40
42
|
playbackBytes = 0;
|
|
41
43
|
leanLimit = false;
|
|
44
|
+
hasGemxPayload = false;
|
|
42
45
|
queuedTime = 0;
|
|
43
46
|
playback = [];
|
|
44
47
|
analysis = [];
|
|
@@ -65,6 +68,9 @@ export function queue(tokens: Token[], transmit: boolean = true): void {
|
|
|
65
68
|
switch (type) {
|
|
66
69
|
case Event.Discover:
|
|
67
70
|
if (leanLimit) { break; }
|
|
71
|
+
if (gemxUpload.isActive()) {
|
|
72
|
+
gemxUpload.hold(tokens, event.length); break; // only gemxPlayback, not playback
|
|
73
|
+
}
|
|
68
74
|
discoverBytes += event.length;
|
|
69
75
|
case Event.Box:
|
|
70
76
|
case Event.Mutation:
|
|
@@ -74,6 +80,9 @@ export function queue(tokens: Token[], transmit: boolean = true): void {
|
|
|
74
80
|
case Event.Animation:
|
|
75
81
|
case Event.CustomElement:
|
|
76
82
|
if (leanLimit) { break; }
|
|
83
|
+
if (gemxUpload.isActive()) {
|
|
84
|
+
gemxUpload.hold(tokens, event.length); // also gemxPlayback, no break
|
|
85
|
+
}
|
|
77
86
|
playbackBytes += event.length;
|
|
78
87
|
playback.push(event);
|
|
79
88
|
break;
|
|
@@ -112,6 +121,28 @@ export function flush(): void {
|
|
|
112
121
|
upload(true);
|
|
113
122
|
}
|
|
114
123
|
|
|
124
|
+
// Trigger an immediate non-beacon upload (used by gemx-discover after inject).
|
|
125
|
+
// Unlike flush(), this does NOT set final=true, so playback data is never stripped.
|
|
126
|
+
export function uploadNow(): void {
|
|
127
|
+
if (!active) { return; }
|
|
128
|
+
clearTimeout(timeout);
|
|
129
|
+
timeout = null;
|
|
130
|
+
upload(false);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Inject pre-buffered tokens directly into playback as discover events.
|
|
134
|
+
// Used by gemx-discover when trigger fires: all buffered Discover tokens are
|
|
135
|
+
// counted towards discoverBytes so upload uses MinUploadDelay (fast path).
|
|
136
|
+
export function inject(buffered: Token[][]): void {
|
|
137
|
+
hasGemxPayload = true;
|
|
138
|
+
for (const tokens of buffered) {
|
|
139
|
+
const e = JSON.stringify(tokens);
|
|
140
|
+
discoverBytes += e.length;
|
|
141
|
+
playbackBytes += e.length;
|
|
142
|
+
playback.push(e);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
115
146
|
export function stop(): void {
|
|
116
147
|
clearTimeout(timeout);
|
|
117
148
|
upload(true);
|
|
@@ -136,7 +167,7 @@ async function upload(final: boolean = false): Promise<void> {
|
|
|
136
167
|
// Check if we can send playback bytes over the wire or not
|
|
137
168
|
// For better instrumentation coverage, we send playback bytes from second sequence onwards
|
|
138
169
|
// And, we only send playback metric when we are able to send the playback bytes back to server
|
|
139
|
-
let sendPlaybackBytes = config.lean === false && playbackBytes > 0 && (playbackBytes < Setting.MaxFirstPayloadBytes || envelope.data.sequence > 0);
|
|
170
|
+
let sendPlaybackBytes = (hasGemxPayload || config.lean === false) && playbackBytes > 0 && (playbackBytes < Setting.MaxFirstPayloadBytes || envelope.data.sequence > 0);
|
|
140
171
|
if (sendPlaybackBytes) { metric.max(Metric.Playback, BooleanFlag.True); }
|
|
141
172
|
|
|
142
173
|
// CAUTION: Ensure "transmit" is set to false in the queue function for following events
|
|
@@ -182,6 +213,7 @@ async function upload(final: boolean = false): Promise<void> {
|
|
|
182
213
|
playbackBytes = 0;
|
|
183
214
|
discoverBytes = 0;
|
|
184
215
|
leanLimit = false;
|
|
216
|
+
hasGemxPayload = false;
|
|
185
217
|
}
|
|
186
218
|
}
|
|
187
219
|
|
|
@@ -237,7 +269,8 @@ function send(payload: string, zipped: Uint8Array, sequence: number, beacon: boo
|
|
|
237
269
|
}
|
|
238
270
|
} else if (config.upload) {
|
|
239
271
|
const callback = config.upload as UploadCallback;
|
|
240
|
-
|
|
272
|
+
const uploadType = hasGemxPayload ? "gemx-discover" : undefined;
|
|
273
|
+
callback(payload, uploadType);
|
|
241
274
|
done(sequence);
|
|
242
275
|
}
|
|
243
276
|
}
|
package/src/interaction/click.ts
CHANGED
|
@@ -14,6 +14,9 @@ import encode from "./encode";
|
|
|
14
14
|
const UserInputTags = ["input", "textarea", "radio", "button", "canvas", "select"];
|
|
15
15
|
const VM_PATTERN = /VM\d/;
|
|
16
16
|
export let state: ClickState[] = [];
|
|
17
|
+
let trustedCallback: (() => void) | null = null;
|
|
18
|
+
|
|
19
|
+
export function onTrustedClick(cb: () => void): void { trustedCallback = cb; }
|
|
17
20
|
|
|
18
21
|
export function start(): void {
|
|
19
22
|
reset();
|
|
@@ -96,6 +99,7 @@ function handler(event: Event, root: Node, evt: MouseEvent): void {
|
|
|
96
99
|
source: config.diagnostics && !evt.isTrusted ? source() : ClickSource.Undefined
|
|
97
100
|
}
|
|
98
101
|
});
|
|
102
|
+
if (evt.isTrusted && trustedCallback) { trustedCallback(); }
|
|
99
103
|
schedule(encode.bind(this, event));
|
|
100
104
|
}
|
|
101
105
|
}
|
package/src/interaction/index.ts
CHANGED
|
@@ -16,12 +16,6 @@ import * as visibility from "@src/interaction/visibility";
|
|
|
16
16
|
import * as focus from "@src/interaction/focus";
|
|
17
17
|
import * as pageshow from "@src/interaction/pageshow";
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
interface ObservableModule {
|
|
22
|
-
observe: (root: Node) => void;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
19
|
const GEMX: Module[] = [
|
|
26
20
|
timeline,
|
|
27
21
|
click,
|
|
@@ -53,12 +47,9 @@ const GEMX_OBSERVE = { allRoots: [scroll], documentOnly: [click] };
|
|
|
53
47
|
const ALL_OBSERVE = { allRoots: [scroll], documentOnly: [click, clipboard, pointer, input, selection, change, submit] };
|
|
54
48
|
|
|
55
49
|
let modules: Module[] = ALL;
|
|
56
|
-
let observeModules: { allRoots: ObservableModule[], documentOnly: ObservableModule[] } = ALL_OBSERVE;
|
|
57
50
|
|
|
58
51
|
export function start(): void {
|
|
59
|
-
|
|
60
|
-
modules = mode === "gemx" ? GEMX : ALL;
|
|
61
|
-
observeModules = mode === "gemx" ? GEMX_OBSERVE : ALL_OBSERVE;
|
|
52
|
+
modules = config.mode === "gemx" ? GEMX : ALL;
|
|
62
53
|
modules.forEach(m => m.start());
|
|
63
54
|
}
|
|
64
55
|
|
|
@@ -67,8 +58,8 @@ export function stop(): void {
|
|
|
67
58
|
}
|
|
68
59
|
|
|
69
60
|
export function observe(root: Node): void {
|
|
61
|
+
const observeModules = config.mode === "gemx" ? GEMX_OBSERVE : ALL_OBSERVE;
|
|
70
62
|
observeModules.allRoots.forEach(m => m.observe(root));
|
|
71
|
-
|
|
72
63
|
if (root.nodeType === Node.DOCUMENT_NODE) {
|
|
73
64
|
observeModules.documentOnly.forEach(m => m.observe(root));
|
|
74
65
|
}
|
|
@@ -11,6 +11,9 @@ import encode from "./encode";
|
|
|
11
11
|
import * as dimension from "@src/data/dimension";
|
|
12
12
|
|
|
13
13
|
export let state: ScrollState[] = [];
|
|
14
|
+
let trustedCallback: (() => void) | null = null;
|
|
15
|
+
|
|
16
|
+
export function onTrustedScroll(cb: () => void): void { trustedCallback = cb; }
|
|
14
17
|
let initialTop: Node = null;
|
|
15
18
|
let initialBottom: Node = null;
|
|
16
19
|
let timeout: number = null;
|
|
@@ -56,6 +59,7 @@ function recompute(event: UIEvent = null): void {
|
|
|
56
59
|
const top = getPositionNode(xPosition, startYPosition);
|
|
57
60
|
const bottom = getPositionNode(xPosition, endYPosition);
|
|
58
61
|
const trust = event && event.isTrusted ? BooleanFlag.True : BooleanFlag.False;
|
|
62
|
+
if (event && event.isTrusted && trustedCallback) { trustedCallback(); }
|
|
59
63
|
|
|
60
64
|
let current: ScrollState = { time: time(event), event: Event.Scroll, data: {target: element, x, y, top, bottom, trust} };
|
|
61
65
|
|
package/src/layout/dom.ts
CHANGED
|
@@ -350,6 +350,10 @@ export function lookup(hash: string): number {
|
|
|
350
350
|
return hash in hashMap ? hashMap[hash] : null;
|
|
351
351
|
}
|
|
352
352
|
|
|
353
|
+
export function getHashes(): string[] {
|
|
354
|
+
return Object.keys(hashMap);
|
|
355
|
+
}
|
|
356
|
+
|
|
353
357
|
export function has(node: Node): boolean {
|
|
354
358
|
return nodesMap.has(getId(node));
|
|
355
359
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as gemx from "@src/data/gemx";
|
|
2
|
+
import * as gemxUpload from "@src/data/gemx-upload";
|
|
3
|
+
import * as upload from "@src/data/upload";
|
|
4
|
+
import * as click from "@src/interaction/click";
|
|
5
|
+
import * as scroll from "@src/interaction/scroll";
|
|
6
|
+
import * as dom from "@src/layout/dom";
|
|
7
|
+
|
|
8
|
+
// Called from layout/index.ts before discover.start().
|
|
9
|
+
// Activates the upload buffer so Event.Discover is held until trigger fires.
|
|
10
|
+
// discover.start() runs traverse immediately — click/scroll tracking gets valid node ids.
|
|
11
|
+
export function start(): void {
|
|
12
|
+
const { discoverTrigger } = gemx.get();
|
|
13
|
+
if (!discoverTrigger) { return; }
|
|
14
|
+
|
|
15
|
+
gemxUpload.config(discoverTrigger.maxPlaybackBytes, fire);
|
|
16
|
+
schedule(discoverTrigger);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function stop(): void {
|
|
20
|
+
gemxUpload.stop();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let triggered = false;
|
|
24
|
+
|
|
25
|
+
function fire(): void {
|
|
26
|
+
if (triggered) { return; }
|
|
27
|
+
triggered = true;
|
|
28
|
+
|
|
29
|
+
if (window.GemXHeatmap) {
|
|
30
|
+
const hashes = dom.getHashes();
|
|
31
|
+
window.GemXHeatmap.__domSnapshot = hashes;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
click.onTrustedClick(null);
|
|
35
|
+
scroll.onTrustedScroll(null);
|
|
36
|
+
flush();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function schedule(trigger: { scrollDepthPercent?: number; clickCount?: number; activeTimeMs?: number; maxPlaybackBytes?: number }): void {
|
|
40
|
+
triggered = false;
|
|
41
|
+
let clickCount = 0;
|
|
42
|
+
|
|
43
|
+
if (trigger.scrollDepthPercent) {
|
|
44
|
+
scroll.onTrustedScroll((): void => {
|
|
45
|
+
const scrolled = window.scrollY + window.innerHeight;
|
|
46
|
+
const total = document.documentElement.scrollHeight;
|
|
47
|
+
if ((scrolled / total) * 100 >= trigger.scrollDepthPercent) { fire(); }
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (trigger.clickCount) {
|
|
52
|
+
click.onTrustedClick((): void => {
|
|
53
|
+
clickCount++;
|
|
54
|
+
if (clickCount >= trigger.clickCount) { fire(); }
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (trigger.activeTimeMs) { setTimeout(fire, trigger.activeTimeMs); }
|
|
59
|
+
// maxPlaybackBytes trigger is handled via gemxUpload.start() callback above
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function flush(): void {
|
|
63
|
+
upload.inject(gemxUpload.drain());
|
|
64
|
+
upload.uploadNow();
|
|
65
|
+
}
|
package/src/layout/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as discover from "@src/layout/discover";
|
|
2
|
+
import * as gemxDiscover from "@src/layout/gemx-discover";
|
|
2
3
|
import * as doc from "@src/layout/document";
|
|
3
4
|
import * as dom from "@src/layout/dom";
|
|
4
5
|
import * as mutation from "@src/layout/mutation";
|
|
@@ -28,6 +29,7 @@ export function start(): void {
|
|
|
28
29
|
// IMPORTANT: Start custom element detection BEFORE discover
|
|
29
30
|
// This ensures pre-existing custom elements are registered before DOM traversal
|
|
30
31
|
custom.start();
|
|
32
|
+
gemxDiscover.start(); // activates upload buffer before discover traverses
|
|
31
33
|
discover.start();
|
|
32
34
|
style.start();
|
|
33
35
|
animation.start();
|
|
@@ -41,4 +43,5 @@ export function stop(): void {
|
|
|
41
43
|
style.stop();
|
|
42
44
|
animation.stop();
|
|
43
45
|
custom.stop();
|
|
46
|
+
gemxDiscover.stop();
|
|
44
47
|
}
|
package/src/layout/mutation.ts
CHANGED
|
@@ -19,6 +19,7 @@ import * as region from "@src/layout/region";
|
|
|
19
19
|
import traverse from "@src/layout/traverse";
|
|
20
20
|
import processNode from "./node";
|
|
21
21
|
import config from "@src/core/config";
|
|
22
|
+
import * as gemx from "@src/data/gemx";
|
|
22
23
|
|
|
23
24
|
let observers: Set<MutationObserver> = new Set();
|
|
24
25
|
let mutations: MutationQueue[] = [];
|
|
@@ -126,6 +127,13 @@ async function processMutation(timer: Timer, mutation: MutationRecord, instance:
|
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
let target = mutation.target;
|
|
130
|
+
|
|
131
|
+
const ignoredClasses = gemx.get().ignoreMutationClassNames;
|
|
132
|
+
if (ignoredClasses.length > 0 && target instanceof Element) {
|
|
133
|
+
const el = target as Element;
|
|
134
|
+
if (ignoredClasses.some(cls => el.classList.contains(cls))) { return; }
|
|
135
|
+
}
|
|
136
|
+
|
|
129
137
|
let type = config.throttleDom ? track(mutation, timer, instance, timestamp) : mutation.type;
|
|
130
138
|
|
|
131
139
|
if (type && target && target.ownerDocument) {
|
package/src/layout/target.ts
CHANGED
|
@@ -18,10 +18,8 @@ export function metadata(node: Node, event: Event, text: string = null): TargetM
|
|
|
18
18
|
let output: TargetMetadata = { id: 0, hash: null, privacy: Privacy.Text };
|
|
19
19
|
if (node) {
|
|
20
20
|
let value = dom.get(node);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
hash: value.hash,
|
|
24
|
-
});
|
|
21
|
+
if (!window.GemXHeatmap.__debug) { window.GemXHeatmap.__debug = []; }
|
|
22
|
+
window.GemXHeatmap.__debug.push({ event, selector: value.selector, hash: value.hash });
|
|
25
23
|
if (value !== null) {
|
|
26
24
|
let metadata = value.metadata;
|
|
27
25
|
output.id = value.id;
|
package/types/core.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as Data from "./data";
|
|
|
2
2
|
|
|
3
3
|
type TaskFunction = () => Promise<void>;
|
|
4
4
|
type TaskResolve = () => void;
|
|
5
|
-
type UploadCallback = (data: string) => void;
|
|
5
|
+
type UploadCallback = (data: string, type?: string) => void;
|
|
6
6
|
type Region = [number /* RegionId */, string /* Query Selector */];
|
|
7
7
|
type Checksum = [number /* FraudId */, string /* Query Selector */];
|
|
8
8
|
|