fpscanner 1.0.4-beta.0 → 1.0.6-beta.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,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function ie(){return navigator.webdriver}function ae(){return navigator.userAgent}function oe(){return navigator.platform}const l="ERROR",r="INIT",s="NA",v="SKIPPED",g="high",S="low",se="medium";function f(t){let e=0;for(let n=0,i=t.length;n<i;n++){let a=t.charCodeAt(n);e=(e<<5)-e+a,e|=0}return e.toString(16).padStart(8,"0")}function m(t,e){for(const n in t)t[n]=e}function ce(){return navigator.buildID==="20181001000000"}function le(){try{let t=!1;const e=Error.prepareStackTrace;Error.prepareStackTrace=function(){return t=!0,e};const n=new Error("");return console.log(n),t}catch{return l}}function ue(){const t={vendor:r,renderer:r};if(ce())return m(t,s),t;try{var e=document.createElement("canvas"),n=e.getContext("webgl")||e.getContext("experimental-webgl");n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info")>=0?(t.vendor=n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL),t.renderer=n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)):m(t,s)}catch{m(t,l)}return t}function de(){return"__pwInitScripts"in window||"__playwright__binding__"in window}function ge(){return navigator.hardwareConcurrency||s}function he(){const t=[],e=.123456789;return["E","LN10","LN2","LOG10E","LOG2E","PI","SQRT1_2","SQRT2"].forEach(function(a){try{t.push(Math[a])}catch{t.push(-1)}}),["tan","sin","exp","atan","acosh","asinh","atanh","expm1","log1p","sinh"].forEach(function(a){try{t.push(Math[a](e))}catch{t.push(-1)}}),f(t.map(String).join(","))}function me(){return navigator.deviceMemory||s}function pe(){return eval.toString().length}function fe(){const t={timezone:r,localeLanguage:r};try{if(typeof Intl<"u"&&typeof Intl.DateTimeFormat<"u"){const e=Intl.DateTimeFormat().resolvedOptions();t.timezone=e.timeZone,t.localeLanguage=e.locale}else t.timezone=s,t.localeLanguage=s}catch{t.timezone=l,t.localeLanguage=l}return t}function ve(){return{width:window.screen.width,height:window.screen.height,pixelDepth:window.screen.pixelDepth,colorDepth:window.screen.colorDepth,availableWidth:window.screen.availWidth,availableHeight:window.screen.availHeight,innerWidth:window.innerWidth,innerHeight:window.innerHeight,hasMultipleDisplays:typeof screen.isExtended<"u"?screen.isExtended:s}}function we(){return{languages:navigator.languages,language:navigator.language}}async function ye(){const t={vendor:r,architecture:r,device:r,description:r};if("gpu"in navigator)try{const e=await navigator.gpu.requestAdapter();e&&(t.vendor=e.info.vendor,t.architecture=e.info.architecture,t.device=e.info.device,t.description=e.info.description)}catch{m(t,l)}else m(t,s);return t}function be(){const t=["__driver_evaluate","__webdriver_evaluate","__selenium_evaluate","__fxdriver_evaluate","__driver_unwrapped","__webdriver_unwrapped","__selenium_unwrapped","__fxdriver_unwrapped","_Selenium_IDE_Recorder","_selenium","calledSelenium","$cdc_asdjflasutopfhvcZLmcfl_","$chrome_asyncScriptInfo","__$webdriverAsyncExecutor","webdriver","__webdriverFunc","domAutomation","domAutomationController","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","__webdriver_script_fn","_WEBDRIVER_ELEM_CACHE"];let e=!1;for(let n=0;n<t.length;n++)if(t[n]in window){e=!0;break}return e=e||!!document.__webdriver_script_fn||!!window.domAutomation||!!window.domAutomationController,e}function Se(){try{const t="webdriver",e=window.navigator;if(!e[t]&&!e.hasOwnProperty(t)){e[t]=1;const n=e[t]===1;return delete e[t],n}return!0}catch{return!1}}async function Ce(){const t=window.navigator,e={architecture:r,bitness:r,brands:r,mobile:r,model:r,platform:r,platformVersion:r,uaFullVersion:r};if("userAgentData"in t)try{const n=await t.userAgentData.getHighEntropyValues(["architecture","bitness","brands","mobile","model","platform","platformVersion","uaFullVersion"]);e.architecture=n.architecture,e.bitness=n.bitness,e.brands=n.brands,e.mobile=n.mobile,e.model=n.model,e.platform=n.platform,e.platformVersion=n.platformVersion,e.uaFullVersion=n.uaFullVersion}catch{m(e,l)}else m(e,s);return e}function Ae(){if(!navigator.plugins)return!1;const t=typeof navigator.plugins.toString=="function"?navigator.plugins.toString():navigator.plugins.constructor&&typeof navigator.plugins.constructor.toString=="function"?navigator.plugins.constructor.toString():typeof navigator.plugins;return t==="[object PluginArray]"||t==="[object MSPluginsCollection]"||t==="[object HTMLPluginsCollection]"}function Pe(){if(!navigator.plugins)return s;const t=[];for(let e=0;e<navigator.plugins.length;e++)t.push(navigator.plugins[e].name);return f(t.join(","))}function Me(){return navigator.plugins?navigator.plugins.length:s}function xe(){if(!navigator.plugins)return s;try{return navigator.plugins[0]===navigator.plugins[0][0].enabledPlugin}catch{return l}}function We(){if(!navigator.plugins)return s;try{return navigator.plugins.item(4294967296)!==navigator.plugins[0]}catch{return l}}function ke(){const t={isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r};try{t.isValidPluginArray=Ae(),t.pluginCount=Me(),t.pluginNamesHash=Pe(),t.pluginConsistency1=xe(),t.pluginOverflow=We()}catch{m(t,l)}return t}async function Ee(){return new Promise(async function(t){var e={audiooutput:0,audioinput:0,videoinput:0};if(navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices){const a=await navigator.mediaDevices.enumerateDevices();if(typeof a<"u"){for(var n=0;n<a.length;n++){var i=a[n].kind;e[i]=e[i]+1}return t({speakers:e.audiooutput,microphones:e.audioinput,webcams:e.videoinput})}else return m(e,s),t(e)}else return m(e,s),t(e)})}function De(){const t={webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r},e=document.createElement("iframe");let n=!1;try{e.style.display="none",e.src="about:blank",document.body.appendChild(e),n=!0;const i=e.contentWindow?.navigator;t.webdriver=i.webdriver??!1,t.userAgent=i.userAgent??s,t.platform=i.platform??s,t.memory=i.deviceMemory??s,t.cpuCount=i.hardwareConcurrency??s,t.language=i.language??s}catch{m(t,l)}finally{if(n)try{document.body.removeChild(e)}catch{}}return t}async function _e(){return new Promise(t=>{const e={vendor:r,renderer:r,userAgent:r,language:r,platform:r,memory:r,cpuCount:r};let n=null,i=null,a=null;const d=()=>{a&&clearTimeout(a),n&&n.terminate(),i&&URL.revokeObjectURL(i)};try{const p=`var fingerprintWorker = {
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function ie(){return navigator.webdriver}function ae(){return navigator.userAgent}function oe(){return navigator.platform}const l="ERROR",r="INIT",s="NA",v="SKIPPED",h="high",S="low",se="medium";function f(t){let e=0;for(let n=0,i=t.length;n<i;n++){let a=t.charCodeAt(n);e=(e<<5)-e+a,e|=0}return e.toString(16).padStart(8,"0")}function d(t,e){for(const n in t)t[n]=e}function ce(){return navigator.buildID==="20181001000000"}function le(){try{let t=!1;const e=Error.prepareStackTrace;Error.prepareStackTrace=function(){return t=!0,e};const n=new Error("");return console.log(n),t}catch{return l}}function ue(){const t={vendor:r,renderer:r};if(ce())return d(t,s),t;try{var e=document.createElement("canvas"),n=e.getContext("webgl")||e.getContext("experimental-webgl");n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info")>=0?(t.vendor=n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL),t.renderer=n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)):d(t,s)}catch{d(t,l)}return t}function de(){return"__pwInitScripts"in window||"__playwright__binding__"in window}function ge(){return navigator.hardwareConcurrency||s}function he(){const t=[],e=.123456789;return["E","LN10","LN2","LOG10E","LOG2E","PI","SQRT1_2","SQRT2"].forEach(function(a){try{t.push(Math[a])}catch{t.push(-1)}}),["tan","sin","exp","atan","acosh","asinh","atanh","expm1","log1p","sinh"].forEach(function(a){try{t.push(Math[a](e))}catch{t.push(-1)}}),"sumPrecise"in Math?t.push(Math.sumPrecise([1e20,.1,-1e20])):t.push(-1),f(t.map(String).join(","))}function me(){return navigator.deviceMemory||s}function pe(){return eval.toString().length}function fe(){const t={timezone:r,localeLanguage:r};try{if(typeof Intl<"u"&&typeof Intl.DateTimeFormat<"u"){const e=Intl.DateTimeFormat().resolvedOptions();t.timezone=e.timeZone,t.localeLanguage=e.locale}else t.timezone=s,t.localeLanguage=s}catch{t.timezone=l,t.localeLanguage=l}return t}function ve(){return{width:window.screen.width,height:window.screen.height,pixelDepth:window.screen.pixelDepth,colorDepth:window.screen.colorDepth,availableWidth:window.screen.availWidth,availableHeight:window.screen.availHeight,innerWidth:window.innerWidth,innerHeight:window.innerHeight,hasMultipleDisplays:typeof screen.isExtended<"u"?screen.isExtended:s}}function ye(){return{languages:navigator.languages,language:navigator.language}}async function we(){const t={vendor:r,architecture:r,device:r,description:r};if("gpu"in navigator)try{const e=await navigator.gpu.requestAdapter();e&&(t.vendor=e.info.vendor,t.architecture=e.info.architecture,t.device=e.info.device,t.description=e.info.description)}catch{d(t,l)}else d(t,s);return t}function be(){const t=["__driver_evaluate","__webdriver_evaluate","__selenium_evaluate","__fxdriver_evaluate","__driver_unwrapped","__webdriver_unwrapped","__selenium_unwrapped","__fxdriver_unwrapped","_Selenium_IDE_Recorder","_selenium","calledSelenium","$cdc_asdjflasutopfhvcZLmcfl_","$chrome_asyncScriptInfo","__$webdriverAsyncExecutor","webdriver","__webdriverFunc","domAutomation","domAutomationController","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","__webdriver_script_fn","_WEBDRIVER_ELEM_CACHE"];let e=!1;for(let n=0;n<t.length;n++)if(t[n]in window){e=!0;break}return e=e||!!document.__webdriver_script_fn||!!window.domAutomation||!!window.domAutomationController,e}function Se(){try{const t="webdriver",e=window.navigator;if(!e[t]&&!e.hasOwnProperty(t)){e[t]=1;const n=e[t]===1;return delete e[t],n}return!0}catch{return!1}}async function Ce(){const t=window.navigator,e={architecture:r,bitness:r,brands:r,mobile:r,model:r,platform:r,platformVersion:r,uaFullVersion:r};if("userAgentData"in t)try{const n=await t.userAgentData.getHighEntropyValues(["architecture","bitness","brands","mobile","model","platform","platformVersion","uaFullVersion"]);e.architecture=n.architecture,e.bitness=n.bitness,e.brands=n.brands,e.mobile=n.mobile,e.model=n.model,e.platform=n.platform,e.platformVersion=n.platformVersion,e.uaFullVersion=n.uaFullVersion}catch{d(e,l)}else d(e,s);return e}function Ae(){if(!navigator.plugins)return!1;const t=typeof navigator.plugins.toString=="function"?navigator.plugins.toString():navigator.plugins.constructor&&typeof navigator.plugins.constructor.toString=="function"?navigator.plugins.constructor.toString():typeof navigator.plugins;return t==="[object PluginArray]"||t==="[object MSPluginsCollection]"||t==="[object HTMLPluginsCollection]"}function Pe(){if(!navigator.plugins)return s;const t=[];for(let e=0;e<navigator.plugins.length;e++)t.push(navigator.plugins[e].name);return f(t.join(","))}function ke(){return navigator.plugins?navigator.plugins.length:s}function Me(){if(!navigator.plugins)return s;try{return navigator.plugins[0]===navigator.plugins[0][0].enabledPlugin}catch{return l}}function xe(){if(!navigator.plugins)return s;try{return navigator.plugins.item(4294967296)!==navigator.plugins[0]}catch{return l}}function We(){const t={isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r};try{t.isValidPluginArray=Ae(),t.pluginCount=ke(),t.pluginNamesHash=Pe(),t.pluginConsistency1=Me(),t.pluginOverflow=xe()}catch{d(t,l)}return t}async function Ee(){return new Promise(async function(t){var e={audiooutput:0,audioinput:0,videoinput:0};if(navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices){const a=await navigator.mediaDevices.enumerateDevices();if(typeof a<"u"){for(var n=0;n<a.length;n++){var i=a[n].kind;e[i]=e[i]+1}return t({speakers:e.audiooutput,microphones:e.audioinput,webcams:e.videoinput})}else return d(e,s),t(e)}else return d(e,s),t(e)})}function De(){const t={webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r},e=document.createElement("iframe");let n=!1;try{e.style.display="none",e.src="about:blank",document.body.appendChild(e),n=!0;const i=e.contentWindow?.navigator;t.webdriver=i.webdriver??!1,t.userAgent=i.userAgent??s,t.platform=i.platform??s,t.memory=i.deviceMemory??s,t.cpuCount=i.hardwareConcurrency??s,t.language=i.language??s}catch{d(t,l)}finally{if(n)try{document.body.removeChild(e)}catch{}}return t}async function _e(){return new Promise(t=>{const e={vendor:r,renderer:r,userAgent:r,language:r,platform:r,memory:r,cpuCount:r};let n=null,i=null,a=null;const g=()=>{a&&clearTimeout(a),n&&n.terminate(),i&&URL.revokeObjectURL(i)};try{const p=`var fingerprintWorker = {
2
2
  userAgent: 'NA',
3
3
  language: 'NA',
4
4
  cpuCount: 'NA',
@@ -45,4 +45,4 @@
45
45
  self.postMessage(fingerprintWorker);
46
46
  } catch (e) {
47
47
  self.postMessage(fingerprintWorker);
48
- }`,w=new Blob([p],{type:"application/javascript"});i=URL.createObjectURL(w),n=new Worker(i),a=window.setTimeout(()=>{d(),m(e,l),t(e)},2e3),n.onmessage=function(o){try{const h=y=>typeof y>"u"?s:y;e.vendor=h(o.data.vendor),e.renderer=h(o.data.renderer),e.userAgent=h(o.data.userAgent),e.language=h(o.data.language),e.platform=h(o.data.platform),e.memory=h(o.data.memory),e.cpuCount=h(o.data.cpuCount)}catch{m(e,l)}finally{d(),t(e)}},n.onerror=function(){d(),m(e,l),t(e)}}catch{d(),m(e,l),t(e)}})}function Re(){const t={toSourceError:r,hasToSource:!1};try{null.usdfsh}catch(e){t.toSourceError=e.toString()}try{throw"xyz"}catch(e){try{e.toSource(),t.hasToSource=!0}catch{t.hasToSource=!1}}return t}const C=['audio/mp4; codecs="mp4a.40.2"',"audio/mpeg;",'audio/webm; codecs="vorbis"','audio/ogg; codecs="vorbis"','audio/wav; codecs="1"','audio/ogg; codecs="speex"','audio/ogg; codecs="flac"','audio/3gpp; codecs="samr"'],A=['video/mp4; codecs="avc1.42E01E, mp4a.40.2"','video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="avc1.58A01E"','video/mp4; codecs="avc1.4D401E"','video/mp4; codecs="avc1.64001E"','video/mp4; codecs="mp4v.20.8"','video/mp4; codecs="mp4v.20.240"','video/webm; codecs="vp8"','video/ogg; codecs="theora"','video/ogg; codecs="dirac"','video/3gpp; codecs="mp4v.20.8"','video/x-matroska; codecs="theora"'];function P(t,e){const n={};try{const i=document.createElement(e);for(const a of t)try{n[a]=i.canPlayType(a)||null}catch{n[a]=null}}catch{for(const i of t)n[i]=null}return n}function M(t){const e={},n=window.MediaSource;if(!n||typeof n.isTypeSupported!="function"){for(const i of t)e[i]=null;return e}for(const i of t)try{e[i]=n.isTypeSupported(i)}catch{e[i]=null}return e}function x(t){try{const e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){const n=e.getCapabilities(t);return f(JSON.stringify(n))}return s}catch{return l}}function Ie(){const t={audioCanPlayTypeHash:s,videoCanPlayTypeHash:s,audioMediaSourceHash:s,videoMediaSourceHash:s,rtcAudioCapabilitiesHash:s,rtcVideoCapabilitiesHash:s,hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;const e=P(C,"audio"),n=P(A,"video");t.audioCanPlayTypeHash=f(JSON.stringify(e)),t.videoCanPlayTypeHash=f(JSON.stringify(n));const i=M(C),a=M(A);t.audioMediaSourceHash=f(JSON.stringify(i)),t.videoMediaSourceHash=f(JSON.stringify(a)),t.rtcAudioCapabilitiesHash=x("audio"),t.rtcVideoCapabilitiesHash=x("video")}catch{m(t,l)}return t}async function Le(){return new Promise(t=>{try{const e=new Image,n=document.createElement("canvas").getContext("2d");e.onload=()=>{n.drawImage(e,0,0),t(n.getImageData(0,0,1,1).data.filter(i=>i===0).length!=4)},e.onerror=()=>{t(l)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(l)}})}function Te(){var t=document.createElement("canvas");t.width=400,t.height=200,t.style.display="inline";var e=t.getContext("2d");try{return e.rect(0,0,10,10),e.rect(2,2,6,6),e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.font="11pt no-real-font-123",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",4,45),e.globalCompositeOperation="multiply",e.fillStyle="rgb(255,0,255)",e.beginPath(),e.arc(50,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(0,255,255)",e.beginPath(),e.arc(100,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,255,0)",e.beginPath(),e.arc(75,100,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,0,255)",e.arc(75,75,75,0,2*Math.PI,!0),e.arc(75,75,25,0,2*Math.PI,!0),e.fill("evenodd"),f(t.toDataURL())}catch{return l}}async function Oe(){const t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await Le(),t.canvasFingerprint=Te(),t}function He(){const t=["deviceMemory","hardwareConcurrency","language","languages","platform"],e=[];for(const n of t){const i=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator),n);i&&i.value?e.push("1"):e.push("0")}return e.join("")}function Ue(){return Math.random().toString(36).substring(2,15)}function Ne(){return new Date().getTime()}function Fe(){return window.location.href}function W(t,e){const n=t.signals;return e==="iframe"?n.contexts.iframe.webdriver!==n.automation.webdriver||n.contexts.iframe.userAgent!==n.browser.userAgent||n.contexts.iframe.platform!==n.device.platform||n.contexts.iframe.memory!==n.device.memory||n.contexts.iframe.cpuCount!==n.device.cpuCount:n.contexts.webWorker.webdriver!==n.automation.webdriver||n.contexts.webWorker.userAgent!==n.browser.userAgent||n.contexts.webWorker.platform!==n.device.platform||n.contexts.webWorker.memory!==n.device.memory||n.contexts.webWorker.cpuCount!==n.device.cpuCount}function Ge(){const t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),n=typeof window.ethereum<"u",i=document.getElementById("coupon-birds-drop-div")!==null,a=document.querySelector("deepl-input-controller")!==null,d=document.getElementById("monica-content-root")!==null,p=document.querySelector("chatgpt-sidebar")!==null,w=typeof window.__REQUESTLY__<"u",o=Array.from(document.querySelectorAll("*")).filter(h=>h.tagName.toLowerCase().startsWith("veepn-")).length>0;return t.bitmask=[e?"1":"0",n?"1":"0",i?"1":"0",a?"1":"0",d?"1":"0",p?"1":"0",w?"1":"0",o?"1":"0"].join(""),e&&t.extensions.push("grammarly"),n&&t.extensions.push("metamask"),i&&t.extensions.push("coupon-birds"),a&&t.extensions.push("deepl"),d&&t.extensions.push("monica-ai"),p&&t.extensions.push("sider-ai"),w&&t.extensions.push("requestly"),o&&t.extensions.push("veepn"),t}function c(t){try{return t()}catch{return!1}}function Ve(){const t={bitmask:r,chrome:c(()=>"chrome"in window),brave:c(()=>"brave"in navigator),applePaySupport:c(()=>"ApplePaySetup"in window),opera:c(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:c(()=>window.navigator.serial!==void 0),attachShadow:c(()=>!!Element.prototype.attachShadow),caches:c(()=>!!window.caches),webAssembly:c(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:c(()=>"Buffer"in window),showModalDialog:c(()=>"showModalDialog"in window),safari:c(()=>"safari"in window),webkitPrefixedFunction:c(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:c(()=>"mozGetUserMedia"in navigator),usb:c(()=>typeof window.USB=="function"),browserCapture:c(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:c(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:c(()=>typeof window.PressureObserver=="function"),audioSession:c(()=>"audioSession"in navigator),selectAudioOutput:c(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:c(()=>"BarcodeDetector"in window),battery:c(()=>"getBattery"in navigator),devicePosture:c(()=>"DevicePosture"in window),documentPictureInPicture:c(()=>"documentPictureInPicture"in window),eyeDropper:c(()=>"EyeDropper"in window),editContext:c(()=>"EditContext"in window),fencedFrame:c(()=>"FencedFrameConfig"in window),sanitizer:c(()=>"Sanitizer"in window),otpCredential:c(()=>"OTPCredential"in window)},e=Object.keys(t).filter(n=>n!=="bitmask").map(n=>t[n]?"1":"0").join("");return t.bitmask=e,t}function Be(){const t={prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r};try{window.matchMedia("(prefers-color-scheme: dark)").matches?t.prefersColorScheme="dark":window.matchMedia("(prefers-color-scheme: light)").matches?t.prefersColorScheme="light":t.prefersColorScheme=null,t.prefersReducedMotion=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t.prefersReducedTransparency=window.matchMedia("(prefers-reduced-transparency: reduce)").matches,window.matchMedia("(color-gamut: rec2020)").matches?t.colorGamut="rec2020":window.matchMedia("(color-gamut: p3)").matches?t.colorGamut="p3":window.matchMedia("(color-gamut: srgb)").matches?t.colorGamut="srgb":t.colorGamut=null,window.matchMedia("(pointer: fine)").matches?t.pointer="fine":window.matchMedia("(pointer: coarse)").matches?t.pointer="coarse":window.matchMedia("(pointer: none)").matches?t.pointer="none":t.pointer=null,window.matchMedia("(any-pointer: fine)").matches?t.anyPointer="fine":window.matchMedia("(any-pointer: coarse)").matches?t.anyPointer="coarse":window.matchMedia("(any-pointer: none)").matches?t.anyPointer="none":t.anyPointer=null,t.hover=window.matchMedia("(hover: hover)").matches,t.anyHover=window.matchMedia("(any-hover: hover)").matches;let e=0;for(let n=0;n<=16;n++)window.matchMedia(`(color: ${n})`).matches&&(e=n);t.colorDepth=e}catch{m(t,l)}return t}function je(t){const e=t.signals.device.screenResolution;return e.width===800&&e.height===600||e.availableWidth===800&&e.availableHeight===600||e.innerWidth===800&&e.innerHeight===600}function ze(t){return t.signals.automation.webdriver===!0}function $e(t){return!!t.signals.automation.selenium}function Qe(t){return t.signals.automation.cdp===!0}function qe(t){return t.signals.automation.playwright===!0}function Ke(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function Je(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function Ye(t){return t.includes("Android")||t.includes("iPhone")||t.includes("iPod")||t.includes("iPad")}function Ze(t){const e=t.signals.browser.userAgent;return typeof e!="string"||!e.includes("Chrome")||Ye(e)?!1:t.signals.browser.features.chrome===!1}function Xe(t){return t.signals.contexts.iframe.webdriver===!0}function et(t){return t.signals.contexts.webWorker.webdriver===!0}function b(t){return typeof t!="string"||t.length===0?!0:t===s||t===l||t===v||t===r}function tt(t){const e=t.signals.contexts.webWorker,n=t.signals.graphics.webGL;return b(n.vendor)||b(n.renderer)||b(e.vendor)||b(e.renderer)?!1:e.vendor!==n.vendor||e.renderer!==n.renderer}function rt(t,e){const n=t.includes("iPad"),i=e.includes("iPad");if(n===i)return!1;const a=d=>d==="MacIntel"||d==="MacPPC";return a(t)||a(e)}function nt(t){if(t.signals.contexts.webWorker.platform===s||t.signals.contexts.webWorker.platform===l||t.signals.contexts.webWorker.platform===v)return!1;const e=t.signals.device.platform,n=t.signals.contexts.webWorker.platform;return!(e===n||rt(e,n))}function it(t){return t.signals.contexts.iframe.platform===s||t.signals.contexts.iframe.platform===l?!1:t.signals.device.platform!==t.signals.contexts.iframe.platform}function at(t){return t.signals.automation.webdriverWritable===!0}function ot(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function st(t){return t.signals.locale.internationalization.timezone==="UTC"}function ct(t){const e=t.signals.locale.languages.languages,n=t.signals.locale.languages.language;return n&&e&&Array.isArray(e)&&e.length>0?e[0]!==n:!1}function lt(t){return!!(t.signals.browser.features.chrome&&t.signals.browser.etsl!==33||t.signals.browser.features.safari&&t.signals.browser.etsl!==37||t.signals.browser.userAgent.includes("Firefox")&&t.signals.browser.etsl!==37)}function ut(t){return[t.signals.browser.userAgent,t.signals.contexts.iframe.userAgent,t.signals.contexts.webWorker.userAgent].some(n=>/bot|headless/i.test(n.toLowerCase()))}function dt(t){const e=t.signals.graphics.webgpu,n=t.signals.graphics.webGL,i=t.signals.browser.userAgent;return!!((n.vendor.includes("Apple")||n.renderer.includes("Apple"))&&!i.includes("Mac")||e.vendor.includes("apple")&&!i.includes("Mac")||e.vendor.includes("apple")&&!n.renderer.includes("Apple"))}function gt(t){const e=t.signals.device.platform,n=t.signals.browser.userAgent,i=t.signals.browser.highEntropyValues.platform;return!!(n.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||n.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||n.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))||i!==l&&i!==s&&(i.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||i.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||i.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))))}async function ht(t,e){const n=new TextEncoder().encode(e),i=new TextEncoder().encode(t),a=new Uint8Array(i.length);for(let p=0;p<i.length;p++)a[p]=i[p]^n[p%n.length];const d=String.fromCharCode(...a);return btoa(d)}class mt{constructor(){this.fingerprint={signals:{automation:{webdriver:r,webdriverWritable:r,selenium:r,cdp:r,playwright:r,navigatorPropertyDescriptors:r},device:{cpuCount:r,memory:r,platform:r,screenResolution:{width:r,height:r,pixelDepth:r,colorDepth:r,availableWidth:r,availableHeight:r,innerWidth:r,innerHeight:r,hasMultipleDisplays:r},multimediaDevices:{speakers:r,microphones:r,webcams:r},mediaQueries:{prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r}},browser:{userAgent:r,features:{bitmask:r,chrome:r,brave:r,applePaySupport:r,opera:r,serial:r,attachShadow:r,caches:r,webAssembly:r,buffer:r,showModalDialog:r,safari:r,webkitPrefixedFunction:r,mozPrefixedFunction:r,usb:r,browserCapture:r,paymentRequestUpdateEvent:r,pressureObserver:r,audioSession:r,selectAudioOutput:r,barcodeDetector:r,battery:r,devicePosture:r,documentPictureInPicture:r,eyeDropper:r,editContext:r,fencedFrame:r,sanitizer:r,otpCredential:r},plugins:{isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r},extensions:{bitmask:r,extensions:r},highEntropyValues:{architecture:r,bitness:r,brands:r,mobile:r,model:r,platform:r,platformVersion:r,uaFullVersion:r},etsl:r,maths:r,toSourceError:{toSourceError:r,hasToSource:r}},graphics:{webGL:{vendor:r,renderer:r},webgpu:{vendor:r,architecture:r,device:r,description:r},canvas:{hasModifiedCanvas:r,canvasFingerprint:r}},codecs:{audioCanPlayTypeHash:r,videoCanPlayTypeHash:r,audioMediaSourceHash:r,videoMediaSourceHash:r,rtcAudioCapabilitiesHash:r,rtcVideoCapabilitiesHash:r,hasMediaSource:r},locale:{internationalization:{timezone:r,localeLanguage:r},languages:{languages:r,language:r}},contexts:{iframe:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r},webWorker:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r,vendor:r,renderer:r}}},fsid:r,nonce:r,time:r,url:r,fastBotDetection:!1,fastBotDetectionDetails:{headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}}}}async collectSignal(e){try{return await e()}catch{return l}}generateFingerprintScannerId(){try{const e=this.fingerprint.signals,n=this.fingerprint.fastBotDetectionDetails,i="FS1",d=[n.headlessChromeScreenResolution.detected,n.hasWebdriver.detected,n.hasWebdriverWritable.detected,n.hasSeleniumProperty.detected,n.hasCDP.detected,n.hasPlaywright.detected,n.hasImpossibleDeviceMemory.detected,n.hasHighCPUCount.detected,n.hasMissingChromeObject.detected,n.hasWebdriverIframe.detected,n.hasWebdriverWorker.detected,n.hasMismatchWebGLInWorker.detected,n.hasMismatchPlatformIframe.detected,n.hasMismatchPlatformWorker.detected,n.hasSwiftshaderRenderer.detected,n.hasUTCTimezone.detected,n.hasMismatchLanguages.detected,n.hasInconsistentEtsl.detected,n.hasBotUserAgent.detected,n.hasGPUMismatch.detected,n.hasPlatformMismatch.detected].map(u=>u?"1":"0").join(""),p=[e.automation.webdriver===!0,e.automation.webdriverWritable===!0,e.automation.selenium===!0,e.automation.cdp===!0,e.automation.playwright===!0].map(u=>u?"1":"0").join(""),w=f(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),o=`${p}h${w}`,h=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,y=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,k=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",E=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",D=[e.device.screenResolution.hasMultipleDisplays===!0,e.device.mediaQueries.prefersReducedMotion===!0,e.device.mediaQueries.prefersReducedTransparency===!0,e.device.mediaQueries.hover===!0,e.device.mediaQueries.anyHover===!0].map(u=>u?"1":"0").join(""),_=[e.device.platform,e.device.screenResolution.pixelDepth,e.device.screenResolution.colorDepth,e.device.multimediaDevices.speakers,e.device.multimediaDevices.microphones,e.device.multimediaDevices.webcams,e.device.mediaQueries.prefersColorScheme,e.device.mediaQueries.colorGamut,e.device.mediaQueries.pointer,e.device.mediaQueries.anyPointer,e.device.mediaQueries.colorDepth].map(u=>String(u)).join("|"),R=f(_).slice(0,6),I=`${h}x${y}c${k}m${E}b${D}h${R}`,L=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0000000000",T=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"00000000",O=[e.browser.plugins.isValidPluginArray===!0,e.browser.plugins.pluginConsistency1===!0,e.browser.plugins.pluginOverflow===!0,e.browser.toSourceError.hasToSource===!0].map(u=>u?"1":"0").join(""),H=[e.browser.userAgent,e.browser.etsl,e.browser.maths,e.browser.plugins.pluginCount,e.browser.plugins.pluginNamesHash,e.browser.toSourceError.toSourceError,e.browser.highEntropyValues.architecture,e.browser.highEntropyValues.bitness,e.browser.highEntropyValues.platform,e.browser.highEntropyValues.platformVersion,e.browser.highEntropyValues.uaFullVersion,e.browser.highEntropyValues.mobile].map(u=>String(u)).join("|"),U=f(H).slice(0,6),N=`f${L}e${T}p${O}h${U}`,F=[e.graphics.canvas.hasModifiedCanvas===!0].map(u=>u?"1":"0").join(""),G=[e.graphics.webGL.vendor,e.graphics.webGL.renderer,e.graphics.webgpu.vendor,e.graphics.webgpu.architecture,e.graphics.webgpu.device,e.graphics.webgpu.description,e.graphics.canvas.canvasFingerprint].map(u=>String(u)).join("|"),V=f(G).slice(0,6),B=`${F}h${V}`,j=[e.codecs.hasMediaSource===!0].map(u=>u?"1":"0").join(""),z=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(u=>String(u)).join("|"),$=f(z).slice(0,6),Q=`${j}h${$}`,q=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",K=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,J=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),Y=[e.locale.internationalization.timezone,e.locale.internationalization.localeLanguage,Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.join(","):e.locale.languages.languages,e.locale.languages.language].map(u=>String(u)).join("|"),Z=f(Y).slice(0,4),X=`${q}${K}t${J}_h${Z}`,ee=[W(this.fingerprint,"iframe"),W(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(u=>u?"1":"0").join(""),te=[e.contexts.iframe.userAgent,e.contexts.iframe.platform,e.contexts.iframe.memory,e.contexts.iframe.cpuCount,e.contexts.iframe.language,e.contexts.webWorker.userAgent,e.contexts.webWorker.platform,e.contexts.webWorker.memory,e.contexts.webWorker.cpuCount,e.contexts.webWorker.language,e.contexts.webWorker.vendor,e.contexts.webWorker.renderer].map(u=>String(u)).join("|"),re=f(te).slice(0,6),ne=`${ee}h${re}`;return[i,d,o,I,N,B,Q,X,ne].join("_")}catch(e){return console.error("Error generating fingerprint scanner id",e),l}}async encryptFingerprint(e){const n="__DEFAULT_FPSCANNER_KEY__";return n.length>20&&n.indexOf("DEFAULT")>0&&n.indexOf("FPSCANNER")>0&&console.warn('[fpscanner] WARNING: Using default encryption key! Run "npx fpscanner build --key=your-secret-key" to inject your own key. See: https://github.com/antoinevastel/fpscanner#advanced-custom-builds'),await ht(JSON.stringify(e),n)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:g,test:je},{name:"hasWebdriver",severity:g,test:ze},{name:"hasWebdriverWritable",severity:g,test:at},{name:"hasSeleniumProperty",severity:g,test:$e},{name:"hasCDP",severity:g,test:Qe},{name:"hasPlaywright",severity:g,test:qe},{name:"hasImpossibleDeviceMemory",severity:g,test:Ke},{name:"hasHighCPUCount",severity:g,test:Je},{name:"hasMissingChromeObject",severity:g,test:Ze},{name:"hasWebdriverIframe",severity:g,test:Xe},{name:"hasWebdriverWorker",severity:g,test:et},{name:"hasMismatchWebGLInWorker",severity:g,test:tt},{name:"hasMismatchPlatformIframe",severity:g,test:it},{name:"hasMismatchPlatformWorker",severity:g,test:nt},{name:"hasSwiftshaderRenderer",severity:S,test:ot},{name:"hasUTCTimezone",severity:se,test:st},{name:"hasMismatchLanguages",severity:S,test:ct},{name:"hasInconsistentEtsl",severity:g,test:lt},{name:"hasBotUserAgent",severity:g,test:ut},{name:"hasGPUMismatch",severity:g,test:dt},{name:"hasPlatformMismatch",severity:g,test:gt}]}runDetectionRules(){const e=this.getDetectionRules(),n={headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}};for(const i of e)try{const a=i.test(this.fingerprint);n[i.name]={detected:a,severity:i.severity}}catch{n[i.name]={detected:!1,severity:i.severity}}return n}async collectFingerprint(e={encrypt:!0}){const{encrypt:n=!0,skipWorker:i=!1}=e,a=this.fingerprint.signals,d={webdriver:this.collectSignal(ie),webdriverWritable:this.collectSignal(Se),selenium:this.collectSignal(be),cdp:this.collectSignal(le),playwright:this.collectSignal(de),navigatorPropertyDescriptors:this.collectSignal(He),cpuCount:this.collectSignal(ge),memory:this.collectSignal(me),platform:this.collectSignal(oe),screenResolution:this.collectSignal(ve),multimediaDevices:this.collectSignal(Ee),mediaQueries:this.collectSignal(Be),userAgent:this.collectSignal(ae),browserFeatures:this.collectSignal(Ve),plugins:this.collectSignal(ke),browserExtensions:this.collectSignal(Ge),highEntropyValues:this.collectSignal(Ce),etsl:this.collectSignal(pe),maths:this.collectSignal(he),toSourceError:this.collectSignal(Re),webGL:this.collectSignal(ue),webgpu:this.collectSignal(ye),canvas:this.collectSignal(Oe),mediaCodecs:this.collectSignal(Ie),internationalization:this.collectSignal(fe),languages:this.collectSignal(we),iframe:this.collectSignal(De),webWorker:i?Promise.resolve({webdriver:v,userAgent:v,platform:v,memory:v,cpuCount:v,language:v,vendor:v,renderer:v}):this.collectSignal(_e),nonce:this.collectSignal(Ue),time:this.collectSignal(Ne),url:this.collectSignal(Fe)},p=Object.keys(d),w=await Promise.all(Object.values(d)),o=Object.fromEntries(p.map((h,y)=>[h,w[y]]));return a.automation.webdriver=o.webdriver,a.automation.webdriverWritable=o.webdriverWritable,a.automation.selenium=o.selenium,a.automation.cdp=o.cdp,a.automation.playwright=o.playwright,a.automation.navigatorPropertyDescriptors=o.navigatorPropertyDescriptors,a.device.cpuCount=o.cpuCount,a.device.memory=o.memory,a.device.platform=o.platform,a.device.screenResolution=o.screenResolution,a.device.multimediaDevices=o.multimediaDevices,a.device.mediaQueries=o.mediaQueries,a.browser.userAgent=o.userAgent,a.browser.features=o.browserFeatures,a.browser.plugins=o.plugins,a.browser.extensions=o.browserExtensions,a.browser.highEntropyValues=o.highEntropyValues,a.browser.etsl=o.etsl,a.browser.maths=o.maths,a.browser.toSourceError=o.toSourceError,a.graphics.webGL=o.webGL,a.graphics.webgpu=o.webgpu,a.graphics.canvas=o.canvas,a.codecs=o.mediaCodecs,a.locale.internationalization=o.internationalization,a.locale.languages=o.languages,a.contexts.iframe=o.iframe,a.contexts.webWorker=o.webWorker,this.fingerprint.nonce=o.nonce,this.fingerprint.time=o.time,this.fingerprint.url=o.url,this.fingerprint.fastBotDetectionDetails=this.runDetectionRules(),this.fingerprint.fastBotDetection=Object.values(this.fingerprint.fastBotDetectionDetails).some(h=>h.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),n?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}}exports.default=mt;
48
+ }`,y=new Blob([p],{type:"application/javascript"});i=URL.createObjectURL(y),n=new Worker(i),a=window.setTimeout(()=>{g(),d(e,l),t(e)},2e3),n.onmessage=function(o){try{const m=w=>typeof w>"u"?s:w;e.vendor=m(o.data.vendor),e.renderer=m(o.data.renderer),e.userAgent=m(o.data.userAgent),e.language=m(o.data.language),e.platform=m(o.data.platform),e.memory=m(o.data.memory),e.cpuCount=m(o.data.cpuCount)}catch{d(e,l)}finally{g(),t(e)}},n.onerror=function(){g(),d(e,l),t(e)}}catch{g(),d(e,l),t(e)}})}function Re(){const t={toSourceError:r,hasToSource:!1};try{null.usdfsh}catch(e){t.toSourceError=e.toString()}try{throw"xyz"}catch(e){try{e.toSource(),t.hasToSource=!0}catch{t.hasToSource=!1}}return t}const C=['audio/mp4; codecs="mp4a.40.2"',"audio/mpeg;",'audio/webm; codecs="vorbis"','audio/ogg; codecs="vorbis"','audio/wav; codecs="1"','audio/ogg; codecs="speex"','audio/ogg; codecs="flac"','audio/3gpp; codecs="samr"'],A=['video/mp4; codecs="avc1.42E01E, mp4a.40.2"','video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="avc1.58A01E"','video/mp4; codecs="avc1.4D401E"','video/mp4; codecs="avc1.64001E"','video/mp4; codecs="mp4v.20.8"','video/mp4; codecs="mp4v.20.240"','video/webm; codecs="vp8"','video/ogg; codecs="theora"','video/ogg; codecs="dirac"','video/3gpp; codecs="mp4v.20.8"','video/x-matroska; codecs="theora"'];function P(t,e){const n={};try{const i=document.createElement(e);for(const a of t)try{n[a]=i.canPlayType(a)||null}catch{n[a]=null}}catch{for(const i of t)n[i]=null}return n}function k(t){const e={},n=window.MediaSource;if(!n||typeof n.isTypeSupported!="function"){for(const i of t)e[i]=null;return e}for(const i of t)try{e[i]=n.isTypeSupported(i)}catch{e[i]=null}return e}function M(t){try{const e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){const n=e.getCapabilities(t);return f(JSON.stringify(n))}return s}catch{return l}}function Le(){const t={audioCanPlayTypeHash:s,videoCanPlayTypeHash:s,audioMediaSourceHash:s,videoMediaSourceHash:s,rtcAudioCapabilitiesHash:s,rtcVideoCapabilitiesHash:s,hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;const e=P(C,"audio"),n=P(A,"video");t.audioCanPlayTypeHash=f(JSON.stringify(e)),t.videoCanPlayTypeHash=f(JSON.stringify(n));const i=k(C),a=k(A);t.audioMediaSourceHash=f(JSON.stringify(i)),t.videoMediaSourceHash=f(JSON.stringify(a)),t.rtcAudioCapabilitiesHash=M("audio"),t.rtcVideoCapabilitiesHash=M("video")}catch{d(t,l)}return t}async function Ie(){return new Promise(t=>{try{const e=new Image,n=document.createElement("canvas").getContext("2d");e.onload=()=>{n.drawImage(e,0,0),t(n.getImageData(0,0,1,1).data.filter(i=>i===0).length!=4)},e.onerror=()=>{t(l)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(l)}})}function Te(){var t=document.createElement("canvas");t.width=400,t.height=200,t.style.display="inline";var e=t.getContext("2d");try{return e.rect(0,0,10,10),e.rect(2,2,6,6),e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.font="11pt no-real-font-123",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",4,45),e.globalCompositeOperation="multiply",e.fillStyle="rgb(255,0,255)",e.beginPath(),e.arc(50,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(0,255,255)",e.beginPath(),e.arc(100,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,255,0)",e.beginPath(),e.arc(75,100,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,0,255)",e.arc(75,75,75,0,2*Math.PI,!0),e.arc(75,75,25,0,2*Math.PI,!0),e.fill("evenodd"),f(t.toDataURL())}catch{return l}}async function Oe(){const t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await Ie(),t.canvasFingerprint=Te(),t}function He(){const t=["deviceMemory","hardwareConcurrency","language","languages","platform"],e=[];for(const n of t){const i=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator),n);i&&i.value?e.push("1"):e.push("0")}return e.join("")}function ze(){return Math.random().toString(36).substring(2,15)}function Ue(){return new Date().getTime()}function Ne(){return window.location.href}function x(t,e){const n=t.signals;return e==="iframe"?n.contexts.iframe.webdriver!==n.automation.webdriver||n.contexts.iframe.userAgent!==n.browser.userAgent||n.contexts.iframe.platform!==n.device.platform||n.contexts.iframe.memory!==n.device.memory||n.contexts.iframe.cpuCount!==n.device.cpuCount:n.contexts.webWorker.webdriver!==n.automation.webdriver||n.contexts.webWorker.userAgent!==n.browser.userAgent||n.contexts.webWorker.platform!==n.device.platform||n.contexts.webWorker.memory!==n.device.memory||n.contexts.webWorker.cpuCount!==n.device.cpuCount}function Fe(){const t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),n=typeof window.ethereum<"u",i=document.getElementById("coupon-birds-drop-div")!==null,a=document.querySelector("deepl-input-controller")!==null,g=document.getElementById("monica-content-root")!==null,p=document.querySelector("chatgpt-sidebar")!==null,y=typeof window.__REQUESTLY__<"u",o=Array.from(document.querySelectorAll("*")).filter(m=>m.tagName.toLowerCase().startsWith("veepn-")).length>0;return t.bitmask=[e?"1":"0",n?"1":"0",i?"1":"0",a?"1":"0",g?"1":"0",p?"1":"0",y?"1":"0",o?"1":"0"].join(""),e&&t.extensions.push("grammarly"),n&&t.extensions.push("metamask"),i&&t.extensions.push("coupon-birds"),a&&t.extensions.push("deepl"),g&&t.extensions.push("monica-ai"),p&&t.extensions.push("sider-ai"),y&&t.extensions.push("requestly"),o&&t.extensions.push("veepn"),t}function c(t){try{return t()}catch{return!1}}function Ge(){const t={bitmask:r,chrome:c(()=>"chrome"in window),brave:c(()=>"brave"in navigator),applePaySupport:c(()=>"ApplePaySetup"in window),opera:c(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:c(()=>window.navigator.serial!==void 0),attachShadow:c(()=>!!Element.prototype.attachShadow),caches:c(()=>!!window.caches),webAssembly:c(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:c(()=>"Buffer"in window),showModalDialog:c(()=>"showModalDialog"in window),safari:c(()=>"safari"in window),webkitPrefixedFunction:c(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:c(()=>"mozGetUserMedia"in navigator),usb:c(()=>typeof window.USB=="function"),browserCapture:c(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:c(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:c(()=>typeof window.PressureObserver=="function"),audioSession:c(()=>"audioSession"in navigator),selectAudioOutput:c(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:c(()=>"BarcodeDetector"in window),battery:c(()=>"getBattery"in navigator),devicePosture:c(()=>"DevicePosture"in window),documentPictureInPicture:c(()=>"documentPictureInPicture"in window),eyeDropper:c(()=>"EyeDropper"in window),editContext:c(()=>"EditContext"in window),fencedFrame:c(()=>"FencedFrameConfig"in window),sanitizer:c(()=>"Sanitizer"in window),otpCredential:c(()=>"OTPCredential"in window),sumPrecise:c(()=>"sumPrecise"in Math)},e=Object.keys(t).filter(n=>n!=="bitmask").map(n=>t[n]?"1":"0").join("");return t.bitmask=e,t}function Ve(){const t={prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r};try{window.matchMedia("(prefers-color-scheme: dark)").matches?t.prefersColorScheme="dark":window.matchMedia("(prefers-color-scheme: light)").matches?t.prefersColorScheme="light":t.prefersColorScheme=null,t.prefersReducedMotion=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t.prefersReducedTransparency=window.matchMedia("(prefers-reduced-transparency: reduce)").matches,window.matchMedia("(color-gamut: rec2020)").matches?t.colorGamut="rec2020":window.matchMedia("(color-gamut: p3)").matches?t.colorGamut="p3":window.matchMedia("(color-gamut: srgb)").matches?t.colorGamut="srgb":t.colorGamut=null,window.matchMedia("(pointer: fine)").matches?t.pointer="fine":window.matchMedia("(pointer: coarse)").matches?t.pointer="coarse":window.matchMedia("(pointer: none)").matches?t.pointer="none":t.pointer=null,window.matchMedia("(any-pointer: fine)").matches?t.anyPointer="fine":window.matchMedia("(any-pointer: coarse)").matches?t.anyPointer="coarse":window.matchMedia("(any-pointer: none)").matches?t.anyPointer="none":t.anyPointer=null,t.hover=window.matchMedia("(hover: hover)").matches,t.anyHover=window.matchMedia("(any-hover: hover)").matches;let e=0;for(let n=0;n<=16;n++)window.matchMedia(`(color: ${n})`).matches&&(e=n);t.colorDepth=e}catch{d(t,l)}return t}async function je(){const t={keyboardLayout:r,keyboardLayoutSize:r};if("keyboard"in navigator&&typeof navigator.keyboard.getLayoutMap<"u")try{const e=await navigator.keyboard.getLayoutMap();t.keyboardLayout=Array.from(e.entries()).map(([n,i])=>`${n},${i}`).join(" "),t.keyboardLayoutSize=e.size}catch{d(t,l)}else d(t,s);return t}async function Be(){const t={summarizerAvailability:r,summarizerLanguageAvailability:r};if("Summarizer"in window)try{t.summarizerAvailability=await window.Summarizer.availability(),t.summarizerLanguageAvailability=await window.Summarizer.availability({expectedInputLanguages:[navigator.language]})}catch{d(t,l)}else d(t,s);return t}function $e(t){const e=t.signals.device.screenResolution;return e.width===800&&e.height===600||e.availableWidth===800&&e.availableHeight===600||e.innerWidth===800&&e.innerHeight===600}function Qe(t){return t.signals.automation.webdriver===!0}function qe(t){return!!t.signals.automation.selenium}function Ke(t){return t.signals.automation.cdp===!0}function Je(t){return t.signals.automation.playwright===!0}function Ye(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function Ze(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function Xe(t){return t.includes("Android")||t.includes("iPhone")||t.includes("iPod")||t.includes("iPad")}function et(t){const e=t.signals.browser.userAgent;return typeof e!="string"||!e.includes("Chrome")||Xe(e)?!1:t.signals.browser.features.chrome===!1}function tt(t){return t.signals.contexts.iframe.webdriver===!0}function rt(t){return t.signals.contexts.webWorker.webdriver===!0}function b(t){return typeof t!="string"||t.length===0?!0:t===s||t===l||t===v||t===r}function nt(t){const e=t.signals.contexts.webWorker,n=t.signals.graphics.webGL;return b(n.vendor)||b(n.renderer)||b(e.vendor)||b(e.renderer)?!1:e.vendor!==n.vendor||e.renderer!==n.renderer}function it(t,e){const n=t.includes("iPad"),i=e.includes("iPad");if(n===i)return!1;const a=g=>g==="MacIntel"||g==="MacPPC";return a(t)||a(e)}function at(t){if(t.signals.contexts.webWorker.platform===s||t.signals.contexts.webWorker.platform===l||t.signals.contexts.webWorker.platform===v)return!1;const e=t.signals.device.platform,n=t.signals.contexts.webWorker.platform;return!(e===n||it(e,n))}function ot(t){return t.signals.contexts.iframe.platform===s||t.signals.contexts.iframe.platform===l?!1:t.signals.device.platform!==t.signals.contexts.iframe.platform}function st(t){return t.signals.automation.webdriverWritable===!0}function ct(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function lt(t){return t.signals.locale.internationalization.timezone==="UTC"}function ut(t){const e=t.signals.locale.languages.languages,n=t.signals.locale.languages.language;return n&&e&&Array.isArray(e)&&e.length>0?e[0]!==n:!1}function dt(t){return!!(t.signals.browser.features.chrome&&t.signals.browser.etsl!==33||t.signals.browser.features.safari&&t.signals.browser.etsl!==37||t.signals.browser.userAgent.includes("Firefox")&&t.signals.browser.etsl!==37)}function gt(t){return[t.signals.browser.userAgent,t.signals.contexts.iframe.userAgent,t.signals.contexts.webWorker.userAgent].some(n=>/bot|headless/i.test(n.toLowerCase()))}function ht(t){const e=t.signals.graphics.webgpu,n=t.signals.graphics.webGL,i=t.signals.browser.userAgent;return!!((n.vendor.includes("Apple")||n.renderer.includes("Apple"))&&!i.includes("Mac")||e.vendor.includes("apple")&&!i.includes("Mac")||e.vendor.includes("apple")&&!n.renderer.includes("Apple"))}function mt(t){const e=t.signals.device.platform,n=t.signals.browser.userAgent,i=t.signals.browser.highEntropyValues.platform;return!!(n.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||n.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||n.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))||i!==l&&i!==s&&(i.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||i.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||i.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))))}async function pt(t,e){const n=new TextEncoder().encode(e),i=new TextEncoder().encode(t),a=new Uint8Array(i.length);for(let p=0;p<i.length;p++)a[p]=i[p]^n[p%n.length];const g=String.fromCharCode(...a);return btoa(g)}class ft{constructor(){this.fingerprint={signals:{automation:{webdriver:r,webdriverWritable:r,selenium:r,cdp:r,playwright:r,navigatorPropertyDescriptors:r},device:{cpuCount:r,memory:r,platform:r,screenResolution:{width:r,height:r,pixelDepth:r,colorDepth:r,availableWidth:r,availableHeight:r,innerWidth:r,innerHeight:r,hasMultipleDisplays:r},multimediaDevices:{speakers:r,microphones:r,webcams:r},mediaQueries:{prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r},keyboard:{keyboardLayout:r,keyboardLayoutSize:r}},browser:{userAgent:r,features:{bitmask:r,chrome:r,brave:r,applePaySupport:r,opera:r,serial:r,attachShadow:r,caches:r,webAssembly:r,buffer:r,showModalDialog:r,safari:r,webkitPrefixedFunction:r,mozPrefixedFunction:r,usb:r,browserCapture:r,paymentRequestUpdateEvent:r,pressureObserver:r,audioSession:r,selectAudioOutput:r,barcodeDetector:r,battery:r,devicePosture:r,documentPictureInPicture:r,eyeDropper:r,editContext:r,fencedFrame:r,sanitizer:r,otpCredential:r},plugins:{isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r},extensions:{bitmask:r,extensions:r},highEntropyValues:{architecture:r,bitness:r,brands:r,mobile:r,model:r,platform:r,platformVersion:r,uaFullVersion:r},etsl:r,maths:r,toSourceError:{toSourceError:r,hasToSource:r},ai:{summarizerAvailability:r,summarizerLanguageAvailability:r}},graphics:{webGL:{vendor:r,renderer:r},webgpu:{vendor:r,architecture:r,device:r,description:r},canvas:{hasModifiedCanvas:r,canvasFingerprint:r}},codecs:{audioCanPlayTypeHash:r,videoCanPlayTypeHash:r,audioMediaSourceHash:r,videoMediaSourceHash:r,rtcAudioCapabilitiesHash:r,rtcVideoCapabilitiesHash:r,hasMediaSource:r},locale:{internationalization:{timezone:r,localeLanguage:r},languages:{languages:r,language:r}},contexts:{iframe:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r},webWorker:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r,vendor:r,renderer:r}}},fsid:r,nonce:r,time:r,url:r,fastBotDetection:!1,fastBotDetectionDetails:{headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}}}}async collectSignal(e){try{return await e()}catch{return l}}generateFingerprintScannerId(){try{const e=this.fingerprint.signals,n=this.fingerprint.fastBotDetectionDetails,i="FS1",g=[n.headlessChromeScreenResolution.detected,n.hasWebdriver.detected,n.hasWebdriverWritable.detected,n.hasSeleniumProperty.detected,n.hasCDP.detected,n.hasPlaywright.detected,n.hasImpossibleDeviceMemory.detected,n.hasHighCPUCount.detected,n.hasMissingChromeObject.detected,n.hasWebdriverIframe.detected,n.hasWebdriverWorker.detected,n.hasMismatchWebGLInWorker.detected,n.hasMismatchPlatformIframe.detected,n.hasMismatchPlatformWorker.detected,n.hasSwiftshaderRenderer.detected,n.hasUTCTimezone.detected,n.hasMismatchLanguages.detected,n.hasInconsistentEtsl.detected,n.hasBotUserAgent.detected,n.hasGPUMismatch.detected,n.hasPlatformMismatch.detected].map(u=>u?"1":"0").join(""),p=[e.automation.webdriver===!0,e.automation.webdriverWritable===!0,e.automation.selenium===!0,e.automation.cdp===!0,e.automation.playwright===!0].map(u=>u?"1":"0").join(""),y=f(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),o=`${p}h${y}`,m=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,w=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,W=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",E=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",D=[e.device.screenResolution.hasMultipleDisplays===!0,e.device.mediaQueries.prefersReducedMotion===!0,e.device.mediaQueries.prefersReducedTransparency===!0,e.device.mediaQueries.hover===!0,e.device.mediaQueries.anyHover===!0].map(u=>u?"1":"0").join(""),_=[e.device.platform,e.device.screenResolution.pixelDepth,e.device.screenResolution.colorDepth,e.device.multimediaDevices.speakers,e.device.multimediaDevices.microphones,e.device.multimediaDevices.webcams,e.device.mediaQueries.prefersColorScheme,e.device.mediaQueries.colorGamut,e.device.mediaQueries.pointer,e.device.mediaQueries.anyPointer,e.device.mediaQueries.colorDepth,e.device.keyboard.keyboardLayout,e.device.keyboard.keyboardLayoutSize].map(u=>String(u)).join("|"),R=f(_).slice(0,6),L=`${m}x${w}c${W}m${E}b${D}h${R}`,I=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0".repeat(29),T=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"0".repeat(8),O=[e.browser.plugins.isValidPluginArray===!0,e.browser.plugins.pluginConsistency1===!0,e.browser.plugins.pluginOverflow===!0,e.browser.toSourceError.hasToSource===!0].map(u=>u?"1":"0").join(""),H=[e.browser.userAgent,e.browser.etsl,e.browser.maths,e.browser.plugins.pluginCount,e.browser.plugins.pluginNamesHash,e.browser.toSourceError.toSourceError,e.browser.highEntropyValues.architecture,e.browser.highEntropyValues.bitness,e.browser.highEntropyValues.platform,e.browser.highEntropyValues.platformVersion,e.browser.highEntropyValues.uaFullVersion,e.browser.highEntropyValues.mobile,e.browser.ai.summarizerAvailability,e.browser.ai.summarizerLanguageAvailability].map(u=>String(u)).join("|"),z=f(H).slice(0,6),U=`f${I}e${T}p${O}h${z}`,N=[e.graphics.canvas.hasModifiedCanvas===!0].map(u=>u?"1":"0").join(""),F=[e.graphics.webGL.vendor,e.graphics.webGL.renderer,e.graphics.webgpu.vendor,e.graphics.webgpu.architecture,e.graphics.webgpu.device,e.graphics.webgpu.description,e.graphics.canvas.canvasFingerprint].map(u=>String(u)).join("|"),G=f(F).slice(0,6),V=`${N}h${G}`,j=[e.codecs.hasMediaSource===!0].map(u=>u?"1":"0").join(""),B=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(u=>String(u)).join("|"),$=f(B).slice(0,6),Q=`${j}h${$}`,q=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",K=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,J=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),Y=[e.locale.internationalization.timezone,e.locale.internationalization.localeLanguage,Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.join(","):e.locale.languages.languages,e.locale.languages.language].map(u=>String(u)).join("|"),Z=f(Y).slice(0,4),X=`${q}${K}t${J}_h${Z}`,ee=[x(this.fingerprint,"iframe"),x(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(u=>u?"1":"0").join(""),te=[e.contexts.iframe.userAgent,e.contexts.iframe.platform,e.contexts.iframe.memory,e.contexts.iframe.cpuCount,e.contexts.iframe.language,e.contexts.webWorker.userAgent,e.contexts.webWorker.platform,e.contexts.webWorker.memory,e.contexts.webWorker.cpuCount,e.contexts.webWorker.language,e.contexts.webWorker.vendor,e.contexts.webWorker.renderer].map(u=>String(u)).join("|"),re=f(te).slice(0,6),ne=`${ee}h${re}`;return[i,g,o,L,U,V,Q,X,ne].join("_")}catch(e){return console.error("Error generating fingerprint scanner id",e),l}}async encryptFingerprint(e){const n="__DEFAULT_FPSCANNER_KEY__";return n.length>20&&n.indexOf("DEFAULT")>0&&n.indexOf("FPSCANNER")>0&&console.warn('[fpscanner] WARNING: Using default encryption key! Run "npx fpscanner build --key=your-secret-key" to inject your own key. See: https://github.com/antoinevastel/fpscanner#advanced-custom-builds'),await pt(JSON.stringify(e),n)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:h,test:$e},{name:"hasWebdriver",severity:h,test:Qe},{name:"hasWebdriverWritable",severity:h,test:st},{name:"hasSeleniumProperty",severity:h,test:qe},{name:"hasCDP",severity:h,test:Ke},{name:"hasPlaywright",severity:h,test:Je},{name:"hasImpossibleDeviceMemory",severity:h,test:Ye},{name:"hasHighCPUCount",severity:h,test:Ze},{name:"hasMissingChromeObject",severity:h,test:et},{name:"hasWebdriverIframe",severity:h,test:tt},{name:"hasWebdriverWorker",severity:h,test:rt},{name:"hasMismatchWebGLInWorker",severity:h,test:nt},{name:"hasMismatchPlatformIframe",severity:h,test:ot},{name:"hasMismatchPlatformWorker",severity:h,test:at},{name:"hasSwiftshaderRenderer",severity:S,test:ct},{name:"hasUTCTimezone",severity:se,test:lt},{name:"hasMismatchLanguages",severity:S,test:ut},{name:"hasInconsistentEtsl",severity:h,test:dt},{name:"hasBotUserAgent",severity:h,test:gt},{name:"hasGPUMismatch",severity:h,test:ht},{name:"hasPlatformMismatch",severity:h,test:mt}]}runDetectionRules(){const e=this.getDetectionRules(),n={headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}};for(const i of e)try{const a=i.test(this.fingerprint);n[i.name]={detected:a,severity:i.severity}}catch{n[i.name]={detected:!1,severity:i.severity}}return n}async collectFingerprint(e={encrypt:!0}){const{encrypt:n=!0,skipWorker:i=!1}=e,a=this.fingerprint.signals,g={webdriver:this.collectSignal(ie),webdriverWritable:this.collectSignal(Se),selenium:this.collectSignal(be),cdp:this.collectSignal(le),playwright:this.collectSignal(de),navigatorPropertyDescriptors:this.collectSignal(He),cpuCount:this.collectSignal(ge),memory:this.collectSignal(me),platform:this.collectSignal(oe),screenResolution:this.collectSignal(ve),multimediaDevices:this.collectSignal(Ee),mediaQueries:this.collectSignal(Ve),keyboard:this.collectSignal(je),userAgent:this.collectSignal(ae),browserFeatures:this.collectSignal(Ge),plugins:this.collectSignal(We),browserExtensions:this.collectSignal(Fe),highEntropyValues:this.collectSignal(Ce),etsl:this.collectSignal(pe),maths:this.collectSignal(he),toSourceError:this.collectSignal(Re),ai:this.collectSignal(Be),webGL:this.collectSignal(ue),webgpu:this.collectSignal(we),canvas:this.collectSignal(Oe),mediaCodecs:this.collectSignal(Le),internationalization:this.collectSignal(fe),languages:this.collectSignal(ye),iframe:this.collectSignal(De),webWorker:i?Promise.resolve({webdriver:v,userAgent:v,platform:v,memory:v,cpuCount:v,language:v,vendor:v,renderer:v}):this.collectSignal(_e),nonce:this.collectSignal(ze),time:this.collectSignal(Ue),url:this.collectSignal(Ne)},p=Object.keys(g),y=await Promise.all(Object.values(g)),o=Object.fromEntries(p.map((m,w)=>[m,y[w]]));return a.automation.webdriver=o.webdriver,a.automation.webdriverWritable=o.webdriverWritable,a.automation.selenium=o.selenium,a.automation.cdp=o.cdp,a.automation.playwright=o.playwright,a.automation.navigatorPropertyDescriptors=o.navigatorPropertyDescriptors,a.device.cpuCount=o.cpuCount,a.device.memory=o.memory,a.device.platform=o.platform,a.device.screenResolution=o.screenResolution,a.device.multimediaDevices=o.multimediaDevices,a.device.mediaQueries=o.mediaQueries,a.device.keyboard=o.keyboard,a.browser.userAgent=o.userAgent,a.browser.features=o.browserFeatures,a.browser.plugins=o.plugins,a.browser.extensions=o.browserExtensions,a.browser.highEntropyValues=o.highEntropyValues,a.browser.etsl=o.etsl,a.browser.maths=o.maths,a.browser.toSourceError=o.toSourceError,a.browser.ai=o.ai,a.graphics.webGL=o.webGL,a.graphics.webgpu=o.webgpu,a.graphics.canvas=o.canvas,a.codecs=o.mediaCodecs,a.locale.internationalization=o.internationalization,a.locale.languages=o.languages,a.contexts.iframe=o.iframe,a.contexts.webWorker=o.webWorker,this.fingerprint.nonce=o.nonce,this.fingerprint.time=o.time,this.fingerprint.url=o.url,this.fingerprint.fastBotDetectionDetails=this.runDetectionRules(),this.fingerprint.fastBotDetection=Object.values(this.fingerprint.fastBotDetectionDetails).some(m=>m.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),n?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}}exports.default=ft;
@@ -7,7 +7,7 @@ function ae() {
7
7
  function oe() {
8
8
  return navigator.platform;
9
9
  }
10
- const l = "ERROR", r = "INIT", s = "NA", v = "SKIPPED", g = "high", S = "low", se = "medium";
10
+ const l = "ERROR", r = "INIT", s = "NA", v = "SKIPPED", h = "high", S = "low", se = "medium";
11
11
  function f(t) {
12
12
  let e = 0;
13
13
  for (let n = 0, i = t.length; n < i; n++) {
@@ -16,7 +16,7 @@ function f(t) {
16
16
  }
17
17
  return e.toString(16).padStart(8, "0");
18
18
  }
19
- function m(t, e) {
19
+ function d(t, e) {
20
20
  for (const n in t)
21
21
  t[n] = e;
22
22
  }
@@ -42,12 +42,12 @@ function ue() {
42
42
  renderer: r
43
43
  };
44
44
  if (ce())
45
- return m(t, s), t;
45
+ return d(t, s), t;
46
46
  try {
47
47
  var e = document.createElement("canvas"), n = e.getContext("webgl") || e.getContext("experimental-webgl");
48
- n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info") >= 0 ? (t.vendor = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL), t.renderer = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)) : m(t, s);
48
+ n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info") >= 0 ? (t.vendor = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL), t.renderer = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)) : d(t, s);
49
49
  } catch {
50
- m(t, l);
50
+ d(t, l);
51
51
  }
52
52
  return t;
53
53
  }
@@ -71,7 +71,7 @@ function he() {
71
71
  } catch {
72
72
  t.push(-1);
73
73
  }
74
- }), f(t.map(String).join(","));
74
+ }), "sumPrecise" in Math ? t.push(Math.sumPrecise([1e20, 0.1, -1e20])) : t.push(-1), f(t.map(String).join(","));
75
75
  }
76
76
  function me() {
77
77
  return navigator.deviceMemory || s;
@@ -108,13 +108,13 @@ function ve() {
108
108
  hasMultipleDisplays: typeof screen.isExtended < "u" ? screen.isExtended : s
109
109
  };
110
110
  }
111
- function we() {
111
+ function ye() {
112
112
  return {
113
113
  languages: navigator.languages,
114
114
  language: navigator.language
115
115
  };
116
116
  }
117
- async function ye() {
117
+ async function we() {
118
118
  const t = {
119
119
  vendor: r,
120
120
  architecture: r,
@@ -126,10 +126,10 @@ async function ye() {
126
126
  const e = await navigator.gpu.requestAdapter();
127
127
  e && (t.vendor = e.info.vendor, t.architecture = e.info.architecture, t.device = e.info.device, t.description = e.info.description);
128
128
  } catch {
129
- m(t, l);
129
+ d(t, l);
130
130
  }
131
131
  else
132
- m(t, s);
132
+ d(t, s);
133
133
  return t;
134
134
  }
135
135
  function be() {
@@ -204,10 +204,10 @@ async function Ce() {
204
204
  ]);
205
205
  e.architecture = n.architecture, e.bitness = n.bitness, e.brands = n.brands, e.mobile = n.mobile, e.model = n.model, e.platform = n.platform, e.platformVersion = n.platformVersion, e.uaFullVersion = n.uaFullVersion;
206
206
  } catch {
207
- m(e, l);
207
+ d(e, l);
208
208
  }
209
209
  else
210
- m(e, s);
210
+ d(e, s);
211
211
  return e;
212
212
  }
213
213
  function Ae() {
@@ -222,10 +222,10 @@ function Pe() {
222
222
  t.push(navigator.plugins[e].name);
223
223
  return f(t.join(","));
224
224
  }
225
- function Me() {
225
+ function ke() {
226
226
  return navigator.plugins ? navigator.plugins.length : s;
227
227
  }
228
- function xe() {
228
+ function Me() {
229
229
  if (!navigator.plugins) return s;
230
230
  try {
231
231
  return navigator.plugins[0] === navigator.plugins[0][0].enabledPlugin;
@@ -233,7 +233,7 @@ function xe() {
233
233
  return l;
234
234
  }
235
235
  }
236
- function We() {
236
+ function xe() {
237
237
  if (!navigator.plugins) return s;
238
238
  try {
239
239
  return navigator.plugins.item(4294967296) !== navigator.plugins[0];
@@ -241,7 +241,7 @@ function We() {
241
241
  return l;
242
242
  }
243
243
  }
244
- function ke() {
244
+ function We() {
245
245
  const t = {
246
246
  isValidPluginArray: r,
247
247
  pluginCount: r,
@@ -250,9 +250,9 @@ function ke() {
250
250
  pluginOverflow: r
251
251
  };
252
252
  try {
253
- t.isValidPluginArray = Ae(), t.pluginCount = Me(), t.pluginNamesHash = Pe(), t.pluginConsistency1 = xe(), t.pluginOverflow = We();
253
+ t.isValidPluginArray = Ae(), t.pluginCount = ke(), t.pluginNamesHash = Pe(), t.pluginConsistency1 = Me(), t.pluginOverflow = xe();
254
254
  } catch {
255
- m(t, l);
255
+ d(t, l);
256
256
  }
257
257
  return t;
258
258
  }
@@ -276,9 +276,9 @@ async function Ee() {
276
276
  webcams: e.videoinput
277
277
  });
278
278
  } else
279
- return m(e, s), t(e);
279
+ return d(e, s), t(e);
280
280
  } else
281
- return m(e, s), t(e);
281
+ return d(e, s), t(e);
282
282
  });
283
283
  }
284
284
  function De() {
@@ -296,7 +296,7 @@ function De() {
296
296
  const i = e.contentWindow?.navigator;
297
297
  t.webdriver = i.webdriver ?? !1, t.userAgent = i.userAgent ?? s, t.platform = i.platform ?? s, t.memory = i.deviceMemory ?? s, t.cpuCount = i.hardwareConcurrency ?? s, t.language = i.language ?? s;
298
298
  } catch {
299
- m(t, l);
299
+ d(t, l);
300
300
  } finally {
301
301
  if (n)
302
302
  try {
@@ -318,7 +318,7 @@ async function _e() {
318
318
  cpuCount: r
319
319
  };
320
320
  let n = null, i = null, a = null;
321
- const d = () => {
321
+ const g = () => {
322
322
  a && clearTimeout(a), n && n.terminate(), i && URL.revokeObjectURL(i);
323
323
  };
324
324
  try {
@@ -369,23 +369,23 @@ async function _e() {
369
369
  self.postMessage(fingerprintWorker);
370
370
  } catch (e) {
371
371
  self.postMessage(fingerprintWorker);
372
- }`, w = new Blob([p], { type: "application/javascript" });
373
- i = URL.createObjectURL(w), n = new Worker(i), a = window.setTimeout(() => {
374
- d(), m(e, l), t(e);
372
+ }`, y = new Blob([p], { type: "application/javascript" });
373
+ i = URL.createObjectURL(y), n = new Worker(i), a = window.setTimeout(() => {
374
+ g(), d(e, l), t(e);
375
375
  }, 2e3), n.onmessage = function(o) {
376
376
  try {
377
- const h = (y) => typeof y > "u" ? s : y;
378
- e.vendor = h(o.data.vendor), e.renderer = h(o.data.renderer), e.userAgent = h(o.data.userAgent), e.language = h(o.data.language), e.platform = h(o.data.platform), e.memory = h(o.data.memory), e.cpuCount = h(o.data.cpuCount);
377
+ const m = (w) => typeof w > "u" ? s : w;
378
+ e.vendor = m(o.data.vendor), e.renderer = m(o.data.renderer), e.userAgent = m(o.data.userAgent), e.language = m(o.data.language), e.platform = m(o.data.platform), e.memory = m(o.data.memory), e.cpuCount = m(o.data.cpuCount);
379
379
  } catch {
380
- m(e, l);
380
+ d(e, l);
381
381
  } finally {
382
- d(), t(e);
382
+ g(), t(e);
383
383
  }
384
384
  }, n.onerror = function() {
385
- d(), m(e, l), t(e);
385
+ g(), d(e, l), t(e);
386
386
  };
387
387
  } catch {
388
- d(), m(e, l), t(e);
388
+ g(), d(e, l), t(e);
389
389
  }
390
390
  });
391
391
  }
@@ -449,7 +449,7 @@ function P(t, e) {
449
449
  }
450
450
  return n;
451
451
  }
452
- function M(t) {
452
+ function k(t) {
453
453
  const e = {}, n = window.MediaSource;
454
454
  if (!n || typeof n.isTypeSupported != "function") {
455
455
  for (const i of t)
@@ -464,7 +464,7 @@ function M(t) {
464
464
  }
465
465
  return e;
466
466
  }
467
- function x(t) {
467
+ function M(t) {
468
468
  try {
469
469
  const e = window.RTCRtpReceiver;
470
470
  if (e && typeof e.getCapabilities == "function") {
@@ -476,7 +476,7 @@ function x(t) {
476
476
  return l;
477
477
  }
478
478
  }
479
- function Ie() {
479
+ function Le() {
480
480
  const t = {
481
481
  audioCanPlayTypeHash: s,
482
482
  videoCanPlayTypeHash: s,
@@ -490,14 +490,14 @@ function Ie() {
490
490
  t.hasMediaSource = !!window.MediaSource;
491
491
  const e = P(C, "audio"), n = P(A, "video");
492
492
  t.audioCanPlayTypeHash = f(JSON.stringify(e)), t.videoCanPlayTypeHash = f(JSON.stringify(n));
493
- const i = M(C), a = M(A);
494
- t.audioMediaSourceHash = f(JSON.stringify(i)), t.videoMediaSourceHash = f(JSON.stringify(a)), t.rtcAudioCapabilitiesHash = x("audio"), t.rtcVideoCapabilitiesHash = x("video");
493
+ const i = k(C), a = k(A);
494
+ t.audioMediaSourceHash = f(JSON.stringify(i)), t.videoMediaSourceHash = f(JSON.stringify(a)), t.rtcAudioCapabilitiesHash = M("audio"), t.rtcVideoCapabilitiesHash = M("video");
495
495
  } catch {
496
- m(t, l);
496
+ d(t, l);
497
497
  }
498
498
  return t;
499
499
  }
500
- async function Le() {
500
+ async function Ie() {
501
501
  return new Promise((t) => {
502
502
  try {
503
503
  const e = new Image(), n = document.createElement("canvas").getContext("2d");
@@ -526,7 +526,7 @@ async function Oe() {
526
526
  hasModifiedCanvas: r,
527
527
  canvasFingerprint: r
528
528
  };
529
- return t.hasModifiedCanvas = await Le(), t.canvasFingerprint = Te(), t;
529
+ return t.hasModifiedCanvas = await Ie(), t.canvasFingerprint = Te(), t;
530
530
  }
531
531
  function He() {
532
532
  const t = ["deviceMemory", "hardwareConcurrency", "language", "languages", "platform"], e = [];
@@ -536,34 +536,34 @@ function He() {
536
536
  }
537
537
  return e.join("");
538
538
  }
539
- function Ue() {
539
+ function ze() {
540
540
  return Math.random().toString(36).substring(2, 15);
541
541
  }
542
- function Ne() {
542
+ function Ue() {
543
543
  return (/* @__PURE__ */ new Date()).getTime();
544
544
  }
545
- function Fe() {
545
+ function Ne() {
546
546
  return window.location.href;
547
547
  }
548
- function W(t, e) {
548
+ function x(t, e) {
549
549
  const n = t.signals;
550
550
  return e === "iframe" ? n.contexts.iframe.webdriver !== n.automation.webdriver || n.contexts.iframe.userAgent !== n.browser.userAgent || n.contexts.iframe.platform !== n.device.platform || n.contexts.iframe.memory !== n.device.memory || n.contexts.iframe.cpuCount !== n.device.cpuCount : n.contexts.webWorker.webdriver !== n.automation.webdriver || n.contexts.webWorker.userAgent !== n.browser.userAgent || n.contexts.webWorker.platform !== n.device.platform || n.contexts.webWorker.memory !== n.device.memory || n.contexts.webWorker.cpuCount !== n.device.cpuCount;
551
551
  }
552
- function Ge() {
552
+ function Fe() {
553
553
  const t = {
554
554
  bitmask: r,
555
555
  extensions: []
556
- }, e = document.body.hasAttribute("data-gr-ext-installed"), n = typeof window.ethereum < "u", i = document.getElementById("coupon-birds-drop-div") !== null, a = document.querySelector("deepl-input-controller") !== null, d = document.getElementById("monica-content-root") !== null, p = document.querySelector("chatgpt-sidebar") !== null, w = typeof window.__REQUESTLY__ < "u", o = Array.from(document.querySelectorAll("*")).filter((h) => h.tagName.toLowerCase().startsWith("veepn-")).length > 0;
556
+ }, e = document.body.hasAttribute("data-gr-ext-installed"), n = typeof window.ethereum < "u", i = document.getElementById("coupon-birds-drop-div") !== null, a = document.querySelector("deepl-input-controller") !== null, g = document.getElementById("monica-content-root") !== null, p = document.querySelector("chatgpt-sidebar") !== null, y = typeof window.__REQUESTLY__ < "u", o = Array.from(document.querySelectorAll("*")).filter((m) => m.tagName.toLowerCase().startsWith("veepn-")).length > 0;
557
557
  return t.bitmask = [
558
558
  e ? "1" : "0",
559
559
  n ? "1" : "0",
560
560
  i ? "1" : "0",
561
561
  a ? "1" : "0",
562
- d ? "1" : "0",
562
+ g ? "1" : "0",
563
563
  p ? "1" : "0",
564
- w ? "1" : "0",
564
+ y ? "1" : "0",
565
565
  o ? "1" : "0"
566
- ].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"), i && t.extensions.push("coupon-birds"), a && t.extensions.push("deepl"), d && t.extensions.push("monica-ai"), p && t.extensions.push("sider-ai"), w && t.extensions.push("requestly"), o && t.extensions.push("veepn"), t;
566
+ ].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"), i && t.extensions.push("coupon-birds"), a && t.extensions.push("deepl"), g && t.extensions.push("monica-ai"), p && t.extensions.push("sider-ai"), y && t.extensions.push("requestly"), o && t.extensions.push("veepn"), t;
567
567
  }
568
568
  function c(t) {
569
569
  try {
@@ -572,7 +572,7 @@ function c(t) {
572
572
  return !1;
573
573
  }
574
574
  }
575
- function Ve() {
575
+ function Ge() {
576
576
  const t = {
577
577
  bitmask: r,
578
578
  chrome: c(() => "chrome" in window),
@@ -602,11 +602,12 @@ function Ve() {
602
602
  editContext: c(() => "EditContext" in window),
603
603
  fencedFrame: c(() => "FencedFrameConfig" in window),
604
604
  sanitizer: c(() => "Sanitizer" in window),
605
- otpCredential: c(() => "OTPCredential" in window)
605
+ otpCredential: c(() => "OTPCredential" in window),
606
+ sumPrecise: c(() => "sumPrecise" in Math)
606
607
  }, e = Object.keys(t).filter((n) => n !== "bitmask").map((n) => t[n] ? "1" : "0").join("");
607
608
  return t.bitmask = e, t;
608
609
  }
609
- function Be() {
610
+ function Ve() {
610
611
  const t = {
611
612
  prefersColorScheme: r,
612
613
  prefersReducedMotion: r,
@@ -625,107 +626,142 @@ function Be() {
625
626
  window.matchMedia(`(color: ${n})`).matches && (e = n);
626
627
  t.colorDepth = e;
627
628
  } catch {
628
- m(t, l);
629
+ d(t, l);
629
630
  }
630
631
  return t;
631
632
  }
632
- function je(t) {
633
+ async function Be() {
634
+ const t = {
635
+ keyboardLayout: r,
636
+ keyboardLayoutSize: r
637
+ };
638
+ if ("keyboard" in navigator && typeof navigator.keyboard.getLayoutMap < "u")
639
+ try {
640
+ const e = await navigator.keyboard.getLayoutMap();
641
+ t.keyboardLayout = Array.from(
642
+ e.entries()
643
+ ).map(([n, i]) => `${n},${i}`).join(" "), t.keyboardLayoutSize = e.size;
644
+ } catch {
645
+ d(t, l);
646
+ }
647
+ else
648
+ d(t, s);
649
+ return t;
650
+ }
651
+ async function je() {
652
+ const t = {
653
+ summarizerAvailability: r,
654
+ summarizerLanguageAvailability: r
655
+ };
656
+ if ("Summarizer" in window)
657
+ try {
658
+ t.summarizerAvailability = await window.Summarizer.availability(), t.summarizerLanguageAvailability = await window.Summarizer.availability({
659
+ expectedInputLanguages: [navigator.language]
660
+ });
661
+ } catch {
662
+ d(t, l);
663
+ }
664
+ else
665
+ d(t, s);
666
+ return t;
667
+ }
668
+ function $e(t) {
633
669
  const e = t.signals.device.screenResolution;
634
670
  return e.width === 800 && e.height === 600 || e.availableWidth === 800 && e.availableHeight === 600 || e.innerWidth === 800 && e.innerHeight === 600;
635
671
  }
636
- function ze(t) {
672
+ function Qe(t) {
637
673
  return t.signals.automation.webdriver === !0;
638
674
  }
639
- function $e(t) {
675
+ function qe(t) {
640
676
  return !!t.signals.automation.selenium;
641
677
  }
642
- function Qe(t) {
678
+ function Ke(t) {
643
679
  return t.signals.automation.cdp === !0;
644
680
  }
645
- function qe(t) {
681
+ function Je(t) {
646
682
  return t.signals.automation.playwright === !0;
647
683
  }
648
- function Ke(t) {
684
+ function Ye(t) {
649
685
  return typeof t.signals.device.memory != "number" ? !1 : t.signals.device.memory > 32 || t.signals.device.memory < 0.25;
650
686
  }
651
- function Je(t) {
687
+ function Ze(t) {
652
688
  return typeof t.signals.device.cpuCount != "number" ? !1 : t.signals.device.cpuCount > 70;
653
689
  }
654
- function Ye(t) {
690
+ function Xe(t) {
655
691
  return t.includes("Android") || t.includes("iPhone") || t.includes("iPod") || t.includes("iPad");
656
692
  }
657
- function Ze(t) {
693
+ function et(t) {
658
694
  const e = t.signals.browser.userAgent;
659
- return typeof e != "string" || !e.includes("Chrome") || Ye(e) ? !1 : t.signals.browser.features.chrome === !1;
695
+ return typeof e != "string" || !e.includes("Chrome") || Xe(e) ? !1 : t.signals.browser.features.chrome === !1;
660
696
  }
661
- function Xe(t) {
697
+ function tt(t) {
662
698
  return t.signals.contexts.iframe.webdriver === !0;
663
699
  }
664
- function et(t) {
700
+ function rt(t) {
665
701
  return t.signals.contexts.webWorker.webdriver === !0;
666
702
  }
667
703
  function b(t) {
668
704
  return typeof t != "string" || t.length === 0 ? !0 : t === s || t === l || t === v || t === r;
669
705
  }
670
- function tt(t) {
706
+ function nt(t) {
671
707
  const e = t.signals.contexts.webWorker, n = t.signals.graphics.webGL;
672
708
  return b(n.vendor) || b(n.renderer) || b(e.vendor) || b(e.renderer) ? !1 : e.vendor !== n.vendor || e.renderer !== n.renderer;
673
709
  }
674
- function rt(t, e) {
710
+ function it(t, e) {
675
711
  const n = t.includes("iPad"), i = e.includes("iPad");
676
712
  if (n === i)
677
713
  return !1;
678
- const a = (d) => d === "MacIntel" || d === "MacPPC";
714
+ const a = (g) => g === "MacIntel" || g === "MacPPC";
679
715
  return a(t) || a(e);
680
716
  }
681
- function nt(t) {
717
+ function at(t) {
682
718
  if (t.signals.contexts.webWorker.platform === s || t.signals.contexts.webWorker.platform === l || t.signals.contexts.webWorker.platform === v)
683
719
  return !1;
684
720
  const e = t.signals.device.platform, n = t.signals.contexts.webWorker.platform;
685
- return !(e === n || rt(e, n));
721
+ return !(e === n || it(e, n));
686
722
  }
687
- function it(t) {
723
+ function ot(t) {
688
724
  return t.signals.contexts.iframe.platform === s || t.signals.contexts.iframe.platform === l ? !1 : t.signals.device.platform !== t.signals.contexts.iframe.platform;
689
725
  }
690
- function at(t) {
726
+ function st(t) {
691
727
  return t.signals.automation.webdriverWritable === !0;
692
728
  }
693
- function ot(t) {
729
+ function ct(t) {
694
730
  return t.signals.graphics.webGL.renderer.includes("SwiftShader");
695
731
  }
696
- function st(t) {
732
+ function lt(t) {
697
733
  return t.signals.locale.internationalization.timezone === "UTC";
698
734
  }
699
- function ct(t) {
735
+ function ut(t) {
700
736
  const e = t.signals.locale.languages.languages, n = t.signals.locale.languages.language;
701
737
  return n && e && Array.isArray(e) && e.length > 0 ? e[0] !== n : !1;
702
738
  }
703
- function lt(t) {
739
+ function dt(t) {
704
740
  return !!(t.signals.browser.features.chrome && t.signals.browser.etsl !== 33 || t.signals.browser.features.safari && t.signals.browser.etsl !== 37 || t.signals.browser.userAgent.includes("Firefox") && t.signals.browser.etsl !== 37);
705
741
  }
706
- function ut(t) {
742
+ function gt(t) {
707
743
  return [
708
744
  t.signals.browser.userAgent,
709
745
  t.signals.contexts.iframe.userAgent,
710
746
  t.signals.contexts.webWorker.userAgent
711
747
  ].some((n) => /bot|headless/i.test(n.toLowerCase()));
712
748
  }
713
- function dt(t) {
749
+ function ht(t) {
714
750
  const e = t.signals.graphics.webgpu, n = t.signals.graphics.webGL, i = t.signals.browser.userAgent;
715
751
  return !!((n.vendor.includes("Apple") || n.renderer.includes("Apple")) && !i.includes("Mac") || e.vendor.includes("apple") && !i.includes("Mac") || e.vendor.includes("apple") && !n.renderer.includes("Apple"));
716
752
  }
717
- function gt(t) {
753
+ function mt(t) {
718
754
  const e = t.signals.device.platform, n = t.signals.browser.userAgent, i = t.signals.browser.highEntropyValues.platform;
719
755
  return !!(n.includes("Mac") && (e.includes("Win") || e.includes("Linux")) || n.includes("Windows") && (e.includes("Mac") || e.includes("Linux")) || n.includes("Linux") && (e.includes("Mac") || e.includes("Win")) || i !== l && i !== s && (i.includes("Mac") && (e.includes("Win") || e.includes("Linux")) || i.includes("Windows") && (e.includes("Mac") || e.includes("Linux")) || i.includes("Linux") && (e.includes("Mac") || e.includes("Win"))));
720
756
  }
721
- async function ht(t, e) {
757
+ async function pt(t, e) {
722
758
  const n = new TextEncoder().encode(e), i = new TextEncoder().encode(t), a = new Uint8Array(i.length);
723
759
  for (let p = 0; p < i.length; p++)
724
760
  a[p] = i[p] ^ n[p % n.length];
725
- const d = String.fromCharCode(...a);
726
- return btoa(d);
761
+ const g = String.fromCharCode(...a);
762
+ return btoa(g);
727
763
  }
728
- class pt {
764
+ class vt {
729
765
  constructor() {
730
766
  this.fingerprint = {
731
767
  signals: {
@@ -769,6 +805,10 @@ class pt {
769
805
  hover: r,
770
806
  anyHover: r,
771
807
  colorDepth: r
808
+ },
809
+ keyboard: {
810
+ keyboardLayout: r,
811
+ keyboardLayoutSize: r
772
812
  }
773
813
  },
774
814
  // Browser identity & features
@@ -831,6 +871,10 @@ class pt {
831
871
  toSourceError: {
832
872
  toSourceError: r,
833
873
  hasToSource: r
874
+ },
875
+ ai: {
876
+ summarizerAvailability: r,
877
+ summarizerLanguageAvailability: r
834
878
  }
835
879
  },
836
880
  // Graphics & rendering
@@ -954,7 +998,7 @@ class pt {
954
998
  */
955
999
  generateFingerprintScannerId() {
956
1000
  try {
957
- const e = this.fingerprint.signals, n = this.fingerprint.fastBotDetectionDetails, i = "FS1", d = [
1001
+ const e = this.fingerprint.signals, n = this.fingerprint.fastBotDetectionDetails, i = "FS1", g = [
958
1002
  n.headlessChromeScreenResolution.detected,
959
1003
  n.hasWebdriver.detected,
960
1004
  n.hasWebdriverWritable.detected,
@@ -983,7 +1027,7 @@ class pt {
983
1027
  e.automation.selenium === !0,
984
1028
  e.automation.cdp === !0,
985
1029
  e.automation.playwright === !0
986
- ].map((u) => u ? "1" : "0").join(""), w = f(String(e.automation.navigatorPropertyDescriptors)).slice(0, 4), o = `${p}h${w}`, h = typeof e.device.screenResolution.width == "number" ? e.device.screenResolution.width : 0, y = typeof e.device.screenResolution.height == "number" ? e.device.screenResolution.height : 0, k = typeof e.device.cpuCount == "number" ? String(e.device.cpuCount).padStart(2, "0") : "00", E = typeof e.device.memory == "number" ? String(Math.round(e.device.memory)).padStart(2, "0") : "00", D = [
1030
+ ].map((u) => u ? "1" : "0").join(""), y = f(String(e.automation.navigatorPropertyDescriptors)).slice(0, 4), o = `${p}h${y}`, m = typeof e.device.screenResolution.width == "number" ? e.device.screenResolution.width : 0, w = typeof e.device.screenResolution.height == "number" ? e.device.screenResolution.height : 0, W = typeof e.device.cpuCount == "number" ? String(e.device.cpuCount).padStart(2, "0") : "00", E = typeof e.device.memory == "number" ? String(Math.round(e.device.memory)).padStart(2, "0") : "00", D = [
987
1031
  e.device.screenResolution.hasMultipleDisplays === !0,
988
1032
  e.device.mediaQueries.prefersReducedMotion === !0,
989
1033
  e.device.mediaQueries.prefersReducedTransparency === !0,
@@ -1000,8 +1044,10 @@ class pt {
1000
1044
  e.device.mediaQueries.colorGamut,
1001
1045
  e.device.mediaQueries.pointer,
1002
1046
  e.device.mediaQueries.anyPointer,
1003
- e.device.mediaQueries.colorDepth
1004
- ].map((u) => String(u)).join("|"), R = f(_).slice(0, 6), I = `${h}x${y}c${k}m${E}b${D}h${R}`, L = typeof e.browser.features.bitmask == "string" ? e.browser.features.bitmask : "0000000000", T = typeof e.browser.extensions.bitmask == "string" ? e.browser.extensions.bitmask : "00000000", O = [
1047
+ e.device.mediaQueries.colorDepth,
1048
+ e.device.keyboard.keyboardLayout,
1049
+ e.device.keyboard.keyboardLayoutSize
1050
+ ].map((u) => String(u)).join("|"), R = f(_).slice(0, 6), L = `${m}x${w}c${W}m${E}b${D}h${R}`, I = typeof e.browser.features.bitmask == "string" ? e.browser.features.bitmask : "0".repeat(29), T = typeof e.browser.extensions.bitmask == "string" ? e.browser.extensions.bitmask : "0".repeat(8), O = [
1005
1051
  e.browser.plugins.isValidPluginArray === !0,
1006
1052
  e.browser.plugins.pluginConsistency1 === !0,
1007
1053
  e.browser.plugins.pluginOverflow === !0,
@@ -1018,10 +1064,12 @@ class pt {
1018
1064
  e.browser.highEntropyValues.platform,
1019
1065
  e.browser.highEntropyValues.platformVersion,
1020
1066
  e.browser.highEntropyValues.uaFullVersion,
1021
- e.browser.highEntropyValues.mobile
1022
- ].map((u) => String(u)).join("|"), U = f(H).slice(0, 6), N = `f${L}e${T}p${O}h${U}`, F = [
1067
+ e.browser.highEntropyValues.mobile,
1068
+ e.browser.ai.summarizerAvailability,
1069
+ e.browser.ai.summarizerLanguageAvailability
1070
+ ].map((u) => String(u)).join("|"), z = f(H).slice(0, 6), U = `f${I}e${T}p${O}h${z}`, N = [
1023
1071
  e.graphics.canvas.hasModifiedCanvas === !0
1024
- ].map((u) => u ? "1" : "0").join(""), G = [
1072
+ ].map((u) => u ? "1" : "0").join(""), F = [
1025
1073
  e.graphics.webGL.vendor,
1026
1074
  e.graphics.webGL.renderer,
1027
1075
  e.graphics.webgpu.vendor,
@@ -1029,23 +1077,23 @@ class pt {
1029
1077
  e.graphics.webgpu.device,
1030
1078
  e.graphics.webgpu.description,
1031
1079
  e.graphics.canvas.canvasFingerprint
1032
- ].map((u) => String(u)).join("|"), V = f(G).slice(0, 6), B = `${F}h${V}`, j = [
1080
+ ].map((u) => String(u)).join("|"), G = f(F).slice(0, 6), V = `${N}h${G}`, B = [
1033
1081
  e.codecs.hasMediaSource === !0
1034
- ].map((u) => u ? "1" : "0").join(""), z = [
1082
+ ].map((u) => u ? "1" : "0").join(""), j = [
1035
1083
  e.codecs.audioCanPlayTypeHash,
1036
1084
  e.codecs.videoCanPlayTypeHash,
1037
1085
  e.codecs.audioMediaSourceHash,
1038
1086
  e.codecs.videoMediaSourceHash,
1039
1087
  e.codecs.rtcAudioCapabilitiesHash,
1040
1088
  e.codecs.rtcVideoCapabilitiesHash
1041
- ].map((u) => String(u)).join("|"), $ = f(z).slice(0, 6), Q = `${j}h${$}`, q = typeof e.locale.languages.language == "string" ? e.locale.languages.language.slice(0, 2).toLowerCase() : "xx", K = Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.length : 0, J = (typeof e.locale.internationalization.timezone == "string" ? e.locale.internationalization.timezone : "unknown").replace(/[\/\s]/g, "-"), Y = [
1089
+ ].map((u) => String(u)).join("|"), $ = f(j).slice(0, 6), Q = `${B}h${$}`, q = typeof e.locale.languages.language == "string" ? e.locale.languages.language.slice(0, 2).toLowerCase() : "xx", K = Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.length : 0, J = (typeof e.locale.internationalization.timezone == "string" ? e.locale.internationalization.timezone : "unknown").replace(/[\/\s]/g, "-"), Y = [
1042
1090
  e.locale.internationalization.timezone,
1043
1091
  e.locale.internationalization.localeLanguage,
1044
1092
  Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.join(",") : e.locale.languages.languages,
1045
1093
  e.locale.languages.language
1046
1094
  ].map((u) => String(u)).join("|"), Z = f(Y).slice(0, 4), X = `${q}${K}t${J}_h${Z}`, ee = [
1047
- W(this.fingerprint, "iframe"),
1048
- W(this.fingerprint, "worker"),
1095
+ x(this.fingerprint, "iframe"),
1096
+ x(this.fingerprint, "worker"),
1049
1097
  e.contexts.iframe.webdriver === !0,
1050
1098
  e.contexts.webWorker.webdriver === !0
1051
1099
  ].map((u) => u ? "1" : "0").join(""), te = [
@@ -1064,11 +1112,11 @@ class pt {
1064
1112
  ].map((u) => String(u)).join("|"), re = f(te).slice(0, 6), ne = `${ee}h${re}`;
1065
1113
  return [
1066
1114
  i,
1067
- d,
1115
+ g,
1068
1116
  o,
1069
- I,
1070
- N,
1071
- B,
1117
+ L,
1118
+ U,
1119
+ V,
1072
1120
  Q,
1073
1121
  X,
1074
1122
  ne
@@ -1081,34 +1129,34 @@ class pt {
1081
1129
  const n = "__DEFAULT_FPSCANNER_KEY__";
1082
1130
  return n.length > 20 && n.indexOf("DEFAULT") > 0 && n.indexOf("FPSCANNER") > 0 && console.warn(
1083
1131
  '[fpscanner] WARNING: Using default encryption key! Run "npx fpscanner build --key=your-secret-key" to inject your own key. See: https://github.com/antoinevastel/fpscanner#advanced-custom-builds'
1084
- ), await ht(JSON.stringify(e), n);
1132
+ ), await pt(JSON.stringify(e), n);
1085
1133
  }
1086
1134
  /**
1087
1135
  * Detection rules with name and severity.
1088
1136
  */
1089
1137
  getDetectionRules() {
1090
1138
  return [
1091
- { name: "headlessChromeScreenResolution", severity: g, test: je },
1092
- { name: "hasWebdriver", severity: g, test: ze },
1093
- { name: "hasWebdriverWritable", severity: g, test: at },
1094
- { name: "hasSeleniumProperty", severity: g, test: $e },
1095
- { name: "hasCDP", severity: g, test: Qe },
1096
- { name: "hasPlaywright", severity: g, test: qe },
1097
- { name: "hasImpossibleDeviceMemory", severity: g, test: Ke },
1098
- { name: "hasHighCPUCount", severity: g, test: Je },
1099
- { name: "hasMissingChromeObject", severity: g, test: Ze },
1100
- { name: "hasWebdriverIframe", severity: g, test: Xe },
1101
- { name: "hasWebdriverWorker", severity: g, test: et },
1102
- { name: "hasMismatchWebGLInWorker", severity: g, test: tt },
1103
- { name: "hasMismatchPlatformIframe", severity: g, test: it },
1104
- { name: "hasMismatchPlatformWorker", severity: g, test: nt },
1105
- { name: "hasSwiftshaderRenderer", severity: S, test: ot },
1106
- { name: "hasUTCTimezone", severity: se, test: st },
1107
- { name: "hasMismatchLanguages", severity: S, test: ct },
1108
- { name: "hasInconsistentEtsl", severity: g, test: lt },
1109
- { name: "hasBotUserAgent", severity: g, test: ut },
1110
- { name: "hasGPUMismatch", severity: g, test: dt },
1111
- { name: "hasPlatformMismatch", severity: g, test: gt }
1139
+ { name: "headlessChromeScreenResolution", severity: h, test: $e },
1140
+ { name: "hasWebdriver", severity: h, test: Qe },
1141
+ { name: "hasWebdriverWritable", severity: h, test: st },
1142
+ { name: "hasSeleniumProperty", severity: h, test: qe },
1143
+ { name: "hasCDP", severity: h, test: Ke },
1144
+ { name: "hasPlaywright", severity: h, test: Je },
1145
+ { name: "hasImpossibleDeviceMemory", severity: h, test: Ye },
1146
+ { name: "hasHighCPUCount", severity: h, test: Ze },
1147
+ { name: "hasMissingChromeObject", severity: h, test: et },
1148
+ { name: "hasWebdriverIframe", severity: h, test: tt },
1149
+ { name: "hasWebdriverWorker", severity: h, test: rt },
1150
+ { name: "hasMismatchWebGLInWorker", severity: h, test: nt },
1151
+ { name: "hasMismatchPlatformIframe", severity: h, test: ot },
1152
+ { name: "hasMismatchPlatformWorker", severity: h, test: at },
1153
+ { name: "hasSwiftshaderRenderer", severity: S, test: ct },
1154
+ { name: "hasUTCTimezone", severity: se, test: lt },
1155
+ { name: "hasMismatchLanguages", severity: S, test: ut },
1156
+ { name: "hasInconsistentEtsl", severity: h, test: dt },
1157
+ { name: "hasBotUserAgent", severity: h, test: gt },
1158
+ { name: "hasGPUMismatch", severity: h, test: ht },
1159
+ { name: "hasPlatformMismatch", severity: h, test: mt }
1112
1160
  ];
1113
1161
  }
1114
1162
  runDetectionRules() {
@@ -1145,7 +1193,7 @@ class pt {
1145
1193
  return n;
1146
1194
  }
1147
1195
  async collectFingerprint(e = { encrypt: !0 }) {
1148
- const { encrypt: n = !0, skipWorker: i = !1 } = e, a = this.fingerprint.signals, d = {
1196
+ const { encrypt: n = !0, skipWorker: i = !1 } = e, a = this.fingerprint.signals, g = {
1149
1197
  // Automation signals
1150
1198
  webdriver: this.collectSignal(ie),
1151
1199
  webdriverWritable: this.collectSignal(Se),
@@ -1159,25 +1207,27 @@ class pt {
1159
1207
  platform: this.collectSignal(oe),
1160
1208
  screenResolution: this.collectSignal(ve),
1161
1209
  multimediaDevices: this.collectSignal(Ee),
1162
- mediaQueries: this.collectSignal(Be),
1210
+ mediaQueries: this.collectSignal(Ve),
1211
+ keyboard: this.collectSignal(Be),
1163
1212
  // Browser signals
1164
1213
  userAgent: this.collectSignal(ae),
1165
- browserFeatures: this.collectSignal(Ve),
1166
- plugins: this.collectSignal(ke),
1167
- browserExtensions: this.collectSignal(Ge),
1214
+ browserFeatures: this.collectSignal(Ge),
1215
+ plugins: this.collectSignal(We),
1216
+ browserExtensions: this.collectSignal(Fe),
1168
1217
  highEntropyValues: this.collectSignal(Ce),
1169
1218
  etsl: this.collectSignal(pe),
1170
1219
  maths: this.collectSignal(he),
1171
1220
  toSourceError: this.collectSignal(Re),
1221
+ ai: this.collectSignal(je),
1172
1222
  // Graphics signals
1173
1223
  webGL: this.collectSignal(ue),
1174
- webgpu: this.collectSignal(ye),
1224
+ webgpu: this.collectSignal(we),
1175
1225
  canvas: this.collectSignal(Oe),
1176
1226
  // Codecs
1177
- mediaCodecs: this.collectSignal(Ie),
1227
+ mediaCodecs: this.collectSignal(Le),
1178
1228
  // Locale signals
1179
1229
  internationalization: this.collectSignal(fe),
1180
- languages: this.collectSignal(we),
1230
+ languages: this.collectSignal(ye),
1181
1231
  // Context signals
1182
1232
  iframe: this.collectSignal(De),
1183
1233
  webWorker: i ? Promise.resolve({
@@ -1191,13 +1241,13 @@ class pt {
1191
1241
  renderer: v
1192
1242
  }) : this.collectSignal(_e),
1193
1243
  // Meta signals
1194
- nonce: this.collectSignal(Ue),
1195
- time: this.collectSignal(Ne),
1196
- url: this.collectSignal(Fe)
1197
- }, p = Object.keys(d), w = await Promise.all(Object.values(d)), o = Object.fromEntries(p.map((h, y) => [h, w[y]]));
1198
- return a.automation.webdriver = o.webdriver, a.automation.webdriverWritable = o.webdriverWritable, a.automation.selenium = o.selenium, a.automation.cdp = o.cdp, a.automation.playwright = o.playwright, a.automation.navigatorPropertyDescriptors = o.navigatorPropertyDescriptors, a.device.cpuCount = o.cpuCount, a.device.memory = o.memory, a.device.platform = o.platform, a.device.screenResolution = o.screenResolution, a.device.multimediaDevices = o.multimediaDevices, a.device.mediaQueries = o.mediaQueries, a.browser.userAgent = o.userAgent, a.browser.features = o.browserFeatures, a.browser.plugins = o.plugins, a.browser.extensions = o.browserExtensions, a.browser.highEntropyValues = o.highEntropyValues, a.browser.etsl = o.etsl, a.browser.maths = o.maths, a.browser.toSourceError = o.toSourceError, a.graphics.webGL = o.webGL, a.graphics.webgpu = o.webgpu, a.graphics.canvas = o.canvas, a.codecs = o.mediaCodecs, a.locale.internationalization = o.internationalization, a.locale.languages = o.languages, a.contexts.iframe = o.iframe, a.contexts.webWorker = o.webWorker, this.fingerprint.nonce = o.nonce, this.fingerprint.time = o.time, this.fingerprint.url = o.url, this.fingerprint.fastBotDetectionDetails = this.runDetectionRules(), this.fingerprint.fastBotDetection = Object.values(this.fingerprint.fastBotDetectionDetails).some((h) => h.detected), this.fingerprint.fsid = this.generateFingerprintScannerId(), n ? await this.encryptFingerprint(JSON.stringify(this.fingerprint)) : this.fingerprint;
1244
+ nonce: this.collectSignal(ze),
1245
+ time: this.collectSignal(Ue),
1246
+ url: this.collectSignal(Ne)
1247
+ }, p = Object.keys(g), y = await Promise.all(Object.values(g)), o = Object.fromEntries(p.map((m, w) => [m, y[w]]));
1248
+ return a.automation.webdriver = o.webdriver, a.automation.webdriverWritable = o.webdriverWritable, a.automation.selenium = o.selenium, a.automation.cdp = o.cdp, a.automation.playwright = o.playwright, a.automation.navigatorPropertyDescriptors = o.navigatorPropertyDescriptors, a.device.cpuCount = o.cpuCount, a.device.memory = o.memory, a.device.platform = o.platform, a.device.screenResolution = o.screenResolution, a.device.multimediaDevices = o.multimediaDevices, a.device.mediaQueries = o.mediaQueries, a.device.keyboard = o.keyboard, a.browser.userAgent = o.userAgent, a.browser.features = o.browserFeatures, a.browser.plugins = o.plugins, a.browser.extensions = o.browserExtensions, a.browser.highEntropyValues = o.highEntropyValues, a.browser.etsl = o.etsl, a.browser.maths = o.maths, a.browser.toSourceError = o.toSourceError, a.browser.ai = o.ai, a.graphics.webGL = o.webGL, a.graphics.webgpu = o.webgpu, a.graphics.canvas = o.canvas, a.codecs = o.mediaCodecs, a.locale.internationalization = o.internationalization, a.locale.languages = o.languages, a.contexts.iframe = o.iframe, a.contexts.webWorker = o.webWorker, this.fingerprint.nonce = o.nonce, this.fingerprint.time = o.time, this.fingerprint.url = o.url, this.fingerprint.fastBotDetectionDetails = this.runDetectionRules(), this.fingerprint.fastBotDetection = Object.values(this.fingerprint.fastBotDetectionDetails).some((m) => m.detected), this.fingerprint.fsid = this.generateFingerprintScannerId(), n ? await this.encryptFingerprint(JSON.stringify(this.fingerprint)) : this.fingerprint;
1199
1249
  }
1200
1250
  }
1201
1251
  export {
1202
- pt as default
1252
+ vt as default
1203
1253
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2DA,OAAO,EAAE,WAAW,EAA0C,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGzG,cAAM,kBAAkB;IACpB,OAAO,CAAC,WAAW,CAAc;;YAwMnB,aAAa;IAQ3B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,4BAA4B;YAgMtB,kBAAkB;IAoBhC;;MAEE;IACF,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,iBAAiB;IAsCnB,kBAAkB,CAAC,OAAO,GAAE,yBAA6C;CA0HlF;AAED,eAAe,kBAAkB,CAAC;AAClC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6DA,OAAO,EAAE,WAAW,EAA0C,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGzG,cAAM,kBAAkB;IACpB,OAAO,CAAC,WAAW,CAAc;;YAgNnB,aAAa;IAQ3B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,4BAA4B;YAoMtB,kBAAkB;IAoBhC;;MAEE;IACF,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,iBAAiB;IAsCnB,kBAAkB,CAAC,OAAO,GAAE,yBAA6C;CA8HlF;AAED,eAAe,kBAAkB,CAAC;AAClC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function ai(): Promise<{
2
+ summarizerAvailability: string;
3
+ summarizerLanguageAvailability: string;
4
+ }>;
5
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/signals/ai.ts"],"names":[],"mappings":"AAKA,wBAAsB,EAAE;;;GAoBvB"}
@@ -28,5 +28,6 @@ export declare function browserFeatures(): {
28
28
  fencedFrame: boolean;
29
29
  sanitizer: boolean;
30
30
  otpCredential: boolean;
31
+ sumPrecise: boolean;
31
32
  };
32
33
  //# sourceMappingURL=browserFeatures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browserFeatures.d.ts","sourceRoot":"","sources":["../../src/signals/browserFeatures.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuC9B"}
1
+ {"version":3,"file":"browserFeatures.d.ts","sourceRoot":"","sources":["../../src/signals/browserFeatures.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwC9B"}
@@ -0,0 +1,5 @@
1
+ export declare function keyboard(): Promise<{
2
+ keyboardLayout: string;
3
+ keyboardLayoutSize: string;
4
+ }>;
5
+ //# sourceMappingURL=keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/signals/keyboard.ts"],"names":[],"mappings":"AAEA,wBAAsB,QAAQ;;;GAyB7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"maths.d.ts","sourceRoot":"","sources":["../../src/signals/maths.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,WA2BpB"}
1
+ {"version":3,"file":"maths.d.ts","sourceRoot":"","sources":["../../src/signals/maths.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,WAiCpB"}
package/dist/types.d.ts CHANGED
@@ -93,6 +93,10 @@ export interface MediaQueriesSignal {
93
93
  anyHover: SignalValue<boolean>;
94
94
  colorDepth: SignalValue<number>;
95
95
  }
96
+ export interface KeyboardSignals {
97
+ keyboardLayout: SignalValue<string>;
98
+ keyboardLayoutSize: SignalValue<number>;
99
+ }
96
100
  export interface ToSourceErrorSignal {
97
101
  toSourceError: SignalValue<string>;
98
102
  hasToSource: SignalValue<boolean>;
@@ -101,6 +105,10 @@ export interface CanvasSignal {
101
105
  hasModifiedCanvas: SignalValue<boolean>;
102
106
  canvasFingerprint: SignalValue<string>;
103
107
  }
108
+ export interface AISignal {
109
+ summarizerAvailability: SignalValue<boolean>;
110
+ summarizerLanguageAvailability: SignalValue<boolean>;
111
+ }
104
112
  export interface HighEntropyValuesSignal {
105
113
  architecture: SignalValue<string>;
106
114
  bitness: SignalValue<string>;
@@ -147,6 +155,7 @@ export interface DeviceSignals {
147
155
  screenResolution: ScreenResolutionSignal;
148
156
  multimediaDevices: MultimediaDevicesSignal;
149
157
  mediaQueries: MediaQueriesSignal;
158
+ keyboard: KeyboardSignals;
150
159
  }
151
160
  export interface BrowserSignals {
152
161
  userAgent: SignalValue<string>;
@@ -157,6 +166,7 @@ export interface BrowserSignals {
157
166
  etsl: SignalValue<number>;
158
167
  maths: SignalValue<string>;
159
168
  toSourceError: ToSourceErrorSignal;
169
+ ai: AISignal;
160
170
  }
161
171
  export interface GraphicsSignals {
162
172
  webGL: WebGLSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fpscanner",
3
- "version": "1.0.4-beta.0",
3
+ "version": "1.0.6-beta.0",
4
4
  "description": "A lightweight browser fingerprinting and bot detection library with encryption, obfuscation, and cross-context validation",
5
5
  "main": "dist/fpScanner.cjs.js",
6
6
  "module": "dist/fpScanner.es.js",
package/src/index.ts CHANGED
@@ -31,6 +31,8 @@ import { hasContextMismatch } from './detections/hasContextMismatch';
31
31
  import { browserExtensions } from './signals/browserExtensions';
32
32
  import { browserFeatures } from './signals/browserFeatures';
33
33
  import { mediaQueries } from './signals/mediaQueries';
34
+ import { keyboard } from './signals/keyboard';
35
+ import { ai } from './signals/ai';
34
36
 
35
37
  // Fast Bot Detection tests
36
38
  import { hasHeadlessChromeScreenResolution } from './detections/hasHeadlessChromeScreenResolution';
@@ -107,6 +109,10 @@ class FingerprintScanner {
107
109
  anyHover: INIT,
108
110
  colorDepth: INIT,
109
111
  },
112
+ keyboard: {
113
+ keyboardLayout: INIT,
114
+ keyboardLayoutSize: INIT,
115
+ },
110
116
  },
111
117
  // Browser identity & features
112
118
  browser: {
@@ -169,6 +175,10 @@ class FingerprintScanner {
169
175
  toSourceError: INIT,
170
176
  hasToSource: INIT,
171
177
  },
178
+ ai: {
179
+ summarizerAvailability: INIT,
180
+ summarizerLanguageAvailability: INIT,
181
+ },
172
182
  },
173
183
  // Graphics & rendering
174
184
  graphics: {
@@ -362,13 +372,15 @@ class FingerprintScanner {
362
372
  s.device.mediaQueries.pointer,
363
373
  s.device.mediaQueries.anyPointer,
364
374
  s.device.mediaQueries.colorDepth,
375
+ s.device.keyboard.keyboardLayout,
376
+ s.device.keyboard.keyboardLayoutSize,
365
377
  ].map(v => String(v)).join('|');
366
378
  const devHash = hashCode(devStr).slice(0, 6);
367
379
  const devSection = `${width}x${height}c${cpu}m${mem}b${devBitmask}h${devHash}`;
368
380
 
369
381
  // Section 5: Browser - use existing bitmasks + plugins bitmask + hash
370
- const featuresBitmask = typeof s.browser.features.bitmask === 'string' ? s.browser.features.bitmask : '0000000000';
371
- const extensionsBitmask = typeof s.browser.extensions.bitmask === 'string' ? s.browser.extensions.bitmask : '00000000';
382
+ const featuresBitmask = typeof s.browser.features.bitmask === 'string' ? s.browser.features.bitmask : "0".repeat(29);
383
+ const extensionsBitmask = typeof s.browser.extensions.bitmask === 'string' ? s.browser.extensions.bitmask : "0".repeat(8);
372
384
  const pluginsBitmask = [
373
385
  s.browser.plugins.isValidPluginArray === true,
374
386
  s.browser.plugins.pluginConsistency1 === true,
@@ -388,6 +400,8 @@ class FingerprintScanner {
388
400
  s.browser.highEntropyValues.platformVersion,
389
401
  s.browser.highEntropyValues.uaFullVersion,
390
402
  s.browser.highEntropyValues.mobile,
403
+ s.browser.ai.summarizerAvailability,
404
+ s.browser.ai.summarizerLanguageAvailability,
391
405
  ].map(v => String(v)).join('|');
392
406
  const brwHash = hashCode(brwStr).slice(0, 6);
393
407
  const brwSection = `f${featuresBitmask}e${extensionsBitmask}p${pluginsBitmask}h${brwHash}`;
@@ -590,6 +604,7 @@ class FingerprintScanner {
590
604
  screenResolution: this.collectSignal(screenResolution),
591
605
  multimediaDevices: this.collectSignal(multimediaDevices),
592
606
  mediaQueries: this.collectSignal(mediaQueries),
607
+ keyboard: this.collectSignal(keyboard),
593
608
  // Browser signals
594
609
  userAgent: this.collectSignal(userAgent),
595
610
  browserFeatures: this.collectSignal(browserFeatures),
@@ -599,6 +614,7 @@ class FingerprintScanner {
599
614
  etsl: this.collectSignal(etsl),
600
615
  maths: this.collectSignal(maths),
601
616
  toSourceError: this.collectSignal(toSourceError),
617
+ ai: this.collectSignal(ai),
602
618
  // Graphics signals
603
619
  webGL: this.collectSignal(webGL),
604
620
  webgpu: this.collectSignal(webgpu),
@@ -648,6 +664,7 @@ class FingerprintScanner {
648
664
  s.device.screenResolution = r.screenResolution;
649
665
  s.device.multimediaDevices = r.multimediaDevices;
650
666
  s.device.mediaQueries = r.mediaQueries;
667
+ s.device.keyboard = r.keyboard;
651
668
  // Browser
652
669
  s.browser.userAgent = r.userAgent;
653
670
  s.browser.features = r.browserFeatures;
@@ -657,6 +674,7 @@ class FingerprintScanner {
657
674
  s.browser.etsl = r.etsl;
658
675
  s.browser.maths = r.maths;
659
676
  s.browser.toSourceError = r.toSourceError;
677
+ s.browser.ai = r.ai;
660
678
  // Graphics
661
679
  s.graphics.webGL = r.webGL;
662
680
  s.graphics.webgpu = r.webgpu;
@@ -0,0 +1,26 @@
1
+ import { INIT, ERROR, setObjectValues, NA } from "./utils";
2
+
3
+ // We can add more feature checks in the future like https://developer.mozilla.org/en-US/docs/Web/API/Translator_and_Language_Detector_APIs
4
+ // However, they currently display a message in the console, so we will not use them for now.
5
+
6
+ export async function ai() {
7
+ const aiResults = {
8
+ summarizerAvailability: INIT,
9
+ summarizerLanguageAvailability: INIT,
10
+ };
11
+
12
+ if ('Summarizer' in window) {
13
+ try {
14
+ aiResults.summarizerAvailability = await (window as any).Summarizer.availability();
15
+ aiResults.summarizerLanguageAvailability = await (window as any).Summarizer.availability({
16
+ expectedInputLanguages: [navigator.language],
17
+ });
18
+ } catch (error) {
19
+ setObjectValues(aiResults, ERROR);
20
+ }
21
+ } else {
22
+ setObjectValues(aiResults, NA);
23
+ }
24
+
25
+ return aiResults;
26
+ }
@@ -40,6 +40,7 @@ export function browserFeatures() {
40
40
  fencedFrame: safeCheck(() => 'FencedFrameConfig' in window),
41
41
  sanitizer: safeCheck(() => 'Sanitizer' in window),
42
42
  otpCredential: safeCheck(() => 'OTPCredential' in window),
43
+ sumPrecise: safeCheck(() => 'sumPrecise' in Math),
43
44
  };
44
45
 
45
46
  // set bitmask to 0/1 string based on browserFeaturesData, exclude bitmask property itself (you need to filter on the key)
@@ -0,0 +1,28 @@
1
+ import { INIT, ERROR, setObjectValues, NA } from "./utils";
2
+
3
+ export async function keyboard() {
4
+ const keyboardData = {
5
+ keyboardLayout: INIT,
6
+ keyboardLayoutSize: INIT,
7
+ };
8
+
9
+ if ('keyboard' in navigator && typeof (navigator as any).keyboard.getLayoutMap !== 'undefined') {
10
+ try {
11
+ const layoutMap = await (navigator as any).keyboard.getLayoutMap();
12
+ keyboardData.keyboardLayout = Array.from(
13
+ layoutMap.entries() as Iterable<[string, string]>
14
+ )
15
+ .map(([k, v]) => `${k},${v}`)
16
+ .join(" ");
17
+
18
+ keyboardData.keyboardLayoutSize = layoutMap.size;
19
+ } catch (error) {
20
+ setObjectValues(keyboardData, ERROR);
21
+ }
22
+ }
23
+ else {
24
+ setObjectValues(keyboardData, NA);
25
+ }
26
+
27
+ return keyboardData;
28
+ }
@@ -26,5 +26,11 @@ export function maths() {
26
26
  }
27
27
  });
28
28
 
29
+ if ('sumPrecise' in Math) {
30
+ results.push((Math as any).sumPrecise([1e20, 0.1, -1e20]));
31
+ } else {
32
+ results.push(-1);
33
+ }
34
+
29
35
  return hashCode(results.map(String).join(","));
30
36
  }
package/src/types.ts CHANGED
@@ -105,6 +105,11 @@ export interface MediaQueriesSignal {
105
105
  colorDepth: SignalValue<number>;
106
106
  }
107
107
 
108
+ export interface KeyboardSignals {
109
+ keyboardLayout: SignalValue<string>;
110
+ keyboardLayoutSize: SignalValue<number>;
111
+ }
112
+
108
113
  export interface ToSourceErrorSignal {
109
114
  toSourceError: SignalValue<string>;
110
115
  hasToSource: SignalValue<boolean>;
@@ -115,6 +120,11 @@ export interface CanvasSignal {
115
120
  canvasFingerprint: SignalValue<string>;
116
121
  }
117
122
 
123
+ export interface AISignal {
124
+ summarizerAvailability: SignalValue<boolean>;
125
+ summarizerLanguageAvailability: SignalValue<boolean>;
126
+ }
127
+
118
128
  export interface HighEntropyValuesSignal {
119
129
  architecture: SignalValue<string>;
120
130
  bitness: SignalValue<string>;
@@ -167,6 +177,7 @@ export interface DeviceSignals {
167
177
  screenResolution: ScreenResolutionSignal;
168
178
  multimediaDevices: MultimediaDevicesSignal;
169
179
  mediaQueries: MediaQueriesSignal;
180
+ keyboard: KeyboardSignals;
170
181
  }
171
182
 
172
183
  export interface BrowserSignals {
@@ -178,6 +189,7 @@ export interface BrowserSignals {
178
189
  etsl: SignalValue<number>;
179
190
  maths: SignalValue<string>;
180
191
  toSourceError: ToSourceErrorSignal;
192
+ ai: AISignal;
181
193
  }
182
194
 
183
195
  export interface GraphicsSignals {