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.
- package/dist/fpScanner.cjs.js +2 -2
- package/dist/fpScanner.es.js +184 -134
- package/dist/index.d.ts.map +1 -1
- package/dist/signals/ai.d.ts +5 -0
- package/dist/signals/ai.d.ts.map +1 -0
- package/dist/signals/browserFeatures.d.ts +1 -0
- package/dist/signals/browserFeatures.d.ts.map +1 -1
- package/dist/signals/keyboard.d.ts +5 -0
- package/dist/signals/keyboard.d.ts.map +1 -0
- package/dist/signals/maths.d.ts.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +20 -2
- package/src/signals/ai.ts +26 -0
- package/src/signals/browserFeatures.ts +1 -0
- package/src/signals/keyboard.ts +28 -0
- package/src/signals/maths.ts +6 -0
- package/src/types.ts +12 -0
package/dist/fpScanner.cjs.js
CHANGED
|
@@ -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",
|
|
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;
|
package/dist/fpScanner.es.js
CHANGED
|
@@ -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",
|
|
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
|
|
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
|
|
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)) :
|
|
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
|
-
|
|
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
|
|
111
|
+
function ye() {
|
|
112
112
|
return {
|
|
113
113
|
languages: navigator.languages,
|
|
114
114
|
language: navigator.language
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
|
-
async function
|
|
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
|
-
|
|
129
|
+
d(t, l);
|
|
130
130
|
}
|
|
131
131
|
else
|
|
132
|
-
|
|
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
|
-
|
|
207
|
+
d(e, l);
|
|
208
208
|
}
|
|
209
209
|
else
|
|
210
|
-
|
|
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
|
|
225
|
+
function ke() {
|
|
226
226
|
return navigator.plugins ? navigator.plugins.length : s;
|
|
227
227
|
}
|
|
228
|
-
function
|
|
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
|
|
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
|
|
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 =
|
|
253
|
+
t.isValidPluginArray = Ae(), t.pluginCount = ke(), t.pluginNamesHash = Pe(), t.pluginConsistency1 = Me(), t.pluginOverflow = xe();
|
|
254
254
|
} catch {
|
|
255
|
-
|
|
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
|
|
279
|
+
return d(e, s), t(e);
|
|
280
280
|
} else
|
|
281
|
-
return
|
|
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
|
-
|
|
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
|
|
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
|
-
}`,
|
|
373
|
-
i = URL.createObjectURL(
|
|
374
|
-
|
|
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
|
|
378
|
-
e.vendor =
|
|
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
|
-
|
|
380
|
+
d(e, l);
|
|
381
381
|
} finally {
|
|
382
|
-
|
|
382
|
+
g(), t(e);
|
|
383
383
|
}
|
|
384
384
|
}, n.onerror = function() {
|
|
385
|
-
|
|
385
|
+
g(), d(e, l), t(e);
|
|
386
386
|
};
|
|
387
387
|
} catch {
|
|
388
|
-
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
494
|
-
t.audioMediaSourceHash = f(JSON.stringify(i)), t.videoMediaSourceHash = f(JSON.stringify(a)), t.rtcAudioCapabilitiesHash =
|
|
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
|
-
|
|
496
|
+
d(t, l);
|
|
497
497
|
}
|
|
498
498
|
return t;
|
|
499
499
|
}
|
|
500
|
-
async function
|
|
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
|
|
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
|
|
539
|
+
function ze() {
|
|
540
540
|
return Math.random().toString(36).substring(2, 15);
|
|
541
541
|
}
|
|
542
|
-
function
|
|
542
|
+
function Ue() {
|
|
543
543
|
return (/* @__PURE__ */ new Date()).getTime();
|
|
544
544
|
}
|
|
545
|
-
function
|
|
545
|
+
function Ne() {
|
|
546
546
|
return window.location.href;
|
|
547
547
|
}
|
|
548
|
-
function
|
|
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
|
|
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,
|
|
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
|
-
|
|
562
|
+
g ? "1" : "0",
|
|
563
563
|
p ? "1" : "0",
|
|
564
|
-
|
|
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"),
|
|
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
|
|
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
|
|
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
|
-
|
|
629
|
+
d(t, l);
|
|
629
630
|
}
|
|
630
631
|
return t;
|
|
631
632
|
}
|
|
632
|
-
function
|
|
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
|
|
672
|
+
function Qe(t) {
|
|
637
673
|
return t.signals.automation.webdriver === !0;
|
|
638
674
|
}
|
|
639
|
-
function
|
|
675
|
+
function qe(t) {
|
|
640
676
|
return !!t.signals.automation.selenium;
|
|
641
677
|
}
|
|
642
|
-
function
|
|
678
|
+
function Ke(t) {
|
|
643
679
|
return t.signals.automation.cdp === !0;
|
|
644
680
|
}
|
|
645
|
-
function
|
|
681
|
+
function Je(t) {
|
|
646
682
|
return t.signals.automation.playwright === !0;
|
|
647
683
|
}
|
|
648
|
-
function
|
|
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
|
|
687
|
+
function Ze(t) {
|
|
652
688
|
return typeof t.signals.device.cpuCount != "number" ? !1 : t.signals.device.cpuCount > 70;
|
|
653
689
|
}
|
|
654
|
-
function
|
|
690
|
+
function Xe(t) {
|
|
655
691
|
return t.includes("Android") || t.includes("iPhone") || t.includes("iPod") || t.includes("iPad");
|
|
656
692
|
}
|
|
657
|
-
function
|
|
693
|
+
function et(t) {
|
|
658
694
|
const e = t.signals.browser.userAgent;
|
|
659
|
-
return typeof e != "string" || !e.includes("Chrome") ||
|
|
695
|
+
return typeof e != "string" || !e.includes("Chrome") || Xe(e) ? !1 : t.signals.browser.features.chrome === !1;
|
|
660
696
|
}
|
|
661
|
-
function
|
|
697
|
+
function tt(t) {
|
|
662
698
|
return t.signals.contexts.iframe.webdriver === !0;
|
|
663
699
|
}
|
|
664
|
-
function
|
|
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
|
|
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
|
|
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 = (
|
|
714
|
+
const a = (g) => g === "MacIntel" || g === "MacPPC";
|
|
679
715
|
return a(t) || a(e);
|
|
680
716
|
}
|
|
681
|
-
function
|
|
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 ||
|
|
721
|
+
return !(e === n || it(e, n));
|
|
686
722
|
}
|
|
687
|
-
function
|
|
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
|
|
726
|
+
function st(t) {
|
|
691
727
|
return t.signals.automation.webdriverWritable === !0;
|
|
692
728
|
}
|
|
693
|
-
function
|
|
729
|
+
function ct(t) {
|
|
694
730
|
return t.signals.graphics.webGL.renderer.includes("SwiftShader");
|
|
695
731
|
}
|
|
696
|
-
function
|
|
732
|
+
function lt(t) {
|
|
697
733
|
return t.signals.locale.internationalization.timezone === "UTC";
|
|
698
734
|
}
|
|
699
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
726
|
-
return btoa(
|
|
761
|
+
const g = String.fromCharCode(...a);
|
|
762
|
+
return btoa(g);
|
|
727
763
|
}
|
|
728
|
-
class
|
|
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",
|
|
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(""),
|
|
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
|
-
|
|
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
|
-
|
|
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(""),
|
|
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("|"),
|
|
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(""),
|
|
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(
|
|
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
|
-
|
|
1048
|
-
|
|
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
|
-
|
|
1115
|
+
g,
|
|
1068
1116
|
o,
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
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
|
|
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:
|
|
1092
|
-
{ name: "hasWebdriver", severity:
|
|
1093
|
-
{ name: "hasWebdriverWritable", severity:
|
|
1094
|
-
{ name: "hasSeleniumProperty", severity:
|
|
1095
|
-
{ name: "hasCDP", severity:
|
|
1096
|
-
{ name: "hasPlaywright", severity:
|
|
1097
|
-
{ name: "hasImpossibleDeviceMemory", severity:
|
|
1098
|
-
{ name: "hasHighCPUCount", severity:
|
|
1099
|
-
{ name: "hasMissingChromeObject", severity:
|
|
1100
|
-
{ name: "hasWebdriverIframe", severity:
|
|
1101
|
-
{ name: "hasWebdriverWorker", severity:
|
|
1102
|
-
{ name: "hasMismatchWebGLInWorker", severity:
|
|
1103
|
-
{ name: "hasMismatchPlatformIframe", severity:
|
|
1104
|
-
{ name: "hasMismatchPlatformWorker", severity:
|
|
1105
|
-
{ name: "hasSwiftshaderRenderer", severity: S, test:
|
|
1106
|
-
{ name: "hasUTCTimezone", severity: se, test:
|
|
1107
|
-
{ name: "hasMismatchLanguages", severity: S, test:
|
|
1108
|
-
{ name: "hasInconsistentEtsl", severity:
|
|
1109
|
-
{ name: "hasBotUserAgent", severity:
|
|
1110
|
-
{ name: "hasGPUMismatch", severity:
|
|
1111
|
-
{ name: "hasPlatformMismatch", severity:
|
|
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,
|
|
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(
|
|
1210
|
+
mediaQueries: this.collectSignal(Ve),
|
|
1211
|
+
keyboard: this.collectSignal(Be),
|
|
1163
1212
|
// Browser signals
|
|
1164
1213
|
userAgent: this.collectSignal(ae),
|
|
1165
|
-
browserFeatures: this.collectSignal(
|
|
1166
|
-
plugins: this.collectSignal(
|
|
1167
|
-
browserExtensions: this.collectSignal(
|
|
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(
|
|
1224
|
+
webgpu: this.collectSignal(we),
|
|
1175
1225
|
canvas: this.collectSignal(Oe),
|
|
1176
1226
|
// Codecs
|
|
1177
|
-
mediaCodecs: this.collectSignal(
|
|
1227
|
+
mediaCodecs: this.collectSignal(Le),
|
|
1178
1228
|
// Locale signals
|
|
1179
1229
|
internationalization: this.collectSignal(fe),
|
|
1180
|
-
languages: this.collectSignal(
|
|
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(
|
|
1195
|
-
time: this.collectSignal(
|
|
1196
|
-
url: this.collectSignal(
|
|
1197
|
-
}, p = Object.keys(
|
|
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((
|
|
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
|
-
|
|
1252
|
+
vt as default
|
|
1203
1253
|
};
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/signals/ai.ts"],"names":[],"mappings":"AAKA,wBAAsB,EAAE;;;GAoBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserFeatures.d.ts","sourceRoot":"","sources":["../../src/signals/browserFeatures.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe
|
|
1
|
+
{"version":3,"file":"browserFeatures.d.ts","sourceRoot":"","sources":["../../src/signals/browserFeatures.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwC9B"}
|
|
@@ -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,
|
|
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;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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.
|
|
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 :
|
|
371
|
-
const extensionsBitmask = typeof s.browser.extensions.bitmask === 'string' ? s.browser.extensions.bitmask :
|
|
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
|
+
}
|
package/src/signals/maths.ts
CHANGED
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 {
|