fpscanner 1.0.3-beta.0 → 1.0.5
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/detections/hasMismatchWebGLInWorker.d.ts.map +1 -1
- package/dist/fpScanner.cjs.js +32 -16
- package/dist/fpScanner.es.js +118 -101
- package/dist/signals/worker.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/detections/hasMismatchWebGLInWorker.ts +4 -1
- package/src/signals/worker.ts +40 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasMismatchWebGLInWorker.d.ts","sourceRoot":"","sources":["../../src/detections/hasMismatchWebGLInWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"hasMismatchWebGLInWorker.d.ts","sourceRoot":"","sources":["../../src/detections/hasMismatchWebGLInWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAUvC,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,WAchE"}
|
package/dist/fpScanner.cjs.js
CHANGED
|
@@ -1,26 +1,42 @@
|
|
|
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",
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function ie(){return navigator.webdriver}function ae(){return navigator.userAgent}function oe(){return navigator.platform}const l="ERROR",r="INIT",s="NA",v="SKIPPED",g="high",S="low",se="medium";function f(t){let e=0;for(let n=0,i=t.length;n<i;n++){let a=t.charCodeAt(n);e=(e<<5)-e+a,e|=0}return e.toString(16).padStart(8,"0")}function m(t,e){for(const n in t)t[n]=e}function ce(){return navigator.buildID==="20181001000000"}function le(){try{let t=!1;const e=Error.prepareStackTrace;Error.prepareStackTrace=function(){return t=!0,e};const n=new Error("");return console.log(n),t}catch{return l}}function ue(){const t={vendor:r,renderer:r};if(ce())return m(t,s),t;try{var e=document.createElement("canvas"),n=e.getContext("webgl")||e.getContext("experimental-webgl");n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info")>=0?(t.vendor=n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL),t.renderer=n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)):m(t,s)}catch{m(t,l)}return t}function de(){return"__pwInitScripts"in window||"__playwright__binding__"in window}function ge(){return navigator.hardwareConcurrency||s}function he(){const t=[],e=.123456789;return["E","LN10","LN2","LOG10E","LOG2E","PI","SQRT1_2","SQRT2"].forEach(function(a){try{t.push(Math[a])}catch{t.push(-1)}}),["tan","sin","exp","atan","acosh","asinh","atanh","expm1","log1p","sinh"].forEach(function(a){try{t.push(Math[a](e))}catch{t.push(-1)}}),f(t.map(String).join(","))}function me(){return navigator.deviceMemory||s}function pe(){return eval.toString().length}function fe(){const t={timezone:r,localeLanguage:r};try{if(typeof Intl<"u"&&typeof Intl.DateTimeFormat<"u"){const e=Intl.DateTimeFormat().resolvedOptions();t.timezone=e.timeZone,t.localeLanguage=e.locale}else t.timezone=s,t.localeLanguage=s}catch{t.timezone=l,t.localeLanguage=l}return t}function ve(){return{width:window.screen.width,height:window.screen.height,pixelDepth:window.screen.pixelDepth,colorDepth:window.screen.colorDepth,availableWidth:window.screen.availWidth,availableHeight:window.screen.availHeight,innerWidth:window.innerWidth,innerHeight:window.innerHeight,hasMultipleDisplays:typeof screen.isExtended<"u"?screen.isExtended:s}}function we(){return{languages:navigator.languages,language:navigator.language}}async function ye(){const t={vendor:r,architecture:r,device:r,description:r};if("gpu"in navigator)try{const e=await navigator.gpu.requestAdapter();e&&(t.vendor=e.info.vendor,t.architecture=e.info.architecture,t.device=e.info.device,t.description=e.info.description)}catch{m(t,l)}else m(t,s);return t}function be(){const t=["__driver_evaluate","__webdriver_evaluate","__selenium_evaluate","__fxdriver_evaluate","__driver_unwrapped","__webdriver_unwrapped","__selenium_unwrapped","__fxdriver_unwrapped","_Selenium_IDE_Recorder","_selenium","calledSelenium","$cdc_asdjflasutopfhvcZLmcfl_","$chrome_asyncScriptInfo","__$webdriverAsyncExecutor","webdriver","__webdriverFunc","domAutomation","domAutomationController","__lastWatirAlert","__lastWatirConfirm","__lastWatirPrompt","__webdriver_script_fn","_WEBDRIVER_ELEM_CACHE"];let e=!1;for(let n=0;n<t.length;n++)if(t[n]in window){e=!0;break}return e=e||!!document.__webdriver_script_fn||!!window.domAutomation||!!window.domAutomationController,e}function Se(){try{const t="webdriver",e=window.navigator;if(!e[t]&&!e.hasOwnProperty(t)){e[t]=1;const n=e[t]===1;return delete e[t],n}return!0}catch{return!1}}async function Ce(){const t=window.navigator,e={architecture:r,bitness:r,brands:r,mobile:r,model:r,platform:r,platformVersion:r,uaFullVersion:r};if("userAgentData"in t)try{const n=await t.userAgentData.getHighEntropyValues(["architecture","bitness","brands","mobile","model","platform","platformVersion","uaFullVersion"]);e.architecture=n.architecture,e.bitness=n.bitness,e.brands=n.brands,e.mobile=n.mobile,e.model=n.model,e.platform=n.platform,e.platformVersion=n.platformVersion,e.uaFullVersion=n.uaFullVersion}catch{m(e,l)}else m(e,s);return e}function Ae(){if(!navigator.plugins)return!1;const t=typeof navigator.plugins.toString=="function"?navigator.plugins.toString():navigator.plugins.constructor&&typeof navigator.plugins.constructor.toString=="function"?navigator.plugins.constructor.toString():typeof navigator.plugins;return t==="[object PluginArray]"||t==="[object MSPluginsCollection]"||t==="[object HTMLPluginsCollection]"}function Pe(){if(!navigator.plugins)return s;const t=[];for(let e=0;e<navigator.plugins.length;e++)t.push(navigator.plugins[e].name);return f(t.join(","))}function Me(){return navigator.plugins?navigator.plugins.length:s}function xe(){if(!navigator.plugins)return s;try{return navigator.plugins[0]===navigator.plugins[0][0].enabledPlugin}catch{return l}}function We(){if(!navigator.plugins)return s;try{return navigator.plugins.item(4294967296)!==navigator.plugins[0]}catch{return l}}function ke(){const t={isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r};try{t.isValidPluginArray=Ae(),t.pluginCount=Me(),t.pluginNamesHash=Pe(),t.pluginConsistency1=xe(),t.pluginOverflow=We()}catch{m(t,l)}return t}async function Ee(){return new Promise(async function(t){var e={audiooutput:0,audioinput:0,videoinput:0};if(navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices){const a=await navigator.mediaDevices.enumerateDevices();if(typeof a<"u"){for(var n=0;n<a.length;n++){var i=a[n].kind;e[i]=e[i]+1}return t({speakers:e.audiooutput,microphones:e.audioinput,webcams:e.videoinput})}else return m(e,s),t(e)}else return m(e,s),t(e)})}function De(){const t={webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r},e=document.createElement("iframe");let n=!1;try{e.style.display="none",e.src="about:blank",document.body.appendChild(e),n=!0;const i=e.contentWindow?.navigator;t.webdriver=i.webdriver??!1,t.userAgent=i.userAgent??s,t.platform=i.platform??s,t.memory=i.deviceMemory??s,t.cpuCount=i.hardwareConcurrency??s,t.language=i.language??s}catch{m(t,l)}finally{if(n)try{document.body.removeChild(e)}catch{}}return t}async function _e(){return new Promise(t=>{const e={vendor:r,renderer:r,userAgent:r,language:r,platform:r,memory:r,cpuCount:r};let n=null,i=null,a=null;const d=()=>{a&&clearTimeout(a),n&&n.terminate(),i&&URL.revokeObjectURL(i)};try{const p=`var fingerprintWorker = {
|
|
2
|
+
userAgent: 'NA',
|
|
3
|
+
language: 'NA',
|
|
4
|
+
cpuCount: 'NA',
|
|
5
|
+
platform: 'NA',
|
|
6
|
+
memory: 'NA',
|
|
7
|
+
vendor: 'NA',
|
|
8
|
+
renderer: 'NA'
|
|
9
|
+
};
|
|
10
|
+
try {
|
|
4
11
|
fingerprintWorker.userAgent = navigator.userAgent;
|
|
5
12
|
fingerprintWorker.language = navigator.language;
|
|
6
13
|
fingerprintWorker.cpuCount = navigator.hardwareConcurrency;
|
|
7
14
|
fingerprintWorker.platform = navigator.platform;
|
|
8
|
-
|
|
9
|
-
|
|
15
|
+
if (typeof navigator.deviceMemory !== 'undefined') {
|
|
16
|
+
fingerprintWorker.memory = navigator.deviceMemory;
|
|
17
|
+
}
|
|
10
18
|
|
|
11
|
-
var canvas = new OffscreenCanvas(1, 1);
|
|
12
|
-
fingerprintWorker.vendor = 'INIT';
|
|
13
|
-
fingerprintWorker.renderer = 'INIT';
|
|
14
|
-
var gl = canvas.getContext('webgl');
|
|
15
|
-
const isFirefox = navigator.userAgent.includes('Firefox');
|
|
16
19
|
try {
|
|
17
|
-
if (
|
|
18
|
-
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
19
|
-
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
20
|
-
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
21
|
-
} else {
|
|
20
|
+
if (typeof OffscreenCanvas === 'undefined') {
|
|
22
21
|
fingerprintWorker.vendor = 'NA';
|
|
23
22
|
fingerprintWorker.renderer = 'NA';
|
|
23
|
+
} else {
|
|
24
|
+
var canvas = new OffscreenCanvas(1, 1);
|
|
25
|
+
var gl = canvas.getContext('webgl');
|
|
26
|
+
var isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
|
|
27
|
+
if (gl && !isFirefox) {
|
|
28
|
+
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
29
|
+
if (glExt) {
|
|
30
|
+
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
31
|
+
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
32
|
+
} else {
|
|
33
|
+
fingerprintWorker.vendor = 'NA';
|
|
34
|
+
fingerprintWorker.renderer = 'NA';
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
fingerprintWorker.vendor = 'NA';
|
|
38
|
+
fingerprintWorker.renderer = 'NA';
|
|
39
|
+
}
|
|
24
40
|
}
|
|
25
41
|
} catch (_) {
|
|
26
42
|
fingerprintWorker.vendor = 'ERROR';
|
|
@@ -29,4 +45,4 @@
|
|
|
29
45
|
self.postMessage(fingerprintWorker);
|
|
30
46
|
} catch (e) {
|
|
31
47
|
self.postMessage(fingerprintWorker);
|
|
32
|
-
}`,w=new Blob([m],{type:"application/javascript"});i=URL.createObjectURL(w),n=new Worker(i),a=window.setTimeout(()=>{d(),h(e,l),t(e)},2e3),n.onmessage=function(o){try{e.vendor=o.data.vendor,e.renderer=o.data.renderer,e.userAgent=o.data.userAgent,e.language=o.data.language,e.platform=o.data.platform,e.memory=o.data.memory,e.cpuCount=o.data.cpuCount}catch{h(e,l)}finally{d(),t(e)}},n.onerror=function(){d(),h(e,l),t(e)}}catch{d(),h(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"'],P=['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 A(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 p(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=A(C,"audio"),n=A(P,"video");t.audioCanPlayTypeHash=p(JSON.stringify(e)),t.videoCanPlayTypeHash=p(JSON.stringify(n));const i=M(C),a=M(P);t.audioMediaSourceHash=p(JSON.stringify(i)),t.videoMediaSourceHash=p(JSON.stringify(a)),t.rtcAudioCapabilitiesHash=x("audio"),t.rtcVideoCapabilitiesHash=x("video")}catch{h(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"),p(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 Fe(){return new Date().getTime()}function Ge(){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 Ve(){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,m=document.querySelector("chatgpt-sidebar")!==null,w=typeof window.__REQUESTLY__<"u",o=Array.from(document.querySelectorAll("*")).filter(v=>v.tagName.toLowerCase().startsWith("veepn-")).length>0;return t.bitmask=[e?"1":"0",n?"1":"0",i?"1":"0",a?"1":"0",d?"1":"0",m?"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"),m&&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 Be(){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 je(){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{h(t,l)}return t}function Ne(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 y(t){return t===s||t===l||t===f||t===r}function tt(t){const e=t.signals.contexts.webWorker,n=t.signals.graphics.webGL;return y(n.vendor)||y(n.renderer)||y(e.vendor)||y(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===f)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 m=0;m<i.length;m++)a[m]=i[m]^n[m%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(""),m=[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=p(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),o=`${m}h${w}`,v=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,b=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,E=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",k=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=p(_).slice(0,6),I=`${v}x${b}c${E}m${k}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=p(H).slice(0,6),F=`f${L}e${T}p${O}h${U}`,G=[e.graphics.canvas.hasModifiedCanvas===!0].map(u=>u?"1":"0").join(""),V=[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("|"),B=p(V).slice(0,6),j=`${G}h${B}`,N=[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("|"),$=p(z).slice(0,6),Q=`${N}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=p(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=p(te).slice(0,6),ne=`${ee}h${re}`;return[i,d,o,I,F,j,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:Ne},{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(ke),mediaQueries:this.collectSignal(je),userAgent:this.collectSignal(ae),browserFeatures:this.collectSignal(Be),plugins:this.collectSignal(Ee),browserExtensions:this.collectSignal(Ve),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:f,userAgent:f,platform:f,memory:f,cpuCount:f,language:f,vendor:f,renderer:f}):this.collectSignal(_e),nonce:this.collectSignal(Ue),time:this.collectSignal(Fe),url:this.collectSignal(Ge)},m=Object.keys(d),w=await Promise.all(Object.values(d)),o=Object.fromEntries(m.map((v,b)=>[v,w[b]]));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(v=>v.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),n?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}}exports.default=mt;
|
|
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;
|
package/dist/fpScanner.es.js
CHANGED
|
@@ -7,8 +7,8 @@ function ae() {
|
|
|
7
7
|
function oe() {
|
|
8
8
|
return navigator.platform;
|
|
9
9
|
}
|
|
10
|
-
const l = "ERROR", r = "INIT", s = "NA",
|
|
11
|
-
function
|
|
10
|
+
const l = "ERROR", r = "INIT", s = "NA", v = "SKIPPED", g = "high", S = "low", se = "medium";
|
|
11
|
+
function f(t) {
|
|
12
12
|
let e = 0;
|
|
13
13
|
for (let n = 0, i = t.length; n < i; n++) {
|
|
14
14
|
let a = t.charCodeAt(n);
|
|
@@ -16,7 +16,7 @@ function p(t) {
|
|
|
16
16
|
}
|
|
17
17
|
return e.toString(16).padStart(8, "0");
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function m(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 m(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)) : m(t, s);
|
|
49
49
|
} catch {
|
|
50
|
-
|
|
50
|
+
m(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
|
-
}),
|
|
74
|
+
}), f(t.map(String).join(","));
|
|
75
75
|
}
|
|
76
76
|
function me() {
|
|
77
77
|
return navigator.deviceMemory || s;
|
|
@@ -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
|
+
m(t, l);
|
|
130
130
|
}
|
|
131
131
|
else
|
|
132
|
-
|
|
132
|
+
m(t, s);
|
|
133
133
|
return t;
|
|
134
134
|
}
|
|
135
135
|
function be() {
|
|
@@ -204,23 +204,23 @@ 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
|
+
m(e, l);
|
|
208
208
|
}
|
|
209
209
|
else
|
|
210
|
-
|
|
210
|
+
m(e, s);
|
|
211
211
|
return e;
|
|
212
212
|
}
|
|
213
|
-
function
|
|
213
|
+
function Ae() {
|
|
214
214
|
if (!navigator.plugins) return !1;
|
|
215
215
|
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;
|
|
216
216
|
return t === "[object PluginArray]" || t === "[object MSPluginsCollection]" || t === "[object HTMLPluginsCollection]";
|
|
217
217
|
}
|
|
218
|
-
function
|
|
218
|
+
function Pe() {
|
|
219
219
|
if (!navigator.plugins) return s;
|
|
220
220
|
const t = [];
|
|
221
221
|
for (let e = 0; e < navigator.plugins.length; e++)
|
|
222
222
|
t.push(navigator.plugins[e].name);
|
|
223
|
-
return
|
|
223
|
+
return f(t.join(","));
|
|
224
224
|
}
|
|
225
225
|
function Me() {
|
|
226
226
|
return navigator.plugins ? navigator.plugins.length : s;
|
|
@@ -241,7 +241,7 @@ function We() {
|
|
|
241
241
|
return l;
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
function
|
|
244
|
+
function ke() {
|
|
245
245
|
const t = {
|
|
246
246
|
isValidPluginArray: r,
|
|
247
247
|
pluginCount: r,
|
|
@@ -250,13 +250,13 @@ function Ee() {
|
|
|
250
250
|
pluginOverflow: r
|
|
251
251
|
};
|
|
252
252
|
try {
|
|
253
|
-
t.isValidPluginArray =
|
|
253
|
+
t.isValidPluginArray = Ae(), t.pluginCount = Me(), t.pluginNamesHash = Pe(), t.pluginConsistency1 = xe(), t.pluginOverflow = We();
|
|
254
254
|
} catch {
|
|
255
|
-
|
|
255
|
+
m(t, l);
|
|
256
256
|
}
|
|
257
257
|
return t;
|
|
258
258
|
}
|
|
259
|
-
async function
|
|
259
|
+
async function Ee() {
|
|
260
260
|
return new Promise(async function(t) {
|
|
261
261
|
var e = {
|
|
262
262
|
audiooutput: 0,
|
|
@@ -276,9 +276,9 @@ async function ke() {
|
|
|
276
276
|
webcams: e.videoinput
|
|
277
277
|
});
|
|
278
278
|
} else
|
|
279
|
-
return
|
|
279
|
+
return m(e, s), t(e);
|
|
280
280
|
} else
|
|
281
|
-
return
|
|
281
|
+
return m(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
|
+
m(t, l);
|
|
300
300
|
} finally {
|
|
301
301
|
if (n)
|
|
302
302
|
try {
|
|
@@ -322,29 +322,45 @@ async function _e() {
|
|
|
322
322
|
a && clearTimeout(a), n && n.terminate(), i && URL.revokeObjectURL(i);
|
|
323
323
|
};
|
|
324
324
|
try {
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
|
|
325
|
+
const p = `var fingerprintWorker = {
|
|
326
|
+
userAgent: 'NA',
|
|
327
|
+
language: 'NA',
|
|
328
|
+
cpuCount: 'NA',
|
|
329
|
+
platform: 'NA',
|
|
330
|
+
memory: 'NA',
|
|
331
|
+
vendor: 'NA',
|
|
332
|
+
renderer: 'NA'
|
|
333
|
+
};
|
|
334
|
+
try {
|
|
328
335
|
fingerprintWorker.userAgent = navigator.userAgent;
|
|
329
336
|
fingerprintWorker.language = navigator.language;
|
|
330
337
|
fingerprintWorker.cpuCount = navigator.hardwareConcurrency;
|
|
331
338
|
fingerprintWorker.platform = navigator.platform;
|
|
332
|
-
|
|
333
|
-
|
|
339
|
+
if (typeof navigator.deviceMemory !== 'undefined') {
|
|
340
|
+
fingerprintWorker.memory = navigator.deviceMemory;
|
|
341
|
+
}
|
|
334
342
|
|
|
335
|
-
var canvas = new OffscreenCanvas(1, 1);
|
|
336
|
-
fingerprintWorker.vendor = 'INIT';
|
|
337
|
-
fingerprintWorker.renderer = 'INIT';
|
|
338
|
-
var gl = canvas.getContext('webgl');
|
|
339
|
-
const isFirefox = navigator.userAgent.includes('Firefox');
|
|
340
343
|
try {
|
|
341
|
-
if (
|
|
342
|
-
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
343
|
-
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
344
|
-
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
345
|
-
} else {
|
|
344
|
+
if (typeof OffscreenCanvas === 'undefined') {
|
|
346
345
|
fingerprintWorker.vendor = 'NA';
|
|
347
346
|
fingerprintWorker.renderer = 'NA';
|
|
347
|
+
} else {
|
|
348
|
+
var canvas = new OffscreenCanvas(1, 1);
|
|
349
|
+
var gl = canvas.getContext('webgl');
|
|
350
|
+
var isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
|
|
351
|
+
if (gl && !isFirefox) {
|
|
352
|
+
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
353
|
+
if (glExt) {
|
|
354
|
+
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
355
|
+
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
356
|
+
} else {
|
|
357
|
+
fingerprintWorker.vendor = 'NA';
|
|
358
|
+
fingerprintWorker.renderer = 'NA';
|
|
359
|
+
}
|
|
360
|
+
} else {
|
|
361
|
+
fingerprintWorker.vendor = 'NA';
|
|
362
|
+
fingerprintWorker.renderer = 'NA';
|
|
363
|
+
}
|
|
348
364
|
}
|
|
349
365
|
} catch (_) {
|
|
350
366
|
fingerprintWorker.vendor = 'ERROR';
|
|
@@ -353,22 +369,23 @@ async function _e() {
|
|
|
353
369
|
self.postMessage(fingerprintWorker);
|
|
354
370
|
} catch (e) {
|
|
355
371
|
self.postMessage(fingerprintWorker);
|
|
356
|
-
}`, w = new Blob([
|
|
372
|
+
}`, w = new Blob([p], { type: "application/javascript" });
|
|
357
373
|
i = URL.createObjectURL(w), n = new Worker(i), a = window.setTimeout(() => {
|
|
358
|
-
d(),
|
|
374
|
+
d(), m(e, l), t(e);
|
|
359
375
|
}, 2e3), n.onmessage = function(o) {
|
|
360
376
|
try {
|
|
361
|
-
|
|
377
|
+
const h = (y) => typeof y > "u" ? s : y;
|
|
378
|
+
e.vendor = h(o.data.vendor), e.renderer = h(o.data.renderer), e.userAgent = h(o.data.userAgent), e.language = h(o.data.language), e.platform = h(o.data.platform), e.memory = h(o.data.memory), e.cpuCount = h(o.data.cpuCount);
|
|
362
379
|
} catch {
|
|
363
|
-
|
|
380
|
+
m(e, l);
|
|
364
381
|
} finally {
|
|
365
382
|
d(), t(e);
|
|
366
383
|
}
|
|
367
384
|
}, n.onerror = function() {
|
|
368
|
-
d(),
|
|
385
|
+
d(), m(e, l), t(e);
|
|
369
386
|
};
|
|
370
387
|
} catch {
|
|
371
|
-
d(),
|
|
388
|
+
d(), m(e, l), t(e);
|
|
372
389
|
}
|
|
373
390
|
});
|
|
374
391
|
}
|
|
@@ -402,7 +419,7 @@ const C = [
|
|
|
402
419
|
'audio/ogg; codecs="speex"',
|
|
403
420
|
'audio/ogg; codecs="flac"',
|
|
404
421
|
'audio/3gpp; codecs="samr"'
|
|
405
|
-
],
|
|
422
|
+
], A = [
|
|
406
423
|
'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',
|
|
407
424
|
'video/mp4; codecs="avc1.42E01E"',
|
|
408
425
|
'video/mp4; codecs="avc1.58A01E"',
|
|
@@ -416,7 +433,7 @@ const C = [
|
|
|
416
433
|
'video/3gpp; codecs="mp4v.20.8"',
|
|
417
434
|
'video/x-matroska; codecs="theora"'
|
|
418
435
|
];
|
|
419
|
-
function
|
|
436
|
+
function P(t, e) {
|
|
420
437
|
const n = {};
|
|
421
438
|
try {
|
|
422
439
|
const i = document.createElement(e);
|
|
@@ -452,7 +469,7 @@ function x(t) {
|
|
|
452
469
|
const e = window.RTCRtpReceiver;
|
|
453
470
|
if (e && typeof e.getCapabilities == "function") {
|
|
454
471
|
const n = e.getCapabilities(t);
|
|
455
|
-
return
|
|
472
|
+
return f(JSON.stringify(n));
|
|
456
473
|
}
|
|
457
474
|
return s;
|
|
458
475
|
} catch {
|
|
@@ -471,12 +488,12 @@ function Ie() {
|
|
|
471
488
|
};
|
|
472
489
|
try {
|
|
473
490
|
t.hasMediaSource = !!window.MediaSource;
|
|
474
|
-
const e =
|
|
475
|
-
t.audioCanPlayTypeHash =
|
|
476
|
-
const i = M(C), a = M(
|
|
477
|
-
t.audioMediaSourceHash =
|
|
491
|
+
const e = P(C, "audio"), n = P(A, "video");
|
|
492
|
+
t.audioCanPlayTypeHash = f(JSON.stringify(e)), t.videoCanPlayTypeHash = f(JSON.stringify(n));
|
|
493
|
+
const i = M(C), a = M(A);
|
|
494
|
+
t.audioMediaSourceHash = f(JSON.stringify(i)), t.videoMediaSourceHash = f(JSON.stringify(a)), t.rtcAudioCapabilitiesHash = x("audio"), t.rtcVideoCapabilitiesHash = x("video");
|
|
478
495
|
} catch {
|
|
479
|
-
|
|
496
|
+
m(t, l);
|
|
480
497
|
}
|
|
481
498
|
return t;
|
|
482
499
|
}
|
|
@@ -499,19 +516,19 @@ function Te() {
|
|
|
499
516
|
t.width = 400, t.height = 200, t.style.display = "inline";
|
|
500
517
|
var e = t.getContext("2d");
|
|
501
518
|
try {
|
|
502
|
-
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"),
|
|
519
|
+
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());
|
|
503
520
|
} catch {
|
|
504
521
|
return l;
|
|
505
522
|
}
|
|
506
523
|
}
|
|
507
|
-
async function
|
|
524
|
+
async function Oe() {
|
|
508
525
|
const t = {
|
|
509
526
|
hasModifiedCanvas: r,
|
|
510
527
|
canvasFingerprint: r
|
|
511
528
|
};
|
|
512
529
|
return t.hasModifiedCanvas = await Le(), t.canvasFingerprint = Te(), t;
|
|
513
530
|
}
|
|
514
|
-
function
|
|
531
|
+
function He() {
|
|
515
532
|
const t = ["deviceMemory", "hardwareConcurrency", "language", "languages", "platform"], e = [];
|
|
516
533
|
for (const n of t) {
|
|
517
534
|
const i = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator), n);
|
|
@@ -522,31 +539,31 @@ function Oe() {
|
|
|
522
539
|
function Ue() {
|
|
523
540
|
return Math.random().toString(36).substring(2, 15);
|
|
524
541
|
}
|
|
525
|
-
function
|
|
542
|
+
function Ne() {
|
|
526
543
|
return (/* @__PURE__ */ new Date()).getTime();
|
|
527
544
|
}
|
|
528
|
-
function
|
|
545
|
+
function Fe() {
|
|
529
546
|
return window.location.href;
|
|
530
547
|
}
|
|
531
548
|
function W(t, e) {
|
|
532
549
|
const n = t.signals;
|
|
533
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;
|
|
534
551
|
}
|
|
535
|
-
function
|
|
552
|
+
function Ge() {
|
|
536
553
|
const t = {
|
|
537
554
|
bitmask: r,
|
|
538
555
|
extensions: []
|
|
539
|
-
}, 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,
|
|
556
|
+
}, e = document.body.hasAttribute("data-gr-ext-installed"), n = typeof window.ethereum < "u", i = document.getElementById("coupon-birds-drop-div") !== null, a = document.querySelector("deepl-input-controller") !== null, d = document.getElementById("monica-content-root") !== null, p = document.querySelector("chatgpt-sidebar") !== null, w = typeof window.__REQUESTLY__ < "u", o = Array.from(document.querySelectorAll("*")).filter((h) => h.tagName.toLowerCase().startsWith("veepn-")).length > 0;
|
|
540
557
|
return t.bitmask = [
|
|
541
558
|
e ? "1" : "0",
|
|
542
559
|
n ? "1" : "0",
|
|
543
560
|
i ? "1" : "0",
|
|
544
561
|
a ? "1" : "0",
|
|
545
562
|
d ? "1" : "0",
|
|
546
|
-
|
|
563
|
+
p ? "1" : "0",
|
|
547
564
|
w ? "1" : "0",
|
|
548
565
|
o ? "1" : "0"
|
|
549
|
-
].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"),
|
|
566
|
+
].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"), i && t.extensions.push("coupon-birds"), a && t.extensions.push("deepl"), d && t.extensions.push("monica-ai"), p && t.extensions.push("sider-ai"), w && t.extensions.push("requestly"), o && t.extensions.push("veepn"), t;
|
|
550
567
|
}
|
|
551
568
|
function c(t) {
|
|
552
569
|
try {
|
|
@@ -555,7 +572,7 @@ function c(t) {
|
|
|
555
572
|
return !1;
|
|
556
573
|
}
|
|
557
574
|
}
|
|
558
|
-
function
|
|
575
|
+
function Ve() {
|
|
559
576
|
const t = {
|
|
560
577
|
bitmask: r,
|
|
561
578
|
chrome: c(() => "chrome" in window),
|
|
@@ -589,7 +606,7 @@ function Be() {
|
|
|
589
606
|
}, e = Object.keys(t).filter((n) => n !== "bitmask").map((n) => t[n] ? "1" : "0").join("");
|
|
590
607
|
return t.bitmask = e, t;
|
|
591
608
|
}
|
|
592
|
-
function
|
|
609
|
+
function Be() {
|
|
593
610
|
const t = {
|
|
594
611
|
prefersColorScheme: r,
|
|
595
612
|
prefersReducedMotion: r,
|
|
@@ -608,11 +625,11 @@ function je() {
|
|
|
608
625
|
window.matchMedia(`(color: ${n})`).matches && (e = n);
|
|
609
626
|
t.colorDepth = e;
|
|
610
627
|
} catch {
|
|
611
|
-
|
|
628
|
+
m(t, l);
|
|
612
629
|
}
|
|
613
630
|
return t;
|
|
614
631
|
}
|
|
615
|
-
function
|
|
632
|
+
function je(t) {
|
|
616
633
|
const e = t.signals.device.screenResolution;
|
|
617
634
|
return e.width === 800 && e.height === 600 || e.availableWidth === 800 && e.availableHeight === 600 || e.innerWidth === 800 && e.innerHeight === 600;
|
|
618
635
|
}
|
|
@@ -647,12 +664,12 @@ function Xe(t) {
|
|
|
647
664
|
function et(t) {
|
|
648
665
|
return t.signals.contexts.webWorker.webdriver === !0;
|
|
649
666
|
}
|
|
650
|
-
function
|
|
651
|
-
return t === s || t === l || t ===
|
|
667
|
+
function b(t) {
|
|
668
|
+
return typeof t != "string" || t.length === 0 ? !0 : t === s || t === l || t === v || t === r;
|
|
652
669
|
}
|
|
653
670
|
function tt(t) {
|
|
654
671
|
const e = t.signals.contexts.webWorker, n = t.signals.graphics.webGL;
|
|
655
|
-
return
|
|
672
|
+
return b(n.vendor) || b(n.renderer) || b(e.vendor) || b(e.renderer) ? !1 : e.vendor !== n.vendor || e.renderer !== n.renderer;
|
|
656
673
|
}
|
|
657
674
|
function rt(t, e) {
|
|
658
675
|
const n = t.includes("iPad"), i = e.includes("iPad");
|
|
@@ -662,7 +679,7 @@ function rt(t, e) {
|
|
|
662
679
|
return a(t) || a(e);
|
|
663
680
|
}
|
|
664
681
|
function nt(t) {
|
|
665
|
-
if (t.signals.contexts.webWorker.platform === s || t.signals.contexts.webWorker.platform === l || t.signals.contexts.webWorker.platform ===
|
|
682
|
+
if (t.signals.contexts.webWorker.platform === s || t.signals.contexts.webWorker.platform === l || t.signals.contexts.webWorker.platform === v)
|
|
666
683
|
return !1;
|
|
667
684
|
const e = t.signals.device.platform, n = t.signals.contexts.webWorker.platform;
|
|
668
685
|
return !(e === n || rt(e, n));
|
|
@@ -703,8 +720,8 @@ function gt(t) {
|
|
|
703
720
|
}
|
|
704
721
|
async function ht(t, e) {
|
|
705
722
|
const n = new TextEncoder().encode(e), i = new TextEncoder().encode(t), a = new Uint8Array(i.length);
|
|
706
|
-
for (let
|
|
707
|
-
a[
|
|
723
|
+
for (let p = 0; p < i.length; p++)
|
|
724
|
+
a[p] = i[p] ^ n[p % n.length];
|
|
708
725
|
const d = String.fromCharCode(...a);
|
|
709
726
|
return btoa(d);
|
|
710
727
|
}
|
|
@@ -960,13 +977,13 @@ class pt {
|
|
|
960
977
|
n.hasGPUMismatch.detected,
|
|
961
978
|
n.hasPlatformMismatch.detected
|
|
962
979
|
// Add other detection rules output here
|
|
963
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
980
|
+
].map((u) => u ? "1" : "0").join(""), p = [
|
|
964
981
|
e.automation.webdriver === !0,
|
|
965
982
|
e.automation.webdriverWritable === !0,
|
|
966
983
|
e.automation.selenium === !0,
|
|
967
984
|
e.automation.cdp === !0,
|
|
968
985
|
e.automation.playwright === !0
|
|
969
|
-
].map((u) => u ? "1" : "0").join(""), w =
|
|
986
|
+
].map((u) => u ? "1" : "0").join(""), w = f(String(e.automation.navigatorPropertyDescriptors)).slice(0, 4), o = `${p}h${w}`, h = typeof e.device.screenResolution.width == "number" ? e.device.screenResolution.width : 0, y = typeof e.device.screenResolution.height == "number" ? e.device.screenResolution.height : 0, k = typeof e.device.cpuCount == "number" ? String(e.device.cpuCount).padStart(2, "0") : "00", E = typeof e.device.memory == "number" ? String(Math.round(e.device.memory)).padStart(2, "0") : "00", D = [
|
|
970
987
|
e.device.screenResolution.hasMultipleDisplays === !0,
|
|
971
988
|
e.device.mediaQueries.prefersReducedMotion === !0,
|
|
972
989
|
e.device.mediaQueries.prefersReducedTransparency === !0,
|
|
@@ -984,12 +1001,12 @@ class pt {
|
|
|
984
1001
|
e.device.mediaQueries.pointer,
|
|
985
1002
|
e.device.mediaQueries.anyPointer,
|
|
986
1003
|
e.device.mediaQueries.colorDepth
|
|
987
|
-
].map((u) => String(u)).join("|"), R =
|
|
1004
|
+
].map((u) => String(u)).join("|"), R = f(_).slice(0, 6), I = `${h}x${y}c${k}m${E}b${D}h${R}`, L = typeof e.browser.features.bitmask == "string" ? e.browser.features.bitmask : "0000000000", T = typeof e.browser.extensions.bitmask == "string" ? e.browser.extensions.bitmask : "00000000", O = [
|
|
988
1005
|
e.browser.plugins.isValidPluginArray === !0,
|
|
989
1006
|
e.browser.plugins.pluginConsistency1 === !0,
|
|
990
1007
|
e.browser.plugins.pluginOverflow === !0,
|
|
991
1008
|
e.browser.toSourceError.hasToSource === !0
|
|
992
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
1009
|
+
].map((u) => u ? "1" : "0").join(""), H = [
|
|
993
1010
|
e.browser.userAgent,
|
|
994
1011
|
e.browser.etsl,
|
|
995
1012
|
e.browser.maths,
|
|
@@ -1002,9 +1019,9 @@ class pt {
|
|
|
1002
1019
|
e.browser.highEntropyValues.platformVersion,
|
|
1003
1020
|
e.browser.highEntropyValues.uaFullVersion,
|
|
1004
1021
|
e.browser.highEntropyValues.mobile
|
|
1005
|
-
].map((u) => String(u)).join("|"), U =
|
|
1022
|
+
].map((u) => String(u)).join("|"), U = f(H).slice(0, 6), N = `f${L}e${T}p${O}h${U}`, F = [
|
|
1006
1023
|
e.graphics.canvas.hasModifiedCanvas === !0
|
|
1007
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
1024
|
+
].map((u) => u ? "1" : "0").join(""), G = [
|
|
1008
1025
|
e.graphics.webGL.vendor,
|
|
1009
1026
|
e.graphics.webGL.renderer,
|
|
1010
1027
|
e.graphics.webgpu.vendor,
|
|
@@ -1012,7 +1029,7 @@ class pt {
|
|
|
1012
1029
|
e.graphics.webgpu.device,
|
|
1013
1030
|
e.graphics.webgpu.description,
|
|
1014
1031
|
e.graphics.canvas.canvasFingerprint
|
|
1015
|
-
].map((u) => String(u)).join("|"),
|
|
1032
|
+
].map((u) => String(u)).join("|"), V = f(G).slice(0, 6), B = `${F}h${V}`, j = [
|
|
1016
1033
|
e.codecs.hasMediaSource === !0
|
|
1017
1034
|
].map((u) => u ? "1" : "0").join(""), z = [
|
|
1018
1035
|
e.codecs.audioCanPlayTypeHash,
|
|
@@ -1021,12 +1038,12 @@ class pt {
|
|
|
1021
1038
|
e.codecs.videoMediaSourceHash,
|
|
1022
1039
|
e.codecs.rtcAudioCapabilitiesHash,
|
|
1023
1040
|
e.codecs.rtcVideoCapabilitiesHash
|
|
1024
|
-
].map((u) => String(u)).join("|"), $ =
|
|
1041
|
+
].map((u) => String(u)).join("|"), $ = f(z).slice(0, 6), Q = `${j}h${$}`, q = typeof e.locale.languages.language == "string" ? e.locale.languages.language.slice(0, 2).toLowerCase() : "xx", K = Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.length : 0, J = (typeof e.locale.internationalization.timezone == "string" ? e.locale.internationalization.timezone : "unknown").replace(/[\/\s]/g, "-"), Y = [
|
|
1025
1042
|
e.locale.internationalization.timezone,
|
|
1026
1043
|
e.locale.internationalization.localeLanguage,
|
|
1027
1044
|
Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.join(",") : e.locale.languages.languages,
|
|
1028
1045
|
e.locale.languages.language
|
|
1029
|
-
].map((u) => String(u)).join("|"), Z =
|
|
1046
|
+
].map((u) => String(u)).join("|"), Z = f(Y).slice(0, 4), X = `${q}${K}t${J}_h${Z}`, ee = [
|
|
1030
1047
|
W(this.fingerprint, "iframe"),
|
|
1031
1048
|
W(this.fingerprint, "worker"),
|
|
1032
1049
|
e.contexts.iframe.webdriver === !0,
|
|
@@ -1044,14 +1061,14 @@ class pt {
|
|
|
1044
1061
|
e.contexts.webWorker.language,
|
|
1045
1062
|
e.contexts.webWorker.vendor,
|
|
1046
1063
|
e.contexts.webWorker.renderer
|
|
1047
|
-
].map((u) => String(u)).join("|"), re =
|
|
1064
|
+
].map((u) => String(u)).join("|"), re = f(te).slice(0, 6), ne = `${ee}h${re}`;
|
|
1048
1065
|
return [
|
|
1049
1066
|
i,
|
|
1050
1067
|
d,
|
|
1051
1068
|
o,
|
|
1052
1069
|
I,
|
|
1053
|
-
|
|
1054
|
-
|
|
1070
|
+
N,
|
|
1071
|
+
B,
|
|
1055
1072
|
Q,
|
|
1056
1073
|
X,
|
|
1057
1074
|
ne
|
|
@@ -1071,7 +1088,7 @@ class pt {
|
|
|
1071
1088
|
*/
|
|
1072
1089
|
getDetectionRules() {
|
|
1073
1090
|
return [
|
|
1074
|
-
{ name: "headlessChromeScreenResolution", severity: g, test:
|
|
1091
|
+
{ name: "headlessChromeScreenResolution", severity: g, test: je },
|
|
1075
1092
|
{ name: "hasWebdriver", severity: g, test: ze },
|
|
1076
1093
|
{ name: "hasWebdriverWritable", severity: g, test: at },
|
|
1077
1094
|
{ name: "hasSeleniumProperty", severity: g, test: $e },
|
|
@@ -1135,19 +1152,19 @@ class pt {
|
|
|
1135
1152
|
selenium: this.collectSignal(be),
|
|
1136
1153
|
cdp: this.collectSignal(le),
|
|
1137
1154
|
playwright: this.collectSignal(de),
|
|
1138
|
-
navigatorPropertyDescriptors: this.collectSignal(
|
|
1155
|
+
navigatorPropertyDescriptors: this.collectSignal(He),
|
|
1139
1156
|
// Device signals
|
|
1140
1157
|
cpuCount: this.collectSignal(ge),
|
|
1141
1158
|
memory: this.collectSignal(me),
|
|
1142
1159
|
platform: this.collectSignal(oe),
|
|
1143
1160
|
screenResolution: this.collectSignal(ve),
|
|
1144
|
-
multimediaDevices: this.collectSignal(
|
|
1145
|
-
mediaQueries: this.collectSignal(
|
|
1161
|
+
multimediaDevices: this.collectSignal(Ee),
|
|
1162
|
+
mediaQueries: this.collectSignal(Be),
|
|
1146
1163
|
// Browser signals
|
|
1147
1164
|
userAgent: this.collectSignal(ae),
|
|
1148
|
-
browserFeatures: this.collectSignal(
|
|
1149
|
-
plugins: this.collectSignal(
|
|
1150
|
-
browserExtensions: this.collectSignal(
|
|
1165
|
+
browserFeatures: this.collectSignal(Ve),
|
|
1166
|
+
plugins: this.collectSignal(ke),
|
|
1167
|
+
browserExtensions: this.collectSignal(Ge),
|
|
1151
1168
|
highEntropyValues: this.collectSignal(Ce),
|
|
1152
1169
|
etsl: this.collectSignal(pe),
|
|
1153
1170
|
maths: this.collectSignal(he),
|
|
@@ -1155,7 +1172,7 @@ class pt {
|
|
|
1155
1172
|
// Graphics signals
|
|
1156
1173
|
webGL: this.collectSignal(ue),
|
|
1157
1174
|
webgpu: this.collectSignal(ye),
|
|
1158
|
-
canvas: this.collectSignal(
|
|
1175
|
+
canvas: this.collectSignal(Oe),
|
|
1159
1176
|
// Codecs
|
|
1160
1177
|
mediaCodecs: this.collectSignal(Ie),
|
|
1161
1178
|
// Locale signals
|
|
@@ -1164,21 +1181,21 @@ class pt {
|
|
|
1164
1181
|
// Context signals
|
|
1165
1182
|
iframe: this.collectSignal(De),
|
|
1166
1183
|
webWorker: i ? Promise.resolve({
|
|
1167
|
-
webdriver:
|
|
1168
|
-
userAgent:
|
|
1169
|
-
platform:
|
|
1170
|
-
memory:
|
|
1171
|
-
cpuCount:
|
|
1172
|
-
language:
|
|
1173
|
-
vendor:
|
|
1174
|
-
renderer:
|
|
1184
|
+
webdriver: v,
|
|
1185
|
+
userAgent: v,
|
|
1186
|
+
platform: v,
|
|
1187
|
+
memory: v,
|
|
1188
|
+
cpuCount: v,
|
|
1189
|
+
language: v,
|
|
1190
|
+
vendor: v,
|
|
1191
|
+
renderer: v
|
|
1175
1192
|
}) : this.collectSignal(_e),
|
|
1176
1193
|
// Meta signals
|
|
1177
1194
|
nonce: this.collectSignal(Ue),
|
|
1178
|
-
time: this.collectSignal(
|
|
1179
|
-
url: this.collectSignal(
|
|
1180
|
-
},
|
|
1181
|
-
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((
|
|
1195
|
+
time: this.collectSignal(Ne),
|
|
1196
|
+
url: this.collectSignal(Fe)
|
|
1197
|
+
}, p = Object.keys(d), w = await Promise.all(Object.values(d)), o = Object.fromEntries(p.map((h, y) => [h, w[y]]));
|
|
1198
|
+
return a.automation.webdriver = o.webdriver, a.automation.webdriverWritable = o.webdriverWritable, a.automation.selenium = o.selenium, a.automation.cdp = o.cdp, a.automation.playwright = o.playwright, a.automation.navigatorPropertyDescriptors = o.navigatorPropertyDescriptors, a.device.cpuCount = o.cpuCount, a.device.memory = o.memory, a.device.platform = o.platform, a.device.screenResolution = o.screenResolution, a.device.multimediaDevices = o.multimediaDevices, a.device.mediaQueries = o.mediaQueries, a.browser.userAgent = o.userAgent, a.browser.features = o.browserFeatures, a.browser.plugins = o.plugins, a.browser.extensions = o.browserExtensions, a.browser.highEntropyValues = o.highEntropyValues, a.browser.etsl = o.etsl, a.browser.maths = o.maths, a.browser.toSourceError = o.toSourceError, a.graphics.webGL = o.webGL, a.graphics.webgpu = o.webgpu, a.graphics.canvas = o.canvas, a.codecs = o.mediaCodecs, a.locale.internationalization = o.internationalization, a.locale.languages = o.languages, a.contexts.iframe = o.iframe, a.contexts.webWorker = o.webWorker, this.fingerprint.nonce = o.nonce, this.fingerprint.time = o.time, this.fingerprint.url = o.url, this.fingerprint.fastBotDetectionDetails = this.runDetectionRules(), this.fingerprint.fastBotDetection = Object.values(this.fingerprint.fastBotDetectionDetails).some((h) => h.detected), this.fingerprint.fsid = this.generateFingerprintScannerId(), n ? await this.encryptFingerprint(JSON.stringify(this.fingerprint)) : this.fingerprint;
|
|
1182
1199
|
}
|
|
1183
1200
|
}
|
|
1184
1201
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/signals/worker.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/signals/worker.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,qBAmH3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fpscanner",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
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",
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Fingerprint } from "../types";
|
|
2
2
|
import { ERROR, INIT, NA, SKIPPED } from "../signals/utils";
|
|
3
3
|
|
|
4
|
-
function webGLStringUnavailable(value:
|
|
4
|
+
function webGLStringUnavailable(value: unknown): boolean {
|
|
5
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
5
8
|
return value === NA || value === ERROR || value === SKIPPED || value === INIT;
|
|
6
9
|
}
|
|
7
10
|
|
package/src/signals/worker.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ERROR, INIT, setObjectValues } from './utils';
|
|
1
|
+
import { ERROR, INIT, NA, setObjectValues } from './utils';
|
|
2
2
|
|
|
3
3
|
export async function worker() {
|
|
4
4
|
return new Promise((resolve) => {
|
|
@@ -23,29 +23,45 @@ export async function worker() {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
try {
|
|
26
|
-
const workerCode = `
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const workerCode = `var fingerprintWorker = {
|
|
27
|
+
userAgent: 'NA',
|
|
28
|
+
language: 'NA',
|
|
29
|
+
cpuCount: 'NA',
|
|
30
|
+
platform: 'NA',
|
|
31
|
+
memory: 'NA',
|
|
32
|
+
vendor: 'NA',
|
|
33
|
+
renderer: 'NA'
|
|
34
|
+
};
|
|
35
|
+
try {
|
|
29
36
|
fingerprintWorker.userAgent = navigator.userAgent;
|
|
30
37
|
fingerprintWorker.language = navigator.language;
|
|
31
38
|
fingerprintWorker.cpuCount = navigator.hardwareConcurrency;
|
|
32
39
|
fingerprintWorker.platform = navigator.platform;
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
if (typeof navigator.deviceMemory !== 'undefined') {
|
|
41
|
+
fingerprintWorker.memory = navigator.deviceMemory;
|
|
42
|
+
}
|
|
35
43
|
|
|
36
|
-
var canvas = new OffscreenCanvas(1, 1);
|
|
37
|
-
fingerprintWorker.vendor = 'INIT';
|
|
38
|
-
fingerprintWorker.renderer = 'INIT';
|
|
39
|
-
var gl = canvas.getContext('webgl');
|
|
40
|
-
const isFirefox = navigator.userAgent.includes('Firefox');
|
|
41
44
|
try {
|
|
42
|
-
if (
|
|
43
|
-
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
44
|
-
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
45
|
-
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
46
|
-
} else {
|
|
45
|
+
if (typeof OffscreenCanvas === 'undefined') {
|
|
47
46
|
fingerprintWorker.vendor = 'NA';
|
|
48
47
|
fingerprintWorker.renderer = 'NA';
|
|
48
|
+
} else {
|
|
49
|
+
var canvas = new OffscreenCanvas(1, 1);
|
|
50
|
+
var gl = canvas.getContext('webgl');
|
|
51
|
+
var isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
|
|
52
|
+
if (gl && !isFirefox) {
|
|
53
|
+
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
54
|
+
if (glExt) {
|
|
55
|
+
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
56
|
+
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
57
|
+
} else {
|
|
58
|
+
fingerprintWorker.vendor = 'NA';
|
|
59
|
+
fingerprintWorker.renderer = 'NA';
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
fingerprintWorker.vendor = 'NA';
|
|
63
|
+
fingerprintWorker.renderer = 'NA';
|
|
64
|
+
}
|
|
49
65
|
}
|
|
50
66
|
} catch (_) {
|
|
51
67
|
fingerprintWorker.vendor = 'ERROR';
|
|
@@ -70,13 +86,14 @@ export async function worker() {
|
|
|
70
86
|
|
|
71
87
|
worker.onmessage = function (e) {
|
|
72
88
|
try {
|
|
73
|
-
|
|
74
|
-
workerData.
|
|
75
|
-
workerData.
|
|
76
|
-
workerData.
|
|
77
|
-
workerData.
|
|
78
|
-
workerData.
|
|
79
|
-
workerData.
|
|
89
|
+
const pick = (v: any) => (typeof v === 'undefined' ? NA : v);
|
|
90
|
+
workerData.vendor = pick(e.data.vendor);
|
|
91
|
+
workerData.renderer = pick(e.data.renderer);
|
|
92
|
+
workerData.userAgent = pick(e.data.userAgent);
|
|
93
|
+
workerData.language = pick(e.data.language);
|
|
94
|
+
workerData.platform = pick(e.data.platform);
|
|
95
|
+
workerData.memory = pick(e.data.memory);
|
|
96
|
+
workerData.cpuCount = pick(e.data.cpuCount);
|
|
80
97
|
} catch (_) {
|
|
81
98
|
setObjectValues(workerData, ERROR);
|
|
82
99
|
} finally {
|