fpscanner 0.9.5-beta.0 โ 0.9.5-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fpScanner.cjs.js +2 -2
- package/dist/fpScanner.es.js +143 -128
- package/dist/signals/iframe.d.ts.map +1 -1
- package/dist/signals/worker.d.ts.map +1 -1
- package/package.json +4 -2
- package/scripts/safe-publish.js +111 -0
- package/src/signals/iframe.ts +9 -1
- package/src/signals/worker.ts +31 -8
package/dist/fpScanner.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function ne(){return navigator.webdriver}function ie(){return navigator.userAgent}function ae(){return navigator.platform}const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function ne(){return navigator.webdriver}function ie(){return navigator.userAgent}function ae(){return navigator.platform}const l="ERROR",r="INIT",s="NA",f="SKIPPED",d="high",b="low",oe="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 se(){return navigator.buildID==="20181001000000"}function ce(){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 le(){const t={vendor:r,renderer:r};if(se())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 ue(){return"__pwInitScripts"in window||"__playwright__binding__"in window}function de(){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 ge(){return navigator.deviceMemory||s}function me(){return eval.toString().length}function pe(){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 fe(){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 ve(){return{languages:navigator.languages,language:navigator.language}}async function we(){const t={vendor:r,architecture:r,device:r,description:r};if("gpu"in navigator)try{const e=await navigator.gpu.requestAdapter();e&&(t.vendor=e.info.vendor,t.architecture=e.info.architecture,t.device=e.info.device,t.description=e.info.description)}catch{h(t,l)}else h(t,s);return t}function ye(){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 be(){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 Se(){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 Ce(){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 Pe(){return navigator.plugins?navigator.plugins.length:s}function Me(){if(!navigator.plugins)return s;try{return navigator.plugins[0]===navigator.plugins[0][0].enabledPlugin}catch{return l}}function Ee(){if(!navigator.plugins)return s;try{return navigator.plugins.item(4294967296)!==navigator.plugins[0]}catch{return l}}function We(){const t={isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r};try{t.isValidPluginArray=Ce(),t.pluginCount=Pe(),t.pluginNamesHash=Ae(),t.pluginConsistency1=Me(),t.pluginOverflow=Ee()}catch{h(t,l)}return t}async function xe(){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 ke(){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 De(){return new Promise(t=>{const e={vendor:r,renderer:r,userAgent:r,language:r,platform:r,memory:r,cpuCount:r};let n=null,i=null,a=null;const g=()=>{a&&clearTimeout(a),n&&n.terminate(),i&&URL.revokeObjectURL(i)};try{const m=`try {
|
|
2
2
|
var fingerprintWorker = {};
|
|
3
3
|
|
|
4
4
|
fingerprintWorker.userAgent = navigator.userAgent;
|
|
@@ -28,4 +28,4 @@
|
|
|
28
28
|
self.postMessage(fingerprintWorker);
|
|
29
29
|
} catch (e) {
|
|
30
30
|
self.postMessage(fingerprintWorker);
|
|
31
|
-
}`,a=new Blob([n],{type:"application/javascript"}),i=URL.createObjectURL(a),p=new Worker(i);p.onmessage=function(d){try{return e.vendor=d.data.vendor,e.renderer=d.data.renderer,e.userAgent=d.data.userAgent,e.language=d.data.language,e.platform=d.data.platform,e.memory=d.data.memory,e.cpuCount=d.data.cpuCount,t(e)}catch{return m(e,u),t(e)}}}catch{return m(e,u),t(e)}})}function _e(){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 S=['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"'],C=['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 a=document.createElement(e);for(const i of t)try{n[i]=a.canPlayType(i)||null}catch{n[i]=null}}catch{for(const a of t)n[a]=null}return n}function P(t){const e={},n=window.MediaSource;if(!n||typeof n.isTypeSupported!="function"){for(const a of t)e[a]=null;return e}for(const a of t)try{e[a]=n.isTypeSupported(a)}catch{e[a]=null}return e}function M(t){try{const e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){const n=e.getCapabilities(t);return h(JSON.stringify(n))}return s}catch{return u}}function Re(){const t={audioCanPlayTypeHash:s,videoCanPlayTypeHash:s,audioMediaSourceHash:s,videoMediaSourceHash:s,rtcAudioCapabilitiesHash:s,rtcVideoCapabilitiesHash:s,hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;const e=A(S,"audio"),n=A(C,"video");t.audioCanPlayTypeHash=h(JSON.stringify(e)),t.videoCanPlayTypeHash=h(JSON.stringify(n));const a=P(S),i=P(C);t.audioMediaSourceHash=h(JSON.stringify(a)),t.videoMediaSourceHash=h(JSON.stringify(i)),t.rtcAudioCapabilitiesHash=M("audio"),t.rtcVideoCapabilitiesHash=M("video")}catch{m(t,u)}return t}async function Ie(){return new Promise(t=>{try{const e=new Image,n=document.createElement("canvas").getContext("2d");e.onload=()=>{n.drawImage(e,0,0),t(n.getImageData(0,0,1,1).data.filter(a=>a===0).length!=4)},e.onerror=()=>{t(u)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(u)}})}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"),h(t.toDataURL())}catch{return u}}async function Le(){const t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await Ie(),t.canvasFingerprint=Te(),t}function Oe(){const t=["deviceMemory","hardwareConcurrency","language","languages","platform"],e=[];for(const n of t){const a=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator),n);a&&a.value?e.push("1"):e.push("0")}return e.join("")}function He(){return Math.random().toString(36).substring(2,15)}function Ue(){return new Date().getTime()}function Ve(){return window.location.href}function E(t,e){const n=t.signals;return e==="iframe"?n.contexts.iframe.webdriver!==n.automation.webdriver||n.contexts.iframe.userAgent!==n.browser.userAgent||n.contexts.iframe.platform!==n.device.platform||n.contexts.iframe.memory!==n.device.memory||n.contexts.iframe.cpuCount!==n.device.cpuCount:n.contexts.webWorker.webdriver!==n.automation.webdriver||n.contexts.webWorker.userAgent!==n.browser.userAgent||n.contexts.webWorker.platform!==n.device.platform||n.contexts.webWorker.memory!==n.device.memory||n.contexts.webWorker.cpuCount!==n.device.cpuCount}function Fe(){const t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),n=typeof window.ethereum<"u",a=document.getElementById("coupon-birds-drop-div")!==null,i=document.querySelector("deepl-input-controller")!==null,p=document.getElementById("monica-content-root")!==null,d=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",a?"1":"0",i?"1":"0",p?"1":"0",d?"1":"0",w?"1":"0",o?"1":"0"].join(""),e&&t.extensions.push("grammarly"),n&&t.extensions.push("metamask"),a&&t.extensions.push("coupon-birds"),i&&t.extensions.push("deepl"),p&&t.extensions.push("monica-ai"),d&&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 Ge(){const t={bitmask:r,chrome:c(()=>"chrome"in window),brave:c(()=>"brave"in navigator),applePaySupport:c(()=>"ApplePaySetup"in window),opera:c(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:c(()=>window.navigator.serial!==void 0),attachShadow:c(()=>!!Element.prototype.attachShadow),caches:c(()=>!!window.caches),webAssembly:c(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:c(()=>"Buffer"in window),showModalDialog:c(()=>"showModalDialog"in window),safari:c(()=>"safari"in window),webkitPrefixedFunction:c(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:c(()=>"mozGetUserMedia"in navigator),usb:c(()=>typeof window.USB=="function"),browserCapture:c(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:c(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:c(()=>typeof window.PressureObserver=="function"),audioSession:c(()=>"audioSession"in navigator),selectAudioOutput:c(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:c(()=>"BarcodeDetector"in window),battery:c(()=>"getBattery"in navigator),devicePosture:c(()=>"DevicePosture"in window),documentPictureInPicture:c(()=>"documentPictureInPicture"in window),eyeDropper:c(()=>"EyeDropper"in window),editContext:c(()=>"EditContext"in window),fencedFrame:c(()=>"FencedFrameConfig"in window),sanitizer:c(()=>"Sanitizer"in window),otpCredential:c(()=>"OTPCredential"in window)},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,u)}return t}function je(t){const e=t.signals.device.screenResolution;return e.width===600&&e.height===800||e.availableWidth===600&&e.availableHeight===800||e.innerWidth===600&&e.innerHeight===800}function Ne(t){return t.signals.automation.webdriver===!0}function ze(t){return!!t.signals.automation.selenium}function $e(t){return t.signals.automation.cdp===!0}function Qe(t){return t.signals.automation.playwright===!0}function qe(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function Ke(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function Je(t){const e=t.signals.browser.userAgent;return t.signals.browser.features.chrome===!1&&typeof e=="string"&&e.includes("Chrome")}function Ye(t){return t.signals.contexts.iframe.webdriver===!0}function Ze(t){return t.signals.contexts.webWorker.webdriver===!0}function Xe(t){const e=t.signals.contexts.webWorker,n=t.signals.graphics.webGL;return e.vendor===u||e.renderer===u||n.vendor===s||n.renderer===s||e.vendor===f?!1:e.vendor!==n.vendor||e.renderer!==n.renderer}function et(t){return t.signals.contexts.webWorker.platform===s||t.signals.contexts.webWorker.platform===u||t.signals.contexts.webWorker.platform===f?!1:t.signals.device.platform!==t.signals.contexts.webWorker.platform}function tt(t){return t.signals.contexts.iframe.platform===s||t.signals.contexts.iframe.platform===u?!1:t.signals.device.platform!==t.signals.contexts.iframe.platform}function rt(t){return t.signals.automation.webdriverWritable===!0}function nt(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function it(t){return t.signals.locale.internationalization.timezone==="UTC"}function at(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 ot(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 st(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 ct(t){const e=t.signals.graphics.webgpu,n=t.signals.graphics.webGL,a=t.signals.browser.userAgent;return!!((n.vendor.includes("Apple")||n.renderer.includes("Apple"))&&!a.includes("Mac")||e.vendor.includes("apple")&&!a.includes("Mac")||e.vendor.includes("apple")&&!n.renderer.includes("Apple"))}function lt(t){const e=t.signals.device.platform,n=t.signals.browser.userAgent,a=t.signals.browser.highEntropyValues.platform;return!!(n.includes("Mac")&&!e.includes("Mac")||n.includes("Windows")&&!e.includes("Win")||n.includes("Linux")&&!e.includes("Linux")||a!==u&&a!==s&&(a.includes("Mac")&&!e.includes("Mac")||a.includes("Windows")&&!e.includes("Win")||a.includes("Linux")&&!e.includes("Linux")||a.includes("Android")&&!e.includes("Android")||a.includes("iOS")&&!e.includes("iOS")))}async function ut(t,e){const n=new TextEncoder().encode(e),a=new TextEncoder().encode(t),i=new Uint8Array(a.length);for(let d=0;d<a.length;d++)i[d]=a[d]^n[d%n.length];const p=String.fromCharCode(...i);return btoa(p)}class dt{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 u}}generateFingerprintScannerId(){try{const e=this.fingerprint.signals,n=this.fingerprint.fastBotDetectionDetails,a="FS1",p=[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(l=>l?"1":"0").join(""),d=[e.automation.webdriver===!0,e.automation.webdriverWritable===!0,e.automation.selenium===!0,e.automation.cdp===!0,e.automation.playwright===!0].map(l=>l?"1":"0").join(""),w=h(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),o=`${d}h${w}`,v=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,y=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,W=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",x=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",k=[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(l=>l?"1":"0").join(""),D=[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(l=>String(l)).join("|"),_=h(D).slice(0,6),R=`${v}x${y}c${W}m${x}b${k}h${_}`,I=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0000000000",T=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"00000000",L=[e.browser.plugins.isValidPluginArray===!0,e.browser.plugins.pluginConsistency1===!0,e.browser.plugins.pluginOverflow===!0,e.browser.toSourceError.hasToSource===!0].map(l=>l?"1":"0").join(""),O=[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(l=>String(l)).join("|"),H=h(O).slice(0,6),U=`f${I}e${T}p${L}h${H}`,V=[e.graphics.canvas.hasModifiedCanvas===!0].map(l=>l?"1":"0").join(""),F=[e.graphics.webGL.vendor,e.graphics.webGL.renderer,e.graphics.webgpu.vendor,e.graphics.webgpu.architecture,e.graphics.webgpu.device,e.graphics.webgpu.description,e.graphics.canvas.canvasFingerprint].map(l=>String(l)).join("|"),G=h(F).slice(0,6),B=`${V}h${G}`,j=[e.codecs.hasMediaSource===!0].map(l=>l?"1":"0").join(""),N=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(l=>String(l)).join("|"),z=h(N).slice(0,6),$=`${j}h${z}`,Q=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",q=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,K=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),J=[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(l=>String(l)).join("|"),Y=h(J).slice(0,4),Z=`${Q}${q}t${K}_h${Y}`,X=[E(this.fingerprint,"iframe"),E(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(l=>l?"1":"0").join(""),ee=[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(l=>String(l)).join("|"),te=h(ee).slice(0,6),re=`${X}h${te}`;return[a,p,o,R,U,B,$,Z,re].join("_")}catch(e){return console.error("Error generating fingerprint scanner id",e),u}}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 ut(JSON.stringify(e),n)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:g,test:je},{name:"hasWebdriver",severity:g,test:Ne},{name:"hasWebdriverWritable",severity:g,test:rt},{name:"hasSeleniumProperty",severity:g,test:ze},{name:"hasCDP",severity:g,test:$e},{name:"hasPlaywright",severity:g,test:Qe},{name:"hasImpossibleDeviceMemory",severity:g,test:qe},{name:"hasHighCPUCount",severity:g,test:Ke},{name:"hasMissingChromeObject",severity:g,test:Je},{name:"hasWebdriverIframe",severity:g,test:Ye},{name:"hasWebdriverWorker",severity:g,test:Ze},{name:"hasMismatchWebGLInWorker",severity:g,test:Xe},{name:"hasMismatchPlatformIframe",severity:g,test:tt},{name:"hasMismatchPlatformWorker",severity:g,test:et},{name:"hasSwiftshaderRenderer",severity:b,test:nt},{name:"hasUTCTimezone",severity:oe,test:it},{name:"hasMismatchLanguages",severity:b,test:at},{name:"hasInconsistentEtsl",severity:g,test:ot},{name:"hasBotUserAgent",severity:g,test:st},{name:"hasGPUMismatch",severity:g,test:ct},{name:"hasPlatformMismatch",severity:g,test:lt}]}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 a of e)try{const i=a.test(this.fingerprint);n[a.name]={detected:i,severity:a.severity}}catch{n[a.name]={detected:!1,severity:a.severity}}return n}async collectFingerprint(e={encrypt:!0}){const{encrypt:n=!0,skipWorker:a=!1}=e,i=this.fingerprint.signals,p={webdriver:this.collectSignal(ne),webdriverWritable:this.collectSignal(be),selenium:this.collectSignal(ye),cdp:this.collectSignal(ce),playwright:this.collectSignal(ue),navigatorPropertyDescriptors:this.collectSignal(Oe),cpuCount:this.collectSignal(de),memory:this.collectSignal(he),platform:this.collectSignal(ae),screenResolution:this.collectSignal(fe),multimediaDevices:this.collectSignal(xe),mediaQueries:this.collectSignal(Be),userAgent:this.collectSignal(ie),browserFeatures:this.collectSignal(Ge),plugins:this.collectSignal(We),browserExtensions:this.collectSignal(Fe),highEntropyValues:this.collectSignal(Se),etsl:this.collectSignal(me),maths:this.collectSignal(ge),toSourceError:this.collectSignal(_e),webGL:this.collectSignal(le),webgpu:this.collectSignal(we),canvas:this.collectSignal(Le),mediaCodecs:this.collectSignal(Re),internationalization:this.collectSignal(pe),languages:this.collectSignal(ve),iframe:this.collectSignal(ke),webWorker:a?Promise.resolve({webdriver:f,userAgent:f,platform:f,memory:f,cpuCount:f,language:f,vendor:f,renderer:f}):this.collectSignal(De),nonce:this.collectSignal(He),time:this.collectSignal(Ue),url:this.collectSignal(Ve)},d=Object.keys(p),w=await Promise.all(Object.values(p)),o=Object.fromEntries(d.map((v,y)=>[v,w[y]]));return i.automation.webdriver=o.webdriver,i.automation.webdriverWritable=o.webdriverWritable,i.automation.selenium=o.selenium,i.automation.cdp=o.cdp,i.automation.playwright=o.playwright,i.automation.navigatorPropertyDescriptors=o.navigatorPropertyDescriptors,i.device.cpuCount=o.cpuCount,i.device.memory=o.memory,i.device.platform=o.platform,i.device.screenResolution=o.screenResolution,i.device.multimediaDevices=o.multimediaDevices,i.device.mediaQueries=o.mediaQueries,i.browser.userAgent=o.userAgent,i.browser.features=o.browserFeatures,i.browser.plugins=o.plugins,i.browser.extensions=o.browserExtensions,i.browser.highEntropyValues=o.highEntropyValues,i.browser.etsl=o.etsl,i.browser.maths=o.maths,i.browser.toSourceError=o.toSourceError,i.graphics.webGL=o.webGL,i.graphics.webgpu=o.webgpu,i.graphics.canvas=o.canvas,i.codecs=o.mediaCodecs,i.locale.internationalization=o.internationalization,i.locale.languages=o.languages,i.contexts.iframe=o.iframe,i.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=dt;
|
|
31
|
+
}`,w=new Blob([m],{type:"application/javascript"});i=URL.createObjectURL(w),n=new Worker(i),a=window.setTimeout(()=>{g(),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{g(),t(e)}},n.onerror=function(){g(),h(e,l),t(e)}}catch{g(),h(e,l),t(e)}})}function _e(){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 S=['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"'],C=['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 P(t){const e={},n=window.MediaSource;if(!n||typeof n.isTypeSupported!="function"){for(const i of t)e[i]=null;return e}for(const i of t)try{e[i]=n.isTypeSupported(i)}catch{e[i]=null}return e}function M(t){try{const e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){const n=e.getCapabilities(t);return p(JSON.stringify(n))}return s}catch{return l}}function Re(){const t={audioCanPlayTypeHash:s,videoCanPlayTypeHash:s,audioMediaSourceHash:s,videoMediaSourceHash:s,rtcAudioCapabilitiesHash:s,rtcVideoCapabilitiesHash:s,hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;const e=A(S,"audio"),n=A(C,"video");t.audioCanPlayTypeHash=p(JSON.stringify(e)),t.videoCanPlayTypeHash=p(JSON.stringify(n));const i=P(S),a=P(C);t.audioMediaSourceHash=p(JSON.stringify(i)),t.videoMediaSourceHash=p(JSON.stringify(a)),t.rtcAudioCapabilitiesHash=M("audio"),t.rtcVideoCapabilitiesHash=M("video")}catch{h(t,l)}return t}async function Ie(){return new Promise(t=>{try{const e=new Image,n=document.createElement("canvas").getContext("2d");e.onload=()=>{n.drawImage(e,0,0),t(n.getImageData(0,0,1,1).data.filter(i=>i===0).length!=4)},e.onerror=()=>{t(l)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(l)}})}function Te(){var t=document.createElement("canvas");t.width=400,t.height=200,t.style.display="inline";var e=t.getContext("2d");try{return e.rect(0,0,10,10),e.rect(2,2,6,6),e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.font="11pt no-real-font-123",e.fillText("Cwm fjordbank glyphs vext quiz, ๐",2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText("Cwm fjordbank glyphs vext quiz, ๐",4,45),e.globalCompositeOperation="multiply",e.fillStyle="rgb(255,0,255)",e.beginPath(),e.arc(50,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(0,255,255)",e.beginPath(),e.arc(100,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,255,0)",e.beginPath(),e.arc(75,100,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,0,255)",e.arc(75,75,75,0,2*Math.PI,!0),e.arc(75,75,25,0,2*Math.PI,!0),e.fill("evenodd"),p(t.toDataURL())}catch{return l}}async function Le(){const t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await Ie(),t.canvasFingerprint=Te(),t}function Oe(){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 He(){return Math.random().toString(36).substring(2,15)}function Ue(){return new Date().getTime()}function Ve(){return window.location.href}function E(t,e){const n=t.signals;return e==="iframe"?n.contexts.iframe.webdriver!==n.automation.webdriver||n.contexts.iframe.userAgent!==n.browser.userAgent||n.contexts.iframe.platform!==n.device.platform||n.contexts.iframe.memory!==n.device.memory||n.contexts.iframe.cpuCount!==n.device.cpuCount:n.contexts.webWorker.webdriver!==n.automation.webdriver||n.contexts.webWorker.userAgent!==n.browser.userAgent||n.contexts.webWorker.platform!==n.device.platform||n.contexts.webWorker.memory!==n.device.memory||n.contexts.webWorker.cpuCount!==n.device.cpuCount}function Fe(){const t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),n=typeof window.ethereum<"u",i=document.getElementById("coupon-birds-drop-div")!==null,a=document.querySelector("deepl-input-controller")!==null,g=document.getElementById("monica-content-root")!==null,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",g?"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"),g&&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 Ge(){const t={bitmask:r,chrome:c(()=>"chrome"in window),brave:c(()=>"brave"in navigator),applePaySupport:c(()=>"ApplePaySetup"in window),opera:c(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:c(()=>window.navigator.serial!==void 0),attachShadow:c(()=>!!Element.prototype.attachShadow),caches:c(()=>!!window.caches),webAssembly:c(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:c(()=>"Buffer"in window),showModalDialog:c(()=>"showModalDialog"in window),safari:c(()=>"safari"in window),webkitPrefixedFunction:c(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:c(()=>"mozGetUserMedia"in navigator),usb:c(()=>typeof window.USB=="function"),browserCapture:c(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:c(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:c(()=>typeof window.PressureObserver=="function"),audioSession:c(()=>"audioSession"in navigator),selectAudioOutput:c(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:c(()=>"BarcodeDetector"in window),battery:c(()=>"getBattery"in navigator),devicePosture:c(()=>"DevicePosture"in window),documentPictureInPicture:c(()=>"documentPictureInPicture"in window),eyeDropper:c(()=>"EyeDropper"in window),editContext:c(()=>"EditContext"in window),fencedFrame:c(()=>"FencedFrameConfig"in window),sanitizer:c(()=>"Sanitizer"in window),otpCredential:c(()=>"OTPCredential"in window)},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 Be(t){const e=t.signals.device.screenResolution;return e.width===600&&e.height===800||e.availableWidth===600&&e.availableHeight===800||e.innerWidth===600&&e.innerHeight===800}function Ne(t){return t.signals.automation.webdriver===!0}function ze(t){return!!t.signals.automation.selenium}function $e(t){return t.signals.automation.cdp===!0}function Qe(t){return t.signals.automation.playwright===!0}function qe(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function Ke(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function Je(t){const e=t.signals.browser.userAgent;return t.signals.browser.features.chrome===!1&&typeof e=="string"&&e.includes("Chrome")}function Ye(t){return t.signals.contexts.iframe.webdriver===!0}function Ze(t){return t.signals.contexts.webWorker.webdriver===!0}function Xe(t){const e=t.signals.contexts.webWorker,n=t.signals.graphics.webGL;return e.vendor===l||e.renderer===l||n.vendor===s||n.renderer===s||e.vendor===f?!1:e.vendor!==n.vendor||e.renderer!==n.renderer}function et(t){return t.signals.contexts.webWorker.platform===s||t.signals.contexts.webWorker.platform===l||t.signals.contexts.webWorker.platform===f?!1:t.signals.device.platform!==t.signals.contexts.webWorker.platform}function tt(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 rt(t){return t.signals.automation.webdriverWritable===!0}function nt(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function it(t){return t.signals.locale.internationalization.timezone==="UTC"}function at(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 ot(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 st(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 ct(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 lt(t){const e=t.signals.device.platform,n=t.signals.browser.userAgent,i=t.signals.browser.highEntropyValues.platform;return!!(n.includes("Mac")&&!e.includes("Mac")||n.includes("Windows")&&!e.includes("Win")||n.includes("Linux")&&!e.includes("Linux")||i!==l&&i!==s&&(i.includes("Mac")&&!e.includes("Mac")||i.includes("Windows")&&!e.includes("Win")||i.includes("Linux")&&!e.includes("Linux")||i.includes("Android")&&!e.includes("Android")||i.includes("iOS")&&!e.includes("iOS")))}async function ut(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 g=String.fromCharCode(...a);return btoa(g)}class dt{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",g=[n.headlessChromeScreenResolution.detected,n.hasWebdriver.detected,n.hasWebdriverWritable.detected,n.hasSeleniumProperty.detected,n.hasCDP.detected,n.hasPlaywright.detected,n.hasImpossibleDeviceMemory.detected,n.hasHighCPUCount.detected,n.hasMissingChromeObject.detected,n.hasWebdriverIframe.detected,n.hasWebdriverWorker.detected,n.hasMismatchWebGLInWorker.detected,n.hasMismatchPlatformIframe.detected,n.hasMismatchPlatformWorker.detected,n.hasSwiftshaderRenderer.detected,n.hasUTCTimezone.detected,n.hasMismatchLanguages.detected,n.hasInconsistentEtsl.detected,n.hasBotUserAgent.detected,n.hasGPUMismatch.detected,n.hasPlatformMismatch.detected].map(u=>u?"1":"0").join(""),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,y=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,W=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",x=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",k=[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(""),D=[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("|"),_=p(D).slice(0,6),R=`${v}x${y}c${W}m${x}b${k}h${_}`,I=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0000000000",T=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"00000000",L=[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(""),O=[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("|"),H=p(O).slice(0,6),U=`f${I}e${T}p${L}h${H}`,V=[e.graphics.canvas.hasModifiedCanvas===!0].map(u=>u?"1":"0").join(""),F=[e.graphics.webGL.vendor,e.graphics.webGL.renderer,e.graphics.webgpu.vendor,e.graphics.webgpu.architecture,e.graphics.webgpu.device,e.graphics.webgpu.description,e.graphics.canvas.canvasFingerprint].map(u=>String(u)).join("|"),G=p(F).slice(0,6),j=`${V}h${G}`,B=[e.codecs.hasMediaSource===!0].map(u=>u?"1":"0").join(""),N=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(u=>String(u)).join("|"),z=p(N).slice(0,6),$=`${B}h${z}`,Q=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",q=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,K=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),J=[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("|"),Y=p(J).slice(0,4),Z=`${Q}${q}t${K}_h${Y}`,X=[E(this.fingerprint,"iframe"),E(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(u=>u?"1":"0").join(""),ee=[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("|"),te=p(ee).slice(0,6),re=`${X}h${te}`;return[i,g,o,R,U,j,$,Z,re].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 ut(JSON.stringify(e),n)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:d,test:Be},{name:"hasWebdriver",severity:d,test:Ne},{name:"hasWebdriverWritable",severity:d,test:rt},{name:"hasSeleniumProperty",severity:d,test:ze},{name:"hasCDP",severity:d,test:$e},{name:"hasPlaywright",severity:d,test:Qe},{name:"hasImpossibleDeviceMemory",severity:d,test:qe},{name:"hasHighCPUCount",severity:d,test:Ke},{name:"hasMissingChromeObject",severity:d,test:Je},{name:"hasWebdriverIframe",severity:d,test:Ye},{name:"hasWebdriverWorker",severity:d,test:Ze},{name:"hasMismatchWebGLInWorker",severity:d,test:Xe},{name:"hasMismatchPlatformIframe",severity:d,test:tt},{name:"hasMismatchPlatformWorker",severity:d,test:et},{name:"hasSwiftshaderRenderer",severity:b,test:nt},{name:"hasUTCTimezone",severity:oe,test:it},{name:"hasMismatchLanguages",severity:b,test:at},{name:"hasInconsistentEtsl",severity:d,test:ot},{name:"hasBotUserAgent",severity:d,test:st},{name:"hasGPUMismatch",severity:d,test:ct},{name:"hasPlatformMismatch",severity:d,test:lt}]}runDetectionRules(){const e=this.getDetectionRules(),n={headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}};for(const i of e)try{const a=i.test(this.fingerprint);n[i.name]={detected:a,severity:i.severity}}catch{n[i.name]={detected:!1,severity:i.severity}}return n}async collectFingerprint(e={encrypt:!0}){const{encrypt:n=!0,skipWorker:i=!1}=e,a=this.fingerprint.signals,g={webdriver:this.collectSignal(ne),webdriverWritable:this.collectSignal(be),selenium:this.collectSignal(ye),cdp:this.collectSignal(ce),playwright:this.collectSignal(ue),navigatorPropertyDescriptors:this.collectSignal(Oe),cpuCount:this.collectSignal(de),memory:this.collectSignal(ge),platform:this.collectSignal(ae),screenResolution:this.collectSignal(fe),multimediaDevices:this.collectSignal(xe),mediaQueries:this.collectSignal(je),userAgent:this.collectSignal(ie),browserFeatures:this.collectSignal(Ge),plugins:this.collectSignal(We),browserExtensions:this.collectSignal(Fe),highEntropyValues:this.collectSignal(Se),etsl:this.collectSignal(me),maths:this.collectSignal(he),toSourceError:this.collectSignal(_e),webGL:this.collectSignal(le),webgpu:this.collectSignal(we),canvas:this.collectSignal(Le),mediaCodecs:this.collectSignal(Re),internationalization:this.collectSignal(pe),languages:this.collectSignal(ve),iframe:this.collectSignal(ke),webWorker:i?Promise.resolve({webdriver:f,userAgent:f,platform:f,memory:f,cpuCount:f,language:f,vendor:f,renderer:f}):this.collectSignal(De),nonce:this.collectSignal(He),time:this.collectSignal(Ue),url:this.collectSignal(Ve)},m=Object.keys(g),w=await Promise.all(Object.values(g)),o=Object.fromEntries(m.map((v,y)=>[v,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(v=>v.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),n?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}}exports.default=dt;
|
package/dist/fpScanner.es.js
CHANGED
|
@@ -7,16 +7,16 @@ function ie() {
|
|
|
7
7
|
function ae() {
|
|
8
8
|
return navigator.platform;
|
|
9
9
|
}
|
|
10
|
-
const
|
|
11
|
-
function
|
|
10
|
+
const l = "ERROR", r = "INIT", s = "NA", f = "SKIPPED", d = "high", b = "low", oe = "medium";
|
|
11
|
+
function p(t) {
|
|
12
12
|
let e = 0;
|
|
13
|
-
for (let n = 0,
|
|
14
|
-
let
|
|
15
|
-
e = (e << 5) - e +
|
|
13
|
+
for (let n = 0, i = t.length; n < i; n++) {
|
|
14
|
+
let a = t.charCodeAt(n);
|
|
15
|
+
e = (e << 5) - e + a, e |= 0;
|
|
16
16
|
}
|
|
17
17
|
return e.toString(16).padStart(8, "0");
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function h(t, e) {
|
|
20
20
|
for (const n in t)
|
|
21
21
|
t[n] = e;
|
|
22
22
|
}
|
|
@@ -33,7 +33,7 @@ function ce() {
|
|
|
33
33
|
const n = new Error("");
|
|
34
34
|
return console.log(n), t;
|
|
35
35
|
} catch {
|
|
36
|
-
return
|
|
36
|
+
return l;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
function le() {
|
|
@@ -42,12 +42,12 @@ function le() {
|
|
|
42
42
|
renderer: r
|
|
43
43
|
};
|
|
44
44
|
if (se())
|
|
45
|
-
return
|
|
45
|
+
return h(t, s), t;
|
|
46
46
|
try {
|
|
47
47
|
var e = document.createElement("canvas"), n = e.getContext("webgl") || e.getContext("experimental-webgl");
|
|
48
|
-
n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info") >= 0 ? (t.vendor = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL), t.renderer = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)) :
|
|
48
|
+
n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info") >= 0 ? (t.vendor = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL), t.renderer = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)) : h(t, s);
|
|
49
49
|
} catch {
|
|
50
|
-
|
|
50
|
+
h(t, l);
|
|
51
51
|
}
|
|
52
52
|
return t;
|
|
53
53
|
}
|
|
@@ -59,19 +59,19 @@ function de() {
|
|
|
59
59
|
}
|
|
60
60
|
function he() {
|
|
61
61
|
const t = [], e = 0.123456789;
|
|
62
|
-
return ["E", "LN10", "LN2", "LOG10E", "LOG2E", "PI", "SQRT1_2", "SQRT2"].forEach(function(
|
|
62
|
+
return ["E", "LN10", "LN2", "LOG10E", "LOG2E", "PI", "SQRT1_2", "SQRT2"].forEach(function(a) {
|
|
63
63
|
try {
|
|
64
|
-
t.push(Math[
|
|
64
|
+
t.push(Math[a]);
|
|
65
65
|
} catch {
|
|
66
66
|
t.push(-1);
|
|
67
67
|
}
|
|
68
|
-
}), ["tan", "sin", "exp", "atan", "acosh", "asinh", "atanh", "expm1", "log1p", "sinh"].forEach(function(
|
|
68
|
+
}), ["tan", "sin", "exp", "atan", "acosh", "asinh", "atanh", "expm1", "log1p", "sinh"].forEach(function(a) {
|
|
69
69
|
try {
|
|
70
|
-
t.push(Math[
|
|
70
|
+
t.push(Math[a](e));
|
|
71
71
|
} catch {
|
|
72
72
|
t.push(-1);
|
|
73
73
|
}
|
|
74
|
-
}),
|
|
74
|
+
}), p(t.map(String).join(","));
|
|
75
75
|
}
|
|
76
76
|
function ge() {
|
|
77
77
|
return navigator.deviceMemory || s;
|
|
@@ -91,7 +91,7 @@ function pe() {
|
|
|
91
91
|
} else
|
|
92
92
|
t.timezone = s, t.localeLanguage = s;
|
|
93
93
|
} catch {
|
|
94
|
-
t.timezone =
|
|
94
|
+
t.timezone = l, t.localeLanguage = l;
|
|
95
95
|
}
|
|
96
96
|
return t;
|
|
97
97
|
}
|
|
@@ -126,10 +126,10 @@ async function we() {
|
|
|
126
126
|
const e = await navigator.gpu.requestAdapter();
|
|
127
127
|
e && (t.vendor = e.info.vendor, t.architecture = e.info.architecture, t.device = e.info.device, t.description = e.info.description);
|
|
128
128
|
} catch {
|
|
129
|
-
|
|
129
|
+
h(t, l);
|
|
130
130
|
}
|
|
131
131
|
else
|
|
132
|
-
|
|
132
|
+
h(t, s);
|
|
133
133
|
return t;
|
|
134
134
|
}
|
|
135
135
|
function ye() {
|
|
@@ -204,10 +204,10 @@ async function Se() {
|
|
|
204
204
|
]);
|
|
205
205
|
e.architecture = n.architecture, e.bitness = n.bitness, e.brands = n.brands, e.mobile = n.mobile, e.model = n.model, e.platform = n.platform, e.platformVersion = n.platformVersion, e.uaFullVersion = n.uaFullVersion;
|
|
206
206
|
} catch {
|
|
207
|
-
|
|
207
|
+
h(e, l);
|
|
208
208
|
}
|
|
209
209
|
else
|
|
210
|
-
|
|
210
|
+
h(e, s);
|
|
211
211
|
return e;
|
|
212
212
|
}
|
|
213
213
|
function Ce() {
|
|
@@ -220,7 +220,7 @@ function Ae() {
|
|
|
220
220
|
const t = [];
|
|
221
221
|
for (let e = 0; e < navigator.plugins.length; e++)
|
|
222
222
|
t.push(navigator.plugins[e].name);
|
|
223
|
-
return
|
|
223
|
+
return p(t.join(","));
|
|
224
224
|
}
|
|
225
225
|
function Pe() {
|
|
226
226
|
return navigator.plugins ? navigator.plugins.length : s;
|
|
@@ -230,7 +230,7 @@ function Ee() {
|
|
|
230
230
|
try {
|
|
231
231
|
return navigator.plugins[0] === navigator.plugins[0][0].enabledPlugin;
|
|
232
232
|
} catch {
|
|
233
|
-
return
|
|
233
|
+
return l;
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
function We() {
|
|
@@ -238,7 +238,7 @@ function We() {
|
|
|
238
238
|
try {
|
|
239
239
|
return navigator.plugins.item(4294967296) !== navigator.plugins[0];
|
|
240
240
|
} catch {
|
|
241
|
-
return
|
|
241
|
+
return l;
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
function Me() {
|
|
@@ -252,7 +252,7 @@ function Me() {
|
|
|
252
252
|
try {
|
|
253
253
|
t.isValidPluginArray = Ce(), t.pluginCount = Pe(), t.pluginNamesHash = Ae(), t.pluginConsistency1 = Ee(), t.pluginOverflow = We();
|
|
254
254
|
} catch {
|
|
255
|
-
|
|
255
|
+
h(t, l);
|
|
256
256
|
}
|
|
257
257
|
return t;
|
|
258
258
|
}
|
|
@@ -264,11 +264,11 @@ async function xe() {
|
|
|
264
264
|
videoinput: 0
|
|
265
265
|
};
|
|
266
266
|
if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
|
|
267
|
-
const
|
|
268
|
-
if (typeof
|
|
269
|
-
for (var n = 0; n <
|
|
270
|
-
var
|
|
271
|
-
e[
|
|
267
|
+
const a = await navigator.mediaDevices.enumerateDevices();
|
|
268
|
+
if (typeof a < "u") {
|
|
269
|
+
for (var n = 0; n < a.length; n++) {
|
|
270
|
+
var i = a[n].kind;
|
|
271
|
+
e[i] = e[i] + 1;
|
|
272
272
|
}
|
|
273
273
|
return t({
|
|
274
274
|
speakers: e.audiooutput,
|
|
@@ -276,9 +276,9 @@ async function xe() {
|
|
|
276
276
|
webcams: e.videoinput
|
|
277
277
|
});
|
|
278
278
|
} else
|
|
279
|
-
return
|
|
279
|
+
return h(e, s), t(e);
|
|
280
280
|
} else
|
|
281
|
-
return
|
|
281
|
+
return h(e, s), t(e);
|
|
282
282
|
});
|
|
283
283
|
}
|
|
284
284
|
function ke() {
|
|
@@ -290,14 +290,19 @@ function ke() {
|
|
|
290
290
|
cpuCount: r,
|
|
291
291
|
language: r
|
|
292
292
|
}, e = document.createElement("iframe");
|
|
293
|
+
let n = !1;
|
|
293
294
|
try {
|
|
294
|
-
e.style.display = "none", e.src = "about:blank", document.body.appendChild(e);
|
|
295
|
-
const
|
|
296
|
-
t.webdriver =
|
|
295
|
+
e.style.display = "none", e.src = "about:blank", document.body.appendChild(e), n = !0;
|
|
296
|
+
const i = e.contentWindow?.navigator;
|
|
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;
|
|
297
298
|
} catch {
|
|
298
|
-
|
|
299
|
+
h(t, l);
|
|
299
300
|
} finally {
|
|
300
|
-
|
|
301
|
+
if (n)
|
|
302
|
+
try {
|
|
303
|
+
document.body.removeChild(e);
|
|
304
|
+
} catch {
|
|
305
|
+
}
|
|
301
306
|
}
|
|
302
307
|
return t;
|
|
303
308
|
}
|
|
@@ -312,8 +317,12 @@ async function De() {
|
|
|
312
317
|
memory: r,
|
|
313
318
|
cpuCount: r
|
|
314
319
|
};
|
|
320
|
+
let n = null, i = null, a = null;
|
|
321
|
+
const g = () => {
|
|
322
|
+
a && clearTimeout(a), n && n.terminate(), i && URL.revokeObjectURL(i);
|
|
323
|
+
};
|
|
315
324
|
try {
|
|
316
|
-
const
|
|
325
|
+
const m = `try {
|
|
317
326
|
var fingerprintWorker = {};
|
|
318
327
|
|
|
319
328
|
fingerprintWorker.userAgent = navigator.userAgent;
|
|
@@ -343,16 +352,22 @@ async function De() {
|
|
|
343
352
|
self.postMessage(fingerprintWorker);
|
|
344
353
|
} catch (e) {
|
|
345
354
|
self.postMessage(fingerprintWorker);
|
|
346
|
-
}`,
|
|
347
|
-
|
|
355
|
+
}`, w = new Blob([m], { type: "application/javascript" });
|
|
356
|
+
i = URL.createObjectURL(w), n = new Worker(i), a = window.setTimeout(() => {
|
|
357
|
+
g(), h(e, l), t(e);
|
|
358
|
+
}, 2e3), n.onmessage = function(o) {
|
|
348
359
|
try {
|
|
349
|
-
|
|
360
|
+
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;
|
|
350
361
|
} catch {
|
|
351
|
-
|
|
362
|
+
h(e, l);
|
|
363
|
+
} finally {
|
|
364
|
+
g(), t(e);
|
|
352
365
|
}
|
|
366
|
+
}, n.onerror = function() {
|
|
367
|
+
g(), h(e, l), t(e);
|
|
353
368
|
};
|
|
354
369
|
} catch {
|
|
355
|
-
|
|
370
|
+
g(), h(e, l), t(e);
|
|
356
371
|
}
|
|
357
372
|
});
|
|
358
373
|
}
|
|
@@ -403,31 +418,31 @@ const S = [
|
|
|
403
418
|
function A(t, e) {
|
|
404
419
|
const n = {};
|
|
405
420
|
try {
|
|
406
|
-
const
|
|
407
|
-
for (const
|
|
421
|
+
const i = document.createElement(e);
|
|
422
|
+
for (const a of t)
|
|
408
423
|
try {
|
|
409
|
-
n[
|
|
424
|
+
n[a] = i.canPlayType(a) || null;
|
|
410
425
|
} catch {
|
|
411
|
-
n[
|
|
426
|
+
n[a] = null;
|
|
412
427
|
}
|
|
413
428
|
} catch {
|
|
414
|
-
for (const
|
|
415
|
-
n[
|
|
429
|
+
for (const i of t)
|
|
430
|
+
n[i] = null;
|
|
416
431
|
}
|
|
417
432
|
return n;
|
|
418
433
|
}
|
|
419
434
|
function P(t) {
|
|
420
435
|
const e = {}, n = window.MediaSource;
|
|
421
436
|
if (!n || typeof n.isTypeSupported != "function") {
|
|
422
|
-
for (const
|
|
423
|
-
e[
|
|
437
|
+
for (const i of t)
|
|
438
|
+
e[i] = null;
|
|
424
439
|
return e;
|
|
425
440
|
}
|
|
426
|
-
for (const
|
|
441
|
+
for (const i of t)
|
|
427
442
|
try {
|
|
428
|
-
e[
|
|
443
|
+
e[i] = n.isTypeSupported(i);
|
|
429
444
|
} catch {
|
|
430
|
-
e[
|
|
445
|
+
e[i] = null;
|
|
431
446
|
}
|
|
432
447
|
return e;
|
|
433
448
|
}
|
|
@@ -436,11 +451,11 @@ function E(t) {
|
|
|
436
451
|
const e = window.RTCRtpReceiver;
|
|
437
452
|
if (e && typeof e.getCapabilities == "function") {
|
|
438
453
|
const n = e.getCapabilities(t);
|
|
439
|
-
return
|
|
454
|
+
return p(JSON.stringify(n));
|
|
440
455
|
}
|
|
441
456
|
return s;
|
|
442
457
|
} catch {
|
|
443
|
-
return
|
|
458
|
+
return l;
|
|
444
459
|
}
|
|
445
460
|
}
|
|
446
461
|
function Re() {
|
|
@@ -456,11 +471,11 @@ function Re() {
|
|
|
456
471
|
try {
|
|
457
472
|
t.hasMediaSource = !!window.MediaSource;
|
|
458
473
|
const e = A(S, "audio"), n = A(C, "video");
|
|
459
|
-
t.audioCanPlayTypeHash =
|
|
460
|
-
const
|
|
461
|
-
t.audioMediaSourceHash =
|
|
474
|
+
t.audioCanPlayTypeHash = p(JSON.stringify(e)), t.videoCanPlayTypeHash = p(JSON.stringify(n));
|
|
475
|
+
const i = P(S), a = P(C);
|
|
476
|
+
t.audioMediaSourceHash = p(JSON.stringify(i)), t.videoMediaSourceHash = p(JSON.stringify(a)), t.rtcAudioCapabilitiesHash = E("audio"), t.rtcVideoCapabilitiesHash = E("video");
|
|
462
477
|
} catch {
|
|
463
|
-
|
|
478
|
+
h(t, l);
|
|
464
479
|
}
|
|
465
480
|
return t;
|
|
466
481
|
}
|
|
@@ -469,12 +484,12 @@ async function Ie() {
|
|
|
469
484
|
try {
|
|
470
485
|
const e = new Image(), n = document.createElement("canvas").getContext("2d");
|
|
471
486
|
e.onload = () => {
|
|
472
|
-
n.drawImage(e, 0, 0), t(n.getImageData(0, 0, 1, 1).data.filter((
|
|
487
|
+
n.drawImage(e, 0, 0), t(n.getImageData(0, 0, 1, 1).data.filter((i) => i === 0).length != 4);
|
|
473
488
|
}, e.onerror = () => {
|
|
474
|
-
t(
|
|
489
|
+
t(l);
|
|
475
490
|
}, e.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=";
|
|
476
491
|
} catch {
|
|
477
|
-
t(
|
|
492
|
+
t(l);
|
|
478
493
|
}
|
|
479
494
|
});
|
|
480
495
|
}
|
|
@@ -483,9 +498,9 @@ function Te() {
|
|
|
483
498
|
t.width = 400, t.height = 200, t.style.display = "inline";
|
|
484
499
|
var e = t.getContext("2d");
|
|
485
500
|
try {
|
|
486
|
-
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"),
|
|
501
|
+
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());
|
|
487
502
|
} catch {
|
|
488
|
-
return
|
|
503
|
+
return l;
|
|
489
504
|
}
|
|
490
505
|
}
|
|
491
506
|
async function Le() {
|
|
@@ -498,8 +513,8 @@ async function Le() {
|
|
|
498
513
|
function Oe() {
|
|
499
514
|
const t = ["deviceMemory", "hardwareConcurrency", "language", "languages", "platform"], e = [];
|
|
500
515
|
for (const n of t) {
|
|
501
|
-
const
|
|
502
|
-
|
|
516
|
+
const i = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator), n);
|
|
517
|
+
i && i.value ? e.push("1") : e.push("0");
|
|
503
518
|
}
|
|
504
519
|
return e.join("");
|
|
505
520
|
}
|
|
@@ -520,17 +535,17 @@ function Fe() {
|
|
|
520
535
|
const t = {
|
|
521
536
|
bitmask: r,
|
|
522
537
|
extensions: []
|
|
523
|
-
}, e = document.body.hasAttribute("data-gr-ext-installed"), n = typeof window.ethereum < "u",
|
|
538
|
+
}, e = document.body.hasAttribute("data-gr-ext-installed"), n = typeof window.ethereum < "u", i = document.getElementById("coupon-birds-drop-div") !== null, a = document.querySelector("deepl-input-controller") !== null, g = document.getElementById("monica-content-root") !== null, 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;
|
|
524
539
|
return t.bitmask = [
|
|
525
540
|
e ? "1" : "0",
|
|
526
541
|
n ? "1" : "0",
|
|
527
|
-
a ? "1" : "0",
|
|
528
542
|
i ? "1" : "0",
|
|
529
|
-
|
|
530
|
-
|
|
543
|
+
a ? "1" : "0",
|
|
544
|
+
g ? "1" : "0",
|
|
545
|
+
m ? "1" : "0",
|
|
531
546
|
w ? "1" : "0",
|
|
532
547
|
o ? "1" : "0"
|
|
533
|
-
].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"),
|
|
548
|
+
].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"), i && t.extensions.push("coupon-birds"), a && t.extensions.push("deepl"), g && t.extensions.push("monica-ai"), m && t.extensions.push("sider-ai"), w && t.extensions.push("requestly"), o && t.extensions.push("veepn"), t;
|
|
534
549
|
}
|
|
535
550
|
function c(t) {
|
|
536
551
|
try {
|
|
@@ -592,7 +607,7 @@ function Be() {
|
|
|
592
607
|
window.matchMedia(`(color: ${n})`).matches && (e = n);
|
|
593
608
|
t.colorDepth = e;
|
|
594
609
|
} catch {
|
|
595
|
-
|
|
610
|
+
h(t, l);
|
|
596
611
|
}
|
|
597
612
|
return t;
|
|
598
613
|
}
|
|
@@ -630,13 +645,13 @@ function Ze(t) {
|
|
|
630
645
|
}
|
|
631
646
|
function Xe(t) {
|
|
632
647
|
const e = t.signals.contexts.webWorker, n = t.signals.graphics.webGL;
|
|
633
|
-
return e.vendor ===
|
|
648
|
+
return e.vendor === l || e.renderer === l || n.vendor === s || n.renderer === s || e.vendor === f ? !1 : e.vendor !== n.vendor || e.renderer !== n.renderer;
|
|
634
649
|
}
|
|
635
650
|
function et(t) {
|
|
636
|
-
return t.signals.contexts.webWorker.platform === s || t.signals.contexts.webWorker.platform ===
|
|
651
|
+
return t.signals.contexts.webWorker.platform === s || t.signals.contexts.webWorker.platform === l || t.signals.contexts.webWorker.platform === f ? !1 : t.signals.device.platform !== t.signals.contexts.webWorker.platform;
|
|
637
652
|
}
|
|
638
653
|
function tt(t) {
|
|
639
|
-
return t.signals.contexts.iframe.platform === s || t.signals.contexts.iframe.platform ===
|
|
654
|
+
return t.signals.contexts.iframe.platform === s || t.signals.contexts.iframe.platform === l ? !1 : t.signals.device.platform !== t.signals.contexts.iframe.platform;
|
|
640
655
|
}
|
|
641
656
|
function rt(t) {
|
|
642
657
|
return t.signals.automation.webdriverWritable === !0;
|
|
@@ -662,19 +677,19 @@ function st(t) {
|
|
|
662
677
|
].some((n) => /bot|headless/i.test(n.toLowerCase()));
|
|
663
678
|
}
|
|
664
679
|
function ct(t) {
|
|
665
|
-
const e = t.signals.graphics.webgpu, n = t.signals.graphics.webGL,
|
|
666
|
-
return !!((n.vendor.includes("Apple") || n.renderer.includes("Apple")) && !
|
|
680
|
+
const e = t.signals.graphics.webgpu, n = t.signals.graphics.webGL, i = t.signals.browser.userAgent;
|
|
681
|
+
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"));
|
|
667
682
|
}
|
|
668
683
|
function lt(t) {
|
|
669
|
-
const e = t.signals.device.platform, n = t.signals.browser.userAgent,
|
|
670
|
-
return !!(n.includes("Mac") && !e.includes("Mac") || n.includes("Windows") && !e.includes("Win") || n.includes("Linux") && !e.includes("Linux") ||
|
|
684
|
+
const e = t.signals.device.platform, n = t.signals.browser.userAgent, i = t.signals.browser.highEntropyValues.platform;
|
|
685
|
+
return !!(n.includes("Mac") && !e.includes("Mac") || n.includes("Windows") && !e.includes("Win") || n.includes("Linux") && !e.includes("Linux") || i !== l && i !== s && (i.includes("Mac") && !e.includes("Mac") || i.includes("Windows") && !e.includes("Win") || i.includes("Linux") && !e.includes("Linux") || i.includes("Android") && !e.includes("Android") || i.includes("iOS") && !e.includes("iOS")));
|
|
671
686
|
}
|
|
672
687
|
async function ut(t, e) {
|
|
673
|
-
const n = new TextEncoder().encode(e),
|
|
674
|
-
for (let
|
|
675
|
-
|
|
676
|
-
const
|
|
677
|
-
return btoa(
|
|
688
|
+
const n = new TextEncoder().encode(e), i = new TextEncoder().encode(t), a = new Uint8Array(i.length);
|
|
689
|
+
for (let m = 0; m < i.length; m++)
|
|
690
|
+
a[m] = i[m] ^ n[m % n.length];
|
|
691
|
+
const g = String.fromCharCode(...a);
|
|
692
|
+
return btoa(g);
|
|
678
693
|
}
|
|
679
694
|
class ht {
|
|
680
695
|
constructor() {
|
|
@@ -878,7 +893,7 @@ class ht {
|
|
|
878
893
|
try {
|
|
879
894
|
return await e();
|
|
880
895
|
} catch {
|
|
881
|
-
return
|
|
896
|
+
return l;
|
|
882
897
|
}
|
|
883
898
|
}
|
|
884
899
|
/**
|
|
@@ -905,7 +920,7 @@ class ht {
|
|
|
905
920
|
*/
|
|
906
921
|
generateFingerprintScannerId() {
|
|
907
922
|
try {
|
|
908
|
-
const e = this.fingerprint.signals, n = this.fingerprint.fastBotDetectionDetails,
|
|
923
|
+
const e = this.fingerprint.signals, n = this.fingerprint.fastBotDetectionDetails, i = "FS1", g = [
|
|
909
924
|
n.headlessChromeScreenResolution.detected,
|
|
910
925
|
n.hasWebdriver.detected,
|
|
911
926
|
n.hasWebdriverWritable.detected,
|
|
@@ -928,19 +943,19 @@ class ht {
|
|
|
928
943
|
n.hasGPUMismatch.detected,
|
|
929
944
|
n.hasPlatformMismatch.detected
|
|
930
945
|
// Add other detection rules output here
|
|
931
|
-
].map((
|
|
946
|
+
].map((u) => u ? "1" : "0").join(""), m = [
|
|
932
947
|
e.automation.webdriver === !0,
|
|
933
948
|
e.automation.webdriverWritable === !0,
|
|
934
949
|
e.automation.selenium === !0,
|
|
935
950
|
e.automation.cdp === !0,
|
|
936
951
|
e.automation.playwright === !0
|
|
937
|
-
].map((
|
|
952
|
+
].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, y = typeof e.device.screenResolution.height == "number" ? e.device.screenResolution.height : 0, M = typeof e.device.cpuCount == "number" ? String(e.device.cpuCount).padStart(2, "0") : "00", x = typeof e.device.memory == "number" ? String(Math.round(e.device.memory)).padStart(2, "0") : "00", k = [
|
|
938
953
|
e.device.screenResolution.hasMultipleDisplays === !0,
|
|
939
954
|
e.device.mediaQueries.prefersReducedMotion === !0,
|
|
940
955
|
e.device.mediaQueries.prefersReducedTransparency === !0,
|
|
941
956
|
e.device.mediaQueries.hover === !0,
|
|
942
957
|
e.device.mediaQueries.anyHover === !0
|
|
943
|
-
].map((
|
|
958
|
+
].map((u) => u ? "1" : "0").join(""), D = [
|
|
944
959
|
e.device.platform,
|
|
945
960
|
e.device.screenResolution.pixelDepth,
|
|
946
961
|
e.device.screenResolution.colorDepth,
|
|
@@ -952,12 +967,12 @@ class ht {
|
|
|
952
967
|
e.device.mediaQueries.pointer,
|
|
953
968
|
e.device.mediaQueries.anyPointer,
|
|
954
969
|
e.device.mediaQueries.colorDepth
|
|
955
|
-
].map((
|
|
970
|
+
].map((u) => String(u)).join("|"), _ = p(D).slice(0, 6), R = `${v}x${y}c${M}m${x}b${k}h${_}`, I = typeof e.browser.features.bitmask == "string" ? e.browser.features.bitmask : "0000000000", T = typeof e.browser.extensions.bitmask == "string" ? e.browser.extensions.bitmask : "00000000", L = [
|
|
956
971
|
e.browser.plugins.isValidPluginArray === !0,
|
|
957
972
|
e.browser.plugins.pluginConsistency1 === !0,
|
|
958
973
|
e.browser.plugins.pluginOverflow === !0,
|
|
959
974
|
e.browser.toSourceError.hasToSource === !0
|
|
960
|
-
].map((
|
|
975
|
+
].map((u) => u ? "1" : "0").join(""), O = [
|
|
961
976
|
e.browser.userAgent,
|
|
962
977
|
e.browser.etsl,
|
|
963
978
|
e.browser.maths,
|
|
@@ -970,9 +985,9 @@ class ht {
|
|
|
970
985
|
e.browser.highEntropyValues.platformVersion,
|
|
971
986
|
e.browser.highEntropyValues.uaFullVersion,
|
|
972
987
|
e.browser.highEntropyValues.mobile
|
|
973
|
-
].map((
|
|
988
|
+
].map((u) => String(u)).join("|"), H = p(O).slice(0, 6), U = `f${I}e${T}p${L}h${H}`, V = [
|
|
974
989
|
e.graphics.canvas.hasModifiedCanvas === !0
|
|
975
|
-
].map((
|
|
990
|
+
].map((u) => u ? "1" : "0").join(""), F = [
|
|
976
991
|
e.graphics.webGL.vendor,
|
|
977
992
|
e.graphics.webGL.renderer,
|
|
978
993
|
e.graphics.webgpu.vendor,
|
|
@@ -980,26 +995,26 @@ class ht {
|
|
|
980
995
|
e.graphics.webgpu.device,
|
|
981
996
|
e.graphics.webgpu.description,
|
|
982
997
|
e.graphics.canvas.canvasFingerprint
|
|
983
|
-
].map((
|
|
998
|
+
].map((u) => String(u)).join("|"), G = p(F).slice(0, 6), B = `${V}h${G}`, j = [
|
|
984
999
|
e.codecs.hasMediaSource === !0
|
|
985
|
-
].map((
|
|
1000
|
+
].map((u) => u ? "1" : "0").join(""), N = [
|
|
986
1001
|
e.codecs.audioCanPlayTypeHash,
|
|
987
1002
|
e.codecs.videoCanPlayTypeHash,
|
|
988
1003
|
e.codecs.audioMediaSourceHash,
|
|
989
1004
|
e.codecs.videoMediaSourceHash,
|
|
990
1005
|
e.codecs.rtcAudioCapabilitiesHash,
|
|
991
1006
|
e.codecs.rtcVideoCapabilitiesHash
|
|
992
|
-
].map((
|
|
1007
|
+
].map((u) => String(u)).join("|"), z = p(N).slice(0, 6), $ = `${j}h${z}`, Q = typeof e.locale.languages.language == "string" ? e.locale.languages.language.slice(0, 2).toLowerCase() : "xx", q = Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.length : 0, K = (typeof e.locale.internationalization.timezone == "string" ? e.locale.internationalization.timezone : "unknown").replace(/[\/\s]/g, "-"), J = [
|
|
993
1008
|
e.locale.internationalization.timezone,
|
|
994
1009
|
e.locale.internationalization.localeLanguage,
|
|
995
1010
|
Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.join(",") : e.locale.languages.languages,
|
|
996
1011
|
e.locale.languages.language
|
|
997
|
-
].map((
|
|
1012
|
+
].map((u) => String(u)).join("|"), Y = p(J).slice(0, 4), Z = `${Q}${q}t${K}_h${Y}`, X = [
|
|
998
1013
|
W(this.fingerprint, "iframe"),
|
|
999
1014
|
W(this.fingerprint, "worker"),
|
|
1000
1015
|
e.contexts.iframe.webdriver === !0,
|
|
1001
1016
|
e.contexts.webWorker.webdriver === !0
|
|
1002
|
-
].map((
|
|
1017
|
+
].map((u) => u ? "1" : "0").join(""), ee = [
|
|
1003
1018
|
e.contexts.iframe.userAgent,
|
|
1004
1019
|
e.contexts.iframe.platform,
|
|
1005
1020
|
e.contexts.iframe.memory,
|
|
@@ -1012,10 +1027,10 @@ class ht {
|
|
|
1012
1027
|
e.contexts.webWorker.language,
|
|
1013
1028
|
e.contexts.webWorker.vendor,
|
|
1014
1029
|
e.contexts.webWorker.renderer
|
|
1015
|
-
].map((
|
|
1030
|
+
].map((u) => String(u)).join("|"), te = p(ee).slice(0, 6), re = `${X}h${te}`;
|
|
1016
1031
|
return [
|
|
1017
|
-
|
|
1018
|
-
|
|
1032
|
+
i,
|
|
1033
|
+
g,
|
|
1019
1034
|
o,
|
|
1020
1035
|
R,
|
|
1021
1036
|
U,
|
|
@@ -1025,7 +1040,7 @@ class ht {
|
|
|
1025
1040
|
re
|
|
1026
1041
|
].join("_");
|
|
1027
1042
|
} catch (e) {
|
|
1028
|
-
return console.error("Error generating fingerprint scanner id", e),
|
|
1043
|
+
return console.error("Error generating fingerprint scanner id", e), l;
|
|
1029
1044
|
}
|
|
1030
1045
|
}
|
|
1031
1046
|
async encryptFingerprint(e) {
|
|
@@ -1039,27 +1054,27 @@ class ht {
|
|
|
1039
1054
|
*/
|
|
1040
1055
|
getDetectionRules() {
|
|
1041
1056
|
return [
|
|
1042
|
-
{ name: "headlessChromeScreenResolution", severity:
|
|
1043
|
-
{ name: "hasWebdriver", severity:
|
|
1044
|
-
{ name: "hasWebdriverWritable", severity:
|
|
1045
|
-
{ name: "hasSeleniumProperty", severity:
|
|
1046
|
-
{ name: "hasCDP", severity:
|
|
1047
|
-
{ name: "hasPlaywright", severity:
|
|
1048
|
-
{ name: "hasImpossibleDeviceMemory", severity:
|
|
1049
|
-
{ name: "hasHighCPUCount", severity:
|
|
1050
|
-
{ name: "hasMissingChromeObject", severity:
|
|
1051
|
-
{ name: "hasWebdriverIframe", severity:
|
|
1052
|
-
{ name: "hasWebdriverWorker", severity:
|
|
1053
|
-
{ name: "hasMismatchWebGLInWorker", severity:
|
|
1054
|
-
{ name: "hasMismatchPlatformIframe", severity:
|
|
1055
|
-
{ name: "hasMismatchPlatformWorker", severity:
|
|
1057
|
+
{ name: "headlessChromeScreenResolution", severity: d, test: je },
|
|
1058
|
+
{ name: "hasWebdriver", severity: d, test: Ne },
|
|
1059
|
+
{ name: "hasWebdriverWritable", severity: d, test: rt },
|
|
1060
|
+
{ name: "hasSeleniumProperty", severity: d, test: ze },
|
|
1061
|
+
{ name: "hasCDP", severity: d, test: $e },
|
|
1062
|
+
{ name: "hasPlaywright", severity: d, test: Qe },
|
|
1063
|
+
{ name: "hasImpossibleDeviceMemory", severity: d, test: qe },
|
|
1064
|
+
{ name: "hasHighCPUCount", severity: d, test: Ke },
|
|
1065
|
+
{ name: "hasMissingChromeObject", severity: d, test: Je },
|
|
1066
|
+
{ name: "hasWebdriverIframe", severity: d, test: Ye },
|
|
1067
|
+
{ name: "hasWebdriverWorker", severity: d, test: Ze },
|
|
1068
|
+
{ name: "hasMismatchWebGLInWorker", severity: d, test: Xe },
|
|
1069
|
+
{ name: "hasMismatchPlatformIframe", severity: d, test: tt },
|
|
1070
|
+
{ name: "hasMismatchPlatformWorker", severity: d, test: et },
|
|
1056
1071
|
{ name: "hasSwiftshaderRenderer", severity: b, test: nt },
|
|
1057
1072
|
{ name: "hasUTCTimezone", severity: oe, test: it },
|
|
1058
1073
|
{ name: "hasMismatchLanguages", severity: b, test: at },
|
|
1059
|
-
{ name: "hasInconsistentEtsl", severity:
|
|
1060
|
-
{ name: "hasBotUserAgent", severity:
|
|
1061
|
-
{ name: "hasGPUMismatch", severity:
|
|
1062
|
-
{ name: "hasPlatformMismatch", severity:
|
|
1074
|
+
{ name: "hasInconsistentEtsl", severity: d, test: ot },
|
|
1075
|
+
{ name: "hasBotUserAgent", severity: d, test: st },
|
|
1076
|
+
{ name: "hasGPUMismatch", severity: d, test: ct },
|
|
1077
|
+
{ name: "hasPlatformMismatch", severity: d, test: lt }
|
|
1063
1078
|
];
|
|
1064
1079
|
}
|
|
1065
1080
|
runDetectionRules() {
|
|
@@ -1086,17 +1101,17 @@ class ht {
|
|
|
1086
1101
|
hasGPUMismatch: { detected: !1, severity: "high" },
|
|
1087
1102
|
hasPlatformMismatch: { detected: !1, severity: "high" }
|
|
1088
1103
|
};
|
|
1089
|
-
for (const
|
|
1104
|
+
for (const i of e)
|
|
1090
1105
|
try {
|
|
1091
|
-
const
|
|
1092
|
-
n[
|
|
1106
|
+
const a = i.test(this.fingerprint);
|
|
1107
|
+
n[i.name] = { detected: a, severity: i.severity };
|
|
1093
1108
|
} catch {
|
|
1094
|
-
n[
|
|
1109
|
+
n[i.name] = { detected: !1, severity: i.severity };
|
|
1095
1110
|
}
|
|
1096
1111
|
return n;
|
|
1097
1112
|
}
|
|
1098
1113
|
async collectFingerprint(e = { encrypt: !0 }) {
|
|
1099
|
-
const { encrypt: n = !0, skipWorker:
|
|
1114
|
+
const { encrypt: n = !0, skipWorker: i = !1 } = e, a = this.fingerprint.signals, g = {
|
|
1100
1115
|
// Automation signals
|
|
1101
1116
|
webdriver: this.collectSignal(ne),
|
|
1102
1117
|
webdriverWritable: this.collectSignal(be),
|
|
@@ -1131,7 +1146,7 @@ class ht {
|
|
|
1131
1146
|
languages: this.collectSignal(ve),
|
|
1132
1147
|
// Context signals
|
|
1133
1148
|
iframe: this.collectSignal(ke),
|
|
1134
|
-
webWorker:
|
|
1149
|
+
webWorker: i ? Promise.resolve({
|
|
1135
1150
|
webdriver: f,
|
|
1136
1151
|
userAgent: f,
|
|
1137
1152
|
platform: f,
|
|
@@ -1145,8 +1160,8 @@ class ht {
|
|
|
1145
1160
|
nonce: this.collectSignal(He),
|
|
1146
1161
|
time: this.collectSignal(Ue),
|
|
1147
1162
|
url: this.collectSignal(Ve)
|
|
1148
|
-
},
|
|
1149
|
-
return
|
|
1163
|
+
}, m = Object.keys(g), w = await Promise.all(Object.values(g)), o = Object.fromEntries(m.map((v, y) => [v, w[y]]));
|
|
1164
|
+
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;
|
|
1150
1165
|
}
|
|
1151
1166
|
}
|
|
1152
1167
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframe.d.ts","sourceRoot":"","sources":["../../src/signals/iframe.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM;;;;;;;
|
|
1
|
+
{"version":3,"file":"iframe.d.ts","sourceRoot":"","sources":["../../src/signals/iframe.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM;;;;;;;EAuCrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/signals/worker.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/signals/worker.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,qBAiG3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fpscanner",
|
|
3
|
-
"version": "0.9.5-beta.
|
|
3
|
+
"version": "0.9.5-beta.1",
|
|
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",
|
|
@@ -29,7 +29,9 @@
|
|
|
29
29
|
"test:vitest": "vitest",
|
|
30
30
|
"test:playwright": "npm run build:obfuscate && npx playwright test",
|
|
31
31
|
"test:playwright:headed": "npm run build:obfuscate && npx playwright test --headed",
|
|
32
|
-
"prepublishOnly": "node scripts/verify-publish.js"
|
|
32
|
+
"prepublishOnly": "node scripts/verify-publish.js",
|
|
33
|
+
"publish:beta": "node scripts/safe-publish.js beta",
|
|
34
|
+
"publish:stable": "node scripts/safe-publish.js stable"
|
|
33
35
|
},
|
|
34
36
|
"repository": {
|
|
35
37
|
"type": "git",
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { execSync } = require('child_process');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
|
|
7
|
+
const publishType = process.argv[2]; // 'beta' or 'stable'
|
|
8
|
+
|
|
9
|
+
if (!publishType || !['beta', 'stable'].includes(publishType)) {
|
|
10
|
+
console.error('โ Usage: npm run publish:beta or npm run publish:stable');
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const ROOT_DIR = path.resolve(__dirname, '..');
|
|
15
|
+
const DIST_DIR = path.join(ROOT_DIR, 'dist');
|
|
16
|
+
|
|
17
|
+
function run(command, description) {
|
|
18
|
+
console.log(`\n๐ ${description}...`);
|
|
19
|
+
try {
|
|
20
|
+
execSync(command, { cwd: ROOT_DIR, stdio: 'inherit' });
|
|
21
|
+
console.log(`โ
${description} - Done`);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.error(`โ ${description} - Failed`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function checkGitStatus() {
|
|
29
|
+
console.log('\n๐ Checking git status...');
|
|
30
|
+
try {
|
|
31
|
+
const status = execSync('git status --porcelain', { cwd: ROOT_DIR, encoding: 'utf8' });
|
|
32
|
+
if (status.trim()) {
|
|
33
|
+
console.error('โ Git working directory is not clean. Please commit or stash changes first.');
|
|
34
|
+
console.error('\nUncommitted changes:');
|
|
35
|
+
console.error(status);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
console.log('โ
Git working directory is clean');
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error('โ Failed to check git status');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function getPackageVersion() {
|
|
46
|
+
const packageJson = require(path.join(ROOT_DIR, 'package.json'));
|
|
47
|
+
return packageJson.version;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
console.log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
|
|
51
|
+
console.log(`๐ Safe Publish Script - ${publishType.toUpperCase()}`);
|
|
52
|
+
console.log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
|
|
53
|
+
|
|
54
|
+
// Step 0: Check git status
|
|
55
|
+
checkGitStatus();
|
|
56
|
+
|
|
57
|
+
// Step 1: Clean dist directory
|
|
58
|
+
console.log('\n๐งน Cleaning dist directory...');
|
|
59
|
+
if (fs.existsSync(DIST_DIR)) {
|
|
60
|
+
fs.rmSync(DIST_DIR, { recursive: true, force: true });
|
|
61
|
+
console.log('โ
Dist directory cleaned');
|
|
62
|
+
} else {
|
|
63
|
+
console.log('โ
Dist directory already clean');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Step 2: Build package with sentinel key (no key injection)
|
|
67
|
+
run('npm run build', 'Building package with sentinel key');
|
|
68
|
+
|
|
69
|
+
// Step 3: Verify build
|
|
70
|
+
run('node scripts/verify-publish.js', 'Verifying build integrity');
|
|
71
|
+
|
|
72
|
+
// Step 4: Get version and confirm
|
|
73
|
+
const version = getPackageVersion();
|
|
74
|
+
console.log(`\n๐ฆ Package version: ${version}`);
|
|
75
|
+
|
|
76
|
+
if (publishType === 'beta' && !version.includes('beta')) {
|
|
77
|
+
console.error(`โ Version ${version} is not a beta version. Use publish:stable instead.`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (publishType === 'stable' && version.includes('beta')) {
|
|
82
|
+
console.error(`โ Version ${version} is a beta version. Use publish:beta instead.`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Step 5: Publish
|
|
87
|
+
const publishTag = publishType === 'beta' ? '--tag beta' : '';
|
|
88
|
+
run(`npm publish ${publishTag}`, `Publishing to npm with ${publishType} tag`);
|
|
89
|
+
|
|
90
|
+
// Step 6: Create git tag
|
|
91
|
+
const gitTag = `v${version}`;
|
|
92
|
+
console.log(`\n๐ท๏ธ Creating git tag: ${gitTag}...`);
|
|
93
|
+
try {
|
|
94
|
+
execSync(`git tag ${gitTag}`, { cwd: ROOT_DIR, stdio: 'inherit' });
|
|
95
|
+
console.log(`โ
Git tag created: ${gitTag}`);
|
|
96
|
+
|
|
97
|
+
console.log('\n๐ก Don\'t forget to push the tag:');
|
|
98
|
+
console.log(` git push origin ${gitTag}`);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.log(`โ ๏ธ Git tag might already exist: ${gitTag}`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
console.log('\nโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
|
|
104
|
+
console.log('โ
PUBLISH SUCCESSFUL!');
|
|
105
|
+
console.log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
|
|
106
|
+
console.log(`\n๐ฆ Published: fpscanner@${version}`);
|
|
107
|
+
console.log(`๐ท๏ธ Tag: ${publishType}`);
|
|
108
|
+
console.log('\n๐ Next steps:');
|
|
109
|
+
console.log(` 1. Push git tag: git push origin ${gitTag}`);
|
|
110
|
+
console.log(` 2. Test installation: npm install fpscanner@${publishType}`);
|
|
111
|
+
console.log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n');
|
package/src/signals/iframe.ts
CHANGED
|
@@ -10,11 +10,13 @@ export function iframe() {
|
|
|
10
10
|
language: INIT,
|
|
11
11
|
};
|
|
12
12
|
const iframe = document.createElement('iframe');
|
|
13
|
+
let iframeAdded = false;
|
|
13
14
|
|
|
14
15
|
try {
|
|
15
16
|
iframe.style.display = 'none';
|
|
16
17
|
iframe.src = 'about:blank';
|
|
17
18
|
document.body.appendChild(iframe);
|
|
19
|
+
iframeAdded = true;
|
|
18
20
|
|
|
19
21
|
const iframeWindowNavigator = (iframe.contentWindow?.navigator as any);
|
|
20
22
|
|
|
@@ -27,7 +29,13 @@ export function iframe() {
|
|
|
27
29
|
} catch (e) {
|
|
28
30
|
setObjectValues(iframeData, ERROR);
|
|
29
31
|
} finally {
|
|
30
|
-
|
|
32
|
+
if (iframeAdded) {
|
|
33
|
+
try {
|
|
34
|
+
document.body.removeChild(iframe);
|
|
35
|
+
} catch (_) {
|
|
36
|
+
// Ignore removal errors
|
|
37
|
+
}
|
|
38
|
+
}
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
return iframeData;
|
package/src/signals/worker.ts
CHANGED
|
@@ -12,6 +12,16 @@ export async function worker() {
|
|
|
12
12
|
cpuCount: INIT,
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
+
let worker: Worker | null = null;
|
|
16
|
+
let workerUrl: string | null = null;
|
|
17
|
+
let timeoutId: number | null = null;
|
|
18
|
+
|
|
19
|
+
const cleanup = () => {
|
|
20
|
+
if (timeoutId) clearTimeout(timeoutId);
|
|
21
|
+
if (worker) worker.terminate();
|
|
22
|
+
if (workerUrl) URL.revokeObjectURL(workerUrl);
|
|
23
|
+
};
|
|
24
|
+
|
|
15
25
|
try {
|
|
16
26
|
const workerCode = `try {
|
|
17
27
|
var fingerprintWorker = {};
|
|
@@ -47,8 +57,15 @@ export async function worker() {
|
|
|
47
57
|
|
|
48
58
|
|
|
49
59
|
const blob = new Blob([workerCode], { type: 'application/javascript' });
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
workerUrl = URL.createObjectURL(blob);
|
|
61
|
+
worker = new Worker(workerUrl);
|
|
62
|
+
|
|
63
|
+
// Set timeout to prevent infinite hang
|
|
64
|
+
timeoutId = window.setTimeout(() => {
|
|
65
|
+
cleanup();
|
|
66
|
+
setObjectValues(workerData, ERROR);
|
|
67
|
+
resolve(workerData);
|
|
68
|
+
}, 2000);
|
|
52
69
|
|
|
53
70
|
worker.onmessage = function (e) {
|
|
54
71
|
try {
|
|
@@ -59,17 +76,23 @@ export async function worker() {
|
|
|
59
76
|
workerData.platform = e.data.platform;
|
|
60
77
|
workerData.memory = e.data.memory;
|
|
61
78
|
workerData.cpuCount = e.data.cpuCount;
|
|
62
|
-
|
|
63
|
-
return resolve(workerData);
|
|
64
79
|
} catch (_) {
|
|
65
80
|
setObjectValues(workerData, ERROR);
|
|
66
|
-
|
|
81
|
+
} finally {
|
|
82
|
+
cleanup();
|
|
83
|
+
resolve(workerData);
|
|
67
84
|
}
|
|
68
|
-
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
worker.onerror = function () {
|
|
88
|
+
cleanup();
|
|
89
|
+
setObjectValues(workerData, ERROR);
|
|
90
|
+
resolve(workerData);
|
|
91
|
+
};
|
|
69
92
|
} catch (e) {
|
|
93
|
+
cleanup();
|
|
70
94
|
setObjectValues(workerData, ERROR);
|
|
71
|
-
|
|
72
|
-
return resolve(workerData);
|
|
95
|
+
resolve(workerData);
|
|
73
96
|
}
|
|
74
97
|
|
|
75
98
|
});
|