fpscanner 1.0.3-beta.0 → 1.0.4-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"hasMismatchWebGLInWorker.d.ts","sourceRoot":"","sources":["../../src/detections/hasMismatchWebGLInWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAOvC,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,WAchE"}
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"}
@@ -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",f="SKIPPED",g="high",S="low",se="medium";function p(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 h(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 h(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)):h(t,s)}catch{h(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)}}),p(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{h(t,l)}else h(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{h(e,l)}else h(e,s);return e}function Pe(){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 Ae(){if(!navigator.plugins)return s;const t=[];for(let e=0;e<navigator.plugins.length;e++)t.push(navigator.plugins[e].name);return p(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 Ee(){const t={isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r};try{t.isValidPluginArray=Pe(),t.pluginCount=Me(),t.pluginNamesHash=Ae(),t.pluginConsistency1=xe(),t.pluginOverflow=We()}catch{h(t,l)}return t}async function ke(){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 h(e,s),t(e)}else return h(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{h(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 m=`try {
2
- var fingerprintWorker = {};
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
- fingerprintWorker.memory = navigator.deviceMemory;
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 (gl && !isFirefox) {
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;
@@ -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", f = "SKIPPED", g = "high", S = "low", se = "medium";
11
- function p(t) {
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 h(t, e) {
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 h(t, s), t;
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)) : h(t, s);
48
+ n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info") >= 0 ? (t.vendor = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL), t.renderer = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)) : m(t, s);
49
49
  } catch {
50
- h(t, l);
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
- }), p(t.map(String).join(","));
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
- h(t, l);
129
+ m(t, l);
130
130
  }
131
131
  else
132
- h(t, s);
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
- h(e, l);
207
+ m(e, l);
208
208
  }
209
209
  else
210
- h(e, s);
210
+ m(e, s);
211
211
  return e;
212
212
  }
213
- function Pe() {
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 Ae() {
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 p(t.join(","));
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 Ee() {
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 = Pe(), t.pluginCount = Me(), t.pluginNamesHash = Ae(), t.pluginConsistency1 = xe(), t.pluginOverflow = We();
253
+ t.isValidPluginArray = Ae(), t.pluginCount = Me(), t.pluginNamesHash = Pe(), t.pluginConsistency1 = xe(), t.pluginOverflow = We();
254
254
  } catch {
255
- h(t, l);
255
+ m(t, l);
256
256
  }
257
257
  return t;
258
258
  }
259
- async function ke() {
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 h(e, s), t(e);
279
+ return m(e, s), t(e);
280
280
  } else
281
- return h(e, s), t(e);
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
- h(t, l);
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 m = `try {
326
- var fingerprintWorker = {};
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
- fingerprintWorker.memory = navigator.deviceMemory;
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 (gl && !isFirefox) {
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([m], { type: "application/javascript" });
372
+ }`, w = new Blob([p], { type: "application/javascript" });
357
373
  i = URL.createObjectURL(w), n = new Worker(i), a = window.setTimeout(() => {
358
- d(), h(e, l), t(e);
374
+ d(), m(e, l), t(e);
359
375
  }, 2e3), n.onmessage = function(o) {
360
376
  try {
361
- 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;
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
- h(e, l);
380
+ m(e, l);
364
381
  } finally {
365
382
  d(), t(e);
366
383
  }
367
384
  }, n.onerror = function() {
368
- d(), h(e, l), t(e);
385
+ d(), m(e, l), t(e);
369
386
  };
370
387
  } catch {
371
- d(), h(e, l), t(e);
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
- ], P = [
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 A(t, e) {
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 p(JSON.stringify(n));
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 = A(C, "audio"), n = A(P, "video");
475
- t.audioCanPlayTypeHash = p(JSON.stringify(e)), t.videoCanPlayTypeHash = p(JSON.stringify(n));
476
- const i = M(C), a = M(P);
477
- t.audioMediaSourceHash = p(JSON.stringify(i)), t.videoMediaSourceHash = p(JSON.stringify(a)), t.rtcAudioCapabilitiesHash = x("audio"), t.rtcVideoCapabilitiesHash = x("video");
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
- h(t, l);
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"), p(t.toDataURL());
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 He() {
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 Oe() {
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 Fe() {
542
+ function Ne() {
526
543
  return (/* @__PURE__ */ new Date()).getTime();
527
544
  }
528
- function Ge() {
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 Ve() {
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, 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;
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
- m ? "1" : "0",
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"), m && t.extensions.push("sider-ai"), w && t.extensions.push("requestly"), o && t.extensions.push("veepn"), t;
566
+ ].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"), i && t.extensions.push("coupon-birds"), a && t.extensions.push("deepl"), 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 Be() {
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 je() {
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
- h(t, l);
628
+ m(t, l);
612
629
  }
613
630
  return t;
614
631
  }
615
- function Ne(t) {
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 y(t) {
651
- return t === s || t === l || t === f || t === r;
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 y(n.vendor) || y(n.renderer) || y(e.vendor) || y(e.renderer) ? !1 : e.vendor !== n.vendor || e.renderer !== n.renderer;
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 === f)
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 m = 0; m < i.length; m++)
707
- a[m] = i[m] ^ n[m % n.length];
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(""), m = [
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 = 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 = [
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 = 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", H = [
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(""), O = [
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 = p(O).slice(0, 6), F = `f${L}e${T}p${H}h${U}`, G = [
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(""), V = [
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("|"), B = p(V).slice(0, 6), j = `${G}h${B}`, N = [
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("|"), $ = 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 = [
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 = p(Y).slice(0, 4), X = `${q}${K}t${J}_h${Z}`, ee = [
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 = p(te).slice(0, 6), ne = `${ee}h${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
- F,
1054
- j,
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: Ne },
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(Oe),
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(ke),
1145
- mediaQueries: this.collectSignal(je),
1161
+ multimediaDevices: this.collectSignal(Ee),
1162
+ mediaQueries: this.collectSignal(Be),
1146
1163
  // Browser signals
1147
1164
  userAgent: this.collectSignal(ae),
1148
- browserFeatures: this.collectSignal(Be),
1149
- plugins: this.collectSignal(Ee),
1150
- browserExtensions: this.collectSignal(Ve),
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(He),
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: f,
1168
- userAgent: f,
1169
- platform: f,
1170
- memory: f,
1171
- cpuCount: f,
1172
- language: f,
1173
- vendor: f,
1174
- renderer: f
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(Fe),
1179
- url: this.collectSignal(Ge)
1180
- }, m = Object.keys(d), w = await Promise.all(Object.values(d)), o = Object.fromEntries(m.map((v, b) => [v, w[b]]));
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((v) => v.detected), this.fingerprint.fsid = this.generateFingerprintScannerId(), n ? await this.encryptFingerprint(JSON.stringify(this.fingerprint)) : this.fingerprint;
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,qBAkG3B"}
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-beta.0",
3
+ "version": "1.0.4-beta.0",
4
4
  "description": "A lightweight browser fingerprinting and bot detection library with encryption, obfuscation, and cross-context validation",
5
5
  "main": "dist/fpScanner.cjs.js",
6
6
  "module": "dist/fpScanner.es.js",
@@ -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: string): boolean {
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
 
@@ -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 = `try {
27
- var fingerprintWorker = {};
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
- fingerprintWorker.memory = navigator.deviceMemory;
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 (gl && !isFirefox) {
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
- workerData.vendor = e.data.vendor;
74
- workerData.renderer = e.data.renderer;
75
- workerData.userAgent = e.data.userAgent;
76
- workerData.language = e.data.language;
77
- workerData.platform = e.data.platform;
78
- workerData.memory = e.data.memory;
79
- workerData.cpuCount = e.data.cpuCount;
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 {