From 54e82349f7b9e58d58d576e931ff6646a52902b8 Mon Sep 17 00:00:00 2001 From: Sebastien Blot Date: Fri, 10 Jul 2026 14:37:56 +0200 Subject: [PATCH 1/2] bump fpscanner to v1.0.7 --- pkg/appsec/challenge/js/fpscanner/fpscanner | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/appsec/challenge/js/fpscanner/fpscanner b/pkg/appsec/challenge/js/fpscanner/fpscanner index bc6d53f220c..e4b0ca2a083 160000 --- a/pkg/appsec/challenge/js/fpscanner/fpscanner +++ b/pkg/appsec/challenge/js/fpscanner/fpscanner @@ -1 +1 @@ -Subproject commit bc6d53f220cffa0f7015fb8cee77bc86fa15745a +Subproject commit e4b0ca2a08317852465bb3d4a99a5e1f42c27e5c From 41e26bca75ca9ec50803acb67b4fd2678a892c84 Mon Sep 17 00:00:00 2001 From: Sebastien Blot Date: Fri, 10 Jul 2026 14:39:17 +0200 Subject: [PATCH 2/2] update fpscanner bundle --- pkg/appsec/challenge/js/fpscanner/fpscanner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/appsec/challenge/js/fpscanner/fpscanner.js b/pkg/appsec/challenge/js/fpscanner/fpscanner.js index ba9e45a7b66..c34b156dad1 100644 --- a/pkg/appsec/challenge/js/fpscanner/fpscanner.js +++ b/pkg/appsec/challenge/js/fpscanner/fpscanner.js @@ -45,4 +45,4 @@ self.postMessage(fingerprintWorker); } catch (e) { self.postMessage(fingerprintWorker); - }`,v=new Blob([h],{type:"application/javascript"});n=URL.createObjectURL(v),i=new Worker(n),o=window.setTimeout(()=>{p(),l(e,c),t(e)},2e3),i.onmessage=function(s){try{let f=b=>typeof b>"u"?"NA":b;e.vendor=f(s.data.vendor),e.renderer=f(s.data.renderer),e.userAgent=f(s.data.userAgent),e.language=f(s.data.language),e.platform=f(s.data.platform),e.memory=f(s.data.memory),e.cpuCount=f(s.data.cpuCount)}catch{l(e,c)}finally{p(),t(e)}},i.onerror=function(){p(),l(e,c),t(e)}}catch{p(),l(e,c),t(e)}})}function $(){let 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}var Q=['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"'],K=['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 q(t,e){let i={};try{let n=document.createElement(e);for(let o of t)try{i[o]=n.canPlayType(o)||null}catch{i[o]=null}}catch{for(let n of t)i[n]=null}return i}function J(t){let e={},i=window.MediaSource;if(!i||typeof i.isTypeSupported!="function"){for(let n of t)e[n]=null;return e}for(let n of t)try{e[n]=i.isTypeSupported(n)}catch{e[n]=null}return e}function Y(t){try{let e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){let i=e.getCapabilities(t);return m(JSON.stringify(i))}return"NA"}catch{return c}}function Z(){let t={audioCanPlayTypeHash:"NA",videoCanPlayTypeHash:"NA",audioMediaSourceHash:"NA",videoMediaSourceHash:"NA",rtcAudioCapabilitiesHash:"NA",rtcVideoCapabilitiesHash:"NA",hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;let e=q(Q,"audio"),i=q(K,"video");t.audioCanPlayTypeHash=m(JSON.stringify(e)),t.videoCanPlayTypeHash=m(JSON.stringify(i));let n=J(Q),o=J(K);t.audioMediaSourceHash=m(JSON.stringify(n)),t.videoMediaSourceHash=m(JSON.stringify(o)),t.rtcAudioCapabilitiesHash=Y("audio"),t.rtcVideoCapabilitiesHash=Y("video")}catch{l(t,c)}return t}async function gt(){return new Promise(t=>{try{let e=new Image,i=document.createElement("canvas").getContext("2d");e.onload=()=>{i.drawImage(e,0,0),t(i.getImageData(0,0,1,1).data.filter(n=>n===0).length!=4)},e.onerror=()=>{t(c)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(c)}})}function ft(){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, \u{1F603}",2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText("Cwm fjordbank glyphs vext quiz, \u{1F603}",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"),m(t.toDataURL())}catch{return c}}async function X(){let t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await gt(),t.canvasFingerprint=ft(),t}function ee(){let t=["deviceMemory","hardwareConcurrency","language","languages","platform"],e=[];for(let i of t){let n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator),i);n&&n.value?e.push("1"):e.push("0")}return e.join("")}function te(){return Math.random().toString(36).substring(2,15)}function re(){return new Date().getTime()}function ie(){return window.location.href}function S(t,e){let i=t.signals;return e==="iframe"?i.contexts.iframe.webdriver!==i.automation.webdriver||i.contexts.iframe.userAgent!==i.browser.userAgent||i.contexts.iframe.platform!==i.device.platform||i.contexts.iframe.memory!==i.device.memory||i.contexts.iframe.cpuCount!==i.device.cpuCount:i.contexts.webWorker.webdriver!==i.automation.webdriver||i.contexts.webWorker.userAgent!==i.browser.userAgent||i.contexts.webWorker.platform!==i.device.platform||i.contexts.webWorker.memory!==i.device.memory||i.contexts.webWorker.cpuCount!==i.device.cpuCount}function ne(){let t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),i=typeof window.ethereum<"u",n=document.getElementById("coupon-birds-drop-div")!==null,o=document.querySelector("deepl-input-controller")!==null,p=document.getElementById("monica-content-root")!==null,h=document.querySelector("chatgpt-sidebar")!==null,v=typeof window.__REQUESTLY__<"u",s=Array.from(document.querySelectorAll("*")).filter(f=>f.tagName.toLowerCase().startsWith("veepn-")).length>0;return t.bitmask=[e?"1":"0",i?"1":"0",n?"1":"0",o?"1":"0",p?"1":"0",h?"1":"0",v?"1":"0",s?"1":"0"].join(""),e&&t.extensions.push("grammarly"),i&&t.extensions.push("metamask"),n&&t.extensions.push("coupon-birds"),o&&t.extensions.push("deepl"),p&&t.extensions.push("monica-ai"),h&&t.extensions.push("sider-ai"),v&&t.extensions.push("requestly"),s&&t.extensions.push("veepn"),t}function u(t){try{return t()}catch{return!1}}function oe(){let t={bitmask:r,chrome:u(()=>"chrome"in window),brave:u(()=>"brave"in navigator),applePaySupport:u(()=>"ApplePaySetup"in window),opera:u(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:u(()=>window.navigator.serial!==void 0),attachShadow:u(()=>!!Element.prototype.attachShadow),caches:u(()=>!!window.caches),webAssembly:u(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:u(()=>"Buffer"in window),showModalDialog:u(()=>"showModalDialog"in window),safari:u(()=>"safari"in window),webkitPrefixedFunction:u(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:u(()=>"mozGetUserMedia"in navigator),usb:u(()=>typeof window.USB=="function"),browserCapture:u(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:u(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:u(()=>typeof window.PressureObserver=="function"),audioSession:u(()=>"audioSession"in navigator),selectAudioOutput:u(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:u(()=>"BarcodeDetector"in window),battery:u(()=>"getBattery"in navigator),devicePosture:u(()=>"DevicePosture"in window),documentPictureInPicture:u(()=>"documentPictureInPicture"in window),eyeDropper:u(()=>"EyeDropper"in window),editContext:u(()=>"EditContext"in window),fencedFrame:u(()=>"FencedFrameConfig"in window),sanitizer:u(()=>"Sanitizer"in window),otpCredential:u(()=>"OTPCredential"in window),sumPrecise:u(()=>"sumPrecise"in Math)},e=Object.keys(t).filter(i=>i!=="bitmask").map(i=>t[i]?"1":"0").join("");return t.bitmask=e,t}function ae(){let 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 i=0;i<=16;i++)window.matchMedia(`(color: ${i})`).matches&&(e=i);t.colorDepth=e}catch{l(t,c)}return t}async function se(){let t={layout:r,layoutSize:r};if("keyboard"in navigator&&typeof navigator.keyboard.getLayoutMap<"u")try{let e=await navigator.keyboard.getLayoutMap();t.layout=Array.from(e.entries()).map(([i,n])=>`${i},${n}`).join(" "),t.layoutSize=e.size}catch{l(t,c)}else l(t,"NA");return t}async function ce(){let 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{l(t,c)}else l(t,"NA");return t}function le(t){let 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 ue(t){return t.signals.automation.webdriver===!0}function de(t){return!!t.signals.automation.selenium}function me(t){return t.signals.automation.cdp===!0}function pe(t){return t.signals.automation.playwright===!0}function ge(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function fe(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function ht(t){return t.includes("Android")||t.includes("iPhone")||t.includes("iPod")||t.includes("iPad")}function he(t){let e=t.signals.browser.userAgent;return typeof e!="string"||!e.includes("Chrome")||ht(e)?!1:t.signals.browser.features.chrome===!1}function ye(t){return t.signals.contexts.iframe.webdriver===!0}function ve(t){return t.signals.contexts.webWorker.webdriver===!0}function w(t){return typeof t!="string"||t.length===0?!0:t==="NA"||t===c||t===y||t===r}function be(t){let e=t.signals.contexts.webWorker,i=t.signals.graphics.webGL;return w(i.vendor)||w(i.renderer)||w(e.vendor)||w(e.renderer)?!1:e.vendor!==i.vendor||e.renderer!==i.renderer}function yt(t,e){let i=t.includes("iPad"),n=e.includes("iPad");if(i===n)return!1;let o=p=>p==="MacIntel"||p==="MacPPC";return o(t)||o(e)}function we(t){if(t.signals.contexts.webWorker.platform==="NA"||t.signals.contexts.webWorker.platform===c||t.signals.contexts.webWorker.platform===y)return!1;let e=t.signals.device.platform,i=t.signals.contexts.webWorker.platform;return!(e===i||yt(e,i))}function Se(t){return t.signals.contexts.iframe.platform==="NA"||t.signals.contexts.iframe.platform===c?!1:t.signals.device.platform!==t.signals.contexts.iframe.platform}function xe(t){return t.signals.automation.webdriverWritable===!0}function Re(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function Ce(t){return t.signals.locale.internationalization.timezone==="UTC"}function Ae(t){let e=t.signals.locale.languages.languages,i=t.signals.locale.languages.language;return i&&e&&Array.isArray(e)&&e.length>0?e[0]!==i:!1}function Pe(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 Ee(t){return[t.signals.browser.userAgent,t.signals.contexts.iframe.userAgent,t.signals.contexts.webWorker.userAgent].some(i=>/bot|headless/i.test(i.toLowerCase()))}function ke(t){let e=t.signals.graphics.webgpu,i=t.signals.graphics.webGL,n=t.signals.browser.userAgent;return!!((i.vendor.includes("Apple")||i.renderer.includes("Apple"))&&!n.includes("Mac")||e.vendor.includes("apple")&&!n.includes("Mac")||e.vendor.includes("apple")&&!i.renderer.includes("Apple"))}function Me(t){let e=t.signals.device.platform,i=t.signals.browser.userAgent,n=t.signals.browser.highEntropyValues.platform;return!!(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"))||n!==c&&n!=="NA"&&(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"))))}async function We(t,e){let i=new TextEncoder().encode(e),n=new TextEncoder().encode(t),o=new Uint8Array(n.length);for(let h=0;hd?"1":"0").join(""),h=[e.automation.webdriver===!0,e.automation.webdriverWritable===!0,e.automation.selenium===!0,e.automation.cdp===!0,e.automation.playwright===!0].map(d=>d?"1":"0").join(""),v=m(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),s=`${h}h${v}`,f=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,b=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,Oe=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",Fe=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",Ne=[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(d=>d?"1":"0").join(""),_e=[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.layout,e.device.keyboard.layoutSize].map(d=>String(d)).join("|"),Te=m(_e).slice(0,6),Le=`${f}x${b}c${Oe}m${Fe}b${Ne}h${Te}`,Ve=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0".repeat(29),He=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"0".repeat(8),Ue=[e.browser.plugins.isValidPluginArray===!0,e.browser.plugins.pluginConsistency1===!0,e.browser.plugins.pluginOverflow===!0,e.browser.toSourceError.hasToSource===!0].map(d=>d?"1":"0").join(""),je=[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(d=>String(d)).join("|"),ze=m(je).slice(0,6),Ge=`f${Ve}e${He}p${Ue}h${ze}`,Be=[e.graphics.canvas.hasModifiedCanvas===!0].map(d=>d?"1":"0").join(""),$e=[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(d=>String(d)).join("|"),Qe=m($e).slice(0,6),Ke=`${Be}h${Qe}`,qe=[e.codecs.hasMediaSource===!0].map(d=>d?"1":"0").join(""),Je=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(d=>String(d)).join("|"),Ye=m(Je).slice(0,6),Ze=`${qe}h${Ye}`,Xe=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",et=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,tt=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),rt=[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(d=>String(d)).join("|"),it=m(rt).slice(0,4),nt=`${Xe}${et}t${tt}_h${it}`,ot=[S(this.fingerprint,"iframe"),S(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(d=>d?"1":"0").join(""),at=[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(d=>String(d)).join("|"),st=m(at).slice(0,6),ct=`${ot}h${st}`;return[n,p,s,Le,Ge,Ke,Ze,nt,ct].join("_")}catch(e){return console.error("Error generating fingerprint scanner id",e),c}}async encryptFingerprint(e){let i=__FP_ENCRYPTION_KEY__;return i.length>20&&i.indexOf("DEFAULT")>0&&i.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 We(JSON.stringify(e),i)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:g,test:le},{name:"hasWebdriver",severity:g,test:ue},{name:"hasWebdriverWritable",severity:g,test:xe},{name:"hasSeleniumProperty",severity:g,test:de},{name:"hasCDP",severity:g,test:me},{name:"hasPlaywright",severity:g,test:pe},{name:"hasImpossibleDeviceMemory",severity:g,test:ge},{name:"hasHighCPUCount",severity:g,test:fe},{name:"hasMissingChromeObject",severity:g,test:he},{name:"hasWebdriverIframe",severity:g,test:ye},{name:"hasWebdriverWorker",severity:g,test:ve},{name:"hasMismatchWebGLInWorker",severity:g,test:be},{name:"hasMismatchPlatformIframe",severity:g,test:Se},{name:"hasMismatchPlatformWorker",severity:g,test:we},{name:"hasSwiftshaderRenderer",severity:"low",test:Re},{name:"hasUTCTimezone",severity:P,test:Ce},{name:"hasMismatchLanguages",severity:"low",test:Ae},{name:"hasInconsistentEtsl",severity:g,test:Pe},{name:"hasBotUserAgent",severity:g,test:Ee},{name:"hasGPUMismatch",severity:g,test:ke},{name:"hasPlatformMismatch",severity:g,test:Me}]}runDetectionRules(){let e=this.getDetectionRules(),i={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(let n of e)try{let o=n.test(this.fingerprint);i[n.name]={detected:o,severity:n.severity}}catch{i[n.name]={detected:!1,severity:n.severity}}return i}async collectFingerprint(e={encrypt:!0}){let{encrypt:i=!0,skipWorker:n=!1}=e,o=this.fingerprint.signals,p={webdriver:this.collectSignal(R),webdriverWritable:this.collectSignal(H),selenium:this.collectSignal(V),cdp:this.collectSignal(k),playwright:this.collectSignal(W),navigatorPropertyDescriptors:this.collectSignal(ee),cpuCount:this.collectSignal(I),memory:this.collectSignal(O),platform:this.collectSignal(A),screenResolution:this.collectSignal(_),multimediaDevices:this.collectSignal(z),mediaQueries:this.collectSignal(ae),keyboard:this.collectSignal(se),userAgent:this.collectSignal(C),browserFeatures:this.collectSignal(oe),plugins:this.collectSignal(j),browserExtensions:this.collectSignal(ne),highEntropyValues:this.collectSignal(U),etsl:this.collectSignal(F),maths:this.collectSignal(D),toSourceError:this.collectSignal($),ai:this.collectSignal(ce),webGL:this.collectSignal(M),webgpu:this.collectSignal(L),canvas:this.collectSignal(X),mediaCodecs:this.collectSignal(Z),internationalization:this.collectSignal(N),languages:this.collectSignal(T),iframe:this.collectSignal(G),webWorker:n?Promise.resolve({webdriver:y,userAgent:y,platform:y,memory:y,cpuCount:y,language:y,vendor:y,renderer:y}):this.collectSignal(B),nonce:this.collectSignal(te),time:this.collectSignal(re),url:this.collectSignal(ie)},h=Object.keys(p),v=await Promise.all(Object.values(p)),s=Object.fromEntries(h.map((f,b)=>[f,v[b]]));return o.automation.webdriver=s.webdriver,o.automation.webdriverWritable=s.webdriverWritable,o.automation.selenium=s.selenium,o.automation.cdp=s.cdp,o.automation.playwright=s.playwright,o.automation.navigatorPropertyDescriptors=s.navigatorPropertyDescriptors,o.device.cpuCount=s.cpuCount,o.device.memory=s.memory,o.device.platform=s.platform,o.device.screenResolution=s.screenResolution,o.device.multimediaDevices=s.multimediaDevices,o.device.mediaQueries=s.mediaQueries,o.device.keyboard=s.keyboard,o.browser.userAgent=s.userAgent,o.browser.features=s.browserFeatures,o.browser.plugins=s.plugins,o.browser.extensions=s.browserExtensions,o.browser.highEntropyValues=s.highEntropyValues,o.browser.etsl=s.etsl,o.browser.maths=s.maths,o.browser.toSourceError=s.toSourceError,o.browser.ai=s.ai,o.graphics.webGL=s.webGL,o.graphics.webgpu=s.webgpu,o.graphics.canvas=s.canvas,o.codecs=s.mediaCodecs,o.locale.internationalization=s.internationalization,o.locale.languages=s.languages,o.contexts.iframe=s.iframe,o.contexts.webWorker=s.webWorker,this.fingerprint.nonce=s.nonce,this.fingerprint.time=s.time,this.fingerprint.url=s.url,this.fingerprint.fastBotDetectionDetails=this.runDetectionRules(),this.fingerprint.fastBotDetection=Object.values(this.fingerprint.fastBotDetectionDetails).some(f=>f.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),i?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}},De=x;globalThis.CrowdsecFingerprintScanner=De;})(); + }`,v=new Blob([h],{type:"application/javascript"});n=URL.createObjectURL(v),i=new Worker(n),o=window.setTimeout(()=>{p(),l(e,c),t(e)},2e3),i.onmessage=function(s){try{let f=w=>typeof w>"u"?"NA":w;e.vendor=f(s.data.vendor),e.renderer=f(s.data.renderer),e.userAgent=f(s.data.userAgent),e.language=f(s.data.language),e.platform=f(s.data.platform),e.memory=f(s.data.memory),e.cpuCount=f(s.data.cpuCount)}catch{l(e,c)}finally{p(),t(e)}},i.onerror=function(){p(),l(e,c),t(e)}}catch{p(),l(e,c),t(e)}})}function $(){let 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}var Q=['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"'],K=['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 q(t,e){let i={};try{let n=document.createElement(e);for(let o of t)try{i[o]=n.canPlayType(o)||null}catch{i[o]=null}}catch{for(let n of t)i[n]=null}return i}function J(t){let e={},i=window.MediaSource;if(!i||typeof i.isTypeSupported!="function"){for(let n of t)e[n]=null;return e}for(let n of t)try{e[n]=i.isTypeSupported(n)}catch{e[n]=null}return e}function Y(t){try{let e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){let i=e.getCapabilities(t);return m(JSON.stringify(i))}return"NA"}catch{return c}}function Z(){let t={audioCanPlayTypeHash:"NA",videoCanPlayTypeHash:"NA",audioMediaSourceHash:"NA",videoMediaSourceHash:"NA",rtcAudioCapabilitiesHash:"NA",rtcVideoCapabilitiesHash:"NA",hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;let e=q(Q,"audio"),i=q(K,"video");t.audioCanPlayTypeHash=m(JSON.stringify(e)),t.videoCanPlayTypeHash=m(JSON.stringify(i));let n=J(Q),o=J(K);t.audioMediaSourceHash=m(JSON.stringify(n)),t.videoMediaSourceHash=m(JSON.stringify(o)),t.rtcAudioCapabilitiesHash=Y("audio"),t.rtcVideoCapabilitiesHash=Y("video")}catch{l(t,c)}return t}async function gt(){return new Promise(t=>{try{let e=new Image,i=document.createElement("canvas").getContext("2d");e.onload=()=>{i.drawImage(e,0,0),t(i.getImageData(0,0,1,1).data.filter(n=>n===0).length!=4)},e.onerror=()=>{t(c)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(c)}})}function ft(){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, \u{1F603}",2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText("Cwm fjordbank glyphs vext quiz, \u{1F603}",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"),m(t.toDataURL())}catch{return c}}async function X(){let t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await gt(),t.canvasFingerprint=ft(),t}function ee(){let t=["deviceMemory","hardwareConcurrency","language","languages","platform"],e=[];for(let i of t){let n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator),i);n&&n.value?e.push("1"):e.push("0")}return e.join("")}function te(){return Math.random().toString(36).substring(2,15)}function re(){return new Date().getTime()}function ie(){return window.location.href}function S(t,e){let i=t.signals;return e==="iframe"?i.contexts.iframe.webdriver!==i.automation.webdriver||i.contexts.iframe.userAgent!==i.browser.userAgent||i.contexts.iframe.platform!==i.device.platform||i.contexts.iframe.memory!==i.device.memory||i.contexts.iframe.cpuCount!==i.device.cpuCount:i.contexts.webWorker.webdriver!==i.automation.webdriver||i.contexts.webWorker.userAgent!==i.browser.userAgent||i.contexts.webWorker.platform!==i.device.platform||i.contexts.webWorker.memory!==i.device.memory||i.contexts.webWorker.cpuCount!==i.device.cpuCount}function ne(){let t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),i=typeof window.ethereum<"u",n=document.getElementById("coupon-birds-drop-div")!==null,o=document.querySelector("deepl-input-controller")!==null,p=document.getElementById("monica-content-root")!==null,h=document.querySelector("chatgpt-sidebar")!==null,v=typeof window.__REQUESTLY__<"u",s=Array.from(document.querySelectorAll("*")).filter(f=>f.tagName.toLowerCase().startsWith("veepn-")).length>0;return t.bitmask=[e?"1":"0",i?"1":"0",n?"1":"0",o?"1":"0",p?"1":"0",h?"1":"0",v?"1":"0",s?"1":"0"].join(""),e&&t.extensions.push("grammarly"),i&&t.extensions.push("metamask"),n&&t.extensions.push("coupon-birds"),o&&t.extensions.push("deepl"),p&&t.extensions.push("monica-ai"),h&&t.extensions.push("sider-ai"),v&&t.extensions.push("requestly"),s&&t.extensions.push("veepn"),t}function u(t){try{return t()}catch{return!1}}function oe(){let t={bitmask:r,chrome:u(()=>"chrome"in window),brave:u(()=>"brave"in navigator),applePaySupport:u(()=>"ApplePaySetup"in window),opera:u(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:u(()=>window.navigator.serial!==void 0),attachShadow:u(()=>!!Element.prototype.attachShadow),caches:u(()=>!!window.caches),webAssembly:u(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:u(()=>"Buffer"in window),showModalDialog:u(()=>"showModalDialog"in window),safari:u(()=>"safari"in window),webkitPrefixedFunction:u(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:u(()=>"mozGetUserMedia"in navigator),usb:u(()=>typeof window.USB=="function"),browserCapture:u(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:u(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:u(()=>typeof window.PressureObserver=="function"),audioSession:u(()=>"audioSession"in navigator),selectAudioOutput:u(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:u(()=>"BarcodeDetector"in window),battery:u(()=>"getBattery"in navigator),devicePosture:u(()=>"DevicePosture"in window),documentPictureInPicture:u(()=>"documentPictureInPicture"in window),eyeDropper:u(()=>"EyeDropper"in window),editContext:u(()=>"EditContext"in window),fencedFrame:u(()=>"FencedFrameConfig"in window),sanitizer:u(()=>"Sanitizer"in window),otpCredential:u(()=>"OTPCredential"in window),sumPrecise:u(()=>"sumPrecise"in Math)},e=Object.keys(t).filter(i=>i!=="bitmask").map(i=>t[i]?"1":"0").join("");return t.bitmask=e,t}function ae(){let 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 i=0;i<=16;i++)window.matchMedia(`(color: ${i})`).matches&&(e=i);t.colorDepth=e}catch{l(t,c)}return t}async function se(){let t={layout:r,layoutSize:r};if("keyboard"in navigator&&typeof navigator.keyboard.getLayoutMap<"u")try{let e=await navigator.keyboard.getLayoutMap();t.layout=Array.from(e.entries()).map(([i,n])=>`${i},${n}`).join(" "),t.layoutSize=e.size}catch{l(t,c)}else l(t,"NA");return t}function ht(){return typeof window.opr<"u"}async function ce(){let t={summarizerAvailability:r,summarizerLanguageAvailability:r};if("Summarizer"in window&&!ht())try{t.summarizerAvailability=await window.Summarizer.availability(),t.summarizerLanguageAvailability=await window.Summarizer.availability({expectedInputLanguages:[navigator.language]})}catch{l(t,c)}else l(t,"NA");return t}function le(t){let 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 ue(t){return t.signals.automation.webdriver===!0}function de(t){return!!t.signals.automation.selenium}function me(t){return t.signals.automation.cdp===!0}function pe(t){return t.signals.automation.playwright===!0}function ge(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function fe(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function yt(t){return t.includes("Android")||t.includes("iPhone")||t.includes("iPod")||t.includes("iPad")}function he(t){let e=t.signals.browser.userAgent;return typeof e!="string"||!e.includes("Chrome")||yt(e)?!1:t.signals.browser.features.chrome===!1}function ye(t){return t.signals.contexts.iframe.webdriver===!0}function ve(t){return t.signals.contexts.webWorker.webdriver===!0}function b(t){return typeof t!="string"||t.length===0?!0:t==="NA"||t===c||t===y||t===r}function we(t){let e=t.signals.contexts.webWorker,i=t.signals.graphics.webGL;return b(i.vendor)||b(i.renderer)||b(e.vendor)||b(e.renderer)?!1:e.vendor!==i.vendor||e.renderer!==i.renderer}function vt(t,e){let i=t.includes("iPad"),n=e.includes("iPad");if(i===n)return!1;let o=p=>p==="MacIntel"||p==="MacPPC";return o(t)||o(e)}function be(t){if(t.signals.contexts.webWorker.platform==="NA"||t.signals.contexts.webWorker.platform===c||t.signals.contexts.webWorker.platform===y)return!1;let e=t.signals.device.platform,i=t.signals.contexts.webWorker.platform;return!(e===i||vt(e,i))}function Se(t){return t.signals.contexts.iframe.platform==="NA"||t.signals.contexts.iframe.platform===c?!1:t.signals.device.platform!==t.signals.contexts.iframe.platform}function xe(t){return t.signals.automation.webdriverWritable===!0}function Re(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function Ce(t){return t.signals.locale.internationalization.timezone==="UTC"}function Ae(t){let e=t.signals.locale.languages.languages,i=t.signals.locale.languages.language;return i&&e&&Array.isArray(e)&&e.length>0?e[0]!==i:!1}function Pe(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 Ee(t){return[t.signals.browser.userAgent,t.signals.contexts.iframe.userAgent,t.signals.contexts.webWorker.userAgent].some(i=>/bot|headless/i.test(i.toLowerCase()))}function ke(t){let e=t.signals.graphics.webgpu,i=t.signals.graphics.webGL,n=t.signals.browser.userAgent;return!!((i.vendor.includes("Apple")||i.renderer.includes("Apple"))&&!n.includes("Mac")||e.vendor.includes("apple")&&!n.includes("Mac")||e.vendor.includes("apple")&&!i.renderer.includes("Apple"))}function Me(t){let e=t.signals.device.platform,i=t.signals.browser.userAgent,n=t.signals.browser.highEntropyValues.platform;return!!(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"))||n!==c&&n!=="NA"&&(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"))))}async function We(t,e){let i=new TextEncoder().encode(e),n=new TextEncoder().encode(t),o=new Uint8Array(n.length);for(let h=0;hd?"1":"0").join(""),h=[e.automation.webdriver===!0,e.automation.webdriverWritable===!0,e.automation.selenium===!0,e.automation.cdp===!0,e.automation.playwright===!0].map(d=>d?"1":"0").join(""),v=m(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),s=`${h}h${v}`,f=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,w=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,Oe=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",Fe=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",Ne=[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(d=>d?"1":"0").join(""),_e=[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.layout,e.device.keyboard.layoutSize].map(d=>String(d)).join("|"),Te=m(_e).slice(0,6),Le=`${f}x${w}c${Oe}m${Fe}b${Ne}h${Te}`,Ve=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0".repeat(29),He=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"0".repeat(8),Ue=[e.browser.plugins.isValidPluginArray===!0,e.browser.plugins.pluginConsistency1===!0,e.browser.plugins.pluginOverflow===!0,e.browser.toSourceError.hasToSource===!0].map(d=>d?"1":"0").join(""),je=[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(d=>String(d)).join("|"),ze=m(je).slice(0,6),Ge=`f${Ve}e${He}p${Ue}h${ze}`,Be=[e.graphics.canvas.hasModifiedCanvas===!0].map(d=>d?"1":"0").join(""),$e=[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(d=>String(d)).join("|"),Qe=m($e).slice(0,6),Ke=`${Be}h${Qe}`,qe=[e.codecs.hasMediaSource===!0].map(d=>d?"1":"0").join(""),Je=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(d=>String(d)).join("|"),Ye=m(Je).slice(0,6),Ze=`${qe}h${Ye}`,Xe=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",et=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,tt=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),rt=[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(d=>String(d)).join("|"),it=m(rt).slice(0,4),nt=`${Xe}${et}t${tt}_h${it}`,ot=[S(this.fingerprint,"iframe"),S(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(d=>d?"1":"0").join(""),at=[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(d=>String(d)).join("|"),st=m(at).slice(0,6),ct=`${ot}h${st}`;return[n,p,s,Le,Ge,Ke,Ze,nt,ct].join("_")}catch(e){return console.error("Error generating fingerprint scanner id",e),c}}async encryptFingerprint(e){let i=__FP_ENCRYPTION_KEY__;return i.length>20&&i.indexOf("DEFAULT")>0&&i.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 We(JSON.stringify(e),i)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:g,test:le},{name:"hasWebdriver",severity:g,test:ue},{name:"hasWebdriverWritable",severity:g,test:xe},{name:"hasSeleniumProperty",severity:g,test:de},{name:"hasCDP",severity:g,test:me},{name:"hasPlaywright",severity:g,test:pe},{name:"hasImpossibleDeviceMemory",severity:g,test:ge},{name:"hasHighCPUCount",severity:g,test:fe},{name:"hasMissingChromeObject",severity:g,test:he},{name:"hasWebdriverIframe",severity:g,test:ye},{name:"hasWebdriverWorker",severity:g,test:ve},{name:"hasMismatchWebGLInWorker",severity:g,test:we},{name:"hasMismatchPlatformIframe",severity:g,test:Se},{name:"hasMismatchPlatformWorker",severity:g,test:be},{name:"hasSwiftshaderRenderer",severity:"low",test:Re},{name:"hasUTCTimezone",severity:P,test:Ce},{name:"hasMismatchLanguages",severity:"low",test:Ae},{name:"hasInconsistentEtsl",severity:g,test:Pe},{name:"hasBotUserAgent",severity:g,test:Ee},{name:"hasGPUMismatch",severity:g,test:ke},{name:"hasPlatformMismatch",severity:g,test:Me}]}runDetectionRules(){let e=this.getDetectionRules(),i={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(let n of e)try{let o=n.test(this.fingerprint);i[n.name]={detected:o,severity:n.severity}}catch{i[n.name]={detected:!1,severity:n.severity}}return i}async collectFingerprint(e={encrypt:!0}){let{encrypt:i=!0,skipWorker:n=!1}=e,o=this.fingerprint.signals,p={webdriver:this.collectSignal(R),webdriverWritable:this.collectSignal(H),selenium:this.collectSignal(V),cdp:this.collectSignal(k),playwright:this.collectSignal(W),navigatorPropertyDescriptors:this.collectSignal(ee),cpuCount:this.collectSignal(I),memory:this.collectSignal(O),platform:this.collectSignal(A),screenResolution:this.collectSignal(_),multimediaDevices:this.collectSignal(z),mediaQueries:this.collectSignal(ae),keyboard:this.collectSignal(se),userAgent:this.collectSignal(C),browserFeatures:this.collectSignal(oe),plugins:this.collectSignal(j),browserExtensions:this.collectSignal(ne),highEntropyValues:this.collectSignal(U),etsl:this.collectSignal(F),maths:this.collectSignal(D),toSourceError:this.collectSignal($),ai:this.collectSignal(ce),webGL:this.collectSignal(M),webgpu:this.collectSignal(L),canvas:this.collectSignal(X),mediaCodecs:this.collectSignal(Z),internationalization:this.collectSignal(N),languages:this.collectSignal(T),iframe:this.collectSignal(G),webWorker:n?Promise.resolve({webdriver:y,userAgent:y,platform:y,memory:y,cpuCount:y,language:y,vendor:y,renderer:y}):this.collectSignal(B),nonce:this.collectSignal(te),time:this.collectSignal(re),url:this.collectSignal(ie)},h=Object.keys(p),v=await Promise.all(Object.values(p)),s=Object.fromEntries(h.map((f,w)=>[f,v[w]]));return o.automation.webdriver=s.webdriver,o.automation.webdriverWritable=s.webdriverWritable,o.automation.selenium=s.selenium,o.automation.cdp=s.cdp,o.automation.playwright=s.playwright,o.automation.navigatorPropertyDescriptors=s.navigatorPropertyDescriptors,o.device.cpuCount=s.cpuCount,o.device.memory=s.memory,o.device.platform=s.platform,o.device.screenResolution=s.screenResolution,o.device.multimediaDevices=s.multimediaDevices,o.device.mediaQueries=s.mediaQueries,o.device.keyboard=s.keyboard,o.browser.userAgent=s.userAgent,o.browser.features=s.browserFeatures,o.browser.plugins=s.plugins,o.browser.extensions=s.browserExtensions,o.browser.highEntropyValues=s.highEntropyValues,o.browser.etsl=s.etsl,o.browser.maths=s.maths,o.browser.toSourceError=s.toSourceError,o.browser.ai=s.ai,o.graphics.webGL=s.webGL,o.graphics.webgpu=s.webgpu,o.graphics.canvas=s.canvas,o.codecs=s.mediaCodecs,o.locale.internationalization=s.internationalization,o.locale.languages=s.languages,o.contexts.iframe=s.iframe,o.contexts.webWorker=s.webWorker,this.fingerprint.nonce=s.nonce,this.fingerprint.time=s.time,this.fingerprint.url=s.url,this.fingerprint.fastBotDetectionDetails=this.runDetectionRules(),this.fingerprint.fastBotDetection=Object.values(this.fingerprint.fastBotDetectionDetails).some(f=>f.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),i?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}},De=x;globalThis.CrowdsecFingerprintScanner=De;})();