fpscanner 1.0.6 → 1.0.7
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 +1 -1
- package/dist/fpScanner.es.js +56 -53
- package/dist/signals/ai.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/signals/ai.ts +7 -2
package/dist/fpScanner.cjs.js
CHANGED
|
@@ -45,4 +45,4 @@
|
|
|
45
45
|
self.postMessage(fingerprintWorker);
|
|
46
46
|
} catch (e) {
|
|
47
47
|
self.postMessage(fingerprintWorker);
|
|
48
|
-
}`,y=new Blob([p],{type:"application/javascript"});i=URL.createObjectURL(y),n=new Worker(i),a=window.setTimeout(()=>{g(),d(e,l),t(e)},2e3),n.onmessage=function(o){try{const m=w=>typeof w>"u"?s:w;e.vendor=m(o.data.vendor),e.renderer=m(o.data.renderer),e.userAgent=m(o.data.userAgent),e.language=m(o.data.language),e.platform=m(o.data.platform),e.memory=m(o.data.memory),e.cpuCount=m(o.data.cpuCount)}catch{d(e,l)}finally{g(),t(e)}},n.onerror=function(){g(),d(e,l),t(e)}}catch{g(),d(e,l),t(e)}})}function Re(){const t={toSourceError:r,hasToSource:!1};try{null.usdfsh}catch(e){t.toSourceError=e.toString()}try{throw"xyz"}catch(e){try{e.toSource(),t.hasToSource=!0}catch{t.hasToSource=!1}}return t}const C=['audio/mp4; codecs="mp4a.40.2"',"audio/mpeg;",'audio/webm; codecs="vorbis"','audio/ogg; codecs="vorbis"','audio/wav; codecs="1"','audio/ogg; codecs="speex"','audio/ogg; codecs="flac"','audio/3gpp; codecs="samr"'],A=['video/mp4; codecs="avc1.42E01E, mp4a.40.2"','video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="avc1.58A01E"','video/mp4; codecs="avc1.4D401E"','video/mp4; codecs="avc1.64001E"','video/mp4; codecs="mp4v.20.8"','video/mp4; codecs="mp4v.20.240"','video/webm; codecs="vp8"','video/ogg; codecs="theora"','video/ogg; codecs="dirac"','video/3gpp; codecs="mp4v.20.8"','video/x-matroska; codecs="theora"'];function P(t,e){const n={};try{const i=document.createElement(e);for(const a of t)try{n[a]=i.canPlayType(a)||null}catch{n[a]=null}}catch{for(const i of t)n[i]=null}return n}function M(t){const e={},n=window.MediaSource;if(!n||typeof n.isTypeSupported!="function"){for(const i of t)e[i]=null;return e}for(const i of t)try{e[i]=n.isTypeSupported(i)}catch{e[i]=null}return e}function k(t){try{const e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){const n=e.getCapabilities(t);return f(JSON.stringify(n))}return s}catch{return l}}function Ie(){const t={audioCanPlayTypeHash:s,videoCanPlayTypeHash:s,audioMediaSourceHash:s,videoMediaSourceHash:s,rtcAudioCapabilitiesHash:s,rtcVideoCapabilitiesHash:s,hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;const e=P(C,"audio"),n=P(A,"video");t.audioCanPlayTypeHash=f(JSON.stringify(e)),t.videoCanPlayTypeHash=f(JSON.stringify(n));const i=M(C),a=M(A);t.audioMediaSourceHash=f(JSON.stringify(i)),t.videoMediaSourceHash=f(JSON.stringify(a)),t.rtcAudioCapabilitiesHash=k("audio"),t.rtcVideoCapabilitiesHash=k("video")}catch{d(t,l)}return t}async function Le(){return new Promise(t=>{try{const e=new Image,n=document.createElement("canvas").getContext("2d");e.onload=()=>{n.drawImage(e,0,0),t(n.getImageData(0,0,1,1).data.filter(i=>i===0).length!=4)},e.onerror=()=>{t(l)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(l)}})}function Te(){var t=document.createElement("canvas");t.width=400,t.height=200,t.style.display="inline";var e=t.getContext("2d");try{return e.rect(0,0,10,10),e.rect(2,2,6,6),e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.font="11pt no-real-font-123",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",4,45),e.globalCompositeOperation="multiply",e.fillStyle="rgb(255,0,255)",e.beginPath(),e.arc(50,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(0,255,255)",e.beginPath(),e.arc(100,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,255,0)",e.beginPath(),e.arc(75,100,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,0,255)",e.arc(75,75,75,0,2*Math.PI,!0),e.arc(75,75,25,0,2*Math.PI,!0),e.fill("evenodd"),f(t.toDataURL())}catch{return l}}async function Oe(){const t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await Le(),t.canvasFingerprint=Te(),t}function He(){const t=["deviceMemory","hardwareConcurrency","language","languages","platform"],e=[];for(const n of t){const i=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator),n);i&&i.value?e.push("1"):e.push("0")}return e.join("")}function ze(){return Math.random().toString(36).substring(2,15)}function Ue(){return new Date().getTime()}function Ne(){return window.location.href}function x(t,e){const n=t.signals;return e==="iframe"?n.contexts.iframe.webdriver!==n.automation.webdriver||n.contexts.iframe.userAgent!==n.browser.userAgent||n.contexts.iframe.platform!==n.device.platform||n.contexts.iframe.memory!==n.device.memory||n.contexts.iframe.cpuCount!==n.device.cpuCount:n.contexts.webWorker.webdriver!==n.automation.webdriver||n.contexts.webWorker.userAgent!==n.browser.userAgent||n.contexts.webWorker.platform!==n.device.platform||n.contexts.webWorker.memory!==n.device.memory||n.contexts.webWorker.cpuCount!==n.device.cpuCount}function Fe(){const t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),n=typeof window.ethereum<"u",i=document.getElementById("coupon-birds-drop-div")!==null,a=document.querySelector("deepl-input-controller")!==null,g=document.getElementById("monica-content-root")!==null,p=document.querySelector("chatgpt-sidebar")!==null,y=typeof window.__REQUESTLY__<"u",o=Array.from(document.querySelectorAll("*")).filter(m=>m.tagName.toLowerCase().startsWith("veepn-")).length>0;return t.bitmask=[e?"1":"0",n?"1":"0",i?"1":"0",a?"1":"0",g?"1":"0",p?"1":"0",y?"1":"0",o?"1":"0"].join(""),e&&t.extensions.push("grammarly"),n&&t.extensions.push("metamask"),i&&t.extensions.push("coupon-birds"),a&&t.extensions.push("deepl"),g&&t.extensions.push("monica-ai"),p&&t.extensions.push("sider-ai"),y&&t.extensions.push("requestly"),o&&t.extensions.push("veepn"),t}function c(t){try{return t()}catch{return!1}}function Ge(){const t={bitmask:r,chrome:c(()=>"chrome"in window),brave:c(()=>"brave"in navigator),applePaySupport:c(()=>"ApplePaySetup"in window),opera:c(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:c(()=>window.navigator.serial!==void 0),attachShadow:c(()=>!!Element.prototype.attachShadow),caches:c(()=>!!window.caches),webAssembly:c(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:c(()=>"Buffer"in window),showModalDialog:c(()=>"showModalDialog"in window),safari:c(()=>"safari"in window),webkitPrefixedFunction:c(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:c(()=>"mozGetUserMedia"in navigator),usb:c(()=>typeof window.USB=="function"),browserCapture:c(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:c(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:c(()=>typeof window.PressureObserver=="function"),audioSession:c(()=>"audioSession"in navigator),selectAudioOutput:c(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:c(()=>"BarcodeDetector"in window),battery:c(()=>"getBattery"in navigator),devicePosture:c(()=>"DevicePosture"in window),documentPictureInPicture:c(()=>"documentPictureInPicture"in window),eyeDropper:c(()=>"EyeDropper"in window),editContext:c(()=>"EditContext"in window),fencedFrame:c(()=>"FencedFrameConfig"in window),sanitizer:c(()=>"Sanitizer"in window),otpCredential:c(()=>"OTPCredential"in window),sumPrecise:c(()=>"sumPrecise"in Math)},e=Object.keys(t).filter(n=>n!=="bitmask").map(n=>t[n]?"1":"0").join("");return t.bitmask=e,t}function Ve(){const t={prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r};try{window.matchMedia("(prefers-color-scheme: dark)").matches?t.prefersColorScheme="dark":window.matchMedia("(prefers-color-scheme: light)").matches?t.prefersColorScheme="light":t.prefersColorScheme=null,t.prefersReducedMotion=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t.prefersReducedTransparency=window.matchMedia("(prefers-reduced-transparency: reduce)").matches,window.matchMedia("(color-gamut: rec2020)").matches?t.colorGamut="rec2020":window.matchMedia("(color-gamut: p3)").matches?t.colorGamut="p3":window.matchMedia("(color-gamut: srgb)").matches?t.colorGamut="srgb":t.colorGamut=null,window.matchMedia("(pointer: fine)").matches?t.pointer="fine":window.matchMedia("(pointer: coarse)").matches?t.pointer="coarse":window.matchMedia("(pointer: none)").matches?t.pointer="none":t.pointer=null,window.matchMedia("(any-pointer: fine)").matches?t.anyPointer="fine":window.matchMedia("(any-pointer: coarse)").matches?t.anyPointer="coarse":window.matchMedia("(any-pointer: none)").matches?t.anyPointer="none":t.anyPointer=null,t.hover=window.matchMedia("(hover: hover)").matches,t.anyHover=window.matchMedia("(any-hover: hover)").matches;let e=0;for(let n=0;n<=16;n++)window.matchMedia(`(color: ${n})`).matches&&(e=n);t.colorDepth=e}catch{d(t,l)}return t}async function je(){const t={layout:r,layoutSize:r};if("keyboard"in navigator&&typeof navigator.keyboard.getLayoutMap<"u")try{const e=await navigator.keyboard.getLayoutMap();t.layout=Array.from(e.entries()).map(([n,i])=>`${n},${i}`).join(" "),t.layoutSize=e.size}catch{d(t,l)}else d(t,s);return t}async function Be(){const t={summarizerAvailability:r,summarizerLanguageAvailability:r};if("Summarizer"in window)try{t.summarizerAvailability=await window.Summarizer.availability(),t.summarizerLanguageAvailability=await window.Summarizer.availability({expectedInputLanguages:[navigator.language]})}catch{d(t,l)}else d(t,s);return t}function $e(t){const e=t.signals.device.screenResolution;return e.width===800&&e.height===600||e.availableWidth===800&&e.availableHeight===600||e.innerWidth===800&&e.innerHeight===600}function Qe(t){return t.signals.automation.webdriver===!0}function qe(t){return!!t.signals.automation.selenium}function Ke(t){return t.signals.automation.cdp===!0}function Je(t){return t.signals.automation.playwright===!0}function Ye(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function Ze(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function Xe(t){return t.includes("Android")||t.includes("iPhone")||t.includes("iPod")||t.includes("iPad")}function et(t){const e=t.signals.browser.userAgent;return typeof e!="string"||!e.includes("Chrome")||Xe(e)?!1:t.signals.browser.features.chrome===!1}function tt(t){return t.signals.contexts.iframe.webdriver===!0}function rt(t){return t.signals.contexts.webWorker.webdriver===!0}function b(t){return typeof t!="string"||t.length===0?!0:t===s||t===l||t===v||t===r}function nt(t){const e=t.signals.contexts.webWorker,n=t.signals.graphics.webGL;return b(n.vendor)||b(n.renderer)||b(e.vendor)||b(e.renderer)?!1:e.vendor!==n.vendor||e.renderer!==n.renderer}function it(t,e){const n=t.includes("iPad"),i=e.includes("iPad");if(n===i)return!1;const a=g=>g==="MacIntel"||g==="MacPPC";return a(t)||a(e)}function at(t){if(t.signals.contexts.webWorker.platform===s||t.signals.contexts.webWorker.platform===l||t.signals.contexts.webWorker.platform===v)return!1;const e=t.signals.device.platform,n=t.signals.contexts.webWorker.platform;return!(e===n||it(e,n))}function ot(t){return t.signals.contexts.iframe.platform===s||t.signals.contexts.iframe.platform===l?!1:t.signals.device.platform!==t.signals.contexts.iframe.platform}function st(t){return t.signals.automation.webdriverWritable===!0}function ct(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function lt(t){return t.signals.locale.internationalization.timezone==="UTC"}function ut(t){const e=t.signals.locale.languages.languages,n=t.signals.locale.languages.language;return n&&e&&Array.isArray(e)&&e.length>0?e[0]!==n:!1}function dt(t){return!!(t.signals.browser.features.chrome&&t.signals.browser.etsl!==33||t.signals.browser.features.safari&&t.signals.browser.etsl!==37||t.signals.browser.userAgent.includes("Firefox")&&t.signals.browser.etsl!==37)}function gt(t){return[t.signals.browser.userAgent,t.signals.contexts.iframe.userAgent,t.signals.contexts.webWorker.userAgent].some(n=>/bot|headless/i.test(n.toLowerCase()))}function ht(t){const e=t.signals.graphics.webgpu,n=t.signals.graphics.webGL,i=t.signals.browser.userAgent;return!!((n.vendor.includes("Apple")||n.renderer.includes("Apple"))&&!i.includes("Mac")||e.vendor.includes("apple")&&!i.includes("Mac")||e.vendor.includes("apple")&&!n.renderer.includes("Apple"))}function mt(t){const e=t.signals.device.platform,n=t.signals.browser.userAgent,i=t.signals.browser.highEntropyValues.platform;return!!(n.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||n.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||n.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))||i!==l&&i!==s&&(i.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||i.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||i.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))))}async function pt(t,e){const n=new TextEncoder().encode(e),i=new TextEncoder().encode(t),a=new Uint8Array(i.length);for(let p=0;p<i.length;p++)a[p]=i[p]^n[p%n.length];const g=String.fromCharCode(...a);return btoa(g)}class ft{constructor(){this.fingerprint={signals:{automation:{webdriver:r,webdriverWritable:r,selenium:r,cdp:r,playwright:r,navigatorPropertyDescriptors:r},device:{cpuCount:r,memory:r,platform:r,screenResolution:{width:r,height:r,pixelDepth:r,colorDepth:r,availableWidth:r,availableHeight:r,innerWidth:r,innerHeight:r,hasMultipleDisplays:r},multimediaDevices:{speakers:r,microphones:r,webcams:r},mediaQueries:{prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r},keyboard:{layout:r,layoutSize:r}},browser:{userAgent:r,features:{bitmask:r,chrome:r,brave:r,applePaySupport:r,opera:r,serial:r,attachShadow:r,caches:r,webAssembly:r,buffer:r,showModalDialog:r,safari:r,webkitPrefixedFunction:r,mozPrefixedFunction:r,usb:r,browserCapture:r,paymentRequestUpdateEvent:r,pressureObserver:r,audioSession:r,selectAudioOutput:r,barcodeDetector:r,battery:r,devicePosture:r,documentPictureInPicture:r,eyeDropper:r,editContext:r,fencedFrame:r,sanitizer:r,otpCredential:r},plugins:{isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r},extensions:{bitmask:r,extensions:r},highEntropyValues:{architecture:r,bitness:r,brands:r,mobile:r,model:r,platform:r,platformVersion:r,uaFullVersion:r},etsl:r,maths:r,toSourceError:{toSourceError:r,hasToSource:r},ai:{summarizerAvailability:r,summarizerLanguageAvailability:r}},graphics:{webGL:{vendor:r,renderer:r},webgpu:{vendor:r,architecture:r,device:r,description:r},canvas:{hasModifiedCanvas:r,canvasFingerprint:r}},codecs:{audioCanPlayTypeHash:r,videoCanPlayTypeHash:r,audioMediaSourceHash:r,videoMediaSourceHash:r,rtcAudioCapabilitiesHash:r,rtcVideoCapabilitiesHash:r,hasMediaSource:r},locale:{internationalization:{timezone:r,localeLanguage:r},languages:{languages:r,language:r}},contexts:{iframe:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r},webWorker:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r,vendor:r,renderer:r}}},fsid:r,nonce:r,time:r,url:r,fastBotDetection:!1,fastBotDetectionDetails:{headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}}}}async collectSignal(e){try{return await e()}catch{return l}}generateFingerprintScannerId(){try{const e=this.fingerprint.signals,n=this.fingerprint.fastBotDetectionDetails,i="FS1",g=[n.headlessChromeScreenResolution.detected,n.hasWebdriver.detected,n.hasWebdriverWritable.detected,n.hasSeleniumProperty.detected,n.hasCDP.detected,n.hasPlaywright.detected,n.hasImpossibleDeviceMemory.detected,n.hasHighCPUCount.detected,n.hasMissingChromeObject.detected,n.hasWebdriverIframe.detected,n.hasWebdriverWorker.detected,n.hasMismatchWebGLInWorker.detected,n.hasMismatchPlatformIframe.detected,n.hasMismatchPlatformWorker.detected,n.hasSwiftshaderRenderer.detected,n.hasUTCTimezone.detected,n.hasMismatchLanguages.detected,n.hasInconsistentEtsl.detected,n.hasBotUserAgent.detected,n.hasGPUMismatch.detected,n.hasPlatformMismatch.detected].map(u=>u?"1":"0").join(""),p=[e.automation.webdriver===!0,e.automation.webdriverWritable===!0,e.automation.selenium===!0,e.automation.cdp===!0,e.automation.playwright===!0].map(u=>u?"1":"0").join(""),y=f(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),o=`${p}h${y}`,m=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,w=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,W=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",E=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",D=[e.device.screenResolution.hasMultipleDisplays===!0,e.device.mediaQueries.prefersReducedMotion===!0,e.device.mediaQueries.prefersReducedTransparency===!0,e.device.mediaQueries.hover===!0,e.device.mediaQueries.anyHover===!0].map(u=>u?"1":"0").join(""),_=[e.device.platform,e.device.screenResolution.pixelDepth,e.device.screenResolution.colorDepth,e.device.multimediaDevices.speakers,e.device.multimediaDevices.microphones,e.device.multimediaDevices.webcams,e.device.mediaQueries.prefersColorScheme,e.device.mediaQueries.colorGamut,e.device.mediaQueries.pointer,e.device.mediaQueries.anyPointer,e.device.mediaQueries.colorDepth,e.device.keyboard.layout,e.device.keyboard.layoutSize].map(u=>String(u)).join("|"),R=f(_).slice(0,6),I=`${m}x${w}c${W}m${E}b${D}h${R}`,L=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0".repeat(29),T=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"0".repeat(8),O=[e.browser.plugins.isValidPluginArray===!0,e.browser.plugins.pluginConsistency1===!0,e.browser.plugins.pluginOverflow===!0,e.browser.toSourceError.hasToSource===!0].map(u=>u?"1":"0").join(""),H=[e.browser.userAgent,e.browser.etsl,e.browser.maths,e.browser.plugins.pluginCount,e.browser.plugins.pluginNamesHash,e.browser.toSourceError.toSourceError,e.browser.highEntropyValues.architecture,e.browser.highEntropyValues.bitness,e.browser.highEntropyValues.platform,e.browser.highEntropyValues.platformVersion,e.browser.highEntropyValues.uaFullVersion,e.browser.highEntropyValues.mobile,e.browser.ai.summarizerAvailability,e.browser.ai.summarizerLanguageAvailability].map(u=>String(u)).join("|"),z=f(H).slice(0,6),U=`f${L}e${T}p${O}h${z}`,N=[e.graphics.canvas.hasModifiedCanvas===!0].map(u=>u?"1":"0").join(""),F=[e.graphics.webGL.vendor,e.graphics.webGL.renderer,e.graphics.webgpu.vendor,e.graphics.webgpu.architecture,e.graphics.webgpu.device,e.graphics.webgpu.description,e.graphics.canvas.canvasFingerprint].map(u=>String(u)).join("|"),G=f(F).slice(0,6),V=`${N}h${G}`,j=[e.codecs.hasMediaSource===!0].map(u=>u?"1":"0").join(""),B=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(u=>String(u)).join("|"),$=f(B).slice(0,6),Q=`${j}h${$}`,q=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",K=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,J=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),Y=[e.locale.internationalization.timezone,e.locale.internationalization.localeLanguage,Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.join(","):e.locale.languages.languages,e.locale.languages.language].map(u=>String(u)).join("|"),Z=f(Y).slice(0,4),X=`${q}${K}t${J}_h${Z}`,ee=[x(this.fingerprint,"iframe"),x(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(u=>u?"1":"0").join(""),te=[e.contexts.iframe.userAgent,e.contexts.iframe.platform,e.contexts.iframe.memory,e.contexts.iframe.cpuCount,e.contexts.iframe.language,e.contexts.webWorker.userAgent,e.contexts.webWorker.platform,e.contexts.webWorker.memory,e.contexts.webWorker.cpuCount,e.contexts.webWorker.language,e.contexts.webWorker.vendor,e.contexts.webWorker.renderer].map(u=>String(u)).join("|"),re=f(te).slice(0,6),ne=`${ee}h${re}`;return[i,g,o,I,U,V,Q,X,ne].join("_")}catch(e){return console.error("Error generating fingerprint scanner id",e),l}}async encryptFingerprint(e){const n="__DEFAULT_FPSCANNER_KEY__";return n.length>20&&n.indexOf("DEFAULT")>0&&n.indexOf("FPSCANNER")>0&&console.warn('[fpscanner] WARNING: Using default encryption key! Run "npx fpscanner build --key=your-secret-key" to inject your own key. See: https://github.com/antoinevastel/fpscanner#advanced-custom-builds'),await pt(JSON.stringify(e),n)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:h,test:$e},{name:"hasWebdriver",severity:h,test:Qe},{name:"hasWebdriverWritable",severity:h,test:st},{name:"hasSeleniumProperty",severity:h,test:qe},{name:"hasCDP",severity:h,test:Ke},{name:"hasPlaywright",severity:h,test:Je},{name:"hasImpossibleDeviceMemory",severity:h,test:Ye},{name:"hasHighCPUCount",severity:h,test:Ze},{name:"hasMissingChromeObject",severity:h,test:et},{name:"hasWebdriverIframe",severity:h,test:tt},{name:"hasWebdriverWorker",severity:h,test:rt},{name:"hasMismatchWebGLInWorker",severity:h,test:nt},{name:"hasMismatchPlatformIframe",severity:h,test:ot},{name:"hasMismatchPlatformWorker",severity:h,test:at},{name:"hasSwiftshaderRenderer",severity:S,test:ct},{name:"hasUTCTimezone",severity:se,test:lt},{name:"hasMismatchLanguages",severity:S,test:ut},{name:"hasInconsistentEtsl",severity:h,test:dt},{name:"hasBotUserAgent",severity:h,test:gt},{name:"hasGPUMismatch",severity:h,test:ht},{name:"hasPlatformMismatch",severity:h,test:mt}]}runDetectionRules(){const e=this.getDetectionRules(),n={headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}};for(const i of e)try{const a=i.test(this.fingerprint);n[i.name]={detected:a,severity:i.severity}}catch{n[i.name]={detected:!1,severity:i.severity}}return n}async collectFingerprint(e={encrypt:!0}){const{encrypt:n=!0,skipWorker:i=!1}=e,a=this.fingerprint.signals,g={webdriver:this.collectSignal(ie),webdriverWritable:this.collectSignal(Se),selenium:this.collectSignal(be),cdp:this.collectSignal(le),playwright:this.collectSignal(de),navigatorPropertyDescriptors:this.collectSignal(He),cpuCount:this.collectSignal(ge),memory:this.collectSignal(me),platform:this.collectSignal(oe),screenResolution:this.collectSignal(ve),multimediaDevices:this.collectSignal(Ee),mediaQueries:this.collectSignal(Ve),keyboard:this.collectSignal(je),userAgent:this.collectSignal(ae),browserFeatures:this.collectSignal(Ge),plugins:this.collectSignal(We),browserExtensions:this.collectSignal(Fe),highEntropyValues:this.collectSignal(Ce),etsl:this.collectSignal(pe),maths:this.collectSignal(he),toSourceError:this.collectSignal(Re),ai:this.collectSignal(Be),webGL:this.collectSignal(ue),webgpu:this.collectSignal(we),canvas:this.collectSignal(Oe),mediaCodecs:this.collectSignal(Ie),internationalization:this.collectSignal(fe),languages:this.collectSignal(ye),iframe:this.collectSignal(De),webWorker:i?Promise.resolve({webdriver:v,userAgent:v,platform:v,memory:v,cpuCount:v,language:v,vendor:v,renderer:v}):this.collectSignal(_e),nonce:this.collectSignal(ze),time:this.collectSignal(Ue),url:this.collectSignal(Ne)},p=Object.keys(g),y=await Promise.all(Object.values(g)),o=Object.fromEntries(p.map((m,w)=>[m,y[w]]));return a.automation.webdriver=o.webdriver,a.automation.webdriverWritable=o.webdriverWritable,a.automation.selenium=o.selenium,a.automation.cdp=o.cdp,a.automation.playwright=o.playwright,a.automation.navigatorPropertyDescriptors=o.navigatorPropertyDescriptors,a.device.cpuCount=o.cpuCount,a.device.memory=o.memory,a.device.platform=o.platform,a.device.screenResolution=o.screenResolution,a.device.multimediaDevices=o.multimediaDevices,a.device.mediaQueries=o.mediaQueries,a.device.keyboard=o.keyboard,a.browser.userAgent=o.userAgent,a.browser.features=o.browserFeatures,a.browser.plugins=o.plugins,a.browser.extensions=o.browserExtensions,a.browser.highEntropyValues=o.highEntropyValues,a.browser.etsl=o.etsl,a.browser.maths=o.maths,a.browser.toSourceError=o.toSourceError,a.browser.ai=o.ai,a.graphics.webGL=o.webGL,a.graphics.webgpu=o.webgpu,a.graphics.canvas=o.canvas,a.codecs=o.mediaCodecs,a.locale.internationalization=o.internationalization,a.locale.languages=o.languages,a.contexts.iframe=o.iframe,a.contexts.webWorker=o.webWorker,this.fingerprint.nonce=o.nonce,this.fingerprint.time=o.time,this.fingerprint.url=o.url,this.fingerprint.fastBotDetectionDetails=this.runDetectionRules(),this.fingerprint.fastBotDetection=Object.values(this.fingerprint.fastBotDetectionDetails).some(m=>m.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),n?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}}exports.default=ft;
|
|
48
|
+
}`,y=new Blob([p],{type:"application/javascript"});i=URL.createObjectURL(y),n=new Worker(i),a=window.setTimeout(()=>{g(),d(e,l),t(e)},2e3),n.onmessage=function(o){try{const m=w=>typeof w>"u"?s:w;e.vendor=m(o.data.vendor),e.renderer=m(o.data.renderer),e.userAgent=m(o.data.userAgent),e.language=m(o.data.language),e.platform=m(o.data.platform),e.memory=m(o.data.memory),e.cpuCount=m(o.data.cpuCount)}catch{d(e,l)}finally{g(),t(e)}},n.onerror=function(){g(),d(e,l),t(e)}}catch{g(),d(e,l),t(e)}})}function Re(){const t={toSourceError:r,hasToSource:!1};try{null.usdfsh}catch(e){t.toSourceError=e.toString()}try{throw"xyz"}catch(e){try{e.toSource(),t.hasToSource=!0}catch{t.hasToSource=!1}}return t}const C=['audio/mp4; codecs="mp4a.40.2"',"audio/mpeg;",'audio/webm; codecs="vorbis"','audio/ogg; codecs="vorbis"','audio/wav; codecs="1"','audio/ogg; codecs="speex"','audio/ogg; codecs="flac"','audio/3gpp; codecs="samr"'],A=['video/mp4; codecs="avc1.42E01E, mp4a.40.2"','video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="avc1.58A01E"','video/mp4; codecs="avc1.4D401E"','video/mp4; codecs="avc1.64001E"','video/mp4; codecs="mp4v.20.8"','video/mp4; codecs="mp4v.20.240"','video/webm; codecs="vp8"','video/ogg; codecs="theora"','video/ogg; codecs="dirac"','video/3gpp; codecs="mp4v.20.8"','video/x-matroska; codecs="theora"'];function P(t,e){const n={};try{const i=document.createElement(e);for(const a of t)try{n[a]=i.canPlayType(a)||null}catch{n[a]=null}}catch{for(const i of t)n[i]=null}return n}function M(t){const e={},n=window.MediaSource;if(!n||typeof n.isTypeSupported!="function"){for(const i of t)e[i]=null;return e}for(const i of t)try{e[i]=n.isTypeSupported(i)}catch{e[i]=null}return e}function k(t){try{const e=window.RTCRtpReceiver;if(e&&typeof e.getCapabilities=="function"){const n=e.getCapabilities(t);return f(JSON.stringify(n))}return s}catch{return l}}function Ie(){const t={audioCanPlayTypeHash:s,videoCanPlayTypeHash:s,audioMediaSourceHash:s,videoMediaSourceHash:s,rtcAudioCapabilitiesHash:s,rtcVideoCapabilitiesHash:s,hasMediaSource:!1};try{t.hasMediaSource=!!window.MediaSource;const e=P(C,"audio"),n=P(A,"video");t.audioCanPlayTypeHash=f(JSON.stringify(e)),t.videoCanPlayTypeHash=f(JSON.stringify(n));const i=M(C),a=M(A);t.audioMediaSourceHash=f(JSON.stringify(i)),t.videoMediaSourceHash=f(JSON.stringify(a)),t.rtcAudioCapabilitiesHash=k("audio"),t.rtcVideoCapabilitiesHash=k("video")}catch{d(t,l)}return t}async function Le(){return new Promise(t=>{try{const e=new Image,n=document.createElement("canvas").getContext("2d");e.onload=()=>{n.drawImage(e,0,0),t(n.getImageData(0,0,1,1).data.filter(i=>i===0).length!=4)},e.onerror=()=>{t(l)},e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}catch{t(l)}})}function Te(){var t=document.createElement("canvas");t.width=400,t.height=200,t.style.display="inline";var e=t.getContext("2d");try{return e.rect(0,0,10,10),e.rect(2,2,6,6),e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.font="11pt no-real-font-123",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText("Cwm fjordbank glyphs vext quiz, 😃",4,45),e.globalCompositeOperation="multiply",e.fillStyle="rgb(255,0,255)",e.beginPath(),e.arc(50,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(0,255,255)",e.beginPath(),e.arc(100,50,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,255,0)",e.beginPath(),e.arc(75,100,50,0,2*Math.PI,!0),e.closePath(),e.fill(),e.fillStyle="rgb(255,0,255)",e.arc(75,75,75,0,2*Math.PI,!0),e.arc(75,75,25,0,2*Math.PI,!0),e.fill("evenodd"),f(t.toDataURL())}catch{return l}}async function Oe(){const t={hasModifiedCanvas:r,canvasFingerprint:r};return t.hasModifiedCanvas=await Le(),t.canvasFingerprint=Te(),t}function He(){const t=["deviceMemory","hardwareConcurrency","language","languages","platform"],e=[];for(const n of t){const i=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(navigator),n);i&&i.value?e.push("1"):e.push("0")}return e.join("")}function ze(){return Math.random().toString(36).substring(2,15)}function Ue(){return new Date().getTime()}function Ne(){return window.location.href}function x(t,e){const n=t.signals;return e==="iframe"?n.contexts.iframe.webdriver!==n.automation.webdriver||n.contexts.iframe.userAgent!==n.browser.userAgent||n.contexts.iframe.platform!==n.device.platform||n.contexts.iframe.memory!==n.device.memory||n.contexts.iframe.cpuCount!==n.device.cpuCount:n.contexts.webWorker.webdriver!==n.automation.webdriver||n.contexts.webWorker.userAgent!==n.browser.userAgent||n.contexts.webWorker.platform!==n.device.platform||n.contexts.webWorker.memory!==n.device.memory||n.contexts.webWorker.cpuCount!==n.device.cpuCount}function Fe(){const t={bitmask:r,extensions:[]},e=document.body.hasAttribute("data-gr-ext-installed"),n=typeof window.ethereum<"u",i=document.getElementById("coupon-birds-drop-div")!==null,a=document.querySelector("deepl-input-controller")!==null,g=document.getElementById("monica-content-root")!==null,p=document.querySelector("chatgpt-sidebar")!==null,y=typeof window.__REQUESTLY__<"u",o=Array.from(document.querySelectorAll("*")).filter(m=>m.tagName.toLowerCase().startsWith("veepn-")).length>0;return t.bitmask=[e?"1":"0",n?"1":"0",i?"1":"0",a?"1":"0",g?"1":"0",p?"1":"0",y?"1":"0",o?"1":"0"].join(""),e&&t.extensions.push("grammarly"),n&&t.extensions.push("metamask"),i&&t.extensions.push("coupon-birds"),a&&t.extensions.push("deepl"),g&&t.extensions.push("monica-ai"),p&&t.extensions.push("sider-ai"),y&&t.extensions.push("requestly"),o&&t.extensions.push("veepn"),t}function c(t){try{return t()}catch{return!1}}function Ge(){const t={bitmask:r,chrome:c(()=>"chrome"in window),brave:c(()=>"brave"in navigator),applePaySupport:c(()=>"ApplePaySetup"in window),opera:c(()=>typeof window.opr<"u"||typeof window.onoperadetachedviewchange=="object"),serial:c(()=>window.navigator.serial!==void 0),attachShadow:c(()=>!!Element.prototype.attachShadow),caches:c(()=>!!window.caches),webAssembly:c(()=>!!window.WebAssembly&&!!window.WebAssembly.instantiate),buffer:c(()=>"Buffer"in window),showModalDialog:c(()=>"showModalDialog"in window),safari:c(()=>"safari"in window),webkitPrefixedFunction:c(()=>"webkitCancelAnimationFrame"in window),mozPrefixedFunction:c(()=>"mozGetUserMedia"in navigator),usb:c(()=>typeof window.USB=="function"),browserCapture:c(()=>typeof window.BrowserCaptureMediaStreamTrack=="function"),paymentRequestUpdateEvent:c(()=>typeof window.PaymentRequestUpdateEvent=="function"),pressureObserver:c(()=>typeof window.PressureObserver=="function"),audioSession:c(()=>"audioSession"in navigator),selectAudioOutput:c(()=>typeof navigator<"u"&&typeof navigator.mediaDevices<"u"&&typeof navigator.mediaDevices.selectAudioOutput=="function"),barcodeDetector:c(()=>"BarcodeDetector"in window),battery:c(()=>"getBattery"in navigator),devicePosture:c(()=>"DevicePosture"in window),documentPictureInPicture:c(()=>"documentPictureInPicture"in window),eyeDropper:c(()=>"EyeDropper"in window),editContext:c(()=>"EditContext"in window),fencedFrame:c(()=>"FencedFrameConfig"in window),sanitizer:c(()=>"Sanitizer"in window),otpCredential:c(()=>"OTPCredential"in window),sumPrecise:c(()=>"sumPrecise"in Math)},e=Object.keys(t).filter(n=>n!=="bitmask").map(n=>t[n]?"1":"0").join("");return t.bitmask=e,t}function Ve(){const t={prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r};try{window.matchMedia("(prefers-color-scheme: dark)").matches?t.prefersColorScheme="dark":window.matchMedia("(prefers-color-scheme: light)").matches?t.prefersColorScheme="light":t.prefersColorScheme=null,t.prefersReducedMotion=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t.prefersReducedTransparency=window.matchMedia("(prefers-reduced-transparency: reduce)").matches,window.matchMedia("(color-gamut: rec2020)").matches?t.colorGamut="rec2020":window.matchMedia("(color-gamut: p3)").matches?t.colorGamut="p3":window.matchMedia("(color-gamut: srgb)").matches?t.colorGamut="srgb":t.colorGamut=null,window.matchMedia("(pointer: fine)").matches?t.pointer="fine":window.matchMedia("(pointer: coarse)").matches?t.pointer="coarse":window.matchMedia("(pointer: none)").matches?t.pointer="none":t.pointer=null,window.matchMedia("(any-pointer: fine)").matches?t.anyPointer="fine":window.matchMedia("(any-pointer: coarse)").matches?t.anyPointer="coarse":window.matchMedia("(any-pointer: none)").matches?t.anyPointer="none":t.anyPointer=null,t.hover=window.matchMedia("(hover: hover)").matches,t.anyHover=window.matchMedia("(any-hover: hover)").matches;let e=0;for(let n=0;n<=16;n++)window.matchMedia(`(color: ${n})`).matches&&(e=n);t.colorDepth=e}catch{d(t,l)}return t}async function je(){const t={layout:r,layoutSize:r};if("keyboard"in navigator&&typeof navigator.keyboard.getLayoutMap<"u")try{const e=await navigator.keyboard.getLayoutMap();t.layout=Array.from(e.entries()).map(([n,i])=>`${n},${i}`).join(" "),t.layoutSize=e.size}catch{d(t,l)}else d(t,s);return t}function Be(){return typeof window.opr<"u"}async function $e(){const t={summarizerAvailability:r,summarizerLanguageAvailability:r};if("Summarizer"in window&&!Be())try{t.summarizerAvailability=await window.Summarizer.availability(),t.summarizerLanguageAvailability=await window.Summarizer.availability({expectedInputLanguages:[navigator.language]})}catch{d(t,l)}else d(t,s);return t}function Qe(t){const e=t.signals.device.screenResolution;return e.width===800&&e.height===600||e.availableWidth===800&&e.availableHeight===600||e.innerWidth===800&&e.innerHeight===600}function qe(t){return t.signals.automation.webdriver===!0}function Ke(t){return!!t.signals.automation.selenium}function Je(t){return t.signals.automation.cdp===!0}function Ye(t){return t.signals.automation.playwright===!0}function Ze(t){return typeof t.signals.device.memory!="number"?!1:t.signals.device.memory>32||t.signals.device.memory<.25}function Xe(t){return typeof t.signals.device.cpuCount!="number"?!1:t.signals.device.cpuCount>70}function et(t){return t.includes("Android")||t.includes("iPhone")||t.includes("iPod")||t.includes("iPad")}function tt(t){const e=t.signals.browser.userAgent;return typeof e!="string"||!e.includes("Chrome")||et(e)?!1:t.signals.browser.features.chrome===!1}function rt(t){return t.signals.contexts.iframe.webdriver===!0}function nt(t){return t.signals.contexts.webWorker.webdriver===!0}function b(t){return typeof t!="string"||t.length===0?!0:t===s||t===l||t===v||t===r}function it(t){const e=t.signals.contexts.webWorker,n=t.signals.graphics.webGL;return b(n.vendor)||b(n.renderer)||b(e.vendor)||b(e.renderer)?!1:e.vendor!==n.vendor||e.renderer!==n.renderer}function at(t,e){const n=t.includes("iPad"),i=e.includes("iPad");if(n===i)return!1;const a=g=>g==="MacIntel"||g==="MacPPC";return a(t)||a(e)}function ot(t){if(t.signals.contexts.webWorker.platform===s||t.signals.contexts.webWorker.platform===l||t.signals.contexts.webWorker.platform===v)return!1;const e=t.signals.device.platform,n=t.signals.contexts.webWorker.platform;return!(e===n||at(e,n))}function st(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 ct(t){return t.signals.automation.webdriverWritable===!0}function lt(t){return t.signals.graphics.webGL.renderer.includes("SwiftShader")}function ut(t){return t.signals.locale.internationalization.timezone==="UTC"}function dt(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 gt(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 ht(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 mt(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 pt(t){const e=t.signals.device.platform,n=t.signals.browser.userAgent,i=t.signals.browser.highEntropyValues.platform;return!!(n.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||n.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||n.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))||i!==l&&i!==s&&(i.includes("Mac")&&(e.includes("Win")||e.includes("Linux"))||i.includes("Windows")&&(e.includes("Mac")||e.includes("Linux"))||i.includes("Linux")&&(e.includes("Mac")||e.includes("Win"))))}async function ft(t,e){const n=new TextEncoder().encode(e),i=new TextEncoder().encode(t),a=new Uint8Array(i.length);for(let p=0;p<i.length;p++)a[p]=i[p]^n[p%n.length];const g=String.fromCharCode(...a);return btoa(g)}class vt{constructor(){this.fingerprint={signals:{automation:{webdriver:r,webdriverWritable:r,selenium:r,cdp:r,playwright:r,navigatorPropertyDescriptors:r},device:{cpuCount:r,memory:r,platform:r,screenResolution:{width:r,height:r,pixelDepth:r,colorDepth:r,availableWidth:r,availableHeight:r,innerWidth:r,innerHeight:r,hasMultipleDisplays:r},multimediaDevices:{speakers:r,microphones:r,webcams:r},mediaQueries:{prefersColorScheme:r,prefersReducedMotion:r,prefersReducedTransparency:r,colorGamut:r,pointer:r,anyPointer:r,hover:r,anyHover:r,colorDepth:r},keyboard:{layout:r,layoutSize:r}},browser:{userAgent:r,features:{bitmask:r,chrome:r,brave:r,applePaySupport:r,opera:r,serial:r,attachShadow:r,caches:r,webAssembly:r,buffer:r,showModalDialog:r,safari:r,webkitPrefixedFunction:r,mozPrefixedFunction:r,usb:r,browserCapture:r,paymentRequestUpdateEvent:r,pressureObserver:r,audioSession:r,selectAudioOutput:r,barcodeDetector:r,battery:r,devicePosture:r,documentPictureInPicture:r,eyeDropper:r,editContext:r,fencedFrame:r,sanitizer:r,otpCredential:r},plugins:{isValidPluginArray:r,pluginCount:r,pluginNamesHash:r,pluginConsistency1:r,pluginOverflow:r},extensions:{bitmask:r,extensions:r},highEntropyValues:{architecture:r,bitness:r,brands:r,mobile:r,model:r,platform:r,platformVersion:r,uaFullVersion:r},etsl:r,maths:r,toSourceError:{toSourceError:r,hasToSource:r},ai:{summarizerAvailability:r,summarizerLanguageAvailability:r}},graphics:{webGL:{vendor:r,renderer:r},webgpu:{vendor:r,architecture:r,device:r,description:r},canvas:{hasModifiedCanvas:r,canvasFingerprint:r}},codecs:{audioCanPlayTypeHash:r,videoCanPlayTypeHash:r,audioMediaSourceHash:r,videoMediaSourceHash:r,rtcAudioCapabilitiesHash:r,rtcVideoCapabilitiesHash:r,hasMediaSource:r},locale:{internationalization:{timezone:r,localeLanguage:r},languages:{languages:r,language:r}},contexts:{iframe:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r},webWorker:{webdriver:r,userAgent:r,platform:r,memory:r,cpuCount:r,language:r,vendor:r,renderer:r}}},fsid:r,nonce:r,time:r,url:r,fastBotDetection:!1,fastBotDetectionDetails:{headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}}}}async collectSignal(e){try{return await e()}catch{return l}}generateFingerprintScannerId(){try{const e=this.fingerprint.signals,n=this.fingerprint.fastBotDetectionDetails,i="FS1",g=[n.headlessChromeScreenResolution.detected,n.hasWebdriver.detected,n.hasWebdriverWritable.detected,n.hasSeleniumProperty.detected,n.hasCDP.detected,n.hasPlaywright.detected,n.hasImpossibleDeviceMemory.detected,n.hasHighCPUCount.detected,n.hasMissingChromeObject.detected,n.hasWebdriverIframe.detected,n.hasWebdriverWorker.detected,n.hasMismatchWebGLInWorker.detected,n.hasMismatchPlatformIframe.detected,n.hasMismatchPlatformWorker.detected,n.hasSwiftshaderRenderer.detected,n.hasUTCTimezone.detected,n.hasMismatchLanguages.detected,n.hasInconsistentEtsl.detected,n.hasBotUserAgent.detected,n.hasGPUMismatch.detected,n.hasPlatformMismatch.detected].map(u=>u?"1":"0").join(""),p=[e.automation.webdriver===!0,e.automation.webdriverWritable===!0,e.automation.selenium===!0,e.automation.cdp===!0,e.automation.playwright===!0].map(u=>u?"1":"0").join(""),y=f(String(e.automation.navigatorPropertyDescriptors)).slice(0,4),o=`${p}h${y}`,m=typeof e.device.screenResolution.width=="number"?e.device.screenResolution.width:0,w=typeof e.device.screenResolution.height=="number"?e.device.screenResolution.height:0,W=typeof e.device.cpuCount=="number"?String(e.device.cpuCount).padStart(2,"0"):"00",E=typeof e.device.memory=="number"?String(Math.round(e.device.memory)).padStart(2,"0"):"00",D=[e.device.screenResolution.hasMultipleDisplays===!0,e.device.mediaQueries.prefersReducedMotion===!0,e.device.mediaQueries.prefersReducedTransparency===!0,e.device.mediaQueries.hover===!0,e.device.mediaQueries.anyHover===!0].map(u=>u?"1":"0").join(""),_=[e.device.platform,e.device.screenResolution.pixelDepth,e.device.screenResolution.colorDepth,e.device.multimediaDevices.speakers,e.device.multimediaDevices.microphones,e.device.multimediaDevices.webcams,e.device.mediaQueries.prefersColorScheme,e.device.mediaQueries.colorGamut,e.device.mediaQueries.pointer,e.device.mediaQueries.anyPointer,e.device.mediaQueries.colorDepth,e.device.keyboard.layout,e.device.keyboard.layoutSize].map(u=>String(u)).join("|"),R=f(_).slice(0,6),I=`${m}x${w}c${W}m${E}b${D}h${R}`,L=typeof e.browser.features.bitmask=="string"?e.browser.features.bitmask:"0".repeat(29),T=typeof e.browser.extensions.bitmask=="string"?e.browser.extensions.bitmask:"0".repeat(8),O=[e.browser.plugins.isValidPluginArray===!0,e.browser.plugins.pluginConsistency1===!0,e.browser.plugins.pluginOverflow===!0,e.browser.toSourceError.hasToSource===!0].map(u=>u?"1":"0").join(""),H=[e.browser.userAgent,e.browser.etsl,e.browser.maths,e.browser.plugins.pluginCount,e.browser.plugins.pluginNamesHash,e.browser.toSourceError.toSourceError,e.browser.highEntropyValues.architecture,e.browser.highEntropyValues.bitness,e.browser.highEntropyValues.platform,e.browser.highEntropyValues.platformVersion,e.browser.highEntropyValues.uaFullVersion,e.browser.highEntropyValues.mobile,e.browser.ai.summarizerAvailability,e.browser.ai.summarizerLanguageAvailability].map(u=>String(u)).join("|"),z=f(H).slice(0,6),U=`f${L}e${T}p${O}h${z}`,N=[e.graphics.canvas.hasModifiedCanvas===!0].map(u=>u?"1":"0").join(""),F=[e.graphics.webGL.vendor,e.graphics.webGL.renderer,e.graphics.webgpu.vendor,e.graphics.webgpu.architecture,e.graphics.webgpu.device,e.graphics.webgpu.description,e.graphics.canvas.canvasFingerprint].map(u=>String(u)).join("|"),G=f(F).slice(0,6),V=`${N}h${G}`,j=[e.codecs.hasMediaSource===!0].map(u=>u?"1":"0").join(""),B=[e.codecs.audioCanPlayTypeHash,e.codecs.videoCanPlayTypeHash,e.codecs.audioMediaSourceHash,e.codecs.videoMediaSourceHash,e.codecs.rtcAudioCapabilitiesHash,e.codecs.rtcVideoCapabilitiesHash].map(u=>String(u)).join("|"),$=f(B).slice(0,6),Q=`${j}h${$}`,q=typeof e.locale.languages.language=="string"?e.locale.languages.language.slice(0,2).toLowerCase():"xx",K=Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.length:0,J=(typeof e.locale.internationalization.timezone=="string"?e.locale.internationalization.timezone:"unknown").replace(/[\/\s]/g,"-"),Y=[e.locale.internationalization.timezone,e.locale.internationalization.localeLanguage,Array.isArray(e.locale.languages.languages)?e.locale.languages.languages.join(","):e.locale.languages.languages,e.locale.languages.language].map(u=>String(u)).join("|"),Z=f(Y).slice(0,4),X=`${q}${K}t${J}_h${Z}`,ee=[x(this.fingerprint,"iframe"),x(this.fingerprint,"worker"),e.contexts.iframe.webdriver===!0,e.contexts.webWorker.webdriver===!0].map(u=>u?"1":"0").join(""),te=[e.contexts.iframe.userAgent,e.contexts.iframe.platform,e.contexts.iframe.memory,e.contexts.iframe.cpuCount,e.contexts.iframe.language,e.contexts.webWorker.userAgent,e.contexts.webWorker.platform,e.contexts.webWorker.memory,e.contexts.webWorker.cpuCount,e.contexts.webWorker.language,e.contexts.webWorker.vendor,e.contexts.webWorker.renderer].map(u=>String(u)).join("|"),re=f(te).slice(0,6),ne=`${ee}h${re}`;return[i,g,o,I,U,V,Q,X,ne].join("_")}catch(e){return console.error("Error generating fingerprint scanner id",e),l}}async encryptFingerprint(e){const n="__DEFAULT_FPSCANNER_KEY__";return n.length>20&&n.indexOf("DEFAULT")>0&&n.indexOf("FPSCANNER")>0&&console.warn('[fpscanner] WARNING: Using default encryption key! Run "npx fpscanner build --key=your-secret-key" to inject your own key. See: https://github.com/antoinevastel/fpscanner#advanced-custom-builds'),await ft(JSON.stringify(e),n)}getDetectionRules(){return[{name:"headlessChromeScreenResolution",severity:h,test:Qe},{name:"hasWebdriver",severity:h,test:qe},{name:"hasWebdriverWritable",severity:h,test:ct},{name:"hasSeleniumProperty",severity:h,test:Ke},{name:"hasCDP",severity:h,test:Je},{name:"hasPlaywright",severity:h,test:Ye},{name:"hasImpossibleDeviceMemory",severity:h,test:Ze},{name:"hasHighCPUCount",severity:h,test:Xe},{name:"hasMissingChromeObject",severity:h,test:tt},{name:"hasWebdriverIframe",severity:h,test:rt},{name:"hasWebdriverWorker",severity:h,test:nt},{name:"hasMismatchWebGLInWorker",severity:h,test:it},{name:"hasMismatchPlatformIframe",severity:h,test:st},{name:"hasMismatchPlatformWorker",severity:h,test:ot},{name:"hasSwiftshaderRenderer",severity:S,test:lt},{name:"hasUTCTimezone",severity:se,test:ut},{name:"hasMismatchLanguages",severity:S,test:dt},{name:"hasInconsistentEtsl",severity:h,test:gt},{name:"hasBotUserAgent",severity:h,test:ht},{name:"hasGPUMismatch",severity:h,test:mt},{name:"hasPlatformMismatch",severity:h,test:pt}]}runDetectionRules(){const e=this.getDetectionRules(),n={headlessChromeScreenResolution:{detected:!1,severity:"high"},hasWebdriver:{detected:!1,severity:"high"},hasWebdriverWritable:{detected:!1,severity:"high"},hasSeleniumProperty:{detected:!1,severity:"high"},hasCDP:{detected:!1,severity:"high"},hasPlaywright:{detected:!1,severity:"high"},hasImpossibleDeviceMemory:{detected:!1,severity:"high"},hasHighCPUCount:{detected:!1,severity:"high"},hasMissingChromeObject:{detected:!1,severity:"high"},hasWebdriverIframe:{detected:!1,severity:"high"},hasWebdriverWorker:{detected:!1,severity:"high"},hasMismatchWebGLInWorker:{detected:!1,severity:"high"},hasMismatchPlatformIframe:{detected:!1,severity:"high"},hasMismatchPlatformWorker:{detected:!1,severity:"high"},hasSwiftshaderRenderer:{detected:!1,severity:"low"},hasUTCTimezone:{detected:!1,severity:"medium"},hasMismatchLanguages:{detected:!1,severity:"low"},hasInconsistentEtsl:{detected:!1,severity:"high"},hasBotUserAgent:{detected:!1,severity:"high"},hasGPUMismatch:{detected:!1,severity:"high"},hasPlatformMismatch:{detected:!1,severity:"high"}};for(const i of e)try{const a=i.test(this.fingerprint);n[i.name]={detected:a,severity:i.severity}}catch{n[i.name]={detected:!1,severity:i.severity}}return n}async collectFingerprint(e={encrypt:!0}){const{encrypt:n=!0,skipWorker:i=!1}=e,a=this.fingerprint.signals,g={webdriver:this.collectSignal(ie),webdriverWritable:this.collectSignal(Se),selenium:this.collectSignal(be),cdp:this.collectSignal(le),playwright:this.collectSignal(de),navigatorPropertyDescriptors:this.collectSignal(He),cpuCount:this.collectSignal(ge),memory:this.collectSignal(me),platform:this.collectSignal(oe),screenResolution:this.collectSignal(ve),multimediaDevices:this.collectSignal(Ee),mediaQueries:this.collectSignal(Ve),keyboard:this.collectSignal(je),userAgent:this.collectSignal(ae),browserFeatures:this.collectSignal(Ge),plugins:this.collectSignal(We),browserExtensions:this.collectSignal(Fe),highEntropyValues:this.collectSignal(Ce),etsl:this.collectSignal(pe),maths:this.collectSignal(he),toSourceError:this.collectSignal(Re),ai:this.collectSignal($e),webGL:this.collectSignal(ue),webgpu:this.collectSignal(we),canvas:this.collectSignal(Oe),mediaCodecs:this.collectSignal(Ie),internationalization:this.collectSignal(fe),languages:this.collectSignal(ye),iframe:this.collectSignal(De),webWorker:i?Promise.resolve({webdriver:v,userAgent:v,platform:v,memory:v,cpuCount:v,language:v,vendor:v,renderer:v}):this.collectSignal(_e),nonce:this.collectSignal(ze),time:this.collectSignal(Ue),url:this.collectSignal(Ne)},p=Object.keys(g),y=await Promise.all(Object.values(g)),o=Object.fromEntries(p.map((m,w)=>[m,y[w]]));return a.automation.webdriver=o.webdriver,a.automation.webdriverWritable=o.webdriverWritable,a.automation.selenium=o.selenium,a.automation.cdp=o.cdp,a.automation.playwright=o.playwright,a.automation.navigatorPropertyDescriptors=o.navigatorPropertyDescriptors,a.device.cpuCount=o.cpuCount,a.device.memory=o.memory,a.device.platform=o.platform,a.device.screenResolution=o.screenResolution,a.device.multimediaDevices=o.multimediaDevices,a.device.mediaQueries=o.mediaQueries,a.device.keyboard=o.keyboard,a.browser.userAgent=o.userAgent,a.browser.features=o.browserFeatures,a.browser.plugins=o.plugins,a.browser.extensions=o.browserExtensions,a.browser.highEntropyValues=o.highEntropyValues,a.browser.etsl=o.etsl,a.browser.maths=o.maths,a.browser.toSourceError=o.toSourceError,a.browser.ai=o.ai,a.graphics.webGL=o.webGL,a.graphics.webgpu=o.webgpu,a.graphics.canvas=o.canvas,a.codecs=o.mediaCodecs,a.locale.internationalization=o.internationalization,a.locale.languages=o.languages,a.contexts.iframe=o.iframe,a.contexts.webWorker=o.webWorker,this.fingerprint.nonce=o.nonce,this.fingerprint.time=o.time,this.fingerprint.url=o.url,this.fingerprint.fastBotDetectionDetails=this.runDetectionRules(),this.fingerprint.fastBotDetection=Object.values(this.fingerprint.fastBotDetectionDetails).some(m=>m.detected),this.fingerprint.fsid=this.generateFingerprintScannerId(),n?await this.encryptFingerprint(JSON.stringify(this.fingerprint)):this.fingerprint}}exports.default=vt;
|
package/dist/fpScanner.es.js
CHANGED
|
@@ -648,12 +648,15 @@ async function Be() {
|
|
|
648
648
|
d(t, s);
|
|
649
649
|
return t;
|
|
650
650
|
}
|
|
651
|
-
|
|
651
|
+
function je() {
|
|
652
|
+
return typeof window.opr < "u";
|
|
653
|
+
}
|
|
654
|
+
async function $e() {
|
|
652
655
|
const t = {
|
|
653
656
|
summarizerAvailability: r,
|
|
654
657
|
summarizerLanguageAvailability: r
|
|
655
658
|
};
|
|
656
|
-
if ("Summarizer" in window)
|
|
659
|
+
if ("Summarizer" in window && !je())
|
|
657
660
|
try {
|
|
658
661
|
t.summarizerAvailability = await window.Summarizer.availability(), t.summarizerLanguageAvailability = await window.Summarizer.availability({
|
|
659
662
|
expectedInputLanguages: [navigator.language]
|
|
@@ -665,103 +668,103 @@ async function je() {
|
|
|
665
668
|
d(t, s);
|
|
666
669
|
return t;
|
|
667
670
|
}
|
|
668
|
-
function
|
|
671
|
+
function Qe(t) {
|
|
669
672
|
const e = t.signals.device.screenResolution;
|
|
670
673
|
return e.width === 800 && e.height === 600 || e.availableWidth === 800 && e.availableHeight === 600 || e.innerWidth === 800 && e.innerHeight === 600;
|
|
671
674
|
}
|
|
672
|
-
function
|
|
675
|
+
function qe(t) {
|
|
673
676
|
return t.signals.automation.webdriver === !0;
|
|
674
677
|
}
|
|
675
|
-
function
|
|
678
|
+
function Ke(t) {
|
|
676
679
|
return !!t.signals.automation.selenium;
|
|
677
680
|
}
|
|
678
|
-
function
|
|
681
|
+
function Je(t) {
|
|
679
682
|
return t.signals.automation.cdp === !0;
|
|
680
683
|
}
|
|
681
|
-
function
|
|
684
|
+
function Ye(t) {
|
|
682
685
|
return t.signals.automation.playwright === !0;
|
|
683
686
|
}
|
|
684
|
-
function
|
|
687
|
+
function Ze(t) {
|
|
685
688
|
return typeof t.signals.device.memory != "number" ? !1 : t.signals.device.memory > 32 || t.signals.device.memory < 0.25;
|
|
686
689
|
}
|
|
687
|
-
function
|
|
690
|
+
function Xe(t) {
|
|
688
691
|
return typeof t.signals.device.cpuCount != "number" ? !1 : t.signals.device.cpuCount > 70;
|
|
689
692
|
}
|
|
690
|
-
function
|
|
693
|
+
function et(t) {
|
|
691
694
|
return t.includes("Android") || t.includes("iPhone") || t.includes("iPod") || t.includes("iPad");
|
|
692
695
|
}
|
|
693
|
-
function
|
|
696
|
+
function tt(t) {
|
|
694
697
|
const e = t.signals.browser.userAgent;
|
|
695
|
-
return typeof e != "string" || !e.includes("Chrome") ||
|
|
698
|
+
return typeof e != "string" || !e.includes("Chrome") || et(e) ? !1 : t.signals.browser.features.chrome === !1;
|
|
696
699
|
}
|
|
697
|
-
function
|
|
700
|
+
function rt(t) {
|
|
698
701
|
return t.signals.contexts.iframe.webdriver === !0;
|
|
699
702
|
}
|
|
700
|
-
function
|
|
703
|
+
function nt(t) {
|
|
701
704
|
return t.signals.contexts.webWorker.webdriver === !0;
|
|
702
705
|
}
|
|
703
706
|
function b(t) {
|
|
704
707
|
return typeof t != "string" || t.length === 0 ? !0 : t === s || t === l || t === v || t === r;
|
|
705
708
|
}
|
|
706
|
-
function
|
|
709
|
+
function it(t) {
|
|
707
710
|
const e = t.signals.contexts.webWorker, n = t.signals.graphics.webGL;
|
|
708
711
|
return b(n.vendor) || b(n.renderer) || b(e.vendor) || b(e.renderer) ? !1 : e.vendor !== n.vendor || e.renderer !== n.renderer;
|
|
709
712
|
}
|
|
710
|
-
function
|
|
713
|
+
function at(t, e) {
|
|
711
714
|
const n = t.includes("iPad"), i = e.includes("iPad");
|
|
712
715
|
if (n === i)
|
|
713
716
|
return !1;
|
|
714
717
|
const a = (g) => g === "MacIntel" || g === "MacPPC";
|
|
715
718
|
return a(t) || a(e);
|
|
716
719
|
}
|
|
717
|
-
function
|
|
720
|
+
function ot(t) {
|
|
718
721
|
if (t.signals.contexts.webWorker.platform === s || t.signals.contexts.webWorker.platform === l || t.signals.contexts.webWorker.platform === v)
|
|
719
722
|
return !1;
|
|
720
723
|
const e = t.signals.device.platform, n = t.signals.contexts.webWorker.platform;
|
|
721
|
-
return !(e === n ||
|
|
724
|
+
return !(e === n || at(e, n));
|
|
722
725
|
}
|
|
723
|
-
function
|
|
726
|
+
function st(t) {
|
|
724
727
|
return t.signals.contexts.iframe.platform === s || t.signals.contexts.iframe.platform === l ? !1 : t.signals.device.platform !== t.signals.contexts.iframe.platform;
|
|
725
728
|
}
|
|
726
|
-
function
|
|
729
|
+
function ct(t) {
|
|
727
730
|
return t.signals.automation.webdriverWritable === !0;
|
|
728
731
|
}
|
|
729
|
-
function
|
|
732
|
+
function lt(t) {
|
|
730
733
|
return t.signals.graphics.webGL.renderer.includes("SwiftShader");
|
|
731
734
|
}
|
|
732
|
-
function
|
|
735
|
+
function ut(t) {
|
|
733
736
|
return t.signals.locale.internationalization.timezone === "UTC";
|
|
734
737
|
}
|
|
735
|
-
function
|
|
738
|
+
function dt(t) {
|
|
736
739
|
const e = t.signals.locale.languages.languages, n = t.signals.locale.languages.language;
|
|
737
740
|
return n && e && Array.isArray(e) && e.length > 0 ? e[0] !== n : !1;
|
|
738
741
|
}
|
|
739
|
-
function
|
|
742
|
+
function gt(t) {
|
|
740
743
|
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);
|
|
741
744
|
}
|
|
742
|
-
function
|
|
745
|
+
function ht(t) {
|
|
743
746
|
return [
|
|
744
747
|
t.signals.browser.userAgent,
|
|
745
748
|
t.signals.contexts.iframe.userAgent,
|
|
746
749
|
t.signals.contexts.webWorker.userAgent
|
|
747
750
|
].some((n) => /bot|headless/i.test(n.toLowerCase()));
|
|
748
751
|
}
|
|
749
|
-
function
|
|
752
|
+
function mt(t) {
|
|
750
753
|
const e = t.signals.graphics.webgpu, n = t.signals.graphics.webGL, i = t.signals.browser.userAgent;
|
|
751
754
|
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"));
|
|
752
755
|
}
|
|
753
|
-
function
|
|
756
|
+
function pt(t) {
|
|
754
757
|
const e = t.signals.device.platform, n = t.signals.browser.userAgent, i = t.signals.browser.highEntropyValues.platform;
|
|
755
758
|
return !!(n.includes("Mac") && (e.includes("Win") || e.includes("Linux")) || n.includes("Windows") && (e.includes("Mac") || e.includes("Linux")) || n.includes("Linux") && (e.includes("Mac") || e.includes("Win")) || i !== l && i !== s && (i.includes("Mac") && (e.includes("Win") || e.includes("Linux")) || i.includes("Windows") && (e.includes("Mac") || e.includes("Linux")) || i.includes("Linux") && (e.includes("Mac") || e.includes("Win"))));
|
|
756
759
|
}
|
|
757
|
-
async function
|
|
760
|
+
async function ft(t, e) {
|
|
758
761
|
const n = new TextEncoder().encode(e), i = new TextEncoder().encode(t), a = new Uint8Array(i.length);
|
|
759
762
|
for (let p = 0; p < i.length; p++)
|
|
760
763
|
a[p] = i[p] ^ n[p % n.length];
|
|
761
764
|
const g = String.fromCharCode(...a);
|
|
762
765
|
return btoa(g);
|
|
763
766
|
}
|
|
764
|
-
class
|
|
767
|
+
class yt {
|
|
765
768
|
constructor() {
|
|
766
769
|
this.fingerprint = {
|
|
767
770
|
signals: {
|
|
@@ -1129,34 +1132,34 @@ class vt {
|
|
|
1129
1132
|
const n = "__DEFAULT_FPSCANNER_KEY__";
|
|
1130
1133
|
return n.length > 20 && n.indexOf("DEFAULT") > 0 && n.indexOf("FPSCANNER") > 0 && console.warn(
|
|
1131
1134
|
'[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'
|
|
1132
|
-
), await
|
|
1135
|
+
), await ft(JSON.stringify(e), n);
|
|
1133
1136
|
}
|
|
1134
1137
|
/**
|
|
1135
1138
|
* Detection rules with name and severity.
|
|
1136
1139
|
*/
|
|
1137
1140
|
getDetectionRules() {
|
|
1138
1141
|
return [
|
|
1139
|
-
{ name: "headlessChromeScreenResolution", severity: h, test:
|
|
1140
|
-
{ name: "hasWebdriver", severity: h, test:
|
|
1141
|
-
{ name: "hasWebdriverWritable", severity: h, test:
|
|
1142
|
-
{ name: "hasSeleniumProperty", severity: h, test:
|
|
1143
|
-
{ name: "hasCDP", severity: h, test:
|
|
1144
|
-
{ name: "hasPlaywright", severity: h, test:
|
|
1145
|
-
{ name: "hasImpossibleDeviceMemory", severity: h, test:
|
|
1146
|
-
{ name: "hasHighCPUCount", severity: h, test:
|
|
1147
|
-
{ name: "hasMissingChromeObject", severity: h, test:
|
|
1148
|
-
{ name: "hasWebdriverIframe", severity: h, test:
|
|
1149
|
-
{ name: "hasWebdriverWorker", severity: h, test:
|
|
1150
|
-
{ name: "hasMismatchWebGLInWorker", severity: h, test:
|
|
1151
|
-
{ name: "hasMismatchPlatformIframe", severity: h, test:
|
|
1152
|
-
{ name: "hasMismatchPlatformWorker", severity: h, test:
|
|
1153
|
-
{ name: "hasSwiftshaderRenderer", severity: S, test:
|
|
1154
|
-
{ name: "hasUTCTimezone", severity: se, test:
|
|
1155
|
-
{ name: "hasMismatchLanguages", severity: S, test:
|
|
1156
|
-
{ name: "hasInconsistentEtsl", severity: h, test:
|
|
1157
|
-
{ name: "hasBotUserAgent", severity: h, test:
|
|
1158
|
-
{ name: "hasGPUMismatch", severity: h, test:
|
|
1159
|
-
{ name: "hasPlatformMismatch", severity: h, test:
|
|
1142
|
+
{ name: "headlessChromeScreenResolution", severity: h, test: Qe },
|
|
1143
|
+
{ name: "hasWebdriver", severity: h, test: qe },
|
|
1144
|
+
{ name: "hasWebdriverWritable", severity: h, test: ct },
|
|
1145
|
+
{ name: "hasSeleniumProperty", severity: h, test: Ke },
|
|
1146
|
+
{ name: "hasCDP", severity: h, test: Je },
|
|
1147
|
+
{ name: "hasPlaywright", severity: h, test: Ye },
|
|
1148
|
+
{ name: "hasImpossibleDeviceMemory", severity: h, test: Ze },
|
|
1149
|
+
{ name: "hasHighCPUCount", severity: h, test: Xe },
|
|
1150
|
+
{ name: "hasMissingChromeObject", severity: h, test: tt },
|
|
1151
|
+
{ name: "hasWebdriverIframe", severity: h, test: rt },
|
|
1152
|
+
{ name: "hasWebdriverWorker", severity: h, test: nt },
|
|
1153
|
+
{ name: "hasMismatchWebGLInWorker", severity: h, test: it },
|
|
1154
|
+
{ name: "hasMismatchPlatformIframe", severity: h, test: st },
|
|
1155
|
+
{ name: "hasMismatchPlatformWorker", severity: h, test: ot },
|
|
1156
|
+
{ name: "hasSwiftshaderRenderer", severity: S, test: lt },
|
|
1157
|
+
{ name: "hasUTCTimezone", severity: se, test: ut },
|
|
1158
|
+
{ name: "hasMismatchLanguages", severity: S, test: dt },
|
|
1159
|
+
{ name: "hasInconsistentEtsl", severity: h, test: gt },
|
|
1160
|
+
{ name: "hasBotUserAgent", severity: h, test: ht },
|
|
1161
|
+
{ name: "hasGPUMismatch", severity: h, test: mt },
|
|
1162
|
+
{ name: "hasPlatformMismatch", severity: h, test: pt }
|
|
1160
1163
|
];
|
|
1161
1164
|
}
|
|
1162
1165
|
runDetectionRules() {
|
|
@@ -1218,7 +1221,7 @@ class vt {
|
|
|
1218
1221
|
etsl: this.collectSignal(pe),
|
|
1219
1222
|
maths: this.collectSignal(he),
|
|
1220
1223
|
toSourceError: this.collectSignal(Re),
|
|
1221
|
-
ai: this.collectSignal(
|
|
1224
|
+
ai: this.collectSignal($e),
|
|
1222
1225
|
// Graphics signals
|
|
1223
1226
|
webGL: this.collectSignal(ue),
|
|
1224
1227
|
webgpu: this.collectSignal(we),
|
|
@@ -1249,5 +1252,5 @@ class vt {
|
|
|
1249
1252
|
}
|
|
1250
1253
|
}
|
|
1251
1254
|
export {
|
|
1252
|
-
|
|
1255
|
+
yt as default
|
|
1253
1256
|
};
|
package/dist/signals/ai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/signals/ai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/signals/ai.ts"],"names":[],"mappings":"AASA,wBAAsB,EAAE;;;GAqBvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fpscanner",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
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",
|
|
@@ -65,15 +65,15 @@
|
|
|
65
65
|
"ua-parser-js": "^0.7.18"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@playwright/test": "^1.
|
|
68
|
+
"@playwright/test": "^1.60.0",
|
|
69
69
|
"@vitest/ui": "^4.0.16",
|
|
70
70
|
"chai": "^4.2.0",
|
|
71
|
-
"concurrently": "^
|
|
71
|
+
"concurrently": "^10.0.3",
|
|
72
72
|
"fpcollect": "^1.0.4",
|
|
73
73
|
"mocha": "^11.7.5",
|
|
74
74
|
"puppeteer": "^1.9.0",
|
|
75
75
|
"typescript": "^5.9.3",
|
|
76
|
-
"vite": "^
|
|
76
|
+
"vite": "^8.0.16",
|
|
77
77
|
"vitest": "^4.0.16"
|
|
78
78
|
}
|
|
79
79
|
}
|
package/src/signals/ai.ts
CHANGED
|
@@ -3,15 +3,20 @@ import { INIT, ERROR, setObjectValues, NA } from "./utils";
|
|
|
3
3
|
// We can add more feature checks in the future like https://developer.mozilla.org/en-US/docs/Web/API/Translator_and_Language_Detector_APIs
|
|
4
4
|
// However, they currently display a message in the console, so we will not use them for now.
|
|
5
5
|
|
|
6
|
+
function isOpera(): boolean {
|
|
7
|
+
return typeof (window as any).opr !== 'undefined';
|
|
8
|
+
}
|
|
9
|
+
|
|
6
10
|
export async function ai() {
|
|
7
11
|
const aiResults = {
|
|
8
12
|
summarizerAvailability: INIT,
|
|
9
13
|
summarizerLanguageAvailability: INIT,
|
|
10
14
|
};
|
|
11
15
|
|
|
12
|
-
|
|
16
|
+
// Opera exposes Summarizer but availability() never settles, hanging the entire collection.
|
|
17
|
+
if ('Summarizer' in window && !isOpera()) {
|
|
13
18
|
try {
|
|
14
|
-
|
|
19
|
+
aiResults.summarizerAvailability = await (window as any).Summarizer.availability();
|
|
15
20
|
aiResults.summarizerLanguageAvailability = await (window as any).Summarizer.availability({
|
|
16
21
|
expectedInputLanguages: [navigator.language],
|
|
17
22
|
});
|