clarity-js 0.8.46 → 0.8.47

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.
@@ -1 +1 @@
1
- !function(){"use strict";var t=Object.freeze({__proto__:null,get queue(){return Yt},get start(){return Vt},get stop(){return Bt},get track(){return qt}}),e=Object.freeze({__proto__:null,get check(){return Qt},get compute(){return te},get data(){return Dt},get start(){return Kt},get stop(){return ee},get trigger(){return $t}}),n=Object.freeze({__proto__:null,get compute(){return ce},get data(){return ne},get log(){return ue},get reset(){return se},get start(){return oe},get stop(){return ie},get updates(){return re}}),r=Object.freeze({__proto__:null,get compute(){return be},get config(){return ge},get consent(){return ve},get data(){return le},get start(){return fe},get stop(){return pe},get trackConsentv2(){return ye}}),a=Object.freeze({__proto__:null,get callback(){return Pe},get callbacks(){return _e},get clear(){return ze},get consent(){return xe},get consentv2(){return Ce},get data(){return we},get electron(){return ke},get id(){return Me},get metadata(){return Te},get save(){return Ae},get shortid(){return De},get start(){return Ie},get stop(){return Oe}}),o=Object.freeze({__proto__:null,get data(){return He},get envelope(){return Ye},get start(){return Xe},get stop(){return Ve}}),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};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.46";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;E();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:k(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 S(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?"src"===e&&(null==t?void 0:t.startsWith("blob:"))?"blob:":"":t;case"value":case"click":case"input":case"change":return S(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 k(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 k(t,e,n){return E(),t?t.replace(v,e).replace(g,n):t}function S(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 E(){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 I=[],O=null;function T(){}var M=[];function x(){}function C(){}function j(){}function N(){}function z(){}var P=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:O,event:N,hashText:x,keys:M,log:T,observe:function(){},register:z,reset:function(){},sheetAdoptionState:[],sheetUpdateState:[],start:function(){},state:I,stop:function(){},track:j,trigger:C}),A=null;function q(t,e){gn()&&t&&"string"==typeof t&&t.length<255&&(A=e&&"string"==typeof e&&e.length<255?{key:t,value:e}:{value:t},Ft(24))}var D,R=null,L=null;function U(t){t in R||(R[t]=0),t in L||(L[t]=0),R[t]++,L[t]++}function H(t,e){null!==e&&(t in R||(R[t]=0),t in L||(L[t]=0),R[t]+=e,L[t]+=e)}function X(t,e){null!==e&&!1===isNaN(e)&&(t in R||(R[t]=0),(e>R[t]||0===R[t])&&(L[t]=e,R[t]=e))}function V(t,e,n){return window.setTimeout(Ze(t),e,n)}function Y(t){return window.clearTimeout(t)}var B=0,W=0,Z=null;function J(){Z&&Y(Z),Z=V(G,W),B=l()}function G(){var t=l();D={gap:t-B},Ft(25),D.gap<3e5?Z=V(G,W):fn&&(q("clarity","suspend"),Rn(),["mousemove","touchstart"].forEach((function(t){return Ge(document,t,vn)})),["resize","scroll","pageshow"].forEach((function(t){return Ge(window,t,vn)})))}var F=Object.freeze({__proto__:null,get data(){return D},reset:J,start:function(){W=6e4,B=0},stop:function(){Y(Z),B=0,W=0}}),K=null;function Q(t){gn()&&i.lean&&(i.lean=!1,K={key:t},Pe(),Ae(),i.upgrade&&i.upgrade(t),Ft(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});function tt(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 et(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 nt=null;function rt(t,e){ot(t,"string"==typeof e?[e]:e)}function at(t,e,n,r){return void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null),tt(this,void 0,void 0,(function(){var a,o;return et(this,(function(i){switch(i.label){case 0:return o={},[4,ct(t)];case 1:return o.userId=i.sent(),o.userHint=r||((u=t)&&u.length>=5?"".concat(u.substring(0,2)).concat(k(u.substring(2),"*","*")):k(u,"*","*")),ot("userId",[(a=o).userId]),ot("userHint",[a.userHint]),ot("userType",[st(t)]),e&&(ot("sessionId",[e]),a.sessionId=e),n&&(ot("pageId",[n]),a.pageId=n),[2,a]}var u}))}))}function ot(t,e){if(gn()&&t&&e&&"string"==typeof t&&t.length<255){for(var n=(t in nt?nt[t]:[]),r=0;r<e.length;r++)"string"==typeof e[r]&&e[r].length<255&&n.push(e[r]);nt[t]=n}}function it(){Ft(34)}function ut(){nt={}}function ct(t){return tt(this,void 0,void 0,(function(){var e;return et(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 st(t){return t&&t.indexOf("@")>0?"email":"string"}var lt="CompressionStream"in window;function dt(t){return tt(this,void 0,void 0,(function(){var e,n;return et(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),lt?(e=new ReadableStream({start:function(e){return tt(this,void 0,void 0,(function(){return et(this,(function(n){return e.enqueue(t),e.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),n=Uint8Array.bind,[4,ft(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 ft(t){return tt(this,void 0,void 0,(function(){var e,n,r,a,o;return et(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 pt(t,e){try{return!!t[e]}catch(t){return!1}}function ht(t){try{var e=decodeURIComponent(t);return[e!=t,e]}catch(t){}return[!1,t]}var gt=null,vt="^";function mt(t,e){var n;if(void 0===e&&(e=!1),pt(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=ht(o[1]),u=i[0],c=i[1];u;)u=(n=ht(c))[0],c=n[1];return e?c.endsWith("".concat("~","1"))?c.substring(0,c.length-2):null:c}}}return null}function yt(t,e,n){if((i.track||""==e)&&(navigator&&navigator.cookieEnabled||pt(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===gt){for(var c=location.hostname?location.hostname.split("."):[],s=c.length-1;s>=0;s--)if(gt=".".concat(c[s]).concat(gt||""),s<c.length-1&&(document.cookie="".concat(u).concat(";").concat("domain=").concat(gt),mt(t)===e))return;gt=""}}catch(t){gt=""}document.cookie=gt?"".concat(u).concat(";").concat("domain=").concat(gt):u}}var bt=null;function wt(t){try{if(!bt)return;var e=function(t){try{return JSON.parse(t)}catch(t){return[]}}(t);e.forEach((function(t){bt(t)}))}catch(t){}}var _t=[P,n,Object.freeze({__proto__:null,compute:it,get data(){return nt},identify:at,reset:ut,set:rt,start:function(){ut()},stop:function(){ut()}}),e,P,Object.freeze({__proto__:null,COOKIE_SEP:vt,getCookie:mt,setCookie:yt,start:function(){gt=null},stop:function(){gt=null}}),r,a,o,t,F,$,P];function kt(){R={},L={},U(5),_t.forEach((function(t){return Ze(t.start)()}))}function St(){_t.slice().reverse().forEach((function(t){return Ze(t.stop)()})),R={},L={}}function Et(){it(),ce(),Ft(0),te(),be()}function It(t,e,n){return"".concat(t,"=").concat(y(e,0===t.indexOf("data-")?"data-":t,n))}var Ot=[],Tt=1,Mt=null;function xt(){Ot=[],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=Mt.get(u)?"*T":r;break;case Node.ELEMENT_NODE:var s=o;n=Ct(s),r=["NOSCRIPT","SCRIPT","STYLE"].indexOf(s.tagName)<0?s.tagName:r}jt(o,u,{tag:r,attributes:n,value:a})}}(document),function(t){tt(this,void 0,void 0,(function(){var e,n,r,a,o,i,u,c,s,d,f,p,h;return et(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,Yt(n);break;case 43:if((a=Ot).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(It(h,s[p][h],c));break;case"value":n.push(y(s[p],s.tag,c))}Yt(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 Ct(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 jt(t,e,n){if(t&&n&&n.tag){var r=function(t){return null===t?null:Mt.has(t)?Mt.get(t):(Mt.set(t,Tt),Tt++)}(t),a=e?Mt.get(e):null,o=t.previousSibling?Mt.get(t.previousSibling):null;Ot.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 Nt,zt,Pt,At,qt,Dt,Rt=0,Lt=0,Ut=null,Ht=0,Xt=!1;function Vt(){At=!0,Rt=0,Lt=0,Xt=!1,Ht=0,Nt=[],zt=[],Pt={},qt=null}function Yt(t,e){if(void 0===e&&(e=!0),At){var n=l(),r=t.length>1?t[1]:null,a=JSON.stringify(t);switch(i.lean?!Xt&&Lt+a.length>10485760&&(Xt=!0):Xt=!1,r){case 5:if(Xt)break;Rt+=a.length;case 37:case 6:case 43:case 45:case 46:case 44:case 51:if(Xt)break;Lt+=a.length,Nt.push(a);break;default:zt.push(a)}U(25);var o=function(){var t=!1===i.lean&&Rt>0?100:He.sequence*i.delay;return"string"==typeof i.upload?Math.max(Math.min(t,3e4),100):i.delay}();n-Ht>2*o&&(Y(Ut),Ut=null),e&&null===Ut&&(25!==r&&J(),Ut=V(Wt,o),Ht=n,Qt(Lt))}}function Bt(){Y(Ut),Wt(!0),Rt=0,Lt=0,Xt=!1,Ht=0,Nt=[],zt=[],Pt={},qt=null,At=!1}function Wt(t){return void 0===t&&(t=!1),tt(this,void 0,void 0,(function(){var e,n,r,a,o,u,c,s;return et(this,(function(l){switch(l.label){case 0:return At?(Ut=null,(e=!1===i.lean&&Lt>0&&(Lt<1048576||He.sequence>0))&&X(1,1),Et(),n=!0===t,He?(r=JSON.stringify(Ye(n)),a="[".concat(zt.join(),"]"),o=e?"[".concat(Nt.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,dt(u)];case 2:s=l.sent(),l.label=3;case 3:return H(2,(c=s)?c.length:u.length),Zt(u,c,He.sequence,n),zt=[],e&&(Nt=[],Lt=0,Rt=0,Xt=!1),[2]}}))}))}function Zt(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))&&Gt(n)}catch(t){}if(!1===o){n in Pt?Pt[n].attempts++:Pt[n]={data:t,attempts:1};var u=new XMLHttpRequest;u.open("POST",a,!0),u.timeout=15e3,u.ontimeout=function(){We(new Error("".concat("Timeout"," : ").concat(a)))},null!==n&&(u.onreadystatechange=function(){Ze(Jt)(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),Gt(n)}}function Jt(t,e){var n=Pt[e];t&&4===t.readyState&&n&&((t.status<200||t.status>208)&&n.attempts<=1?t.status>=400&&t.status<500?$t(6):(0===t.status&&(i.upload=i.fallback?i.fallback:i.upload),qt={sequence:e,attempts:n.attempts,status:t.status},Ft(2),Zt(n.data,null,e)):(qt={sequence:e,attempts:n.attempts,status:t.status},n.attempts>1&&Ft(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":$t(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&&wt(o[1]);break;case"SNAPSHOT":i.lean=!1,xt()}}}(t.responseText),0===t.status&&(Zt(n.data,null,e,!0),$t(3)),t.status>=200&&t.status<=208&&Gt(e),delete Pt[e]))}function Gt(t){1===t&&(Ae(),Pe())}function Ft(t){var e=[l(),t];switch(t){case 4:var n=I;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),Yt(e,!1));break;case 25:e.push(D.gap),Yt(e);break;case 35:e.push(Dt.check),Yt(e,!1);break;case 3:e.push(K.key),Yt(e);break;case 2:e.push(qt.sequence),e.push(qt.attempts),e.push(qt.status),Yt(e,!1);break;case 24:A.key&&e.push(A.key),e.push(A.value),Yt(e);break;case 34:var r=Object.keys(nt);if(r.length>0){for(var a=0,o=r;a<o.length;a++){var i=o[a];e.push(i),e.push(nt[i])}ut(),Yt(e,!1)}break;case 0:var u=Object.keys(L);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(L[d]))}L={},Yt(e,!1)}break;case 1:var p=Object.keys(re);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(re[v])}se(),Yt(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]))}Yt(e,!1)}break;case 40:M.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)})),Yt(e,!1);break;case 47:e.push(le.source),e.push(le.ad_Storage),e.push(le.analytics_Storage),Yt(e,!1)}}function Kt(){Dt={check:0}}function Qt(t){if(0===Dt.check){var e=Dt.check;e=He.sequence>=128?1:e,e=He.pageNum>=128?7:e,e=l()>72e5?2:e,(e=t>10485760?2:e)!==Dt.check&&$t(e)}}function $t(t){Dt.check=t,5!==t&&(ze(),Rn())}function te(){0!==Dt.check&&Ft(35)}function ee(){Dt=null}var ne=null,re=null,ae=!1;function oe(){ne={},re={},ae=!1}function ie(){ne={},re={},ae=!1}function ue(t,e){if(e&&(e="".concat(e),t in ne||(ne[t]=[]),ne[t].indexOf(e)<0)){if(ne[t].length>128)return void(ae||(ae=!0,$t(5)));ne[t].push(e),t in re||(re[t]=[]),re[t].push(e)}}function ce(){Ft(1)}function se(){re={},ae=!1}var le=null,de=!0;function fe(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;de=!0,(null==e?void 0:e.addListener)&&e.addListener(["ad_storage","analytics_storage"],he)}function pe(){de=!0}function he(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;if(null==e?void 0:e.getConsentState){var n=e.getConsentState("analytics_storage");Ce(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}))}}function ge(t){me(t.analytics_Storage?1:0),le=t}function ve(){me(2)}function me(t){ue(36,t.toString())}function ye(t){le=t,Ft(47)}function be(){var t;if(de&&(Ft(47),de=!1,!i.track)){var e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;(null==e?void 0:e.usedUpdate)&&he()}}var we=null,_e=[],ke=0,Se=null,Ee={source:7,ad_Storage:"denied",analytics_Storage:"denied"};function Ie(){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:"";ke=r.indexOf("Electron")>0?1:0;var s=function(){var t={session:De(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},e=mt("_clsk",!i.includeSubdomains);if(e){var n=e.includes("^")?e.split("^"):e.split("|");n.length>=5&&t.ts-Re(n[1])<18e5&&(t.session=n[0],t.count=Re(n[2])+1,t.upgrade=Re(n[3]),t.upload=n.length>=6?"".concat("https://").concat(n[5],"/").concat(n[4]):"".concat("https://").concat(n[4]))}return t}(),l=Le(),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);we={projectId:d,userId:l.id,sessionId:s.session,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,ue(0,r),ue(3,c),ue(1,b(location.href,!!ke)),ue(2,document.referrer),ue(15,function(){var t=De();if(i.track&&pt(window,"sessionStorage")){var e=sessionStorage.getItem("_cltk");t=e||t,sessionStorage.setItem("_cltk",t)}return t}()),ue(16,document.documentElement.lang),ue(17,document.dir),ue(26,"".concat(window.devicePixelRatio)),ue(28,l.dob.toString()),ue(29,l.version.toString()),ue(33,u),ue(34,a),ue(35,o),X(0,s.ts),X(1,0),X(35,ke);var f,p=null===window||void 0===window?void 0:window.Zone;p&&"__symbol__"in p&&X(39,1),navigator&&(ue(9,navigator.language),X(33,navigator.hardwareConcurrency),X(32,navigator.maxTouchPoints),X(34,Math.round(navigator.deviceMemory)),(f=navigator.userAgentData)&&f.getHighEntropyValues?f.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var e;ue(22,t.platform),ue(23,t.platformVersion),null===(e=t.brands)||void 0===e||e.forEach((function(t){ue(24,t.name+"~"+t.version)})),ue(25,t.model),X(27,t.mobile?1:0)})):ue(22,navigator.platform)),screen&&(X(14,Math.round(screen.width)),X(15,Math.round(screen.height)),X(16,Math.round(screen.colorDepth)));for(var h=0,g=i.cookies;h<g.length;h++){var v=g[h],m=mt(v);m&&rt(v,m)}null===Se&&(Se={source:l.consent?6:0,ad_Storage:i.track?"granted":"denied",analytics_Storage:i.track?"granted":"denied"}),ge(je(Se)),qe(l)}function Oe(){we=null,_e.forEach((function(t){t.called=!1}))}function Te(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;we&&(a||!1===e)&&(t(we,!i.lean,r?Se:void 0),o=!0),!n&&o||_e.push({callback:t,wait:e,recall:n,called:o,consentInfo:r})}function Me(){return we?[we.userId,we.sessionId,we.pageNum].join("."):""}function xe(t){void 0===t&&(t=!0),t?(Ce({source:4,ad_Storage:"granted",analytics_Storage:"granted"}),ve()):Ce({source:4,ad_Storage:"denied",analytics_Storage:"denied"})}function Ce(t,e){var n;void 0===t&&(t=Ee),void 0===e&&(e=5);var r={source:null!==(n=t.source)&&void 0!==n?n:e,ad_Storage:Ne(t.ad_Storage,null==Se?void 0:Se.ad_Storage),analytics_Storage:Ne(t.analytics_Storage,null==Se?void 0:Se.analytics_Storage)};if(Se&&r.ad_Storage===Se.ad_Storage&&r.analytics_Storage===Se.analytics_Storage)return Se.source=r.source,ye(je(Se)),void ve();Se=r,Pe(!0);var a=je(Se);if(!a.analytics_Storage&&i.track)return i.track=!1,ze(!0),Rn(),void window.setTimeout(Dn,250);gn()&&a.analytics_Storage&&(i.track=!0,qe(Le(),1),Ae()),ye(a),ve()}function je(t){var e;return{source:null!==(e=t.source)&&void 0!==e?e:0,ad_Storage:"granted"===t.ad_Storage?1:0,analytics_Storage:"granted"===t.analytics_Storage?1:0}}function Ne(t,e){return void 0===e&&(e="denied"),"string"==typeof t?t.toLowerCase():e}function ze(t){void 0===t&&(t=!1),yt("_clsk","",-Number.MAX_VALUE),t&&yt("_clck","",-Number.MAX_VALUE)}function Pe(t){void 0===t&&(t=!1),function(t,e){void 0===e&&(e=!1);if(_e.length>0)for(var n=0;n<_e.length;n++){var r=_e[n];r.callback&&(!r.called&&!e||r.consentInfo&&e)&&(!r.wait||t)&&(r.callback(we,!i.lean,r.consentInfo?Se:void 0),r.called=!0,r.recall||(_e.splice(n,1),n--))}}(i.lean?0:1,t)}function Ae(){if(we&&i.track){var t=Math.round(Date.now()),e=i.upload&&"string"==typeof i.upload?i.upload.replace("https://",""):"",n=i.lean?0:1;yt("_clsk",[we.sessionId,t,we.pageNum,n,e].join(vt),1)}}function qe(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)&&yt("_clck",[we.userId,2,n.toString(36),e,r].join(vt),365)}function De(){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 Re(t,e){return void 0===e&&(e=10),parseInt(t,e)}function Le(){var t={id:De(),version:0,expiry:null,consent:0,dob:0},e=mt("_clck",!i.includeSubdomains);if(e&&e.length>0){var n=e.includes("^")?e.split("^"):e.split("|");n.length>1&&(t.version=Re(n[1])),n.length>2&&(t.expiry=Re(n[2],36)),n.length>3&&1===Re(n[3])&&(t.consent=1),n.length>4&&Re(n[1])>1&&(t.dob=Re(n[4])),i.track=i.track||1===t.consent,t.id=i.track?n[0]:t.id}return t}var Ue,He=null;function Xe(){var t=we;He={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 Ve(){He=null}function Ye(t){return He.start=He.start+He.duration,He.duration=l()-He.start,He.sequence++,He.upload=t&&"sendBeacon"in navigator?1:0,He.end=t?1:0,He.applicationPlatform=0,He.url=b(location.href,!1,!0),[He.version,He.sequence,He.start,He.duration,He.projectId,He.userId,He.sessionId,He.pageNum,He.upload,He.end,He.applicationPlatform,He.url]}function Be(){Ue=[]}function We(t){if(Ue&&-1===Ue.indexOf(t.message)){var e=i.report;if(e&&e.length>0&&He){var n={v:He.version,p:He.projectId,u:He.userId,s:He.sessionId,n:He.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)),Ue.push(t.message)}}return t}function Ze(t){return function(){var e=performance.now();try{t.apply(this,arguments)}catch(t){throw We(t)}var n=performance.now()-e;H(4,n),n>30&&(U(7),X(6,n),t.dn&&"".concat(t.dn,"-").concat(n))}}var Je=new Map;function Ge(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=!0),n=Ze(n);try{t[u("addEventListener")](e,n,{capture:r,passive:a}),function(t){return Je.has(t)}(t)||Je.set(t,[]),Je.get(t).push({event:e,listener:n,options:{capture:r,passive:a}})}catch(t){}}function Fe(){Je.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){}})),Je.delete(e)}(t,e)})),Je=new Map}var Ke=null,Qe=null,$e=null,tn=0;function en(){return!(tn++>20)}function nn(){tn=0,$e!==an()&&(Rn(),window.setTimeout(rn,250))}function rn(){Dn(),X(29,1)}function an(){return location.href?location.href.replace(location.hash,""):location.href}var on=[],un=null,cn=null,sn=null;function ln(){on=[],un=null,cn=null}function dn(){var t=on.shift();t&&(un=t,t.task().then((function(){t.id===Me()&&(t.resolve(),un=null,dn())})).catch((function(e){t.id===Me()&&(e&&(e.name,e.message,e.stack),un=null,dn())})))}var fn=!1;function pn(){fn=!0,c=s(),ln(),Fe(),Be(),$e=an(),tn=0,Ge(window,"popstate",nn),null===Ke&&(Ke=history.pushState,history.pushState=function(){Ke.apply(this,arguments),gn()&&en()&&nn()}),null===Qe&&(Qe=history.replaceState,history.replaceState=function(){Qe.apply(this,arguments),gn()&&en()&&nn()})}function hn(){$e=null,tn=0,Be(),Fe(),ln(),c=0,fn=!1}function gn(){return fn}function vn(){Dn(),q("clarity","restart")}var mn=null;function yn(){mn=null}function bn(t){mn={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){tt(this,void 0,void 0,(function(){var e,n;return et(this,(function(r){return e=l(),n=[e,t],29===t&&(n.push(mn.fetchStart),n.push(mn.connectStart),n.push(mn.connectEnd),n.push(mn.requestStart),n.push(mn.responseStart),n.push(mn.responseEnd),n.push(mn.domInteractive),n.push(mn.domComplete),n.push(mn.loadEventStart),n.push(mn.loadEventEnd),n.push(mn.redirectCount),n.push(mn.size),n.push(mn.type),n.push(mn.protocol),n.push(mn.encodedSize),n.push(mn.decodedSize),yn(),Yt(n)),[2]}))}))}(29)}var wn,_n=0,kn=1/0,Sn=0,En=0,In=[],On=new Map,Tn=function(){return _n||0},Mn=function(){if(!In.length)return-1;var t=Math.min(In.length-1,Math.floor((Tn()-En)/50));return In[t].latency},xn=function(){En=Tn(),In.length=0,On.clear()},Cn=function(t){if(t.interactionId&&!(t.duration<40)){!function(t){"interactionCount"in performance?_n=performance.interactionCount:t.interactionId&&(kn=Math.min(kn,t.interactionId),Sn=Math.max(Sn,t.interactionId),_n=Sn?(Sn-kn)/7+1:0)}(t);var e=In[In.length-1],n=On.get(t.interactionId);if(n||In.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};On.set(r.id,r),In.push(r)}In.sort((function(t,e){return e.latency-t.latency})),In.length>10&&In.splice(10).forEach((function(t){return On.delete(t.id)}))}}},jn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint","event"];function Nn(){try{wn&&wn.disconnect(),wn=new PerformanceObserver(Ze(zn));for(var t=0,e=jn;t<e.length;t++){var n=e[t];PerformanceObserver.supportedEntryTypes.indexOf(n)>=0&&("layout-shift"===n&&H(9,0),wn.observe({type:n,buffered:!0}))}}catch(t){}}function zn(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":bn(r);break;case"resource":var a=r.name;ue(4,An(a)),a!==i.upload&&a!==i.fallback||X(28,r.duration);break;case"longtask":U(7);break;case"first-input":e&&X(10,r.processingStart-r.startTime);break;case"event":e&&"PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&(Cn(r),ue(37,Mn().toString()));break;case"layout-shift":e&&!r.hadRecentInput&&H(9,1e3*r.value);break;case"largest-contentful-paint":e&&X(8,r.startTime)}}}(t.getEntries())}var Pn=null;function An(t){return Pn||(Pn=document.createElement("a")),Pn.href=t,Pn.host}var qn=[P,P,P,Object.freeze({__proto__:null,start:function(){yn(),function(){navigator&&navigator.connection&&ue(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?Ge(window,"load",V.bind(this,Nn,0)):Nn())}()},stop:function(){wn&&wn.disconnect(),wn=null,xn(),Pn=null,yn()}}),P];function Dn(t){void 0===t&&(t=null),function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===fn&&"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||fn)return!1;for(var e in t)e in i&&(i[e]=t[e])}(t),pn(),kt(),qn.forEach((function(t){return Ze(t.start)()})),null===t&&Xn())}function Rn(){gn()&&(qn.slice().reverse().forEach((function(t){return Ze(t.stop)()})),St(),hn(),void 0!==Un&&(Un[Hn]=function(){(Un[Hn].q=Un[Hn].q||[]).push(arguments),"start"===arguments[0]&&Un[Hn].q.unshift(Un[Hn].q.pop())&&Xn()}))}var Ln=Object.freeze({__proto__:null,consent:xe,consentv2:Ce,dlog:ue,event:q,hashText:x,identify:at,maxMetric:X,measure:Ze,metadata:Te,pause:function(){gn()&&(q("clarity","pause"),null===cn&&(cn=new Promise((function(t){sn=t}))))},queue:Yt,register:z,resume:function(){gn()&&(cn&&(sn(),cn=null,null===un&&dn()),q("clarity","resume"))},schedule:function(t,e){return void 0===e&&(e=0),tt(this,void 0,void 0,(function(){var n,r,a;return et(this,(function(o){for(n=0,r=on;n<r.length;n++)if(r[n].task===t)return[2];return a=new Promise((function(n){on[1===e?"unshift":"push"]({task:t,resolve:n,id:Me()})})),null===un&&null===cn&&dn(),[2,a]}))}))},set:rt,signal:function(t){bt=t},start:Dn,stop:Rn,time:l,upgrade:Q,version:d}),Un=window,Hn="clarity";function Xn(){if(void 0!==Un){if(Un[Hn]&&Un[Hn].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=Un[Hn]&&Un[Hn].q||[];for(Un[Hn]=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return Ln[t].apply(Ln,e)},Un[Hn].v=d;t.length>0;)Un[Hn].apply(Un,t.shift())}}Xn()}();
1
+ !function(){"use strict";var t=Object.freeze({__proto__:null,get queue(){return Yt},get start(){return Vt},get stop(){return Bt},get track(){return qt}}),e=Object.freeze({__proto__:null,get check(){return Qt},get compute(){return te},get data(){return Dt},get start(){return Kt},get stop(){return ee},get trigger(){return $t}}),n=Object.freeze({__proto__:null,get compute(){return ce},get data(){return ne},get log(){return ue},get reset(){return se},get start(){return oe},get stop(){return ie},get updates(){return re}}),r=Object.freeze({__proto__:null,get compute(){return be},get config(){return ge},get consent(){return ve},get data(){return le},get start(){return fe},get stop(){return pe},get trackConsentv2(){return ye}}),a=Object.freeze({__proto__:null,get callback(){return Pe},get callbacks(){return _e},get clear(){return ze},get consent(){return xe},get consentv2(){return Ce},get data(){return we},get electron(){return ke},get id(){return Me},get metadata(){return Te},get save(){return Ae},get shortid(){return De},get start(){return Ie},get stop(){return Oe}}),o=Object.freeze({__proto__:null,get data(){return He},get envelope(){return Ye},get start(){return Xe},get stop(){return Ve}}),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};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.47";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;E();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:k(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 S(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?"src"===e&&(null==t?void 0:t.startsWith("blob:"))?"blob:":"":t;case"value":case"click":case"input":case"change":return S(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 k(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 k(t,e,n){return E(),t?t.replace(v,e).replace(g,n):t}function S(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 E(){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 I=[],O=null;function T(){}var M=[];function x(){}function C(){}function j(){}function N(){}function z(){}var P=Object.freeze({__proto__:null,checkDocumentStyles:function(t){},compute:function(){},data:O,event:N,hashText:x,keys:M,log:T,observe:function(){},register:z,reset:function(){},sheetAdoptionState:[],sheetUpdateState:[],start:function(){},state:I,stop:function(){},track:j,trigger:C}),A=null;function q(t,e){gn()&&t&&"string"==typeof t&&t.length<255&&(A=e&&"string"==typeof e&&e.length<255?{key:t,value:e}:{value:t},Ft(24))}var D,R=null,L=null;function U(t){t in R||(R[t]=0),t in L||(L[t]=0),R[t]++,L[t]++}function H(t,e){null!==e&&(t in R||(R[t]=0),t in L||(L[t]=0),R[t]+=e,L[t]+=e)}function X(t,e){null!==e&&!1===isNaN(e)&&(t in R||(R[t]=0),(e>R[t]||0===R[t])&&(L[t]=e,R[t]=e))}function V(t,e,n){return window.setTimeout(Ze(t),e,n)}function Y(t){return window.clearTimeout(t)}var B=0,W=0,Z=null;function J(){Z&&Y(Z),Z=V(G,W),B=l()}function G(){var t=l();D={gap:t-B},Ft(25),D.gap<3e5?Z=V(G,W):fn&&(q("clarity","suspend"),Rn(),["mousemove","touchstart"].forEach((function(t){return Ge(document,t,vn)})),["resize","scroll","pageshow"].forEach((function(t){return Ge(window,t,vn)})))}var F=Object.freeze({__proto__:null,get data(){return D},reset:J,start:function(){W=6e4,B=0},stop:function(){Y(Z),B=0,W=0}}),K=null;function Q(t){gn()&&i.lean&&(i.lean=!1,K={key:t},Pe(),Ae(),i.upgrade&&i.upgrade(t),Ft(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});function tt(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 et(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 nt=null;function rt(t,e){ot(t,"string"==typeof e?[e]:e)}function at(t,e,n,r){return void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null),tt(this,void 0,void 0,(function(){var a,o;return et(this,(function(i){switch(i.label){case 0:return o={},[4,ct(t)];case 1:return o.userId=i.sent(),o.userHint=r||((u=t)&&u.length>=5?"".concat(u.substring(0,2)).concat(k(u.substring(2),"*","*")):k(u,"*","*")),ot("userId",[(a=o).userId]),ot("userHint",[a.userHint]),ot("userType",[st(t)]),e&&(ot("sessionId",[e]),a.sessionId=e),n&&(ot("pageId",[n]),a.pageId=n),[2,a]}var u}))}))}function ot(t,e){if(gn()&&t&&e&&"string"==typeof t&&t.length<255){for(var n=(t in nt?nt[t]:[]),r=0;r<e.length;r++)"string"==typeof e[r]&&e[r].length<255&&n.push(e[r]);nt[t]=n}}function it(){Ft(34)}function ut(){nt={}}function ct(t){return tt(this,void 0,void 0,(function(){var e;return et(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 st(t){return t&&t.indexOf("@")>0?"email":"string"}var lt="CompressionStream"in window;function dt(t){return tt(this,void 0,void 0,(function(){var e,n;return et(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),lt?(e=new ReadableStream({start:function(e){return tt(this,void 0,void 0,(function(){return et(this,(function(n){return e.enqueue(t),e.close(),[2]}))}))}}).pipeThrough(new TextEncoderStream).pipeThrough(new window.CompressionStream("gzip")),n=Uint8Array.bind,[4,ft(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 ft(t){return tt(this,void 0,void 0,(function(){var e,n,r,a,o;return et(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 pt(t,e){try{return!!t[e]}catch(t){return!1}}function ht(t){try{var e=decodeURIComponent(t);return[e!=t,e]}catch(t){}return[!1,t]}var gt=null,vt="^";function mt(t,e){var n;if(void 0===e&&(e=!1),pt(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=ht(o[1]),u=i[0],c=i[1];u;)u=(n=ht(c))[0],c=n[1];return e?c.endsWith("".concat("~","1"))?c.substring(0,c.length-2):null:c}}}return null}function yt(t,e,n){if((i.track||""==e)&&(navigator&&navigator.cookieEnabled||pt(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===gt){for(var c=location.hostname?location.hostname.split("."):[],s=c.length-1;s>=0;s--)if(gt=".".concat(c[s]).concat(gt||""),s<c.length-1&&(document.cookie="".concat(u).concat(";").concat("domain=").concat(gt),mt(t)===e))return;gt=""}}catch(t){gt=""}document.cookie=gt?"".concat(u).concat(";").concat("domain=").concat(gt):u}}var bt=null;function wt(t){try{if(!bt)return;var e=function(t){try{return JSON.parse(t)}catch(t){return[]}}(t);e.forEach((function(t){bt(t)}))}catch(t){}}var _t=[P,n,Object.freeze({__proto__:null,compute:it,get data(){return nt},identify:at,reset:ut,set:rt,start:function(){ut()},stop:function(){ut()}}),e,P,Object.freeze({__proto__:null,COOKIE_SEP:vt,getCookie:mt,setCookie:yt,start:function(){gt=null},stop:function(){gt=null}}),r,a,o,t,F,$,P];function kt(){R={},L={},U(5),_t.forEach((function(t){return Ze(t.start)()}))}function St(){_t.slice().reverse().forEach((function(t){return Ze(t.stop)()})),R={},L={}}function Et(){it(),ce(),Ft(0),te(),be()}function It(t,e,n){return"".concat(t,"=").concat(y(e,0===t.indexOf("data-")?"data-":t,n))}var Ot=[],Tt=1,Mt=null;function xt(){Ot=[],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=Mt.get(u)?"*T":r;break;case Node.ELEMENT_NODE:var s=o;n=Ct(s),r=["NOSCRIPT","SCRIPT","STYLE"].indexOf(s.tagName)<0?s.tagName:r}jt(o,u,{tag:r,attributes:n,value:a})}}(document),function(t){tt(this,void 0,void 0,(function(){var e,n,r,a,o,i,u,c,s,d,f,p,h;return et(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,Yt(n);break;case 43:if((a=Ot).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(It(h,s[p][h],c));break;case"value":n.push(y(s[p],s.tag,c))}Yt(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 Ct(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 jt(t,e,n){if(t&&n&&n.tag){var r=function(t){return null===t?null:Mt.has(t)?Mt.get(t):(Mt.set(t,Tt),Tt++)}(t),a=e?Mt.get(e):null,o=t.previousSibling?Mt.get(t.previousSibling):null;Ot.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 Nt,zt,Pt,At,qt,Dt,Rt=0,Lt=0,Ut=null,Ht=0,Xt=!1;function Vt(){At=!0,Rt=0,Lt=0,Xt=!1,Ht=0,Nt=[],zt=[],Pt={},qt=null}function Yt(t,e){if(void 0===e&&(e=!0),At){var n=l(),r=t.length>1?t[1]:null,a=JSON.stringify(t);switch(i.lean?!Xt&&Lt+a.length>10485760&&(Xt=!0):Xt=!1,r){case 5:if(Xt)break;Rt+=a.length;case 37:case 6:case 43:case 45:case 46:case 44:case 51:if(Xt)break;Lt+=a.length,Nt.push(a);break;default:zt.push(a)}U(25);var o=function(){var t=!1===i.lean&&Rt>0?100:He.sequence*i.delay;return"string"==typeof i.upload?Math.max(Math.min(t,3e4),100):i.delay}();n-Ht>2*o&&(Y(Ut),Ut=null),e&&null===Ut&&(25!==r&&J(),Ut=V(Wt,o),Ht=n,Qt(Lt))}}function Bt(){Y(Ut),Wt(!0),Rt=0,Lt=0,Xt=!1,Ht=0,Nt=[],zt=[],Pt={},qt=null,At=!1}function Wt(t){return void 0===t&&(t=!1),tt(this,void 0,void 0,(function(){var e,n,r,a,o,u,c,s;return et(this,(function(l){switch(l.label){case 0:return At?(Ut=null,(e=!1===i.lean&&Lt>0&&(Lt<1048576||He.sequence>0))&&X(1,1),Et(),n=!0===t,He?(r=JSON.stringify(Ye(n)),a="[".concat(zt.join(),"]"),o=e?"[".concat(Nt.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,dt(u)];case 2:s=l.sent(),l.label=3;case 3:return H(2,(c=s)?c.length:u.length),Zt(u,c,He.sequence,n),zt=[],e&&(Nt=[],Lt=0,Rt=0,Xt=!1),[2]}}))}))}function Zt(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))&&Gt(n)}catch(t){}if(!1===o){n in Pt?Pt[n].attempts++:Pt[n]={data:t,attempts:1};var u=new XMLHttpRequest;u.open("POST",a,!0),u.timeout=15e3,u.ontimeout=function(){We(new Error("".concat("Timeout"," : ").concat(a)))},null!==n&&(u.onreadystatechange=function(){Ze(Jt)(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),Gt(n)}}function Jt(t,e){var n=Pt[e];t&&4===t.readyState&&n&&((t.status<200||t.status>208)&&n.attempts<=1?t.status>=400&&t.status<500?$t(6):(0===t.status&&(i.upload=i.fallback?i.fallback:i.upload),qt={sequence:e,attempts:n.attempts,status:t.status},Ft(2),Zt(n.data,null,e)):(qt={sequence:e,attempts:n.attempts,status:t.status},n.attempts>1&&Ft(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":$t(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&&wt(o[1]);break;case"SNAPSHOT":i.lean=!1,xt()}}}(t.responseText),0===t.status&&(Zt(n.data,null,e,!0),$t(3)),t.status>=200&&t.status<=208&&Gt(e),delete Pt[e]))}function Gt(t){1===t&&(Ae(),Pe())}function Ft(t){var e=[l(),t];switch(t){case 4:var n=I;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),Yt(e,!1));break;case 25:e.push(D.gap),Yt(e);break;case 35:e.push(Dt.check),Yt(e,!1);break;case 3:e.push(K.key),Yt(e);break;case 2:e.push(qt.sequence),e.push(qt.attempts),e.push(qt.status),Yt(e,!1);break;case 24:A.key&&e.push(A.key),e.push(A.value),Yt(e);break;case 34:var r=Object.keys(nt);if(r.length>0){for(var a=0,o=r;a<o.length;a++){var i=o[a];e.push(i),e.push(nt[i])}ut(),Yt(e,!1)}break;case 0:var u=Object.keys(L);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(L[d]))}L={},Yt(e,!1)}break;case 1:var p=Object.keys(re);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(re[v])}se(),Yt(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]))}Yt(e,!1)}break;case 40:M.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)})),Yt(e,!1);break;case 47:e.push(le.source),e.push(le.ad_Storage),e.push(le.analytics_Storage),Yt(e,!1)}}function Kt(){Dt={check:0}}function Qt(t){if(0===Dt.check){var e=Dt.check;e=He.sequence>=128?1:e,e=He.pageNum>=128?7:e,e=l()>72e5?2:e,(e=t>10485760?2:e)!==Dt.check&&$t(e)}}function $t(t){Dt.check=t,5!==t&&(ze(),Rn())}function te(){0!==Dt.check&&Ft(35)}function ee(){Dt=null}var ne=null,re=null,ae=!1;function oe(){ne={},re={},ae=!1}function ie(){ne={},re={},ae=!1}function ue(t,e){if(e&&(e="".concat(e),t in ne||(ne[t]=[]),ne[t].indexOf(e)<0)){if(ne[t].length>128)return void(ae||(ae=!0,$t(5)));ne[t].push(e),t in re||(re[t]=[]),re[t].push(e)}}function ce(){Ft(1)}function se(){re={},ae=!1}var le=null,de=!0;function fe(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;de=!0,(null==e?void 0:e.addListener)&&e.addListener(["ad_storage","analytics_storage"],he)}function pe(){de=!0}function he(){var t,e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;if(null==e?void 0:e.getConsentState){var n=e.getConsentState("analytics_storage");Ce(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}))}}function ge(t){me(t.analytics_Storage?1:0),le=t}function ve(){me(2)}function me(t){ue(36,t.toString())}function ye(t){le=t,Ft(47)}function be(){var t;if(de&&(Ft(47),de=!1,!i.track)){var e=null===(t=window.google_tag_data)||void 0===t?void 0:t.ics;(null==e?void 0:e.usedUpdate)&&he()}}var we=null,_e=[],ke=0,Se=null,Ee={source:7,ad_Storage:"denied",analytics_Storage:"denied"};function Ie(){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:"";ke=r.indexOf("Electron")>0?1:0;var s=function(){var t={session:De(),ts:Math.round(Date.now()),count:1,upgrade:null,upload:""},e=mt("_clsk",!i.includeSubdomains);if(e){var n=e.includes("^")?e.split("^"):e.split("|");n.length>=5&&t.ts-Re(n[1])<18e5&&(t.session=n[0],t.count=Re(n[2])+1,t.upgrade=Re(n[3]),t.upload=n.length>=6?"".concat("https://").concat(n[5],"/").concat(n[4]):"".concat("https://").concat(n[4]))}return t}(),l=Le(),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);we={projectId:d,userId:l.id,sessionId:s.session,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,ue(0,r),ue(3,c),ue(1,b(location.href,!!ke)),ue(2,document.referrer),ue(15,function(){var t=De();if(i.track&&pt(window,"sessionStorage")){var e=sessionStorage.getItem("_cltk");t=e||t,sessionStorage.setItem("_cltk",t)}return t}()),ue(16,document.documentElement.lang),ue(17,document.dir),ue(26,"".concat(window.devicePixelRatio)),ue(28,l.dob.toString()),ue(29,l.version.toString()),ue(33,u),ue(34,a),ue(35,o),X(0,s.ts),X(1,0),X(35,ke);var f,p=null===window||void 0===window?void 0:window.Zone;p&&"__symbol__"in p&&X(39,1),navigator&&(ue(9,navigator.language),X(33,navigator.hardwareConcurrency),X(32,navigator.maxTouchPoints),X(34,Math.round(navigator.deviceMemory)),(f=navigator.userAgentData)&&f.getHighEntropyValues?f.getHighEntropyValues(["model","platform","platformVersion","uaFullVersion"]).then((function(t){var e;ue(22,t.platform),ue(23,t.platformVersion),null===(e=t.brands)||void 0===e||e.forEach((function(t){ue(24,t.name+"~"+t.version)})),ue(25,t.model),X(27,t.mobile?1:0)})):ue(22,navigator.platform)),screen&&(X(14,Math.round(screen.width)),X(15,Math.round(screen.height)),X(16,Math.round(screen.colorDepth)));for(var h=0,g=i.cookies;h<g.length;h++){var v=g[h],m=mt(v);m&&rt(v,m)}null===Se&&(Se={source:l.consent?6:0,ad_Storage:i.track?"granted":"denied",analytics_Storage:i.track?"granted":"denied"}),ge(je(Se)),qe(l)}function Oe(){we=null,_e.forEach((function(t){t.called=!1}))}function Te(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;we&&(a||!1===e)&&(t(we,!i.lean,r?Se:void 0),o=!0),!n&&o||_e.push({callback:t,wait:e,recall:n,called:o,consentInfo:r})}function Me(){return we?[we.userId,we.sessionId,we.pageNum].join("."):""}function xe(t){void 0===t&&(t=!0),t?(Ce({source:4,ad_Storage:"granted",analytics_Storage:"granted"}),ve()):Ce({source:4,ad_Storage:"denied",analytics_Storage:"denied"})}function Ce(t,e){var n;void 0===t&&(t=Ee),void 0===e&&(e=5);var r={source:null!==(n=t.source)&&void 0!==n?n:e,ad_Storage:Ne(t.ad_Storage,null==Se?void 0:Se.ad_Storage),analytics_Storage:Ne(t.analytics_Storage,null==Se?void 0:Se.analytics_Storage)};if(Se&&r.ad_Storage===Se.ad_Storage&&r.analytics_Storage===Se.analytics_Storage)return Se.source=r.source,ye(je(Se)),void ve();Se=r,Pe(!0);var a=je(Se);if(!a.analytics_Storage&&i.track)return i.track=!1,ze(!0),Rn(),void window.setTimeout(Dn,250);gn()&&a.analytics_Storage&&(i.track=!0,qe(Le(),1),Ae()),ye(a),ve()}function je(t){var e;return{source:null!==(e=t.source)&&void 0!==e?e:0,ad_Storage:"granted"===t.ad_Storage?1:0,analytics_Storage:"granted"===t.analytics_Storage?1:0}}function Ne(t,e){return void 0===e&&(e="denied"),"string"==typeof t?t.toLowerCase():e}function ze(t){void 0===t&&(t=!1),yt("_clsk","",-Number.MAX_VALUE),t&&yt("_clck","",-Number.MAX_VALUE)}function Pe(t){void 0===t&&(t=!1),function(t,e){void 0===e&&(e=!1);if(_e.length>0)for(var n=0;n<_e.length;n++){var r=_e[n];r.callback&&(!r.called&&!e||r.consentInfo&&e)&&(!r.wait||t)&&(r.callback(we,!i.lean,r.consentInfo?Se:void 0),r.called=!0,r.recall||(_e.splice(n,1),n--))}}(i.lean?0:1,t)}function Ae(){if(we&&i.track){var t=Math.round(Date.now()),e=i.upload&&"string"==typeof i.upload?i.upload.replace("https://",""):"",n=i.lean?0:1;yt("_clsk",[we.sessionId,t,we.pageNum,n,e].join(vt),1)}}function qe(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)&&yt("_clck",[we.userId,2,n.toString(36),e,r].join(vt),365)}function De(){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 Re(t,e){return void 0===e&&(e=10),parseInt(t,e)}function Le(){var t={id:De(),version:0,expiry:null,consent:0,dob:0},e=mt("_clck",!i.includeSubdomains);if(e&&e.length>0){var n=e.includes("^")?e.split("^"):e.split("|");n.length>1&&(t.version=Re(n[1])),n.length>2&&(t.expiry=Re(n[2],36)),n.length>3&&1===Re(n[3])&&(t.consent=1),n.length>4&&Re(n[1])>1&&(t.dob=Re(n[4])),i.track=i.track||1===t.consent,t.id=i.track?n[0]:t.id}return t}var Ue,He=null;function Xe(){var t=we;He={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 Ve(){He=null}function Ye(t){return He.start=He.start+He.duration,He.duration=l()-He.start,He.sequence++,He.upload=t&&"sendBeacon"in navigator?1:0,He.end=t?1:0,He.applicationPlatform=0,He.url=b(location.href,!1,!0),[He.version,He.sequence,He.start,He.duration,He.projectId,He.userId,He.sessionId,He.pageNum,He.upload,He.end,He.applicationPlatform,He.url]}function Be(){Ue=[]}function We(t){if(Ue&&-1===Ue.indexOf(t.message)){var e=i.report;if(e&&e.length>0&&He){var n={v:He.version,p:He.projectId,u:He.userId,s:He.sessionId,n:He.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)),Ue.push(t.message)}}return t}function Ze(t){return function(){var e=performance.now();try{t.apply(this,arguments)}catch(t){throw We(t)}var n=performance.now()-e;H(4,n),n>30&&(U(7),X(6,n),t.dn&&"".concat(t.dn,"-").concat(n))}}var Je=new Map;function Ge(t,e,n,r,a){void 0===r&&(r=!1),void 0===a&&(a=!0),n=Ze(n);try{t[u("addEventListener")](e,n,{capture:r,passive:a}),function(t){return Je.has(t)}(t)||Je.set(t,[]),Je.get(t).push({event:e,listener:n,options:{capture:r,passive:a}})}catch(t){}}function Fe(){Je.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){}})),Je.delete(e)}(t,e)})),Je=new Map}var Ke=null,Qe=null,$e=null,tn=0;function en(){return!(tn++>20)}function nn(){tn=0,$e!==an()&&(Rn(),window.setTimeout(rn,250))}function rn(){Dn(),X(29,1)}function an(){return location.href?location.href.replace(location.hash,""):location.href}var on=[],un=null,cn=null,sn=null;function ln(){on=[],un=null,cn=null}function dn(){var t=on.shift();t&&(un=t,t.task().then((function(){t.id===Me()&&(t.resolve(),un=null,dn())})).catch((function(e){t.id===Me()&&(e&&(e.name,e.message,e.stack),un=null,dn())})))}var fn=!1;function pn(){fn=!0,c=s(),ln(),Fe(),Be(),$e=an(),tn=0,Ge(window,"popstate",nn),null===Ke&&(Ke=history.pushState,history.pushState=function(){Ke.apply(this,arguments),gn()&&en()&&nn()}),null===Qe&&(Qe=history.replaceState,history.replaceState=function(){Qe.apply(this,arguments),gn()&&en()&&nn()})}function hn(){$e=null,tn=0,Be(),Fe(),ln(),c=0,fn=!1}function gn(){return fn}function vn(){Dn(),q("clarity","restart")}var mn=null;function yn(){mn=null}function bn(t){mn={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){tt(this,void 0,void 0,(function(){var e,n;return et(this,(function(r){return e=l(),n=[e,t],29===t&&(n.push(mn.fetchStart),n.push(mn.connectStart),n.push(mn.connectEnd),n.push(mn.requestStart),n.push(mn.responseStart),n.push(mn.responseEnd),n.push(mn.domInteractive),n.push(mn.domComplete),n.push(mn.loadEventStart),n.push(mn.loadEventEnd),n.push(mn.redirectCount),n.push(mn.size),n.push(mn.type),n.push(mn.protocol),n.push(mn.encodedSize),n.push(mn.decodedSize),yn(),Yt(n)),[2]}))}))}(29)}var wn,_n=0,kn=1/0,Sn=0,En=0,In=[],On=new Map,Tn=function(){return _n||0},Mn=function(){if(!In.length)return-1;var t=Math.min(In.length-1,Math.floor((Tn()-En)/50));return In[t].latency},xn=function(){En=Tn(),In.length=0,On.clear()},Cn=function(t){if(t.interactionId&&!(t.duration<40)){!function(t){"interactionCount"in performance?_n=performance.interactionCount:t.interactionId&&(kn=Math.min(kn,t.interactionId),Sn=Math.max(Sn,t.interactionId),_n=Sn?(Sn-kn)/7+1:0)}(t);var e=In[In.length-1],n=On.get(t.interactionId);if(n||In.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};On.set(r.id,r),In.push(r)}In.sort((function(t,e){return e.latency-t.latency})),In.length>10&&In.splice(10).forEach((function(t){return On.delete(t.id)}))}}},jn=["navigation","resource","longtask","first-input","layout-shift","largest-contentful-paint","event"];function Nn(){try{wn&&wn.disconnect(),wn=new PerformanceObserver(Ze(zn));for(var t=0,e=jn;t<e.length;t++){var n=e[t];PerformanceObserver.supportedEntryTypes.indexOf(n)>=0&&("layout-shift"===n&&H(9,0),wn.observe({type:n,buffered:!0}))}}catch(t){}}function zn(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":bn(r);break;case"resource":var a=r.name;ue(4,An(a)),a!==i.upload&&a!==i.fallback||X(28,r.duration);break;case"longtask":U(7);break;case"first-input":e&&X(10,r.processingStart-r.startTime);break;case"event":e&&"PerformanceEventTiming"in window&&"interactionId"in PerformanceEventTiming.prototype&&(Cn(r),ue(37,Mn().toString()));break;case"layout-shift":e&&!r.hadRecentInput&&H(9,1e3*r.value);break;case"largest-contentful-paint":e&&X(8,r.startTime)}}}(t.getEntries())}var Pn=null;function An(t){return Pn||(Pn=document.createElement("a")),Pn.href=t,Pn.host}var qn=[P,P,P,Object.freeze({__proto__:null,start:function(){yn(),function(){navigator&&navigator.connection&&ue(27,navigator.connection.effectiveType),window.PerformanceObserver&&PerformanceObserver.supportedEntryTypes&&("complete"!==document.readyState?Ge(window,"load",V.bind(this,Nn,0)):Nn())}()},stop:function(){wn&&wn.disconnect(),wn=null,xn(),Pn=null,yn()}}),P];function Dn(t){void 0===t&&(t=null),function(){try{var t=navigator&&"globalPrivacyControl"in navigator&&1==navigator.globalPrivacyControl;return!1===fn&&"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||fn)return!1;for(var e in t)e in i&&(i[e]=t[e])}(t),pn(),kt(),qn.forEach((function(t){return Ze(t.start)()})),null===t&&Xn())}function Rn(){gn()&&(qn.slice().reverse().forEach((function(t){return Ze(t.stop)()})),St(),hn(),void 0!==Un&&(Un[Hn]=function(){(Un[Hn].q=Un[Hn].q||[]).push(arguments),"start"===arguments[0]&&Un[Hn].q.unshift(Un[Hn].q.pop())&&Xn()}))}var Ln=Object.freeze({__proto__:null,consent:xe,consentv2:Ce,dlog:ue,event:q,hashText:x,identify:at,maxMetric:X,measure:Ze,metadata:Te,pause:function(){gn()&&(q("clarity","pause"),null===cn&&(cn=new Promise((function(t){sn=t}))))},queue:Yt,register:z,resume:function(){gn()&&(cn&&(sn(),cn=null,null===un&&dn()),q("clarity","resume"))},schedule:function(t,e){return void 0===e&&(e=0),tt(this,void 0,void 0,(function(){var n,r,a;return et(this,(function(o){for(n=0,r=on;n<r.length;n++)if(r[n].task===t)return[2];return a=new Promise((function(n){on[1===e?"unshift":"push"]({task:t,resolve:n,id:Me()})})),null===un&&null===cn&&dn(),[2,a]}))}))},set:rt,signal:function(t){bt=t},start:Dn,stop:Rn,time:l,upgrade:Q,version:d}),Un=window,Hn="clarity";function Xn(){if(void 0!==Un){if(Un[Hn]&&Un[Hn].v)return console.warn("Error CL001: Multiple Clarity tags detected.");var t=Un[Hn]&&Un[Hn].q||[];for(Un[Hn]=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return Ln[t].apply(Ln,e)},Un[Hn].v=d;t.length>0;)Un[Hn].apply(Un,t.shift())}}Xn()}();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clarity-js",
3
- "version": "0.8.46",
3
+ "version": "0.8.47",
4
4
  "description": "An analytics library that uses web page interactions to generate aggregated insights",
5
5
  "author": "Microsoft Corp.",
6
6
  "license": "MIT",
@@ -37,16 +37,11 @@
37
37
  "@rollup/plugin-node-resolve": "^15.0.0",
38
38
  "@rollup/plugin-terser": "^0.4.0",
39
39
  "@rollup/plugin-typescript": "^11.0.0",
40
- "@types/chai": "^4.3.0",
41
40
  "@types/resize-observer-browser": "^0.1.6",
42
- "chai": "^4.3.0",
43
41
  "del-cli": "^5.0.0",
44
42
  "husky": "^8.0.0",
45
43
  "lint-staged": "^13.1.0",
46
- "playwright": "^1.6.2",
47
44
  "rollup": "^3.0.0",
48
- "ts-mocha": "^11.1.0",
49
- "tslib": "^2.3.0",
50
45
  "tslint": "^6.1.3",
51
46
  "typescript": "^4.3.5"
52
47
  },
@@ -54,7 +49,7 @@
54
49
  "build": "yarn build:clean && yarn build:main",
55
50
  "build:main": "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript",
56
51
  "build:clean": "del-cli build/*",
57
- "test": "ts-mocha -p test/tsconfig.test.json test/stub.test.ts",
52
+ "test": "playwright test --config ../../playwright.config.ts --project=clarity-js",
58
53
  "tslint": "tslint --project ./",
59
54
  "tslint:fix": "tslint --fix --project ./ --force"
60
55
  },
@@ -1,2 +1,2 @@
1
- let version = "0.8.46";
1
+ let version = "0.8.47";
2
2
  export default version;
@@ -0,0 +1,68 @@
1
+ import { expect, test } from "@playwright/test";
2
+ import hash from "@src/core/hash";
3
+
4
+ test.describe("Core Utilities - Hash", () => {
5
+ test("hash function should generate consistent hash for same input", () => {
6
+ const input = "test-string";
7
+ const hash1 = hash(input);
8
+ const hash2 = hash(input);
9
+
10
+ expect(hash1).toBe(hash2);
11
+ expect(hash1).toBeTruthy();
12
+ expect(typeof hash1).toBe("string");
13
+ });
14
+
15
+ test("hash function should generate different hashes for different inputs", () => {
16
+ const hash1 = hash("input1");
17
+ const hash2 = hash("input2");
18
+ const hash3 = hash("completely-different-input");
19
+
20
+ expect(hash1).not.toBe(hash2);
21
+ expect(hash2).not.toBe(hash3);
22
+ expect(hash1).not.toBe(hash3);
23
+ });
24
+
25
+ test("hash function should respect precision parameter", () => {
26
+ const input = "test-precision";
27
+ const hashNoPrecision = hash(input);
28
+ const hash16 = hash(input, 16);
29
+ const hash8 = hash(input, 8);
30
+
31
+ expect(hashNoPrecision).toBeTruthy();
32
+ expect(hash16).toBeTruthy();
33
+ expect(hash8).toBeTruthy();
34
+
35
+ // Hash with precision should be different from no precision
36
+ expect(hashNoPrecision).not.toBe(hash16);
37
+
38
+ // Verify precision limits: 2^16 = 65536, 2^8 = 256
39
+ const hash16Num = parseInt(hash16, 36);
40
+ const hash8Num = parseInt(hash8, 36);
41
+ expect(hash16Num).toBeLessThan(65536);
42
+ expect(hash8Num).toBeLessThan(256);
43
+ });
44
+
45
+ test("hash function should handle empty strings", () => {
46
+ const result = hash("");
47
+ expect(result).toBeTruthy();
48
+ expect(typeof result).toBe("string");
49
+ });
50
+
51
+ test("hash function should handle special characters", () => {
52
+ const hash1 = hash("test@example.com");
53
+ const hash2 = hash("test#$%^&*()");
54
+ const hash3 = hash("🎉🎊✨");
55
+
56
+ expect(hash1).toBeTruthy();
57
+ expect(hash2).toBeTruthy();
58
+ expect(hash3).toBeTruthy();
59
+ expect(hash1).not.toBe(hash2);
60
+ expect(hash2).not.toBe(hash3);
61
+ });
62
+
63
+ test("hash function should produce base36 output", () => {
64
+ const result = hash("test-base36");
65
+ // Base36 should only contain 0-9 and a-z
66
+ expect(/^[0-9a-z]+$/.test(result)).toBe(true);
67
+ });
68
+ });
@@ -0,0 +1,42 @@
1
+ import { expect, test } from "@playwright/test";
2
+ import { start, stop, time } from "@src/core/time";
3
+
4
+ test.describe("Time Utilities", () => {
5
+ test("time module should start and stop", () => {
6
+ start();
7
+ const time1 = time();
8
+
9
+ expect(time1).toBeGreaterThanOrEqual(0);
10
+
11
+ stop();
12
+ const time2 = time();
13
+
14
+ // After stop, time should still work but use different baseline
15
+ expect(time2).toBeGreaterThanOrEqual(0);
16
+ });
17
+
18
+ test("time function should track elapsed time", async () => {
19
+ start();
20
+ const time1 = time();
21
+
22
+ // Wait a bit
23
+ await new Promise((resolve) => setTimeout(resolve, 50));
24
+
25
+ const time2 = time();
26
+
27
+ expect(time2).toBeGreaterThan(time1);
28
+ expect(time2 - time1).toBeGreaterThanOrEqual(50);
29
+
30
+ stop();
31
+ });
32
+
33
+ test("time function should handle null event parameter", () => {
34
+ start();
35
+ const result = time(null);
36
+
37
+ expect(result).toBeGreaterThanOrEqual(0);
38
+ expect(typeof result).toBe("number");
39
+
40
+ stop();
41
+ });
42
+ });
package/tsconfig.json CHANGED
@@ -1,21 +1,12 @@
1
1
  {
2
+ "extends": "../../tsconfig.json",
2
3
  "compilerOptions": {
3
- "module": "esnext",
4
- "target": "es5",
5
- "lib": ["es6", "dom", "es2016", "es2017"],
6
- "moduleResolution": "node",
7
- "forceConsistentCasingInFileNames": true,
8
- "noImplicitReturns": true,
9
- "noUnusedLocals": true,
10
- "noUnusedParameters": true,
11
- "resolveJsonModule": true,
12
- "esModuleInterop": true,
13
4
  "baseUrl": ".",
14
5
  "paths": {
15
6
  "@src/*": ["src/*"],
16
7
  "@clarity-types/*": ["types/*"]
17
8
  }
18
9
  },
19
- "include":["src/**/*.ts","types/**/*.d.ts", "rollup.config.ts"],
20
- "exclude": ["test", "node_modules", "build"]
10
+ "include":["src/**/*.ts", "types/**/*.d.ts", "test/**/*.ts", "rollup.config.ts"],
11
+ "exclude": ["node_modules", "build"]
21
12
  }
package/test/core.test.ts DELETED
@@ -1,139 +0,0 @@
1
- import { assert } from 'chai';
2
- import { Browser, Page } from 'playwright';
3
- import { changes, clicks, inputs, launch, markup, node, text } from './helper';
4
- import { decode } from "clarity-decode";
5
-
6
- let browser: Browser;
7
- let page: Page;
8
-
9
- describe('Core Tests', () => {
10
- before(async () => {
11
- browser = await launch();
12
- });
13
-
14
- beforeEach(async () => {
15
- page = await browser.newPage();
16
- await page.goto('about:blank');
17
- });
18
-
19
- afterEach(async () => {
20
- await page.close();
21
- });
22
-
23
- after(async () => {
24
- await browser.close();
25
- browser = null;
26
- });
27
-
28
- it('should mask sensitive content by default', async () => {
29
- let encoded: string[] = await markup(page, "core.html");
30
- let decoded = encoded.map(x => decode(x));
31
- let heading = text(decoded, "one");
32
- let address = text(decoded, "two");
33
- let email = node(decoded, "attributes.id", "eml");
34
- let password = node(decoded, "attributes.id", "pwd");
35
- let search = node(decoded, "attributes.id", "search");
36
- let card = node(decoded, "attributes.id", "cardnum");
37
- let option = text(decoded, "option1");
38
- let textarea = text(decoded, "textarea");
39
- let click = clicks(decoded)[0];
40
- let input = inputs(decoded)[0];
41
- let group = changes(decoded);
42
-
43
- // Non-sensitive fields continue to pass through with sensitive bits masked off
44
- assert.equal(heading, "Thanks for your order #▫▪▪▫▫▫▪▪");
45
-
46
- // Sensitive fields, including input fields, are randomized and masked
47
- assert.equal(address, "•••••• ••••• ••••• ••••• ••••• •••••");
48
- assert.equal(email.attributes.value, "••••• •••• •••• ••••");
49
- assert.equal(password.attributes.value, "••••");
50
- assert.equal(search.attributes.value, "••••• •••• ••••");
51
- assert.equal(card.attributes.value, "•••••");
52
- assert.equal(textarea, "••••• •••••");
53
- assert.equal(option, "• •••••");
54
-
55
- // Clicked text and input value should be consistent with uber masking configuration
56
- assert.equal(click.data.text, "Hello ▪▪▪▫▪");
57
- assert.equal(input.data.value, "••••• •••• •••• ••••");
58
- assert.equal(group.length, 2);
59
- // Search change - we should captured mangled input and hash
60
- assert.equal(group[0].data.type, "search");
61
- assert.equal(group[0].data.value, "••••• •••• •••• ••••");
62
- assert.equal(group[0].data.checksum, "4y7m6");
63
- // Password change - we should capture placholder value and empty hash
64
- assert.equal(group[1].data.type, "password");
65
- assert.equal(group[1].data.value, "••••");
66
- assert.equal(group[1].data.checksum, "");
67
- });
68
-
69
- it('should mask all text in strict mode', async () => {
70
- let encoded: string[] = await markup(page, "core.html", { content: false });
71
- let decoded = encoded.map(x => decode(x));
72
- let heading = text(decoded, "one");
73
- let address = text(decoded, "two");
74
- let email = node(decoded, "attributes.id", "eml");
75
- let password = node(decoded, "attributes.id", "pwd");
76
- let search = node(decoded, "attributes.id", "search");
77
- let card = node(decoded, "attributes.id", "cardnum");
78
- let click = clicks(decoded)[0];
79
- let input = inputs(decoded)[0];
80
- let option = text(decoded, "option1");
81
-
82
- // All fields are randomized and masked
83
- assert.equal(heading, "• ••••• ••••• ••••• ••••• •••••");
84
- assert.equal(address, "•••••• ••••• ••••• ••••• ••••• •••••");
85
- assert.equal(email.attributes.value, "••••• •••• •••• ••••");
86
- assert.equal(password.attributes.value, "••••");
87
- assert.equal(search.attributes.value, "••••• •••• ••••");
88
- assert.equal(card.attributes.value, "•••••");
89
- assert.equal(option, "• •••••");
90
-
91
- // Clicked text and input value should also be masked in strict mode
92
- assert.equal(click.data.text, "••••• •••• ••••");
93
- assert.equal(input.data.value, "••••• •••• •••• ••••");
94
- });
95
-
96
- it('should unmask non-sensitive text in relaxed mode', async () => {
97
- let encoded: string[] = await markup(page, "core.html", { unmask: ["body"] });
98
- let decoded = encoded.map(x => decode(x));
99
- let heading = text(decoded, "one");
100
- let address = text(decoded, "two");
101
- let email = node(decoded, "attributes.id", "eml");
102
- let password = node(decoded, "attributes.id", "pwd");
103
- let search = node(decoded, "attributes.id", "search");
104
- let card = node(decoded, "attributes.id", "cardnum");
105
- let click = clicks(decoded)[0];
106
- let input = inputs(decoded)[0];
107
- let option = text(decoded, "option1");
108
-
109
- // Text flows through unmasked for non-sensitive fields, with exception of input fields
110
- assert.equal(heading, "Thanks for your order #2AB700GH");
111
- assert.equal(address, "1 Microsoft Way, Redmond, WA - 98052");
112
- assert.equal(search.attributes.value, "••••• •••• ••••");
113
- assert.equal(option, "• •••••");
114
-
115
- // Sensitive fields are still masked
116
- assert.equal(email.attributes.value, "••••• •••• •••• ••••");
117
- assert.equal(password.attributes.value, "••••");
118
- assert.equal(card.attributes.value, "•••••");
119
-
120
- // Clicked text comes through unmasked in relaxed mode but input is still masked
121
- assert.equal(click.data.text, "Hello Wor1d");
122
- assert.equal(input.data.value, "••••• •••• •••• ••••");
123
- });
124
-
125
- it('should respect mask config even in relaxed mode', async () => {
126
- let encoded: string[] = await markup(page, "core.html", { mask: ["#mask"], unmask: ["body"] });
127
- let decoded = encoded.map(x => decode(x));
128
- let subtree = text(decoded, "child");
129
- let click = clicks(decoded)[0];
130
- let input = inputs(decoded)[0];
131
-
132
- // Masked sub-trees continue to stay masked
133
- assert.equal(subtree, "••••• •••••");
134
-
135
- // Clicked text is masked due to masked configuration and input value is also masked
136
- assert.equal(click.data.text, "••••• •••• ••••");
137
- assert.equal(input.data.value, "••••• •••• •••• ••••");
138
- });
139
- });
package/test/helper.ts DELETED
@@ -1,162 +0,0 @@
1
- import { Core, Data, decode, Interaction, Layout } from "clarity-decode";
2
- import * as fs from 'fs';
3
- import * as url from 'url';
4
- import * as path from 'path';
5
- import { Browser, Page, chromium } from 'playwright';
6
-
7
- export async function launch(): Promise<Browser> {
8
- return chromium.launch({ headless: true, args: ['--no-sandbox'] });
9
- }
10
-
11
- export async function markup(page: Page, file: string, override: Core.Config = null): Promise<string[]> {
12
- const htmlPath = path.resolve(__dirname, `./html/${file}`);
13
- const htmlFileUrl = url.pathToFileURL(htmlPath).toString();
14
- const html = fs.readFileSync(htmlPath, 'utf8');
15
- await Promise.all([
16
- page.goto(htmlFileUrl),
17
- page.waitForNavigation()
18
- ]);
19
- await page.setContent(html.replace("</body>", `
20
- <script>
21
- window.payloads = [];
22
- ${fs.readFileSync(path.resolve(__dirname, `../build/clarity.min.js`), 'utf8')};
23
- clarity("start", ${config(override)});
24
- </script>
25
- </body>
26
- `));
27
- await page.hover("#two");
28
- await page.click("#child");
29
- await page.locator('#search').fill('');
30
- await page.locator('#search').type('query with numb3rs');
31
- await page.locator('#pwd').type('p1ssw0rd');
32
- await page.locator('#eml').fill('');
33
- await page.locator('#eml').type('hello@world.com');
34
- await page.waitForFunction("payloads && payloads.length > 2");
35
- return await page.evaluate('payloads');
36
- }
37
-
38
- export function clicks(decoded: Data.DecodedPayload[]): Interaction.ClickEvent[] {
39
- let output: Interaction.ClickEvent[] = [];
40
- for (let i = decoded.length - 1; i >= 0; i--) {
41
- if (decoded[i].click) {
42
- for (let j = 0; j < decoded[i].click.length;j++)
43
- {
44
- output.push(decoded[i].click[j]);
45
- }
46
- }
47
- }
48
- return output;
49
- }
50
-
51
- export function inputs(decoded: Data.DecodedPayload[]): Interaction.InputEvent[] {
52
- let output: Interaction.InputEvent[] = [];
53
- for (let i = decoded.length - 1; i >= 0; i--) {
54
- if (decoded[i].input) {
55
- for (let j = 0; j < decoded[i].input.length;j++)
56
- {
57
- output.push(decoded[i].input[j]);
58
- }
59
- }
60
- }
61
- return output;
62
- }
63
-
64
- export function changes(decoded: Data.DecodedPayload[]): Interaction.ChangeEvent[] {
65
- let output: Interaction.ChangeEvent[] = [];
66
- for (let i = decoded.length - 1; i >= 0; i--) {
67
- if (decoded[i].change) {
68
- for (let j = 0; j < decoded[i].change.length;j++)
69
- {
70
- output.push(decoded[i].change[j]);
71
- }
72
- }
73
- }
74
- return output;
75
- }
76
-
77
- export function node(decoded: Data.DecodedPayload[], key: string, value: string | number, tag: string = null): Layout.DomData {
78
- let sub = null;
79
-
80
- // Exploding nested keys into key and sub key
81
- if (key.indexOf(".") > 0) {
82
- const parts = key.split(".");
83
- if (parts.length === 2) {
84
- key = parts[0];
85
- sub = parts[1];
86
- }
87
- }
88
-
89
- // Walking over the decoded payload to find the right match
90
- for (let i = decoded.length - 1; i >= 0; i--) {
91
- if (decoded[i].dom) {
92
- for (let j = 0; j < decoded[i].dom.length; j++) {
93
- if (decoded[i].dom[j].data) {
94
- for (let k = 0; k < decoded[i].dom[j].data.length; k++) {
95
- let d = decoded[i].dom[j].data[k];
96
- if ((sub && d[key] && d[key][sub] === value) ||
97
- (d[key] && d[key] === value)) {
98
- if ((tag && d.tag === tag) || tag === null) {
99
- return d;
100
- }
101
- }
102
- }
103
- }
104
- }
105
- }
106
- }
107
- return null;
108
- }
109
-
110
- export function text(decoded: Data.DecodedPayload[], id: string): string {
111
- let parent = node(decoded, "attributes.id", id);
112
- if (parent) {
113
- let child = node(decoded, "parent", parent.id, "*T");
114
- if (child && child.value) {
115
- return child.value;
116
- }
117
- }
118
- return null;
119
- }
120
-
121
-
122
- function config(override: Core.Config): string {
123
- const settings = {
124
- delay: 100,
125
- content: true,
126
- fraud: [],
127
- regions: [],
128
- mask: [],
129
- unmask: [],
130
- upload: payload => { window["payloads"].push(payload); window["clarity"]("upgrade", "test"); }
131
- }
132
-
133
- // Process overrides
134
- if (override){
135
- for (let key of Object.keys(override)) {
136
- settings[key] = override[key];
137
- }
138
- }
139
-
140
- // Serialize configuration
141
- let output = "";
142
- for (let key of Object.keys(settings)) {
143
- switch (key) {
144
- case "upload":
145
- output += `${JSON.stringify(key)}: ${settings[key].toString()},`;
146
- break;
147
- case "projectId":
148
- case "mask":
149
- case "unmask":
150
- case "regions":
151
- case "cookies":
152
- case "fraud":
153
- output += `${JSON.stringify(key)}: ${JSON.stringify(settings[key])},`;
154
- break;
155
- default:
156
- output += `${JSON.stringify(key)}: ${settings[key]},`;
157
- break;
158
- }
159
- }
160
- output += `"projectId": "test"`;
161
- return "{" + output + "}";
162
- }