@axeptio/behavior-detection 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";(()=>{var R=class{constructor(e){this.strategies=new Map,this.isTracking=!1,this.isPausedByVisibility=!1,this.tickInterval=null,this.tickIntervalMs=1e3,this.pauseOnHidden=!0,this.visibilityChangeHandler=null,this.confidenceScore=0,this.CONFIDENCE_TARGET=1,this.CONFIDENCE_DECAY=.95,e?.interval&&(this.tickIntervalMs=e.interval),e?.pauseOnHidden!==void 0&&(this.pauseOnHidden=e.pauseOnHidden)}addStrategy(e,t){let i={strategy:e,weight:t??e.defaultWeight,enabled:!0};return this.strategies.set(e.name,i),e.setEventCallback&&e.setEventCallback(s=>{this.onStrategyEvent(s,i.weight)}),this.isTracking&&e.start(),this}onStrategyEvent(e,t){this.confidenceScore*=this.CONFIDENCE_DECAY;let i=e.weight*t;this.confidenceScore=Math.min(this.CONFIDENCE_TARGET,this.confidenceScore+i)}removeStrategy(e){let t=this.strategies.get(e);return t&&(this.isTracking&&t.strategy.stop(),this.strategies.delete(e)),this}setStrategyEnabled(e,t){let i=this.strategies.get(e);return i&&(i.enabled=t,!t&&this.isTracking&&i.strategy.stop(),t&&this.isTracking&&i.strategy.start()),this}getStrategies(){return this.strategies}start(){if(!this.isTracking){if(this.isTracking=!0,this.pauseOnHidden&&typeof document<"u"&&(this.visibilityChangeHandler=this.handleVisibilityChange.bind(this),document.addEventListener("visibilitychange",this.visibilityChangeHandler),document.hidden)){this.isPausedByVisibility=!0;return}for(let[e,t]of this.strategies)t.enabled&&t.strategy.start();this.startTick()}}stop(){if(this.isTracking){this.isTracking=!1,this.isPausedByVisibility=!1,this.visibilityChangeHandler&&typeof document<"u"&&(document.removeEventListener("visibilitychange",this.visibilityChangeHandler),this.visibilityChangeHandler=null);for(let[e,t]of this.strategies)t.strategy.stop();this.stopTick()}}reset(){this.confidenceScore=0;for(let[e,t]of this.strategies)t.strategy.reset()}async score(e={}){let t=this.calculateStrategyScore(),i={score:t.overall};return e.breakdown&&(i.breakdown=t),i}isActive(){return this.isTracking}isPaused(){return this.isPausedByVisibility}getEventCount(){var e,t;let i={};for(let[s,o]of this.strategies){let n=(t=(e=o.strategy).getDebugInfo)===null||t===void 0?void 0:t.call(e);n?.eventCount!==void 0&&(i[s]=n.eventCount)}return i}getStrategyDebugInfo(){let e={};for(let[t,i]of this.strategies)i.strategy.getDebugInfo&&(e[t]=i.strategy.getDebugInfo());return e}getConfidence(){return Math.min(1,this.confidenceScore)}hasConfidentData(e=.3){return this.getConfidence()>=e}destroy(){this.stop(),this.strategies.clear()}handleVisibilityChange(){if(this.isTracking){if(document.hidden){if(!this.isPausedByVisibility){this.isPausedByVisibility=!0;for(let[e,t]of this.strategies)t.enabled&&t.strategy.stop();this.stopTick()}}else if(this.isPausedByVisibility){this.isPausedByVisibility=!1;for(let[e,t]of this.strategies)t.enabled&&t.strategy.start();this.startTick()}}}startTick(){this.tickInterval===null&&(this.tickInterval=window.setInterval(()=>{let e=Date.now();for(let[t,i]of this.strategies)i.enabled&&i.strategy.onTick&&i.strategy.onTick(e)},this.tickIntervalMs))}stopTick(){this.tickInterval!==null&&(clearInterval(this.tickInterval),this.tickInterval=null)}calculateStrategyScore(){let e={},t={},i=0,s=0;for(let[n,a]of this.strategies){if(!a.enabled)continue;let r=a.strategy.score();e[n]=r,t[n]=a.weight,r!=null&&(i+=a.weight,s+=r*a.weight)}let o=i>0?s/i:.5;return{overall:Math.max(0,Math.min(1,o)),factors:e,weights:t}}};var g=class{constructor(){this.eventCallback=null}setEventCallback(e){this.eventCallback=e}notifyEvent(e){this.eventCallback&&this.eventCallback({strategy:this.name,weight:e,timestamp:Date.now()})}};function F(f,e=0,t=1){return 1/(1+Math.exp(-t*(f-e)))}function E(f,e=0,t=1){return 1-F(f,e,t)}function y(f,e=0,t=1){let i=-Math.pow(f-e,2)/(2*t*t);return Math.exp(i)}function S(f){if(f.length===0)return{mean:0,variance:0,stdDev:0,cv:0};let e=f.reduce((o,n)=>o+n,0)/f.length,t=f.reduce((o,n)=>o+(n-e)**2,0)/f.length,i=Math.sqrt(t),s=e>0?i/e:0;return{mean:e,variance:t,stdDev:i,cv:s}}function M(f){if(f.length<2)return;let e=new Set(f.map(s=>Math.round(s/10))).size,t=e===1;return{statistics:S(f),uniqueCount:e,allIdentical:t}}function b(f){return f<.05?.1:f>2?.3:y(f,.45,.35)}var k=class extends g{constructor(e){super(),this.name="mouse",this.defaultWeight=.3,this.distanceSeries=[],this.angleSeries=[],this.lastPosition=null,this.lastAngle=0,this.cumulativeAngle=0,this.rollingWindowMs=5e3,this.listener=null,this.leaveListener=null,this.enterListener=null,this.isActive=!1,this.screenDiagonal=1,this.entryPoints=[],this.microMovements=[],this.STILLNESS_WINDOW=500,e?.rollingWindow!==void 0&&(this.rollingWindowMs=e.rollingWindow)}start(){if(this.isActive)return;this.isActive=!0;let e=window.innerWidth,t=window.innerHeight;this.screenDiagonal=Math.sqrt(e*e+t*t),this.listener=i=>{let s=i,o=Date.now(),n={x:s.clientX,y:s.clientY,timestamp:o};if(this.lastPosition){let a=n.x-this.lastPosition.x,r=n.y-this.lastPosition.y,c=Math.sqrt(a*a+r*r);if(c>=1&&c<=5){this.microMovements.push({dx:a,dy:r,timestamp:o});let v=o-this.STILLNESS_WINDOW;for(;this.microMovements.length>0&&this.microMovements[0].timestamp<v;)this.microMovements.shift()}let l=c/this.screenDiagonal;if(l>.001){let v=Math.atan2(r,a),d=v-this.lastAngle;for(;d>Math.PI;)d-=2*Math.PI;for(;d<-Math.PI;)d+=2*Math.PI;this.cumulativeAngle+=d,this.lastAngle=v,this.distanceSeries.push({value:l,timestamp:o}),this.angleSeries.push({value:this.cumulativeAngle,timestamp:o}),this.notifyEvent(Math.min(1,l*100))}let h=o-this.rollingWindowMs;for(;this.distanceSeries.length>0&&this.distanceSeries[0].timestamp<h;)this.distanceSeries.shift(),this.angleSeries.shift()}this.lastPosition=n},document.addEventListener("mousemove",this.listener,{passive:!0}),this.enterListener=i=>{let s=i,o=Date.now(),n=s.clientX,a=s.clientY,r=window.innerWidth,c=window.innerHeight,l=a,h=c-a,v=n,d=r-n,p=Math.min(l,h,v,d),u,m=50;p<m?l<=p?u="top":h<=p?u="bottom":v<=p?u="left":u="right":n>r*.35&&n<r*.65&&a>c*.35&&a<c*.65?u="center":l<m*2&&v<m*2||l<m*2&&d<m*2||h<m*2&&v<m*2||h<m*2&&d<m*2?u="corner":l<h&&l<v&&l<d?u="top":h<v&&h<d?u="bottom":v<d?u="left":u="right",this.entryPoints.push({x:n,y:a,timestamp:o,edgeDistance:p,entryEdge:u}),this.entryPoints.length>20&&this.entryPoints.shift()},document.addEventListener("mouseenter",this.enterListener,{passive:!0}),this.leaveListener=()=>{this.distanceSeries=[],this.angleSeries=[],this.lastPosition=null,this.lastAngle=0,this.cumulativeAngle=0,this.microMovements=[]},document.addEventListener("mouseleave",this.leaveListener,{passive:!0})}stop(){this.isActive&&(this.isActive=!1,this.listener&&(document.removeEventListener("mousemove",this.listener),this.listener=null),this.leaveListener&&(document.removeEventListener("mouseleave",this.leaveListener),this.leaveListener=null),this.enterListener&&(document.removeEventListener("mouseenter",this.enterListener),this.enterListener=null))}reset(){this.distanceSeries=[],this.angleSeries=[],this.lastPosition=null,this.lastAngle=0,this.cumulativeAngle=0,this.entryPoints=[],this.microMovements=[]}score(){if(!(this.distanceSeries.length<10))return this.detectMousePatterns()}detectMousePatterns(){if(this.distanceSeries.length<10)return;let e=0,t=0,i=this.distanceSeries.map(a=>a.value);if(i.length>=3){let a=S(i);e+=y(a.cv,.9,.35),t++}let s=this.angleSeries.map(a=>a.value);if(s.length>=3){let a=[];for(let c=1;c<s.length;c++)a.push(Math.abs(s[c]-s[c-1]));let r=a.reduce((c,l)=>c+l,0)/a.length;e+=y(r,.15,.12),t++}let o=this.scoreEntryPoints();o!==void 0&&(e+=o,t++);let n=this.scoreMicroMovements();return n!==void 0&&(e+=n,t++),t>0?e/t:void 0}scoreEntryPoints(){if(this.entryPoints.length<2)return;let e=0,t=0,i=0,s=0;for(let a of this.entryPoints)a.x<5&&a.y<5?(s++,e++):a.entryEdge==="center"?(t++,e++):a.entryEdge==="corner"&&(i++,a.edgeDistance<10&&e++);let o=this.entryPoints.length,n=e/o;return s>=2||s/o>=.5?.1:t/o>=.5?.2:n>=.7?.3:n>=.5?.5:n>=.3?.7:1}scoreMicroMovements(){if(this.distanceSeries.length<20)return;let e=this.microMovements.length,t=this.distanceSeries[0],s=this.distanceSeries[this.distanceSeries.length-1].timestamp-t.timestamp;if(s<1e3)return;let o=e/s*1e3;return e===0?.3:o<1?.5:o<5?.7:o>=5&&o<=30?1:.8}getMicroMovementCount(){return this.microMovements.length}getLastPosition(){return this.lastPosition?{x:this.lastPosition.x,y:this.lastPosition.y}:null}getDebugInfo(){return{eventCount:this.distanceSeries.length,rollingWindow:this.rollingWindowMs,isActive:this.isActive,distanceSeries:this.distanceSeries,angleSeries:this.angleSeries,entryPoints:this.entryPoints,microMovementCount:this.microMovements.length,lastPosition:this.lastPosition}}};var T=class extends g{constructor(e){super(),this.name="scroll",this.defaultWeight=.15,this.distanceSeries=[],this.velocitySeries=[],this.lastScrollY=null,this.lastTimestamp=0,this.rollingWindowMs=5e3,this.documentHeight=1,this.listener=null,this.isActive=!1,e?.rollingWindow!==void 0&&(this.rollingWindowMs=e.rollingWindow)}start(){this.isActive||(this.isActive=!0,this.documentHeight=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,1),this.listener=e=>{let t=window.scrollY,i=Date.now();if(this.lastScrollY===null){this.lastScrollY=t,this.lastTimestamp=i;return}let s=t-this.lastScrollY,o=i-this.lastTimestamp;if(s===0)return;let n=Math.abs(s)/this.documentHeight;if(o>0){let a=n/o;this.distanceSeries.push({value:n,timestamp:i}),this.velocitySeries.push({value:a,timestamp:i}),this.notifyEvent(Math.min(1,n*10));let r=i-this.rollingWindowMs;for(;this.distanceSeries.length>0&&this.distanceSeries[0].timestamp<r;)this.distanceSeries.shift(),this.velocitySeries.shift()}this.lastScrollY=t,this.lastTimestamp=i},window.addEventListener("scroll",this.listener,{passive:!0}))}stop(){this.isActive&&(this.isActive=!1,this.listener&&(window.removeEventListener("scroll",this.listener),this.listener=null))}reset(){this.distanceSeries=[],this.velocitySeries=[],this.lastScrollY=null,this.lastTimestamp=0}score(){if(!(this.distanceSeries.length<2))return this.detectScrollPatterns()}detectScrollPatterns(){if(this.distanceSeries.length<2)return;let e=0,t=0,i=this.distanceSeries.map(n=>n.value);if(i.length>=2&&new Set(i.map(a=>Math.round(a*1e3))).size===1)return .05;if(i.length>=2){let n=S(i);e+=y(n.cv,1,.4),t++}let s=this.velocitySeries.map(n=>n.value);if(s.length>=2){let n=S(s);e+=y(n.cv,1.2,.5),t++}let o=i.filter(n=>n>.1).length;if(i.length>0){let n=o/i.length;e+=E(n,.3,15),t++}return t>0?e/t:void 0}getDebugInfo(){return{eventCount:this.distanceSeries.length,rollingWindow:this.rollingWindowMs,isActive:this.isActive,distanceSeries:this.distanceSeries,velocitySeries:this.velocitySeries}}};var C=class extends g{constructor(e){super(),this.name="click",this.defaultWeight=.3,this.events=[],this.targetSelectors=["button","a",'input[type="submit"]','[role="button"]'],this.lastMousePosition=null,this.mouseListener=null,this.clickListeners=new Map,this.isActive=!1,e?.targetSelectors&&(this.targetSelectors=e.targetSelectors)}start(){this.isActive||(this.isActive=!0,this.mouseListener=e=>{let t=e;this.lastMousePosition={x:t.clientX,y:t.clientY,timestamp:Date.now()}},document.addEventListener("mousemove",this.mouseListener,{passive:!0}),this.attachClickListeners())}addTarget(e){this.targetSelectors.includes(e)||(this.targetSelectors.push(e),this.isActive&&this.attachClickListenersForSelector(e))}attachClickListeners(){this.targetSelectors.forEach(e=>{this.attachClickListenersForSelector(e)})}attachClickListenersForSelector(e){document.querySelectorAll(e).forEach(i=>{if(this.clickListeners.has(i))return;let s=o=>{var n,a;let r=o,c=Date.now(),l=i.getBoundingClientRect(),h=l.top>=0&&l.left>=0&&l.bottom<=window.innerHeight&&l.right<=window.innerWidth,v=0,d=-1;if(this.lastMousePosition){let u=r.clientX-this.lastMousePosition.x,m=r.clientY-this.lastMousePosition.y;v=Math.sqrt(u*u+m*m),d=c-this.lastMousePosition.timestamp}let p;if(!this.lastMousePosition)p="no-mouse-data";else{let u=this.lastMousePosition.x,m=this.lastMousePosition.y;if(!(u>=l.left&&u<=l.right&&m>=l.top&&m<=l.bottom))p="outside";else{let L=l.left+l.width/2,W=l.top+l.height/2;Math.sqrt((u-L)**2+(m-W)**2)<2?p="dead-center":p="over-element"}}this.events.push({clickX:r.clientX,clickY:r.clientY,mouseX:(n=this.lastMousePosition)===null||n===void 0?void 0:n.x,mouseY:(a=this.lastMousePosition)===null||a===void 0?void 0:a.y,rect:l,inViewport:h,position:p,timestamp:c,mouseClickDelta:v,timeSinceMouseMove:d,isTrusted:r.isTrusted}),this.notifyEvent(1)};i.addEventListener("click",s),this.clickListeners.set(i,s)})}stop(){this.isActive&&(this.isActive=!1,this.mouseListener&&(document.removeEventListener("mousemove",this.mouseListener),this.mouseListener=null),this.clickListeners.forEach((e,t)=>{t.removeEventListener("click",e)}),this.clickListeners.clear())}reset(){this.events=[],this.lastMousePosition=null}score(){let e=this.events.length;if(e===0)return;let t=0,i=0,s=0,o=0,n=0,a=0;for(let l of this.events){switch(l.position){case"no-mouse-data":t+=0;break;case"outside":t+=0;break;case"dead-center":t+=.5;break;case"over-element":t+=1;break}l.mouseClickDelta>=0&&(i++,l.mouseClickDelta>5&&s++),l.timeSinceMouseMove>=0&&(o++,(l.timeSinceMouseMove<10||l.timeSinceMouseMove>2e3)&&n++),l.isTrusted||a++}let r=0,c=0;if(r+=t/e,c++,i>=2){let l=s/i,h;l>=.8?h=.1:l>=.5?h=.3:l>=.3?h=.5:l>0?h=.7:h=1,r+=h,c++}if(o>=2){let l=n/o,h;l>=.8?h=.2:l>=.5?h=.4:l>=.3?h=.6:l>0?h=.8:h=1,r+=h,c++}if(e>=2){let l=a/e,h;l>=.5?h=.1:l>0?h=.3:h=1,r+=h,c++}return c>0?r/c:void 0}getDebugInfo(){return{eventCount:this.events.length,positions:{noMouseData:this.events.filter(e=>e.position==="no-mouse-data").length,outside:this.events.filter(e=>e.position==="outside").length,deadCenter:this.events.filter(e=>e.position==="dead-center").length,overElement:this.events.filter(e=>e.position==="over-element").length},inViewport:this.events.filter(e=>e.inViewport).length,trackedElements:this.clickListeners.size,mouseClickDeltas:this.events.map(e=>e.mouseClickDelta),timeSinceMouseMoves:this.events.map(e=>e.timeSinceMouseMove),untrustedClicks:this.events.filter(e=>!e.isTrusted).length}}};var A=class extends g{constructor(e){super(),this.name="tap",this.defaultWeight=.35,this.events=[],this.targetSelectors=["button","a",'input[type="submit"]','[role="button"]'],this.touchStartListeners=new Map,this.touchEndListeners=new Map,this.activeTouches=new Map,this.isActive=!1,e?.targetSelectors&&(this.targetSelectors=e.targetSelectors)}start(){this.isActive||(this.isActive=!0,this.attachTouchListeners())}addTarget(e){this.targetSelectors.includes(e)||(this.targetSelectors.push(e),this.isActive&&this.attachTouchListenersForSelector(e))}attachTouchListeners(){this.targetSelectors.forEach(e=>{this.attachTouchListenersForSelector(e)})}attachTouchListenersForSelector(e){document.querySelectorAll(e).forEach(i=>{if(this.touchStartListeners.has(i))return;let s=n=>{let a=n;if(a.touches.length!==1)return;let r=a.touches[0];this.activeTouches.set(r.identifier,{x:r.clientX,y:r.clientY,timestamp:Date.now(),element:i})},o=n=>{let a=n;if(a.changedTouches.length!==1)return;let r=a.changedTouches[0],c=this.activeTouches.get(r.identifier);if(!c||c.element!==i)return;let l=Date.now(),h=l-c.timestamp,v=r.clientX-c.x,d=r.clientY-c.y,p=Math.sqrt(v*v+d*d),u=i.getBoundingClientRect(),m=u.top>=0&&u.left>=0&&u.bottom<=window.innerHeight&&u.right<=window.innerWidth,w=r.clientX,L=r.clientY,W=w>=u.left&&w<=u.right&&L>=u.top&&L<=u.bottom,H;if(!W)H="outside";else{let N=u.left+u.width/2,V=u.top+u.height/2;H=Math.sqrt((w-N)**2+(L-V)**2)<2?"dead-center":"over-element"}this.events.push({x:w,y:L,rect:u,inViewport:m,position:H,duration:h,movement:p,timestamp:l}),this.notifyEvent(1),this.activeTouches.delete(r.identifier)};i.addEventListener("touchstart",s,{passive:!0}),i.addEventListener("touchend",o,{passive:!0}),this.touchStartListeners.set(i,s),this.touchEndListeners.set(i,o)})}stop(){this.isActive&&(this.isActive=!1,this.touchStartListeners.forEach((e,t)=>{t.removeEventListener("touchstart",e)}),this.touchStartListeners.clear(),this.touchEndListeners.forEach((e,t)=>{t.removeEventListener("touchend",e)}),this.touchEndListeners.clear(),this.activeTouches.clear())}reset(){this.events=[],this.activeTouches.clear()}score(){if(this.events.length===0)return;let e=0,t=0,i=0;for(let n of this.events)switch(n.position){case"outside":i+=0;break;case"dead-center":i+=.5;break;case"over-element":i+=1;break}e+=i/this.events.length,t++;let s=this.events.map(n=>n.duration);if(s.length>=2){let n=M(s);if(n){let{statistics:a,allIdentical:r}=n;if(r)return .05;e+=b(a.cv),t++,e+=y(a.mean,95,40),t++}}let o=this.events.map(n=>n.movement);if(o.length>0){let n=o.reduce((a,r)=>a+r,0)/o.length;e+=y(n,2,3),t++}if(this.events.length>=3){let n=[];for(let r=1;r<this.events.length;r++)n.push(this.events[r].timestamp-this.events[r-1].timestamp);let a=M(n);a&&!a.allIdentical&&(e+=b(a.statistics.cv),t++)}return t>0?e/t:void 0}getDebugInfo(){return{eventCount:this.events.length,positions:{outside:this.events.filter(e=>e.position==="outside").length,deadCenter:this.events.filter(e=>e.position==="dead-center").length,overElement:this.events.filter(e=>e.position==="over-element").length},durations:this.events.map(e=>e.duration),movements:this.events.map(e=>e.movement),inViewport:this.events.filter(e=>e.inViewport).length,trackedElements:this.touchStartListeners.size}}};var D=class extends g{constructor(e){super(),this.name="keyboard",this.defaultWeight=.1,this.events=[],this.targetSelectors=['input[type="text"]','input[type="email"]',"textarea"],this.focusedElement=null,this.focusedElementSelector="",this.lastEventTimestamp=0,this.sessionPauseThreshold=1e3,this.downListener=null,this.upListener=null,this.focusListeners=new Map,this.blurListeners=new Map,this.isActive=!1,e?.targetSelectors&&(this.targetSelectors=e.targetSelectors)}start(){this.isActive||(this.isActive=!0,this.attachFocusListeners(),this.downListener=e=>{if(!this.focusedElement)return;let t=Date.now(),i=e;this.lastEventTimestamp>0&&t-this.lastEventTimestamp>this.sessionPauseThreshold&&(this.events=[]),this.events.push({key:i.key,type:"down",timestamp:t,targetElement:this.focusedElementSelector}),this.notifyEvent(.8),this.lastEventTimestamp=t},this.upListener=e=>{if(!this.focusedElement)return;let t=Date.now(),i=e;this.lastEventTimestamp>0&&t-this.lastEventTimestamp>this.sessionPauseThreshold&&(this.events=[]),this.events.push({key:i.key,type:"up",timestamp:t,targetElement:this.focusedElementSelector}),this.lastEventTimestamp=t},document.addEventListener("keydown",this.downListener),document.addEventListener("keyup",this.upListener))}addTarget(e){this.targetSelectors.includes(e)||(this.targetSelectors.push(e),this.isActive&&this.attachFocusListenersForSelector(e))}attachFocusListeners(){this.targetSelectors.forEach(e=>{this.attachFocusListenersForSelector(e)})}attachFocusListenersForSelector(e){document.querySelectorAll(e).forEach(i=>{if(this.focusListeners.has(i))return;let s=()=>{this.focusedElement=i,this.focusedElementSelector=e},o=()=>{this.focusedElement=null,this.focusedElementSelector=""};i.addEventListener("focus",s),i.addEventListener("blur",o),this.focusListeners.set(i,s),this.blurListeners.set(i,o)})}stop(){this.isActive&&(this.isActive=!1,this.downListener&&(document.removeEventListener("keydown",this.downListener),this.downListener=null),this.upListener&&(document.removeEventListener("keyup",this.upListener),this.upListener=null),this.focusListeners.forEach((e,t)=>{t.removeEventListener("focus",e)}),this.focusListeners.clear(),this.blurListeners.forEach((e,t)=>{t.removeEventListener("blur",e)}),this.blurListeners.clear(),this.focusedElement=null)}reset(){this.events=[],this.focusedElement=null,this.focusedElementSelector="",this.lastEventTimestamp=0}score(){if(this.events.length<6)return;let e=this.events.filter(c=>c.type==="down");if(e.length<3)return;let t=0,i=0,s=[];for(let c=1;c<e.length;c++)s.push(e[c].timestamp-e[c-1].timestamp);let o=M(s);if(o){let{statistics:c,allIdentical:l}=o;if(l)return .1;let h=b(c.cv);if(t+=h,i++,h<=.1)return h}let n=[];for(let c=0;c<this.events.length-1;c++)this.events[c].type==="down"&&this.events[c+1].type==="up"&&this.events[c].key===this.events[c+1].key&&n.push(this.events[c+1].timestamp-this.events[c].timestamp);let a=M(n);if(a){let{statistics:c,allIdentical:l}=a;if(l)return .1;if(c.mean<5)t+=.1,i++;else{let h=b(c.cv);if(t+=h,i++,h<=.1)return h}}let r=this.events.filter(c=>c.key==="Backspace").length;if(r>0){let c=r/e.length;c>.05&&c<.3?(t+=1,i++):c>0&&(t+=.8,i++)}return i>0?t/i:void 0}getDebugInfo(){let e=[];for(let t=0;t<this.events.length-1;t++)this.events[t].type==="down"&&this.events[t+1].type==="up"&&this.events[t].key===this.events[t+1].key&&e.push(this.events[t+1].timestamp-this.events[t].timestamp);return{eventCount:this.events.length,downEvents:this.events.filter(t=>t.type==="down").length,upEvents:this.events.filter(t=>t.type==="up").length,backspaceCount:this.events.filter(t=>t.key==="Backspace").length,pressDurations:e,focusedElement:this.focusedElementSelector,trackedElements:this.focusListeners.size}}};var B=["__nightmare","_phantom","callPhantom","__selenium_evaluate","__webdriver_evaluate","__driver_evaluate","__webdriver_script_function","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","_Selenium_IDE_Recorder","domAutomation","domAutomationController","webdriver","_webdriver_script_fn","__webdriver_script_func","__fxdriver_evaluate","__fxdriver_unwrapped","__selenium_unwrapped"],_=class extends g{constructor(){super(...arguments),this.name="environment",this.defaultWeight=.08,this.data=null}start(){this.captureEnvironment()}stop(){}reset(){this.data=null}onTick(e){this.captureEnvironment()}score(){if(!this.data)return;let e=this.data,t=e.automation;if(t.isWebdriver)return .05;if(t.hasAutomationGlobals||t.hasCDPInjection)return .1;if([t.hasHeadlessUA,t.hasChromelessRuntime,t.hasSoftwareRenderer].filter(Boolean).length>=2)return .15;if(t.hasHeadlessUA)return .2;let s=0,o=0;s+=e.suspiciousDimensions?.1:1,s+=e.suspiciousRatio?.2:1,s+=e.featureInconsistency?.3:1,o+=3;let n=[e.hasWebGL,e.hasLocalStorage,e.hasSessionStorage,e.hasIndexedDB].filter(Boolean).length;return s+=n/4,o++,e.isMobile||(s+=E(e.plugins,-2,-.5),s+=e.plugins>0?1:.1,o+=2,t.hasNoPlugins&&e.vendor.includes("Google")&&(s+=.3,o++)),t.hasChromelessRuntime&&(s+=.3,o++),t.hasSoftwareRenderer&&(s+=.4,o++),s+=y(e.devicePixelRatio,2,1.5),s+=e.colorDepth===24||e.colorDepth===32?1:.4,o+=2,o>0?s/o:void 0}isMobileDevice(){let e=navigator.maxTouchPoints>0||"ontouchstart"in window,t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),i=window.innerWidth<768&&window.innerHeight<1024;return e&&i||t}detectAutomation(){let e=this.isMobileDevice(),t=navigator.webdriver===!0,i=navigator.userAgent,s=/HeadlessChrome|Headless/i.test(i),o=window,n=!!(o.chrome&&typeof o.chrome=="object"&&!o.chrome.runtime),a=[];for(let d of B)d in o&&a.push(d);let r=a.length>0,c=[];try{for(let d of Object.keys(o))/^cdc_|^__cdc_/.test(d)&&c.push(d)}catch{}let l=c.length>0,h=!e&&navigator.plugins.length===0,v=!1;try{let d=document.createElement("canvas"),p=d.getContext("webgl")||d.getContext("experimental-webgl");if(p){let u=p.getExtension("WEBGL_debug_renderer_info");if(u){let m=p.getParameter(u.UNMASKED_RENDERER_WEBGL);v=/SwiftShader|Software|LLVMpipe/i.test(m),this._webglRenderer=m}}}catch{}return{isWebdriver:t,hasHeadlessUA:s,hasChromelessRuntime:n,hasSoftwareRenderer:v,hasNoPlugins:h,hasAutomationGlobals:r,detectedGlobals:a,hasCDPInjection:l,detectedCDPKeys:c}}captureEnvironment(){try{let e=!1,t;try{let u=document.createElement("canvas"),m=u.getContext("webgl")||u.getContext("experimental-webgl");if(e=!!m,m){let w=m.getExtension("WEBGL_debug_renderer_info");w&&(t=m.getParameter(w.UNMASKED_RENDERER_WEBGL))}}catch{e=!1}let i=!!(window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection),s=this.isMobileDevice(),o=window.innerWidth,n=window.innerHeight,a=window.screen.width,r=window.screen.height,c=o===800&&n===600||o===1024&&n===768||o===1280&&n===720||a===800&&r===600,l=o*n/(a*r),h=l===1||l<.1||l>1,v=typeof localStorage<"u"&&typeof sessionStorage<"u",d=navigator.plugins.length===0&&navigator.mimeTypes.length===0||!e||!v,p=this.detectAutomation();this.data={screenWidth:a,screenHeight:r,windowWidth:o,windowHeight:n,devicePixelRatio:window.devicePixelRatio,colorDepth:window.screen.colorDepth,userAgent:navigator.userAgent,platform:navigator.platform,language:navigator.language,languages:navigator.languages?Array.from(navigator.languages):[navigator.language],hardwareConcurrency:navigator.hardwareConcurrency,maxTouchPoints:navigator.maxTouchPoints||0,vendor:navigator.vendor,hasWebGL:e,hasWebRTC:i,hasLocalStorage:typeof localStorage<"u",hasSessionStorage:typeof sessionStorage<"u",hasIndexedDB:"indexedDB"in window,plugins:navigator.plugins.length,mimeTypes:navigator.mimeTypes.length,suspiciousRatio:h,suspiciousDimensions:c,featureInconsistency:d,isMobile:s,timestamp:Date.now(),automation:p,webglRenderer:t}}catch{}}getDebugInfo(){return this.data}isMobile(){var e,t;return(t=(e=this.data)===null||e===void 0?void 0:e.isMobile)!==null&&t!==void 0?t:null}getAutomationIndicators(){var e,t;return(t=(e=this.data)===null||e===void 0?void 0:e.automation)!==null&&t!==void 0?t:null}isLikelyBot(){if(!this.data)return null;let e=this.data.automation;return e.isWebdriver||e.hasAutomationGlobals||e.hasCDPInjection||e.hasHeadlessUA}};var x=class extends g{constructor(){super(...arguments),this.name="resize",this.defaultWeight=.02,this.events=[],this.listener=null,this.isActive=!1,this.lastMousePosition=null,this.mouseListener=null}start(){this.isActive||(this.isActive=!0,this.mouseListener=e=>{let t=e;this.lastMousePosition={x:t.clientX,y:t.clientY}},document.addEventListener("mousemove",this.mouseListener,{passive:!0}),this.listener=()=>{var e,t;let i=(e=this.lastMousePosition)===null||e===void 0?void 0:e.x,s=(t=this.lastMousePosition)===null||t===void 0?void 0:t.y,o=!1;i!==void 0&&s!==void 0&&(o=i<50||i>window.innerWidth-50||s<50||s>window.innerHeight-50),this.events.push({width:window.innerWidth,height:window.innerHeight,mouseX:i,mouseY:s,mouseNearEdge:o,timestamp:Date.now()})},window.addEventListener("resize",this.listener))}stop(){this.isActive&&(this.isActive=!1,this.listener&&(window.removeEventListener("resize",this.listener),this.listener=null),this.mouseListener&&(document.removeEventListener("mousemove",this.mouseListener),this.mouseListener=null))}reset(){this.events=[]}score(){if(this.events.length===0)return;let e=0,t=0;e+=E(this.events.length,5,.5),t++;let i=this.events.filter(s=>s.mouseX!==void 0);if(i.length>0){let s=i.filter(o=>o.mouseNearEdge).length;e+=F(s/i.length,.5,8),t++}return t>0?e/t:void 0}getDebugInfo(){return{eventCount:this.events.length,withMouseData:this.events.filter(e=>e.mouseX!==void 0).length}}};var I=class extends g{constructor(){super(...arguments),this.name="timing",this.defaultWeight=.15,this.actions=[],this.mouseStillness={position:null,lastMoveTime:0,microMovementCount:0},this.microMovements=[],this.isActive=!1,this.mouseListener=null,this.clickListener=null,this.keydownListener=null,this.scrollListener=null,this.STILLNESS_WINDOW=500,this.MICRO_MOVEMENT_THRESHOLD=1,this.MAX_MICRO_MOVEMENT=5,this.MACHINE_PRECISION_THRESHOLD=5}start(){this.isActive||(this.isActive=!0,this.mouseListener=e=>{let t=e,i=Date.now(),s={x:t.clientX,y:t.clientY};if(this.mouseStillness.position){let n=s.x-this.mouseStillness.position.x,a=s.y-this.mouseStillness.position.y,r=Math.sqrt(n*n+a*a);r>=this.MICRO_MOVEMENT_THRESHOLD&&r<=this.MAX_MICRO_MOVEMENT&&this.microMovements.push({timestamp:i,distance:r}),r>=this.MICRO_MOVEMENT_THRESHOLD&&(this.mouseStillness.lastMoveTime=i)}this.mouseStillness.position=s;let o=i-this.STILLNESS_WINDOW;this.microMovements=this.microMovements.filter(n=>n.timestamp>=o)},this.clickListener=e=>{this.recordAction("click",e)},this.keydownListener=()=>{this.recordAction("keydown")},this.scrollListener=()=>{this.recordAction("scroll")},document.addEventListener("mousemove",this.mouseListener,{passive:!0}),document.addEventListener("click",this.clickListener,{passive:!0}),document.addEventListener("keydown",this.keydownListener,{passive:!0}),document.addEventListener("scroll",this.scrollListener,{passive:!0}))}recordAction(e,t){let i=Date.now(),s=this.mouseStillness.lastMoveTime>0?i-this.mouseStillness.lastMoveTime:-1;this.mouseStillness.microMovementCount=this.microMovements.length,this.actions.push({type:e,timestamp:i,timeSinceMouseMove:s,wasHidden:document.hidden}),this.notifyEvent(.7),this.actions.length>100&&this.actions.shift()}stop(){this.isActive&&(this.isActive=!1,this.mouseListener&&(document.removeEventListener("mousemove",this.mouseListener),this.mouseListener=null),this.clickListener&&(document.removeEventListener("click",this.clickListener),this.clickListener=null),this.keydownListener&&(document.removeEventListener("keydown",this.keydownListener),this.keydownListener=null),this.scrollListener&&(document.removeEventListener("scroll",this.scrollListener),this.scrollListener=null))}reset(){this.actions=[],this.microMovements=[],this.mouseStillness={position:null,lastMoveTime:0,microMovementCount:0}}score(){let e=this.actions.length;if(e<3)return;let t=0,i=0,s=[],o=[],n=0;for(let r of this.actions)r.type==="click"&&(s.push(r),r.timeSinceMouseMove>=0&&o.push(r)),r.wasHidden&&n++;if(s.length>=2){let r=this.scorePreActionStillness(s);r!==void 0&&(t+=r,i++)}if(o.length>=3){let r=this.scoreMouseToClickDelayFromCache(o);r!==void 0&&(t+=r,i++)}if(e>=5){let r=this.scoreActionIntervals();r!==void 0&&(t+=r,i++)}let a=this.scoreHiddenActionsFromCount(n,e);return t+=a,i++,i>0?t/i:void 0}scorePreActionStillness(e){let t=e.filter(o=>o.timeSinceMouseMove>=0);if(t.length<2)return;let s=t.filter(o=>o.timeSinceMouseMove>=100&&o.timeSinceMouseMove<=500&&this.mouseStillness.microMovementCount===0).length/t.length;return s>=.9?.1:s>=.7?.3:s>=.5?.5:s>=.3?.7:1}scoreMouseToClickDelayFromCache(e){let t=e.map(s=>s.timeSinceMouseMove),i=S(t);return i.mean<10?.1:i.cv<.2&&e.length>=5?.2:i.mean>=50&&i.mean<=300&&i.cv>=.3?1:i.cv<.4?.6:.8}scoreActionIntervals(){if(this.actions.length<5)return;let e=[];for(let n=1;n<this.actions.length;n++)e.push(this.actions[n].timestamp-this.actions[n-1].timestamp);let t=[100,200,250,500,1e3],i=0;for(let n of e)for(let a of t){let r=n%a;if(r<this.MACHINE_PRECISION_THRESHOLD||a-r<this.MACHINE_PRECISION_THRESHOLD){i++;break}}let s=i/e.length;return s>=.8?.1:s>=.6?.3:s>=.4?.5:S(e).cv<.15?.2:1}scoreHiddenActionsFromCount(e,t){if(e===0)return 1;let i=e/t;return i>.5?.1:i>.2?.3:i>0?.5:1}getDebugInfo(){let e=this.actions.filter(i=>i.type==="click"),t=[];for(let i=1;i<this.actions.length;i++)t.push(this.actions[i].timestamp-this.actions[i-1].timestamp);return{actionCount:this.actions.length,clickCount:e.length,keydownCount:this.actions.filter(i=>i.type==="keydown").length,scrollCount:this.actions.filter(i=>i.type==="scroll").length,hiddenActionCount:this.actions.filter(i=>i.wasHidden).length,microMovementCount:this.microMovements.length,intervals:t.slice(-20),lastStillnessDuration:this.mouseStillness.lastMoveTime>0?Date.now()-this.mouseStillness.lastMoveTime:null}}};var P=class extends g{constructor(){super(...arguments),this.name="visibility",this.defaultWeight=.1,this.events=[],this.focusTypingPairs=[],this.actionsWhileHidden=0,this.lastVisibilityChange=null,this.resumeDelays=[],this.isActive=!1,this.visibilityListener=null,this.focusListener=null,this.blurListener=null,this.clickListener=null,this.keydownListener=null,this.inputFocusListener=null,this.lastFocusedInput=null,this.hasTypedInFocusedInput=!1,this.lastActionTime=0,this.preHideActionTime=0}start(){this.isActive||(this.isActive=!0,this.visibilityListener=()=>{let e=Date.now(),t=document.hidden;this.lastVisibilityChange&&!t?(this.lastActionTime>0&&this.preHideActionTime>0&&e-this.lastActionTime<50&&this.actionsWhileHidden++,this.lastVisibilityChange={hidden:!1,timestamp:e}):t&&(this.preHideActionTime=this.lastActionTime,this.lastVisibilityChange={hidden:!0,timestamp:e}),this.events.push({type:"visibility_change",timestamp:e,wasHidden:t})},this.focusListener=()=>{this.events.push({type:"focus_change",timestamp:Date.now(),wasHidden:document.hidden,wasFocused:!0})},this.blurListener=()=>{this.events.push({type:"focus_change",timestamp:Date.now(),wasHidden:document.hidden,wasFocused:!1})},this.clickListener=e=>{this.recordAction("click",e)},this.keydownListener=e=>{if(this.recordAction("keydown",e),this.lastFocusedInput&&!this.hasTypedInFocusedInput){let t=Date.now(),i=t-this.lastFocusedInput.timestamp;this.focusTypingPairs.push({focusTime:this.lastFocusedInput.timestamp,firstKeypressTime:t,delay:i,element:this.lastFocusedInput.element}),this.hasTypedInFocusedInput=!0}},this.inputFocusListener=e=>{let t=e.target;t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA")&&(this.lastFocusedInput={element:t.tagName.toLowerCase(),timestamp:Date.now()},this.hasTypedInFocusedInput=!1)},document.addEventListener("visibilitychange",this.visibilityListener),window.addEventListener("focus",this.focusListener),window.addEventListener("blur",this.blurListener),document.addEventListener("click",this.clickListener,{passive:!0}),document.addEventListener("keydown",this.keydownListener,{passive:!0}),document.addEventListener("focusin",this.inputFocusListener,{passive:!0}))}recordAction(e,t){let i=Date.now();if(this.lastActionTime=i,document.hidden&&(this.actionsWhileHidden++,this.events.push({type:"action_while_hidden",timestamp:i,wasHidden:!0}),this.notifyEvent(1)),this.lastVisibilityChange&&!this.lastVisibilityChange.hidden){let s=i-this.lastVisibilityChange.timestamp;if(s>0&&s<1e4&&this.resumeDelays.length<20){let o=this.resumeDelays[this.resumeDelays.length-1];(o===void 0||Math.abs(s-o)>100)&&this.resumeDelays.push(s)}}}stop(){this.isActive&&(this.isActive=!1,this.visibilityListener&&(document.removeEventListener("visibilitychange",this.visibilityListener),this.visibilityListener=null),this.focusListener&&(window.removeEventListener("focus",this.focusListener),this.focusListener=null),this.blurListener&&(window.removeEventListener("blur",this.blurListener),this.blurListener=null),this.clickListener&&(document.removeEventListener("click",this.clickListener),this.clickListener=null),this.keydownListener&&(document.removeEventListener("keydown",this.keydownListener),this.keydownListener=null),this.inputFocusListener&&(document.removeEventListener("focusin",this.inputFocusListener),this.inputFocusListener=null))}reset(){this.events=[],this.focusTypingPairs=[],this.actionsWhileHidden=0,this.lastVisibilityChange=null,this.resumeDelays=[],this.lastFocusedInput=null,this.hasTypedInFocusedInput=!1,this.lastActionTime=0,this.preHideActionTime=0}score(){if(this.events.length<2)return;let e=0,t=0,i=this.scoreHiddenActions();i!==void 0&&(e+=i,t++);let s=this.scoreResumeDelays();s!==void 0&&(e+=s,t++);let o=this.scoreFocusTyping();return o!==void 0&&(e+=o,t++),t>0?e/t:void 0}scoreHiddenActions(){return this.actionsWhileHidden===0?1:this.actionsWhileHidden>=5?.1:this.actionsWhileHidden>=3?.2:this.actionsWhileHidden>=1?.3:1}scoreResumeDelays(){if(this.resumeDelays.length<2)return;let t=this.resumeDelays.filter(i=>i<50).length/this.resumeDelays.length;return t>=.8?.1:t>=.5?.3:t>=.3?.5:t>0?.7:1}scoreFocusTyping(){if(this.focusTypingPairs.length<2)return;let e=0;for(let i of this.focusTypingPairs)i.delay<20&&e++;let t=e/this.focusTypingPairs.length;return t>=.8?.2:t>=.5?.4:t>=.3?.6:t>0?.8:1}getDebugInfo(){return{eventCount:this.events.length,actionsWhileHidden:this.actionsWhileHidden,visibilityChanges:this.events.filter(e=>e.type==="visibility_change").length,focusChanges:this.events.filter(e=>e.type==="focus_change").length,resumeDelays:this.resumeDelays,focusTypingPairs:this.focusTypingPairs.map(e=>({delay:e.delay,element:e.element}))}}};var O={sampleRates:{mouseMove:.1,scroll:1,keypress:1},rollingWindows:{mouseMove:3e4,scroll:3e4},weights:{mouseMovement:.3,clickAccuracy:.3,scrollBehavior:.15,keyboardTiming:.1,tabActivity:.05,resizeBehavior:.02,environmentFingerprint:.08},customScorers:{},clickMouseHistoryWindow:1e3,useWebWorker:!1};})();
1
+ "use strict";(()=>{var R=class{constructor(e){var t,i,s,o;this.strategies=new Map,this.isTracking=!1,this.isPausedByVisibility=!1,this.tickInterval=null,this.tickIntervalMs=1e3,this.pauseOnHidden=!0,this.visibilityChangeHandler=null,this.confidenceScore=0,this.CONFIDENCE_TARGET=1,this.CONFIDENCE_DECAY=.95,this.scoreFloor=1,this.lastEventTime=0,e?.interval&&(this.tickIntervalMs=e.interval),e?.pauseOnHidden!==void 0&&(this.pauseOnHidden=e.pauseOnHidden);let n=e?.scoreMemory;this.scoreMemory={enabled:(t=n?.enabled)!==null&&t!==void 0?t:!0,inactivityThreshold:(i=n?.inactivityThreshold)!==null&&i!==void 0?i:2e3,maxRecovery:(s=n?.maxRecovery)!==null&&s!==void 0?s:.1,recoveryPerEvent:(o=n?.recoveryPerEvent)!==null&&o!==void 0?o:.02}}addStrategy(e,t){let i={strategy:e,weight:t??e.defaultWeight,enabled:!0};return this.strategies.set(e.name,i),e.setEventCallback&&e.setEventCallback(s=>{this.onStrategyEvent(s,i.weight)}),this.isTracking&&e.start(),this}onStrategyEvent(e,t){this.confidenceScore*=this.CONFIDENCE_DECAY;let i=e.weight*t;this.confidenceScore=Math.min(this.CONFIDENCE_TARGET,this.confidenceScore+i),this.lastEventTime=Date.now(),this.scoreMemory.enabled&&(this.scoreFloor=Math.min(1,this.scoreFloor+this.scoreMemory.recoveryPerEvent))}removeStrategy(e){let t=this.strategies.get(e);return t&&(this.isTracking&&t.strategy.stop(),this.strategies.delete(e)),this}setStrategyEnabled(e,t){let i=this.strategies.get(e);return i&&(i.enabled=t,!t&&this.isTracking&&i.strategy.stop(),t&&this.isTracking&&i.strategy.start()),this}getStrategies(){return this.strategies}start(){if(!this.isTracking){if(this.isTracking=!0,this.pauseOnHidden&&typeof document<"u"&&(this.visibilityChangeHandler=this.handleVisibilityChange.bind(this),document.addEventListener("visibilitychange",this.visibilityChangeHandler),document.hidden)){this.isPausedByVisibility=!0;return}for(let[e,t]of this.strategies)t.enabled&&t.strategy.start();this.startTick()}}stop(){if(this.isTracking){this.isTracking=!1,this.isPausedByVisibility=!1,this.visibilityChangeHandler&&typeof document<"u"&&(document.removeEventListener("visibilitychange",this.visibilityChangeHandler),this.visibilityChangeHandler=null);for(let[e,t]of this.strategies)t.strategy.stop();this.stopTick()}}reset(){this.confidenceScore=0,this.scoreFloor=1,this.lastEventTime=0;for(let[e,t]of this.strategies)t.strategy.reset()}async score(e={}){let t=this.calculateStrategyScore(),i=t.overall;if(this.scoreMemory.enabled&&this.lastEventTime>0&&(i<this.scoreFloor&&(this.scoreFloor=i),Date.now()-this.lastEventTime>this.scoreMemory.inactivityThreshold)){let n=this.scoreFloor+this.scoreMemory.maxRecovery;i=Math.min(i,n)}let s={score:i};return e.breakdown&&(s.breakdown=t),s}isActive(){return this.isTracking}isPaused(){return this.isPausedByVisibility}getEventCount(){var e,t;let i={};for(let[s,o]of this.strategies){let n=(t=(e=o.strategy).getDebugInfo)===null||t===void 0?void 0:t.call(e);n?.eventCount!==void 0&&(i[s]=n.eventCount)}return i}getStrategyDebugInfo(){let e={};for(let[t,i]of this.strategies)i.strategy.getDebugInfo&&(e[t]=i.strategy.getDebugInfo());return e}getConfidence(){return Math.min(1,this.confidenceScore)}hasConfidentData(e=.3){return this.getConfidence()>=e}destroy(){this.stop(),this.strategies.clear()}handleVisibilityChange(){if(this.isTracking){if(document.hidden){if(!this.isPausedByVisibility){this.isPausedByVisibility=!0;for(let[e,t]of this.strategies)t.enabled&&t.strategy.stop();this.stopTick()}}else if(this.isPausedByVisibility){this.isPausedByVisibility=!1;for(let[e,t]of this.strategies)t.enabled&&t.strategy.start();this.startTick()}}}startTick(){this.tickInterval===null&&(this.tickInterval=window.setInterval(()=>{let e=Date.now();for(let[t,i]of this.strategies)i.enabled&&i.strategy.onTick&&i.strategy.onTick(e)},this.tickIntervalMs))}stopTick(){this.tickInterval!==null&&(clearInterval(this.tickInterval),this.tickInterval=null)}calculateStrategyScore(){let e={},t={},i=0,s=0;for(let[n,c]of this.strategies){if(!c.enabled)continue;let r=c.strategy.score();e[n]=r,t[n]=c.weight,r!=null&&(i+=c.weight,s+=r*c.weight)}let o=i>0?s/i:.5;return{overall:Math.max(0,Math.min(1,o)),factors:e,weights:t}}};var p=class{constructor(){this.eventCallback=null}setEventCallback(e){this.eventCallback=e}notifyEvent(e){this.eventCallback&&this.eventCallback({strategy:this.name,weight:e,timestamp:Date.now()})}};function F(u,e=0,t=1){return 1/(1+Math.exp(-t*(u-e)))}function L(u,e=0,t=1){return 1-F(u,e,t)}function y(u,e=0,t=1){let i=-Math.pow(u-e,2)/(2*t*t);return Math.exp(i)}function S(u){if(u.length===0)return{mean:0,variance:0,stdDev:0,cv:0};let e=u.reduce((o,n)=>o+n,0)/u.length,t=u.reduce((o,n)=>o+(n-e)**2,0)/u.length,i=Math.sqrt(t),s=e>0?i/e:0;return{mean:e,variance:t,stdDev:i,cv:s}}function E(u){if(u.length<2)return;let e=new Set(u.map(s=>Math.round(s/10))).size,t=e===1;return{statistics:S(u),uniqueCount:e,allIdentical:t}}function M(u){return u<.05?.1:u>2?.3:y(u,.45,.35)}var b=class extends p{constructor(e){super(),this.name="mouse",this.defaultWeight=.3,this.distanceSeries=[],this.angleSeries=[],this.lastPosition=null,this.lastAngle=0,this.cumulativeAngle=0,this.rollingWindowMs=3e4,this.listener=null,this.leaveListener=null,this.enterListener=null,this.isActive=!1,this.screenDiagonal=1,this.entryPoints=[],this.microMovements=[],this.STILLNESS_WINDOW=500,e?.rollingWindow!==void 0&&(this.rollingWindowMs=e.rollingWindow)}start(){if(this.isActive)return;this.isActive=!0;let e=window.innerWidth,t=window.innerHeight;this.screenDiagonal=Math.sqrt(e*e+t*t),this.listener=i=>{let s=i,o=Date.now(),n={x:s.clientX,y:s.clientY,timestamp:o};if(this.lastPosition){let c=n.x-this.lastPosition.x,r=n.y-this.lastPosition.y,a=Math.sqrt(c*c+r*r);if(a>=1&&a<=5){this.microMovements.push({dx:c,dy:r,timestamp:o});let v=o-this.STILLNESS_WINDOW;for(;this.microMovements.length>0&&this.microMovements[0].timestamp<v;)this.microMovements.shift()}let l=a/this.screenDiagonal;if(l>.001){let v=Math.atan2(r,c),m=v-this.lastAngle;for(;m>Math.PI;)m-=2*Math.PI;for(;m<-Math.PI;)m+=2*Math.PI;this.cumulativeAngle+=m,this.lastAngle=v,this.distanceSeries.push({value:l,timestamp:o}),this.angleSeries.push({value:this.cumulativeAngle,timestamp:o}),this.notifyEvent(Math.min(1,l*100))}let h=o-this.rollingWindowMs;for(;this.distanceSeries.length>0&&this.distanceSeries[0].timestamp<h;)this.distanceSeries.shift(),this.angleSeries.shift()}this.lastPosition=n},document.addEventListener("mousemove",this.listener,{passive:!0}),this.enterListener=i=>{let s=i,o=Date.now(),n=s.clientX,c=s.clientY,r=window.innerWidth,a=window.innerHeight,l=c,h=a-c,v=n,m=r-n,f=Math.min(l,h,v,m),d,g=50;f<g?l<=f?d="top":h<=f?d="bottom":v<=f?d="left":d="right":n>r*.35&&n<r*.65&&c>a*.35&&c<a*.65?d="center":l<g*2&&v<g*2||l<g*2&&m<g*2||h<g*2&&v<g*2||h<g*2&&m<g*2?d="corner":l<h&&l<v&&l<m?d="top":h<v&&h<m?d="bottom":v<m?d="left":d="right",this.entryPoints.push({x:n,y:c,timestamp:o,edgeDistance:f,entryEdge:d}),this.entryPoints.length>20&&this.entryPoints.shift()},document.addEventListener("mouseenter",this.enterListener,{passive:!0}),this.leaveListener=()=>{this.distanceSeries=[],this.angleSeries=[],this.lastPosition=null,this.lastAngle=0,this.cumulativeAngle=0,this.microMovements=[]},document.addEventListener("mouseleave",this.leaveListener,{passive:!0})}stop(){this.isActive&&(this.isActive=!1,this.listener&&(document.removeEventListener("mousemove",this.listener),this.listener=null),this.leaveListener&&(document.removeEventListener("mouseleave",this.leaveListener),this.leaveListener=null),this.enterListener&&(document.removeEventListener("mouseenter",this.enterListener),this.enterListener=null))}reset(){this.distanceSeries=[],this.angleSeries=[],this.lastPosition=null,this.lastAngle=0,this.cumulativeAngle=0,this.entryPoints=[],this.microMovements=[]}score(){if(!(this.distanceSeries.length<10))return this.detectMousePatterns()}detectMousePatterns(){if(this.distanceSeries.length<10)return;let e=0,t=0,i=this.distanceSeries.map(c=>c.value);if(i.length>=3){let c=S(i);e+=y(c.cv,.9,.35),t++}let s=this.angleSeries.map(c=>c.value);if(s.length>=3){let c=[];for(let a=1;a<s.length;a++)c.push(Math.abs(s[a]-s[a-1]));let r=c.reduce((a,l)=>a+l,0)/c.length;e+=y(r,.15,.12),t++}let o=this.scoreEntryPoints();o!==void 0&&(e+=o,t++);let n=this.scoreMicroMovements();return n!==void 0&&(e+=n,t++),t>0?e/t:void 0}scoreEntryPoints(){if(this.entryPoints.length<2)return;let e=0,t=0,i=0,s=0;for(let c of this.entryPoints)c.x<5&&c.y<5?(s++,e++):c.entryEdge==="center"?(t++,e++):c.entryEdge==="corner"&&(i++,c.edgeDistance<10&&e++);let o=this.entryPoints.length,n=e/o;return s>=2||s/o>=.5?.1:t/o>=.5?.2:n>=.7?.3:n>=.5?.5:n>=.3?.7:1}scoreMicroMovements(){if(this.distanceSeries.length<20)return;let e=this.microMovements.length,t=this.distanceSeries[0],s=this.distanceSeries[this.distanceSeries.length-1].timestamp-t.timestamp;if(s<1e3)return;let o=e/s*1e3;return e===0?.3:o<1?.5:o<5?.7:o>=5&&o<=30?1:.8}getMicroMovementCount(){return this.microMovements.length}getLastPosition(){return this.lastPosition?{x:this.lastPosition.x,y:this.lastPosition.y}:null}getDebugInfo(){return{eventCount:this.distanceSeries.length,rollingWindow:this.rollingWindowMs,isActive:this.isActive,distanceSeries:this.distanceSeries,angleSeries:this.angleSeries,entryPoints:this.entryPoints,microMovementCount:this.microMovements.length,lastPosition:this.lastPosition}}};var T=class extends p{constructor(e){super(),this.name="scroll",this.defaultWeight=.15,this.distanceSeries=[],this.velocitySeries=[],this.lastScrollY=null,this.lastTimestamp=0,this.rollingWindowMs=3e4,this.documentHeight=1,this.listener=null,this.isActive=!1,e?.rollingWindow!==void 0&&(this.rollingWindowMs=e.rollingWindow)}start(){this.isActive||(this.isActive=!0,this.documentHeight=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,1),this.listener=e=>{let t=window.scrollY,i=Date.now();if(this.lastScrollY===null){this.lastScrollY=t,this.lastTimestamp=i;return}let s=t-this.lastScrollY,o=i-this.lastTimestamp;if(s===0)return;let n=Math.abs(s)/this.documentHeight;if(o>0){let c=n/o;this.distanceSeries.push({value:n,timestamp:i}),this.velocitySeries.push({value:c,timestamp:i}),this.notifyEvent(Math.min(1,n*10));let r=i-this.rollingWindowMs;for(;this.distanceSeries.length>0&&this.distanceSeries[0].timestamp<r;)this.distanceSeries.shift(),this.velocitySeries.shift()}this.lastScrollY=t,this.lastTimestamp=i},window.addEventListener("scroll",this.listener,{passive:!0}))}stop(){this.isActive&&(this.isActive=!1,this.listener&&(window.removeEventListener("scroll",this.listener),this.listener=null))}reset(){this.distanceSeries=[],this.velocitySeries=[],this.lastScrollY=null,this.lastTimestamp=0}score(){if(!(this.distanceSeries.length<2))return this.detectScrollPatterns()}detectScrollPatterns(){if(this.distanceSeries.length<2)return;let e=0,t=0,i=this.distanceSeries.map(n=>n.value);if(i.length>=2&&new Set(i.map(c=>Math.round(c*1e3))).size===1)return .05;if(i.length>=2){let n=S(i);e+=y(n.cv,1,.4),t++}let s=this.velocitySeries.map(n=>n.value);if(s.length>=2){let n=S(s);e+=y(n.cv,1.2,.5),t++}let o=i.filter(n=>n>.1).length;if(i.length>0){let n=o/i.length;e+=L(n,.3,15),t++}return t>0?e/t:void 0}getDebugInfo(){return{eventCount:this.distanceSeries.length,rollingWindow:this.rollingWindowMs,isActive:this.isActive,distanceSeries:this.distanceSeries,velocitySeries:this.velocitySeries}}};var k=class extends p{constructor(e){super(),this.name="click",this.defaultWeight=.3,this.events=[],this.targetSelectors=["button","a",'input[type="submit"]','[role="button"]'],this.lastMousePosition=null,this.mouseListener=null,this.clickListeners=new Map,this.isActive=!1,e?.targetSelectors&&(this.targetSelectors=e.targetSelectors)}start(){this.isActive||(this.isActive=!0,this.mouseListener=e=>{let t=e;this.lastMousePosition={x:t.clientX,y:t.clientY,timestamp:Date.now()}},document.addEventListener("mousemove",this.mouseListener,{passive:!0}),this.attachClickListeners())}addTarget(e){this.targetSelectors.includes(e)||(this.targetSelectors.push(e),this.isActive&&this.attachClickListenersForSelector(e))}attachClickListeners(){this.targetSelectors.forEach(e=>{this.attachClickListenersForSelector(e)})}attachClickListenersForSelector(e){document.querySelectorAll(e).forEach(i=>{if(this.clickListeners.has(i))return;let s=o=>{var n,c;let r=o,a=Date.now(),l=i.getBoundingClientRect(),h=l.top>=0&&l.left>=0&&l.bottom<=window.innerHeight&&l.right<=window.innerWidth,v=0,m=-1;if(this.lastMousePosition){let d=r.clientX-this.lastMousePosition.x,g=r.clientY-this.lastMousePosition.y;v=Math.sqrt(d*d+g*g),m=a-this.lastMousePosition.timestamp}let f;if(!this.lastMousePosition)f="no-mouse-data";else{let d=this.lastMousePosition.x,g=this.lastMousePosition.y;if(!(d>=l.left&&d<=l.right&&g>=l.top&&g<=l.bottom))f="outside";else{let w=l.left+l.width/2,H=l.top+l.height/2;Math.sqrt((d-w)**2+(g-H)**2)<2?f="dead-center":f="over-element"}}this.events.push({clickX:r.clientX,clickY:r.clientY,mouseX:(n=this.lastMousePosition)===null||n===void 0?void 0:n.x,mouseY:(c=this.lastMousePosition)===null||c===void 0?void 0:c.y,rect:l,inViewport:h,position:f,timestamp:a,mouseClickDelta:v,timeSinceMouseMove:m,isTrusted:r.isTrusted}),this.notifyEvent(1)};i.addEventListener("click",s),this.clickListeners.set(i,s)})}stop(){this.isActive&&(this.isActive=!1,this.mouseListener&&(document.removeEventListener("mousemove",this.mouseListener),this.mouseListener=null),this.clickListeners.forEach((e,t)=>{t.removeEventListener("click",e)}),this.clickListeners.clear())}reset(){this.events=[],this.lastMousePosition=null}score(){let e=this.events.length;if(e===0)return;let t=0,i=0,s=0,o=0,n=0,c=0;for(let l of this.events){switch(l.position){case"no-mouse-data":t+=0;break;case"outside":t+=0;break;case"dead-center":t+=.5;break;case"over-element":t+=1;break}l.mouseClickDelta>=0&&(i++,l.mouseClickDelta>5&&s++),l.timeSinceMouseMove>=0&&(o++,(l.timeSinceMouseMove<10||l.timeSinceMouseMove>2e3)&&n++),l.isTrusted||c++}let r=0,a=0;if(r+=t/e,a++,i>=2){let l=s/i,h;l>=.8?h=.1:l>=.5?h=.3:l>=.3?h=.5:l>0?h=.7:h=1,r+=h,a++}if(o>=2){let l=n/o,h;l>=.8?h=.2:l>=.5?h=.4:l>=.3?h=.6:l>0?h=.8:h=1,r+=h,a++}if(e>=2){let l=c/e,h;l>=.5?h=.1:l>0?h=.3:h=1,r+=h,a++}return a>0?r/a:void 0}getDebugInfo(){return{eventCount:this.events.length,positions:{noMouseData:this.events.filter(e=>e.position==="no-mouse-data").length,outside:this.events.filter(e=>e.position==="outside").length,deadCenter:this.events.filter(e=>e.position==="dead-center").length,overElement:this.events.filter(e=>e.position==="over-element").length},inViewport:this.events.filter(e=>e.inViewport).length,trackedElements:this.clickListeners.size,mouseClickDeltas:this.events.map(e=>e.mouseClickDelta),timeSinceMouseMoves:this.events.map(e=>e.timeSinceMouseMove),untrustedClicks:this.events.filter(e=>!e.isTrusted).length}}};var C=class extends p{constructor(e){super(),this.name="tap",this.defaultWeight=.35,this.events=[],this.targetSelectors=["button","a",'input[type="submit"]','[role="button"]'],this.touchStartListeners=new Map,this.touchEndListeners=new Map,this.activeTouches=new Map,this.isActive=!1,e?.targetSelectors&&(this.targetSelectors=e.targetSelectors)}start(){this.isActive||(this.isActive=!0,this.attachTouchListeners())}addTarget(e){this.targetSelectors.includes(e)||(this.targetSelectors.push(e),this.isActive&&this.attachTouchListenersForSelector(e))}attachTouchListeners(){this.targetSelectors.forEach(e=>{this.attachTouchListenersForSelector(e)})}attachTouchListenersForSelector(e){document.querySelectorAll(e).forEach(i=>{if(this.touchStartListeners.has(i))return;let s=n=>{let c=n;if(c.touches.length!==1)return;let r=c.touches[0];this.activeTouches.set(r.identifier,{x:r.clientX,y:r.clientY,timestamp:Date.now(),element:i})},o=n=>{let c=n;if(c.changedTouches.length!==1)return;let r=c.changedTouches[0],a=this.activeTouches.get(r.identifier);if(!a||a.element!==i)return;let l=Date.now(),h=l-a.timestamp,v=r.clientX-a.x,m=r.clientY-a.y,f=Math.sqrt(v*v+m*m),d=i.getBoundingClientRect(),g=d.top>=0&&d.left>=0&&d.bottom<=window.innerHeight&&d.right<=window.innerWidth,I=r.clientX,w=r.clientY,H=I>=d.left&&I<=d.right&&w>=d.top&&w<=d.bottom,W;if(!H)W="outside";else{let B=d.left+d.width/2,O=d.top+d.height/2;W=Math.sqrt((I-B)**2+(w-O)**2)<2?"dead-center":"over-element"}this.events.push({x:I,y:w,rect:d,inViewport:g,position:W,duration:h,movement:f,timestamp:l}),this.notifyEvent(1),this.activeTouches.delete(r.identifier)};i.addEventListener("touchstart",s,{passive:!0}),i.addEventListener("touchend",o,{passive:!0}),this.touchStartListeners.set(i,s),this.touchEndListeners.set(i,o)})}stop(){this.isActive&&(this.isActive=!1,this.touchStartListeners.forEach((e,t)=>{t.removeEventListener("touchstart",e)}),this.touchStartListeners.clear(),this.touchEndListeners.forEach((e,t)=>{t.removeEventListener("touchend",e)}),this.touchEndListeners.clear(),this.activeTouches.clear())}reset(){this.events=[],this.activeTouches.clear()}score(){if(this.events.length===0)return;let e=0,t=0,i=0;for(let n of this.events)switch(n.position){case"outside":i+=0;break;case"dead-center":i+=.5;break;case"over-element":i+=1;break}e+=i/this.events.length,t++;let s=this.events.map(n=>n.duration);if(s.length>=2){let n=E(s);if(n){let{statistics:c,allIdentical:r}=n;if(r)return .05;e+=M(c.cv),t++,e+=y(c.mean,95,40),t++}}let o=this.events.map(n=>n.movement);if(o.length>0){let n=o.reduce((c,r)=>c+r,0)/o.length;e+=y(n,2,3),t++}if(this.events.length>=3){let n=[];for(let r=1;r<this.events.length;r++)n.push(this.events[r].timestamp-this.events[r-1].timestamp);let c=E(n);c&&!c.allIdentical&&(e+=M(c.statistics.cv),t++)}return t>0?e/t:void 0}getDebugInfo(){return{eventCount:this.events.length,positions:{outside:this.events.filter(e=>e.position==="outside").length,deadCenter:this.events.filter(e=>e.position==="dead-center").length,overElement:this.events.filter(e=>e.position==="over-element").length},durations:this.events.map(e=>e.duration),movements:this.events.map(e=>e.movement),inViewport:this.events.filter(e=>e.inViewport).length,trackedElements:this.touchStartListeners.size}}};var A=class extends p{constructor(e){super(),this.name="keyboard",this.defaultWeight=.1,this.events=[],this.targetSelectors=['input[type="text"]','input[type="email"]',"textarea"],this.focusedElement=null,this.focusedElementSelector="",this.lastEventTimestamp=0,this.sessionPauseThreshold=1e3,this.downListener=null,this.upListener=null,this.focusListeners=new Map,this.blurListeners=new Map,this.isActive=!1,e?.targetSelectors&&(this.targetSelectors=e.targetSelectors)}start(){this.isActive||(this.isActive=!0,this.attachFocusListeners(),this.downListener=e=>{if(!this.focusedElement)return;let t=Date.now(),i=e;this.lastEventTimestamp>0&&t-this.lastEventTimestamp>this.sessionPauseThreshold&&(this.events=[]),this.events.push({key:i.key,type:"down",timestamp:t,targetElement:this.focusedElementSelector}),this.notifyEvent(.8),this.lastEventTimestamp=t},this.upListener=e=>{if(!this.focusedElement)return;let t=Date.now(),i=e;this.lastEventTimestamp>0&&t-this.lastEventTimestamp>this.sessionPauseThreshold&&(this.events=[]),this.events.push({key:i.key,type:"up",timestamp:t,targetElement:this.focusedElementSelector}),this.lastEventTimestamp=t},document.addEventListener("keydown",this.downListener),document.addEventListener("keyup",this.upListener))}addTarget(e){this.targetSelectors.includes(e)||(this.targetSelectors.push(e),this.isActive&&this.attachFocusListenersForSelector(e))}attachFocusListeners(){this.targetSelectors.forEach(e=>{this.attachFocusListenersForSelector(e)})}attachFocusListenersForSelector(e){document.querySelectorAll(e).forEach(i=>{if(this.focusListeners.has(i))return;let s=()=>{this.focusedElement=i,this.focusedElementSelector=e},o=()=>{this.focusedElement=null,this.focusedElementSelector=""};i.addEventListener("focus",s),i.addEventListener("blur",o),this.focusListeners.set(i,s),this.blurListeners.set(i,o)})}stop(){this.isActive&&(this.isActive=!1,this.downListener&&(document.removeEventListener("keydown",this.downListener),this.downListener=null),this.upListener&&(document.removeEventListener("keyup",this.upListener),this.upListener=null),this.focusListeners.forEach((e,t)=>{t.removeEventListener("focus",e)}),this.focusListeners.clear(),this.blurListeners.forEach((e,t)=>{t.removeEventListener("blur",e)}),this.blurListeners.clear(),this.focusedElement=null)}reset(){this.events=[],this.focusedElement=null,this.focusedElementSelector="",this.lastEventTimestamp=0}score(){if(this.events.length<6)return;let e=this.events.filter(a=>a.type==="down");if(e.length<3)return;let t=0,i=0,s=[];for(let a=1;a<e.length;a++)s.push(e[a].timestamp-e[a-1].timestamp);let o=E(s);if(o){let{statistics:a,allIdentical:l}=o;if(l)return .1;let h=M(a.cv);if(t+=h,i++,h<=.1)return h}let n=[];for(let a=0;a<this.events.length-1;a++)this.events[a].type==="down"&&this.events[a+1].type==="up"&&this.events[a].key===this.events[a+1].key&&n.push(this.events[a+1].timestamp-this.events[a].timestamp);let c=E(n);if(c){let{statistics:a,allIdentical:l}=c;if(l)return .1;if(a.mean<5)t+=.1,i++;else{let h=M(a.cv);if(t+=h,i++,h<=.1)return h}}let r=this.events.filter(a=>a.key==="Backspace").length;if(r>0){let a=r/e.length;a>.05&&a<.3?(t+=1,i++):a>0&&(t+=.8,i++)}return i>0?t/i:void 0}getDebugInfo(){let e=[];for(let t=0;t<this.events.length-1;t++)this.events[t].type==="down"&&this.events[t+1].type==="up"&&this.events[t].key===this.events[t+1].key&&e.push(this.events[t+1].timestamp-this.events[t].timestamp);return{eventCount:this.events.length,downEvents:this.events.filter(t=>t.type==="down").length,upEvents:this.events.filter(t=>t.type==="up").length,backspaceCount:this.events.filter(t=>t.key==="Backspace").length,pressDurations:e,focusedElement:this.focusedElementSelector,trackedElements:this.focusListeners.size}}};var Y=["__nightmare","_phantom","callPhantom","__selenium_evaluate","__webdriver_evaluate","__driver_evaluate","__webdriver_script_function","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","_Selenium_IDE_Recorder","domAutomation","domAutomationController","webdriver","_webdriver_script_fn","__webdriver_script_func","__fxdriver_evaluate","__fxdriver_unwrapped","__selenium_unwrapped"];function N(u){let e=u.getParameter(u.RENDERER);if(e&&!/^(WebKit WebGL|Mozilla|Google Inc\.)$/i.test(e))return e;let t=u.getExtension("WEBGL_debug_renderer_info");return t?u.getParameter(t.UNMASKED_RENDERER_WEBGL):e??void 0}function V(u){try{let e=document.createElement("canvas"),t=e.getContext("webgl")||e.getContext("experimental-webgl");if(!t)return{hasWebGL:!1,result:void 0};try{return{hasWebGL:!0,result:u(t)}}finally{let i=t.getExtension("WEBGL_lose_context");i?.loseContext()}}catch{return{hasWebGL:!1,result:void 0}}}var D=class extends p{constructor(){super(...arguments),this.name="environment",this.defaultWeight=.08,this.data=null}start(){this.captureEnvironment()}stop(){}reset(){this.data=null}onTick(e){this.data||this.captureEnvironment()}score(){if(!this.data)return;let e=this.data,t=e.automation;if(t.isWebdriver)return .05;if(t.hasAutomationGlobals||t.hasCDPInjection)return .1;if([t.hasHeadlessUA,t.hasChromelessRuntime,t.hasSoftwareRenderer].filter(Boolean).length>=2)return .15;if(t.hasHeadlessUA)return .2;let s=0,o=0;s+=e.suspiciousDimensions?.1:1,s+=e.suspiciousRatio?.2:1,s+=e.featureInconsistency?.3:1,o+=3;let n=[e.hasWebGL,e.hasLocalStorage,e.hasSessionStorage,e.hasIndexedDB].filter(Boolean).length;return s+=n/4,o++,e.isMobile||(s+=L(e.plugins,-2,-.5),s+=e.plugins>0?1:.1,o+=2,t.hasNoPlugins&&e.vendor.includes("Google")&&(s+=.3,o++)),t.hasChromelessRuntime&&(s+=.3,o++),t.hasSoftwareRenderer&&(s+=.4,o++),s+=y(e.devicePixelRatio,2,1.5),s+=e.colorDepth===24||e.colorDepth===32?1:.4,o+=2,o>0?s/o:void 0}isMobileDevice(){let e=navigator.maxTouchPoints>0||"ontouchstart"in window,t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),i=window.innerWidth<768&&window.innerHeight<1024;return e&&i||t}detectAutomation(){let e=this.isMobileDevice(),t=navigator.webdriver===!0,i=navigator.userAgent,s=/HeadlessChrome|Headless/i.test(i),o=window,n=!!(o.chrome&&typeof o.chrome=="object"&&!o.chrome.runtime),c=[];for(let f of Y)f in o&&c.push(f);let r=c.length>0,a=[];try{for(let f of Object.keys(o))/^cdc_|^__cdc_/.test(f)&&a.push(f)}catch{}let l=a.length>0,h=!e&&navigator.plugins.length===0,v=!1,m=V(f=>N(f));if(m.hasWebGL&&m.result){let f=m.result;v=/SwiftShader|Software|LLVMpipe/i.test(f),this._webglRenderer=f}return{isWebdriver:t,hasHeadlessUA:s,hasChromelessRuntime:n,hasSoftwareRenderer:v,hasNoPlugins:h,hasAutomationGlobals:r,detectedGlobals:c,hasCDPInjection:l,detectedCDPKeys:a}}captureEnvironment(){try{let e=V(g=>N(g)),t=e.hasWebGL,i=e.result,s=!!(window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection),o=this.isMobileDevice(),n=window.innerWidth,c=window.innerHeight,r=window.screen.width,a=window.screen.height,l=n===800&&c===600||n===1024&&c===768||n===1280&&c===720||r===800&&a===600,h=n*c/(r*a),v=h===1||h<.1||h>1,m=typeof localStorage<"u"&&typeof sessionStorage<"u",f=navigator.plugins.length===0&&navigator.mimeTypes.length===0||!t||!m,d=this.detectAutomation();this.data={screenWidth:r,screenHeight:a,windowWidth:n,windowHeight:c,devicePixelRatio:window.devicePixelRatio,colorDepth:window.screen.colorDepth,userAgent:navigator.userAgent,platform:navigator.platform,language:navigator.language,languages:navigator.languages?Array.from(navigator.languages):[navigator.language],hardwareConcurrency:navigator.hardwareConcurrency,maxTouchPoints:navigator.maxTouchPoints||0,vendor:navigator.vendor,hasWebGL:t,hasWebRTC:s,hasLocalStorage:typeof localStorage<"u",hasSessionStorage:typeof sessionStorage<"u",hasIndexedDB:"indexedDB"in window,plugins:navigator.plugins.length,mimeTypes:navigator.mimeTypes.length,suspiciousRatio:v,suspiciousDimensions:l,featureInconsistency:f,isMobile:o,timestamp:Date.now(),automation:d,webglRenderer:i}}catch{}}getDebugInfo(){return this.data}isMobile(){var e,t;return(t=(e=this.data)===null||e===void 0?void 0:e.isMobile)!==null&&t!==void 0?t:null}getAutomationIndicators(){var e,t;return(t=(e=this.data)===null||e===void 0?void 0:e.automation)!==null&&t!==void 0?t:null}isLikelyBot(){if(!this.data)return null;let e=this.data.automation;return e.isWebdriver||e.hasAutomationGlobals||e.hasCDPInjection||e.hasHeadlessUA}};var _=class extends p{constructor(){super(...arguments),this.name="resize",this.defaultWeight=.02,this.events=[],this.listener=null,this.isActive=!1,this.lastMousePosition=null,this.mouseListener=null}start(){this.isActive||(this.isActive=!0,this.mouseListener=e=>{let t=e;this.lastMousePosition={x:t.clientX,y:t.clientY}},document.addEventListener("mousemove",this.mouseListener,{passive:!0}),this.listener=()=>{var e,t;let i=(e=this.lastMousePosition)===null||e===void 0?void 0:e.x,s=(t=this.lastMousePosition)===null||t===void 0?void 0:t.y,o=!1;i!==void 0&&s!==void 0&&(o=i<50||i>window.innerWidth-50||s<50||s>window.innerHeight-50),this.events.push({width:window.innerWidth,height:window.innerHeight,mouseX:i,mouseY:s,mouseNearEdge:o,timestamp:Date.now()})},window.addEventListener("resize",this.listener))}stop(){this.isActive&&(this.isActive=!1,this.listener&&(window.removeEventListener("resize",this.listener),this.listener=null),this.mouseListener&&(document.removeEventListener("mousemove",this.mouseListener),this.mouseListener=null))}reset(){this.events=[]}score(){if(this.events.length===0)return;let e=0,t=0;e+=L(this.events.length,5,.5),t++;let i=this.events.filter(s=>s.mouseX!==void 0);if(i.length>0){let s=i.filter(o=>o.mouseNearEdge).length;e+=F(s/i.length,.5,8),t++}return t>0?e/t:void 0}getDebugInfo(){return{eventCount:this.events.length,withMouseData:this.events.filter(e=>e.mouseX!==void 0).length}}};var x=class extends p{constructor(){super(...arguments),this.name="timing",this.defaultWeight=.15,this.actions=[],this.mouseStillness={position:null,lastMoveTime:0,microMovementCount:0},this.microMovements=[],this.isActive=!1,this.mouseListener=null,this.clickListener=null,this.keydownListener=null,this.scrollListener=null,this.STILLNESS_WINDOW=500,this.MICRO_MOVEMENT_THRESHOLD=1,this.MAX_MICRO_MOVEMENT=5,this.MACHINE_PRECISION_THRESHOLD=5}start(){this.isActive||(this.isActive=!0,this.mouseListener=e=>{let t=e,i=Date.now(),s={x:t.clientX,y:t.clientY};if(this.mouseStillness.position){let n=s.x-this.mouseStillness.position.x,c=s.y-this.mouseStillness.position.y,r=Math.sqrt(n*n+c*c);r>=this.MICRO_MOVEMENT_THRESHOLD&&r<=this.MAX_MICRO_MOVEMENT&&this.microMovements.push({timestamp:i,distance:r}),r>=this.MICRO_MOVEMENT_THRESHOLD&&(this.mouseStillness.lastMoveTime=i)}this.mouseStillness.position=s;let o=i-this.STILLNESS_WINDOW;this.microMovements=this.microMovements.filter(n=>n.timestamp>=o)},this.clickListener=e=>{this.recordAction("click",e)},this.keydownListener=()=>{this.recordAction("keydown")},this.scrollListener=()=>{this.recordAction("scroll")},document.addEventListener("mousemove",this.mouseListener,{passive:!0}),document.addEventListener("click",this.clickListener,{passive:!0}),document.addEventListener("keydown",this.keydownListener,{passive:!0}),document.addEventListener("scroll",this.scrollListener,{passive:!0}))}recordAction(e,t){let i=Date.now(),s=this.mouseStillness.lastMoveTime>0?i-this.mouseStillness.lastMoveTime:-1;this.mouseStillness.microMovementCount=this.microMovements.length,this.actions.push({type:e,timestamp:i,timeSinceMouseMove:s,wasHidden:document.hidden}),this.notifyEvent(.7),this.actions.length>100&&this.actions.shift()}stop(){this.isActive&&(this.isActive=!1,this.mouseListener&&(document.removeEventListener("mousemove",this.mouseListener),this.mouseListener=null),this.clickListener&&(document.removeEventListener("click",this.clickListener),this.clickListener=null),this.keydownListener&&(document.removeEventListener("keydown",this.keydownListener),this.keydownListener=null),this.scrollListener&&(document.removeEventListener("scroll",this.scrollListener),this.scrollListener=null))}reset(){this.actions=[],this.microMovements=[],this.mouseStillness={position:null,lastMoveTime:0,microMovementCount:0}}score(){let e=this.actions.length;if(e<3)return;let t=0,i=0,s=[],o=[],n=0;for(let r of this.actions)r.type==="click"&&(s.push(r),r.timeSinceMouseMove>=0&&o.push(r)),r.wasHidden&&n++;if(s.length>=2){let r=this.scorePreActionStillness(s);r!==void 0&&(t+=r,i++)}if(o.length>=3){let r=this.scoreMouseToClickDelayFromCache(o);r!==void 0&&(t+=r,i++)}if(e>=5){let r=this.scoreActionIntervals();r!==void 0&&(t+=r,i++)}let c=this.scoreHiddenActionsFromCount(n,e);return t+=c,i++,i>0?t/i:void 0}scorePreActionStillness(e){let t=e.filter(o=>o.timeSinceMouseMove>=0);if(t.length<2)return;let s=t.filter(o=>o.timeSinceMouseMove>=100&&o.timeSinceMouseMove<=500&&this.mouseStillness.microMovementCount===0).length/t.length;return s>=.9?.1:s>=.7?.3:s>=.5?.5:s>=.3?.7:1}scoreMouseToClickDelayFromCache(e){let t=e.map(s=>s.timeSinceMouseMove),i=S(t);return i.mean<10?.1:i.cv<.2&&e.length>=5?.2:i.mean>=50&&i.mean<=300&&i.cv>=.3?1:i.cv<.4?.6:.8}scoreActionIntervals(){if(this.actions.length<5)return;let e=[];for(let n=1;n<this.actions.length;n++)e.push(this.actions[n].timestamp-this.actions[n-1].timestamp);let t=[100,200,250,500,1e3],i=0;for(let n of e)for(let c of t){let r=n%c;if(r<this.MACHINE_PRECISION_THRESHOLD||c-r<this.MACHINE_PRECISION_THRESHOLD){i++;break}}let s=i/e.length;return s>=.8?.1:s>=.6?.3:s>=.4?.5:S(e).cv<.15?.2:1}scoreHiddenActionsFromCount(e,t){if(e===0)return 1;let i=e/t;return i>.5?.1:i>.2?.3:i>0?.5:1}getDebugInfo(){let e=this.actions.filter(i=>i.type==="click"),t=[];for(let i=1;i<this.actions.length;i++)t.push(this.actions[i].timestamp-this.actions[i-1].timestamp);return{actionCount:this.actions.length,clickCount:e.length,keydownCount:this.actions.filter(i=>i.type==="keydown").length,scrollCount:this.actions.filter(i=>i.type==="scroll").length,hiddenActionCount:this.actions.filter(i=>i.wasHidden).length,microMovementCount:this.microMovements.length,intervals:t.slice(-20),lastStillnessDuration:this.mouseStillness.lastMoveTime>0?Date.now()-this.mouseStillness.lastMoveTime:null}}};var P=class extends p{constructor(){super(...arguments),this.name="visibility",this.defaultWeight=.1,this.events=[],this.focusTypingPairs=[],this.actionsWhileHidden=0,this.lastVisibilityChange=null,this.resumeDelays=[],this.isActive=!1,this.visibilityListener=null,this.focusListener=null,this.blurListener=null,this.clickListener=null,this.keydownListener=null,this.inputFocusListener=null,this.lastFocusedInput=null,this.hasTypedInFocusedInput=!1,this.lastActionTime=0,this.preHideActionTime=0}start(){this.isActive||(this.isActive=!0,this.visibilityListener=()=>{let e=Date.now(),t=document.hidden;this.lastVisibilityChange&&!t?(this.lastActionTime>0&&this.preHideActionTime>0&&e-this.lastActionTime<50&&this.actionsWhileHidden++,this.lastVisibilityChange={hidden:!1,timestamp:e}):t&&(this.preHideActionTime=this.lastActionTime,this.lastVisibilityChange={hidden:!0,timestamp:e}),this.events.push({type:"visibility_change",timestamp:e,wasHidden:t})},this.focusListener=()=>{this.events.push({type:"focus_change",timestamp:Date.now(),wasHidden:document.hidden,wasFocused:!0})},this.blurListener=()=>{this.events.push({type:"focus_change",timestamp:Date.now(),wasHidden:document.hidden,wasFocused:!1})},this.clickListener=e=>{this.recordAction("click",e)},this.keydownListener=e=>{if(this.recordAction("keydown",e),this.lastFocusedInput&&!this.hasTypedInFocusedInput){let t=Date.now(),i=t-this.lastFocusedInput.timestamp;this.focusTypingPairs.push({focusTime:this.lastFocusedInput.timestamp,firstKeypressTime:t,delay:i,element:this.lastFocusedInput.element}),this.hasTypedInFocusedInput=!0}},this.inputFocusListener=e=>{let t=e.target;t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA")&&(this.lastFocusedInput={element:t.tagName.toLowerCase(),timestamp:Date.now()},this.hasTypedInFocusedInput=!1)},document.addEventListener("visibilitychange",this.visibilityListener),window.addEventListener("focus",this.focusListener),window.addEventListener("blur",this.blurListener),document.addEventListener("click",this.clickListener,{passive:!0}),document.addEventListener("keydown",this.keydownListener,{passive:!0}),document.addEventListener("focusin",this.inputFocusListener,{passive:!0}))}recordAction(e,t){let i=Date.now();if(this.lastActionTime=i,document.hidden&&(this.actionsWhileHidden++,this.events.push({type:"action_while_hidden",timestamp:i,wasHidden:!0}),this.notifyEvent(1)),this.lastVisibilityChange&&!this.lastVisibilityChange.hidden){let s=i-this.lastVisibilityChange.timestamp;if(s>0&&s<1e4&&this.resumeDelays.length<20){let o=this.resumeDelays[this.resumeDelays.length-1];(o===void 0||Math.abs(s-o)>100)&&this.resumeDelays.push(s)}}}stop(){this.isActive&&(this.isActive=!1,this.visibilityListener&&(document.removeEventListener("visibilitychange",this.visibilityListener),this.visibilityListener=null),this.focusListener&&(window.removeEventListener("focus",this.focusListener),this.focusListener=null),this.blurListener&&(window.removeEventListener("blur",this.blurListener),this.blurListener=null),this.clickListener&&(document.removeEventListener("click",this.clickListener),this.clickListener=null),this.keydownListener&&(document.removeEventListener("keydown",this.keydownListener),this.keydownListener=null),this.inputFocusListener&&(document.removeEventListener("focusin",this.inputFocusListener),this.inputFocusListener=null))}reset(){this.events=[],this.focusTypingPairs=[],this.actionsWhileHidden=0,this.lastVisibilityChange=null,this.resumeDelays=[],this.lastFocusedInput=null,this.hasTypedInFocusedInput=!1,this.lastActionTime=0,this.preHideActionTime=0}score(){if(this.events.length<2)return;let e=0,t=0,i=this.scoreHiddenActions();i!==void 0&&(e+=i,t++);let s=this.scoreResumeDelays();s!==void 0&&(e+=s,t++);let o=this.scoreFocusTyping();return o!==void 0&&(e+=o,t++),t>0?e/t:void 0}scoreHiddenActions(){return this.actionsWhileHidden===0?1:this.actionsWhileHidden>=5?.1:this.actionsWhileHidden>=3?.2:this.actionsWhileHidden>=1?.3:1}scoreResumeDelays(){if(this.resumeDelays.length<2)return;let t=this.resumeDelays.filter(i=>i<50).length/this.resumeDelays.length;return t>=.8?.1:t>=.5?.3:t>=.3?.5:t>0?.7:1}scoreFocusTyping(){if(this.focusTypingPairs.length<2)return;let e=0;for(let i of this.focusTypingPairs)i.delay<20&&e++;let t=e/this.focusTypingPairs.length;return t>=.8?.2:t>=.5?.4:t>=.3?.6:t>0?.8:1}getDebugInfo(){return{eventCount:this.events.length,actionsWhileHidden:this.actionsWhileHidden,visibilityChanges:this.events.filter(e=>e.type==="visibility_change").length,focusChanges:this.events.filter(e=>e.type==="focus_change").length,resumeDelays:this.resumeDelays,focusTypingPairs:this.focusTypingPairs.map(e=>({delay:e.delay,element:e.element}))}}};var G={sampleRates:{mouseMove:.1,scroll:1,keypress:1},rollingWindows:{mouseMove:3e4,scroll:3e4},weights:{mouseMovement:.3,clickAccuracy:.3,scrollBehavior:.15,keyboardTiming:.1,tabActivity:.05,resizeBehavior:.02,environmentFingerprint:.08},customScorers:{},clickMouseHistoryWindow:1e3,useWebWorker:!1};})();
2
2
  //# sourceMappingURL=behavior-detection.esm.min.js.map