PageSourceSearch

https://public.imyfone.com/assets/js/connection_ember_system/fingerprint.js

js imyfone.com collected 2026-09-24 09:19:55 UTC 6,322 bytes, 45 lines download raw bytes

1(function(window){FingerprintPlugin=function(){const checkMatchMedia=(e)=>{return matchMedia('(prefers-reduced-motion: '.concat(e,')')).matches}
2const reducedMotion=()=>{return checkMatchMedia('reduce')||!checkMatchMedia('no-preference')}
3const reducedTransparency=()=>{return checkMatchMedia('prefers-reduced-transparency: reduce')||!checkMatchMedia('prefers-reduced-transparency: no-preference')&&undefined}
4const hdr=()=>{return checkMatchMedia('dynamic-range: high')||!checkMatchMedia('dynamic-range: standard')&&undefined}
5const invertedColors=()=>{return checkMatchMedia('inverted-colors: inverted')||!checkMatchMedia('inverted-colors: none')&&undefined}
6const forcedColors=()=>{return checkMatchMedia('forced-colors: active')||!checkMatchMedia('forced-colors: none')&&undefined}
7const colorGamut=()=>{const gamutArr=['rec2020','p3','srgb']
8for(const item of gamutArr){if(checkMatchMedia(`color-gamut: ${item}`)){return item}}}
9const checkContrast=(e)=>{return matchMedia('(prefers-contrast: '.concat(e,')')).matches}
10const contrast=()=>{return checkContrast('no-preference')?0:checkContrast('high')||checkContrast('more')?1:checkContrast('low')||checkContrast('less')?-1:checkContrast('forced')?10:undefined}
11const monochrome=()=>{if(checkMatchMedia('min-monochrome: 0')){for(let i=0;i<=100;++i){if(checkMatchMedia(`max-monochrome: ${i}`)){return i}}
12throw new Error('Too high value')}}
13const vendor=()=>{return navigator.vendor||''}
14const pdfViewerEnabled=()=>{return navigator.pdfViewerEnabled}
15const architecture=()=>{const e=new Float32Array(1)
16const n=new Uint8Array(e.buffer)
17return e[0]=1/0,e[0]=e[0]-e[0],n[3]}
18const cookiesEnabled=()=>{try{document.cookie='cookietest=1; SameSite=Strict;'
19const value=document.cookie.indexOf('cookietest=')!==-1
20return document.cookie='cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT',value}catch{return!1}}
21const vendorFlavors=()=>{const resultArr=[]
22const flavorsArr=['chrome','safari','__crWeb','__gCrWeb','yandex','__yb','__ybro','__firefox__','__edgeTrackingPreventionStatistics','webkit','oprt','samsungAr','ucweb','UCShellJava','puffinDevice']
23for(const value of flavorsArr){const flavorsValue=window[value]
24if(flavorsValue&&typeof flavorsValue==='object'){resultArr.push(value)}}
25return resultArr.sort()}
26const getCanvasFingerprint=()=>{const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=2000;canvas.height=200;ctx.textBaseline="top";ctx.font="14px 'Arial'";ctx.textBaseline="alphabetic";ctx.fillStyle="#f60";ctx.fillRect(125,1,62,20);ctx.fillStyle="#069";ctx.fillText("Hello, world!",2,15);ctx.fillStyle="rgba(102, 204, 0, 0.7)";ctx.fillText("Hello, world!",4,17);return canvas.toDataURL()};const getWebGLFingerprint=()=>{const canvas=document.createElement('canvas');const gl=canvas.getContext('webgl')||canvas.getContext('experimental-webgl');if(!gl){return'not supported'}
27const debugInfo=gl.getExtension('WEBGL_debug_renderer_info');const vendor=gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);const renderer=gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);return `webgl vendor: ${vendor}; renderer: ${renderer}`}
28function getAudioFingerprint(){return new Promise(resolve=>{const context=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,44100,44100);const oscillator=context.createOscillator();oscillator.type='triangle';oscillator.frequency.setValueAtTime(10000,context.currentTime);const compressor=context.createDynamicsCompressor();oscillator.connect(compressor);compressor.connect(context.destination);oscillator.start(0);context.startRendering();context.oncomplete=event=>{const output=event.renderedBuffer.getChannelData(0);let hash=0;for(let i=0;i<output.length;i++){hash+=Math.abs(output[i])}
29resolve(hash)}})}
30function getFontsFingerprint(){const baseFonts=['monospace','sans-serif','serif'];const testString="mmmmmmmmmmlli";const testSize='72px';const h=document.getElementsByTagName('body')[0];const container=document.createElement('span');container.style.fontSize=testSize;container.innerHTML=testString;document.body.appendChild(container);const defaultWidths={};
30baseFonts.forEach(font=>{container.style.fontFamily=font;defaultWidths[font]=container.offsetWidth});const checkFont=font=>{let matched=!1;baseFonts.forEach(baseFont=>{container.style.fontFamily=`${font},${baseFont}`;matched=container.offsetWidth!==defaultWidths[baseFont]||matched});return matched};const fonts=['Arial','Arial Black','Comic Sans MS','Courier New'];const results=fonts.map(font=>({font,detected:checkFont(font)}));document.body.removeChild(container);return results.filter(result=>result.detected).map(result=>result.font).join(', ')}
31async function generateFingerprint(){const canvasFingerprint=getCanvasFingerprint();const webGLFingerprint=getWebGLFingerprint();const audioFingerprint=await getAudioFingerprint();const fontsFingerprint=getFontsFingerprint();return `${canvasFingerprint}|${webGLFingerprint}|${audioFingerprint}|${fontsFingerprint}`}
32return{createFingerprint:function(){return new Promise(async function(resolve,reject){const extraArr=[]
33extraArr.push(reducedMotion(),reducedTransparency(),hdr(),invertedColors(),forcedColors(),colorGamut())
34extraArr.push(vendor(),pdfViewerEnabled(),architecture(),contrast(),cookiesEnabled(),monochrome(),vendorFlavors(),await generateFingerprint())
35const options={preprocessor:null,audio:{timeout:1e3,excludeIOS11:!0},fonts:{swfContainerId:'fingerprintjs2',swfPath:'flash/compiled/FontList.swf',userDefinedFonts:[],extendedJsFonts:!1},screen:{detectScreenOrientation:!0},plugins:{sortPluginsFor:[/palemoon/i],excludeIE:!1},extraComponents:[],excludes:{timezoneOffset:!0,hasLiedLanguages:!0,hasLiedResolution:!0,hasLiedBrowser:!0,doNotTrack:!0,fontsFlash:!0,adBlock:!0,pixelRatio:!0,enumerateDevices:!0,userAgent:!0},NOT_AVAILABLE:'not available',ERROR:'error',EXCLUDED:'excluded'}
36let murmur
37setTimeout(()=>{Fingerprint2.get(options,(components)=>{const values=components.map((component)=>component.value)
38values.push(...extraArr)
39murmur=Fingerprint2.x64hash128(values.join(''),31)
40if(murmur){murmur=murmur.replaceAll('"','')
41murmur=murmur.replaceAll('\'','')}else{const date=new Date
42const time=date.getTime()
43murmur=`${time}${time}111111`}
44resolve(murmur)})},2000)})}}}
45window.FingerprintPlugin=FingerprintPlugin()})(window)

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.