@fingerprintiq/js 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/dist/index.cjs +28 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +406 -0
- package/dist/index.d.ts +406 -0
- package/dist/index.global.js +28 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FingerprintIQ
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# @fingerprintiq/js
|
|
2
|
+
|
|
3
|
+
Browser fingerprinting SDK with 99%+ accuracy. 41 client signals fused with server-side TLS/JA4 analysis.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @fingerprintiq/js
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import FingerprintIQ from '@fingerprintiq/js';
|
|
15
|
+
|
|
16
|
+
const fiq = new FingerprintIQ({ apiKey: 'fiq_live_...' });
|
|
17
|
+
const result = await fiq.identify();
|
|
18
|
+
|
|
19
|
+
console.log(result.visitorId); // "iq_01abc..."
|
|
20
|
+
console.log(result.confidence); // 0.97
|
|
21
|
+
console.log(result.botProbability); // 0.03
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Signals Collected
|
|
25
|
+
|
|
26
|
+
- Canvas 2D, WebGL, WebGPU
|
|
27
|
+
- AudioContext timing
|
|
28
|
+
- Font enumeration (650+ fonts)
|
|
29
|
+
- WASM CPU microarchitecture
|
|
30
|
+
- Navigator deep mining
|
|
31
|
+
- CSS media queries
|
|
32
|
+
- Screen & display
|
|
33
|
+
- Prototype lie detection
|
|
34
|
+
- Wallet extension detection (MetaMask, Phantom, etc.)
|
|
35
|
+
- Storage persistence
|
|
36
|
+
- WebRTC LAN IP
|
|
37
|
+
- And more...
|
|
38
|
+
|
|
39
|
+
Server-side signals (JA4 TLS, HTTP/2 settings, ASN classification, RTT coherence) are fused automatically.
|
|
40
|
+
|
|
41
|
+
## Configuration
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
const fiq = new FingerprintIQ({
|
|
45
|
+
apiKey: 'fiq_live_...', // Required
|
|
46
|
+
endpoint: 'https://...', // Custom endpoint (default: fingerprintiq.com)
|
|
47
|
+
timeout: 10000, // Timeout in ms (default: 10000)
|
|
48
|
+
detectWallets: true, // Detect crypto wallets (default: false)
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Response
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
interface IdentifyResponse {
|
|
56
|
+
visitorId: string;
|
|
57
|
+
confidence: number; // 0.0 - 1.0
|
|
58
|
+
botProbability: number; // 0.0 - 1.0
|
|
59
|
+
visitCount: number;
|
|
60
|
+
signals: {
|
|
61
|
+
client: { ... };
|
|
62
|
+
server: { ... };
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## License
|
|
68
|
+
|
|
69
|
+
MIT
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";var _=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var it=Object.prototype.hasOwnProperty;var st=(t,e)=>{for(var n in e)_(t,n,{get:e[n],enumerable:!0})},lt=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of at(e))!it.call(t,r)&&r!==n&&_(t,r,{get:()=>e[r],enumerable:!(o=rt(e,r))||o.enumerable});return t};var ct=t=>lt(_({},"__esModule",{value:!0}),t);var un={};st(un,{default:()=>P,getDiscoveredAddresses:()=>E,requestWalletConnection:()=>Be});module.exports=ct(un);async function p(t){let e=new TextEncoder().encode(t),n=await crypto.subtle.digest("SHA-256",e),o=new Uint8Array(n);return Array.from(o).map(r=>r.toString(16).padStart(2,"0")).join("")}function ut(t,e){let n=t.createLinearGradient(0,0,e.width,e.height);n.addColorStop(0,"#ff6b6b"),n.addColorStop(.5,"#4ecdc4"),n.addColorStop(1,"#45b7d1"),t.fillStyle=n,t.fillRect(0,0,e.width,e.height),t.fillStyle="#1a1a2e",t.font="18px Arial",t.textBaseline="top",t.fillText("FingerprintIQ \u{1F9E0} Cwm fjord veg balks nth pyx quiz",2,2),t.font="14px 'Times New Roman'",t.fillText("\xE9\xE8\xEA\xEB \xFC\xF9 \xE7\xE0 \u4E16\u754C \u0410\u0411\u0412",4,28),t.beginPath(),t.arc(80,80,30,0,Math.PI*2),t.fillStyle="rgba(255, 107, 107, 0.7)",t.fill(),t.closePath(),t.globalCompositeOperation="multiply",t.fillStyle="rgba(78, 205, 196, 0.5)",t.fillRect(50,50,100,60),t.globalCompositeOperation="source-over",t.font="12px sans-serif",t.fillStyle="#000",t.fillText("\u{1F600}\u{1F680}\u{1F308}\u{1F3B5}",180,80)}function dt(){try{let t=navigator.userAgent,e=t.match(/Version\/(\d+)\.\d+.*Safari/);if(e&&parseInt(e[1],10)>=17)return!0;let n=t.match(/Firefox\/(\d+)/);if(n&&parseInt(n[1],10)>=120)return!0}catch{}return!1}async function F(){let t=performance.now();try{if(dt())return null;let e=document.createElement("canvas");e.width=300,e.height=150;let n=e.getContext("2d");if(!n)return null;let o=[];for(let a=0;a<3;a++)n.clearRect(0,0,e.width,e.height),ut(n,e),o.push(e.toDataURL("image/png"));let r=o.some(a=>a!==o[0]);return{value:{hash:await p(o[0]),isFarbled:r},duration:performance.now()-t}}catch{return null}}var pt=["swiftshader","llvmpipe","softpipe","mesa"],mt=[3379,34921,36347,36348,36349];function gt(t){try{let e=t.createShader(t.VERTEX_SHADER),n=t.createShader(t.FRAGMENT_SHADER);if(!e||!n)return null;if(t.shaderSource(e,"void main(){gl_Position=vec4(0,0,0,1);}"),t.compileShader(e),!t.getShaderParameter(e,t.COMPILE_STATUS)||(t.shaderSource(n,"precision mediump float;void main(){float v=0.0;for(int i=0;i<1000;i++){v+=sin(float(i)*0.01);}gl_FragColor=vec4(v,0,0,1);}"),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)))return t.deleteShader(e),t.deleteShader(n),null;let o=t.createProgram();if(!o)return t.deleteShader(e),t.deleteShader(n),null;if(t.attachShader(o,e),t.attachShader(o,n),t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS))return t.deleteProgram(o),t.deleteShader(e),t.deleteShader(n),null;t.useProgram(o);let r=performance.now();t.drawArrays(t.TRIANGLES,0,3),t.finish();let s=performance.now()-r;return t.deleteProgram(o),t.deleteShader(e),t.deleteShader(n),s}catch{return null}}async function $(){let t=performance.now();try{let n=document.createElement("canvas").getContext("webgl");if(!n)return null;let o=n.getExtension("WEBGL_debug_renderer_info"),r=o?n.getParameter(o.UNMASKED_RENDERER_WEBGL):"unknown",s=o?n.getParameter(o.UNMASKED_VENDOR_WEBGL):"unknown",a=n.getSupportedExtensions()??[],i={};for(let c of mt){let d=n.getParameter(c);typeof d=="number"&&(i[`0x${c.toString(16)}`]=d)}let l=pt.some(c=>r.toLowerCase().includes(c)),u=gt(n);return{value:{renderer:r,vendor:s,extensions:a,params:i,gpuTimingMs:u,isSoftwareRenderer:l},duration:performance.now()-t}}catch{return null}}var A={available:!1,vendor:"",architecture:"",device:"",description:"",features:[]};async function N(){let t=performance.now();try{if(!navigator.gpu)return{value:A,duration:performance.now()-t};let n=await navigator.gpu.requestAdapter();if(!n)return{value:A,duration:performance.now()-t};let o=n.info,r=Array.from(n.features);return{value:{available:!0,vendor:o.vendor,architecture:o.architecture,device:o.device,description:o.description,features:r},duration:performance.now()-t}}catch{return{value:A,duration:performance.now()-t}}}function ft(){return typeof OfflineAudioContext<"u"?OfflineAudioContext:typeof globalThis.webkitOfflineAudioContext<"u"?globalThis.webkitOfflineAudioContext:null}async function H(){let t=performance.now();try{let e=ft();if(!e)return null;let n=new e(1,4500,44100),o=n.createOscillator();o.type="triangle",o.frequency.value=1e4;let r=n.createDynamicsCompressor();r.threshold.value=-50,r.knee.value=40,r.ratio.value=12,r.attack.value=0,r.release.value=.25,o.connect(r),r.connect(n.destination),o.start(0);let a=(await n.startRendering()).getChannelData(0),i=Array.from(a.slice(0,100)).map(m=>m.toFixed(6)).join(","),l=await p(i),u=n.sampleRate,c=n.destination.maxChannelCount,d=n.state==="suspended";o.stop(),o.disconnect(),r.disconnect();try{await n.close()}catch{}return{value:{hash:l,sampleRate:u,maxChannelCount:c,isSuspended:d},duration:performance.now()-t}}catch{return null}}var D=["Arial","Arial Black","Calibri","Cambria","Comic Sans MS","Consolas","Courier New","Georgia","Helvetica","Helvetica Neue","Impact","Lucida Console","Lucida Sans Unicode","Microsoft Sans Serif","Palatino Linotype","Segoe UI","Tahoma","Times New Roman","Trebuchet MS","Verdana","Monaco","Menlo","SF Pro","SF Mono","Roboto","Noto Sans","Ubuntu","Cantarell","DejaVu Sans","Liberation Sans","Fira Code","Source Code Pro","Droid Sans","Open Sans","Lato","Montserrat","Gill Sans","Futura","Optima","Baskerville","Garamond","Century Gothic","Franklin Gothic Medium","Rockwell","Copperplate","Papyrus","Brush Script MT","SimHei","SimSun","MS Gothic","MS Mincho","Malgun Gothic","Yu Gothic","Meiryo","Apple SD Gothic Neo","Nanum Gothic","Arabic Typesetting","Nirmala UI","Mangal"],I=["monospace","sans-serif","serif"],ht="mmmmmmmmmmlli1WWWWW",yt="72px";function j(t){let e=document.createElement("span");e.style.position="absolute",e.style.left="-9999px",e.style.fontSize=yt,e.style.fontFamily=t,e.style.letterSpacing="normal",e.textContent=ht,document.body.appendChild(e);let n=e.getBoundingClientRect().width;return e.remove(),n}async function U(){let t=performance.now();try{let e=I.map(a=>j(a)),n=[];for(let a of D)for(let i=0;i<I.length;i++)if(j(`'${a}', ${I[i]}`)!==e[i]){n.push(a);break}let o=n.length===0&&D.length>10,r=n.length===D.length,s=o||r;return{value:{detected:n,count:n.length,isSpoofed:s},duration:performance.now()-t}}catch{return null}}var vt=/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/,St=/^(192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[01])\.)/,wt=/typ\s+(\w+)/;async function G(){let t=performance.now();try{if(typeof RTCPeerConnection>"u")return null;let e=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]});e.createDataChannel("");let n=[],o=[],r=new Set,s=new Promise(l=>{let u=setTimeout(()=>l(),3e3);e.onicecandidate=c=>{if(!c.candidate){clearTimeout(u),l();return}let d=c.candidate.candidate;n.push(d);let m=d.match(wt);m?.[1]&&r.add(m[1]);let g=d.match(vt);g?.[1]&&St.test(g[1])&&o.push(g[1])}}),a=await e.createOffer();await e.setLocalDescription(a),await s,e.close();let i=null;if(o.length>0){let l=o[0].split(".").slice(0,3).join(".");i=await p(l)}return{value:{localIpHash:i,candidateCount:n.length,candidateTypes:Array.from(r),multipleNics:o.length>1},duration:performance.now()-t}}catch{return null}}function bt(t){let e=[...t].sort((o,r)=>o-r),n=Math.floor(e.length/2);return e.length%2!==0?e[n]:(e[n-1]+e[n])/2}function Rt(t,e){let n=t.reduce((o,r)=>o+(r-e)**2,0)/t.length;return Math.sqrt(n)}function Ct(){return new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,127,3,2,1,0,7,9,1,5,98,101,110,99,104,0,0,10,35,1,33,1,2,127,3,64,32,1,32,0,32,0,108,106,33,1,32,0,65,1,106,34,0,65,160,141,6,73,13,0,11,32,1,11])}async function V(){let t=performance.now();try{if(typeof WebAssembly>"u")return null;let e=Ct(),n=await WebAssembly.compile(e.buffer),r=(await WebAssembly.instantiate(n)).exports.bench,s=[];for(let l=0;l<10;l++){let u=performance.now();r(),s.push(performance.now()-u)}let a=bt(s),i=Rt(s,a);return{value:{medianMs:a,stddevMs:i},duration:performance.now()-t}}catch{return null}}async function K(){let t=performance.now();try{if(typeof navigator>"u")return null;let e=navigator,n=0;try{n=e.hardwareConcurrency??0}catch{}let o=null;try{o=e.deviceMemory??null}catch{}let r=0;try{r=e.maxTouchPoints??0}catch{}let s=[];try{s=Array.from(e.languages??[])}catch{}let a="";try{a=e.platform??""}catch{}let i=!1;try{i=e.cookieEnabled??!1}catch{}let l=null;try{l=e.doNotTrack??null}catch{}let u=null;try{let h=e.keyboard;if(h?.getLayoutMap){let x=await h.getLayoutMap();u=x instanceof Map?x.get("KeyA")??null:null}}catch{}let c=null;try{c=e.connection?.effectiveType??null}catch{}let d="bluetooth"in e,m="usb"in e,g="hid"in e,f="serial"in e,T="wakeLock"in e,M="gpu"in e,k=null;try{let h=e.bluetooth;h?.getAvailability&&(k=await h.getAvailability())}catch{}return{value:{hardwareConcurrency:n,deviceMemory:o,maxTouchPoints:r,languages:s,platform:a,cookieEnabled:i,doNotTrack:l,keyboardLayout:u,connectionType:c,hasBluetooth:d,hasUsb:m,hasHid:g,hasSerial:f,hasWakeLock:T,hasGpu:M,bluetoothAvailable:k},duration:performance.now()-t}}catch{return null}}function L(t){try{return typeof matchMedia<"u"&&matchMedia(t).matches}catch{return!1}}function S(t){for(let[e,n]of t)if(L(e))return n;return t[t.length-1]?.[1]??""}async function q(){let t=performance.now(),e=S([["(prefers-color-scheme: dark)","dark"],["(prefers-color-scheme: light)","light"],["(prefers-color-scheme: no-preference)","no-preference"]]),n=S([["(prefers-contrast: more)","more"],["(prefers-contrast: less)","less"],["(prefers-contrast: no-preference)","no-preference"]]),o=L("(forced-colors: active)"),r=S([["(pointer: fine)","fine"],["(pointer: coarse)","coarse"],["(pointer: none)","none"]]),s=S([["(hover: hover)","hover"],["(hover: none)","none"]]),a=S([["(display-mode: fullscreen)","fullscreen"],["(display-mode: standalone)","standalone"],["(display-mode: minimal-ui)","minimal-ui"],["(display-mode: browser)","browser"]]),i=L("(prefers-reduced-motion: reduce)"),l=S([["(color-gamut: rec2020)","rec2020"],["(color-gamut: p3)","p3"],["(color-gamut: srgb)","srgb"]]);return{value:{colorScheme:e,contrast:n,forcedColors:o,pointer:r,hover:s,displayMode:a,reducedMotion:i,colorGamut:l},duration:performance.now()-t}}var kt=[1e3,1400,1600];async function z(){let t=performance.now(),e=screen.width??0,n=screen.height??0,o=screen.availWidth??0,r=screen.availHeight??0,s=screen.colorDepth??0,a=window.devicePixelRatio??1,i=kt.includes(e)&&e===n&&a===1;return{value:{width:e,height:n,availWidth:o,availHeight:r,colorDepth:s,pixelRatio:a,isFirefoxRfp:i},duration:performance.now()-t}}var X=/\[native code\]/;function xt(t){if(typeof t!="function")return!1;try{return X.test(Function.prototype.toString.call(t))}catch{return!1}}function Et(t){if(typeof t!="function")return!0;try{return Object.getOwnPropertyNames(t).filter(o=>!["length","name","prototype","arguments","caller"].includes(o)).length===0}catch{return!0}}function Pt(t,e){if(typeof t!="function")return!0;try{return Object.getPrototypeOf(t)===e}catch{return!0}}function Tt(){let t=[],e=Function.prototype;typeof HTMLCanvasElement<"u"&&(t.push({name:"HTMLCanvasElement.toDataURL",get:()=>HTMLCanvasElement.prototype.toDataURL,expectedProto:e}),t.push({name:"HTMLCanvasElement.getContext",get:()=>HTMLCanvasElement.prototype.getContext,expectedProto:e})),typeof CanvasRenderingContext2D<"u"&&(t.push({name:"CanvasRenderingContext2D.getImageData",get:()=>CanvasRenderingContext2D.prototype.getImageData,expectedProto:e}),t.push({name:"CanvasRenderingContext2D.measureText",get:()=>CanvasRenderingContext2D.prototype.measureText,expectedProto:e})),typeof WebGLRenderingContext<"u"&&(t.push({name:"WebGLRenderingContext.getParameter",get:()=>WebGLRenderingContext.prototype.getParameter,expectedProto:e}),t.push({name:"WebGLRenderingContext.getExtension",get:()=>WebGLRenderingContext.prototype.getExtension,expectedProto:e})),t.push({name:"Date.getTimezoneOffset",get:()=>Date.prototype.getTimezoneOffset,expectedProto:e}),t.push({name:"Intl.DateTimeFormat.resolvedOptions",get:()=>Intl.DateTimeFormat.prototype.resolvedOptions,expectedProto:e}),t.push({name:"Element.getBoundingClientRect",get:()=>typeof Element<"u"?Element.prototype.getBoundingClientRect:void 0,expectedProto:e});try{let n=Object.getOwnPropertyDescriptor(Navigator.prototype,"hardwareConcurrency");n?.get&&t.push({name:"navigator.hardwareConcurrency.get",get:()=>n.get,expectedProto:e})}catch{}try{let n=Object.getOwnPropertyDescriptor(Navigator.prototype,"languages");n?.get&&t.push({name:"navigator.languages.get",get:()=>n.get,expectedProto:e})}catch{}try{let n=Object.getOwnPropertyDescriptor(Navigator.prototype,"userAgent");n?.get&&t.push({name:"navigator.userAgent.get",get:()=>n.get,expectedProto:e})}catch{}return t}async function Y(){let t=performance.now(),e=[],n=0,o=Tt();for(let r of o)try{let s=r.get();if(s===void 0)continue;if(!xt(s)){e.push(r.name),n+=1;continue}Et(s)||(e.push(`${r.name}:props`),n+=.5),r.expectedProto&&!Pt(s,r.expectedProto)&&(e.push(`${r.name}:proto`),n+=.5)}catch{e.push(r.name),n+=1}try{let r=Function.prototype.toString.call(Function.prototype.toString);X.test(r)||(e.push("Function.prototype.toString"),n+=2)}catch{e.push("Function.prototype.toString"),n+=2}return{value:{tamperedApis:e,workerMismatch:!1,lieScore:Math.min(n,10)},duration:performance.now()-t}}function Mt(t){let e=t.toLowerCase();return e.includes("phantom")||e.includes("solflare")||e.includes("backpack")||e.includes("solana")?"solana":(e.includes("keplr"),"evm")}async function _t(){return typeof window>"u"||typeof window.dispatchEvent>"u"?[]:new Promise(t=>{let e=[],n=o=>{let r=o;r.detail?.info?.name&&e.push(r.detail.info.name)};window.addEventListener("eip6963:announceProvider",n),window.dispatchEvent(new Event("eip6963:requestProvider")),setTimeout(()=>{window.removeEventListener("eip6963:announceProvider",n),t(e)},50)})}async function At(t){try{if(typeof t.request=="function"){let e=await t.request({method:"web3_clientVersion"});if(typeof e=="string")return e}}catch{}return null}async function Q(){let t=performance.now(),e=[],n=[],o=[],r={};try{let s=await _t();for(let c of s)e.includes(c)||(e.push(c),Mt(c)==="solana"?o.includes(c)||o.push(c):n.includes(c)||n.push(c));let a=globalThis,i=a.ethereum;if(i&&typeof i=="object"){if(i.isMetaMask&&!e.includes("MetaMask")){e.push("MetaMask"),n.push("MetaMask");let c=await At(i);c&&(r.MetaMask=c)}i.isCoinbaseWallet&&!e.includes("Coinbase Wallet")&&(e.push("Coinbase Wallet"),n.push("Coinbase Wallet")),i.isRainbow&&!e.includes("Rainbow")&&(e.push("Rainbow"),n.push("Rainbow")),i.isBraveWallet&&!e.includes("Brave Wallet")&&(e.push("Brave Wallet"),n.push("Brave Wallet"))}a.coinbaseWalletExtension&&!e.includes("Coinbase Wallet")&&(e.push("Coinbase Wallet"),n.push("Coinbase Wallet")),a.okxwallet&&!e.includes("OKX Wallet")&&(e.push("OKX Wallet"),n.push("OKX Wallet")),a.xfi&&!e.includes("XDEFI")&&(e.push("XDEFI"),n.push("XDEFI"));let l=a.solana;l&&typeof l=="object"&&(l.isPhantom&&!e.includes("Phantom")&&(e.push("Phantom"),o.push("Phantom")),l.isSolflare&&!e.includes("Solflare")&&(e.push("Solflare"),o.push("Solflare")),l.isBackpack&&!e.includes("Backpack")&&(e.push("Backpack"),o.push("Backpack")));let u=a.phantom;if(u&&typeof u=="object"){let c=u.solana;c&&typeof c=="object"&&!e.includes("Phantom")&&(e.push("Phantom"),o.push("Phantom"))}a.keplr&&!e.includes("Keplr")&&(e.push("Keplr"),n.push("Keplr")),a.unisat&&!e.includes("UniSat")&&(e.push("UniSat"),n.push("UniSat"))}catch{}return{value:{detected:e,count:e.length,evmProviders:n,solanaProviders:o,multipleWallets:e.length>1,versions:r},duration:performance.now()-t}}var W="fiq_vid",J="__fiq_test__";function Z(t){try{return t.setItem(J,"1"),t.removeItem(J),!0}catch{return!1}}function Dt(){try{let t="__fiq_cookie_test__=1";document.cookie=t+"; SameSite=Strict";let e=document.cookie.indexOf("__fiq_cookie_test__")!==-1;return document.cookie="__fiq_cookie_test__=; expires=Thu, 01 Jan 1970 00:00:00 GMT; SameSite=Strict",e}catch{return!1}}function It(){return new Promise(t=>{let e=setTimeout(()=>t(!1),1e3);try{if(typeof indexedDB>"u"||!indexedDB){clearTimeout(e),t(!1);return}let n=indexedDB.open("__fiq_test__",1);n.onsuccess=()=>{clearTimeout(e),n.result.close(),indexedDB.deleteDatabase("__fiq_test__"),t(!0)},n.onerror=()=>{clearTimeout(e),t(!1)}}catch{clearTimeout(e),t(!1)}})}function Lt(){let t=[];try{typeof localStorage<"u"&&localStorage.getItem(W)!==null&&t.push("localStorage")}catch{}try{typeof sessionStorage<"u"&&sessionStorage.getItem(W)!==null&&t.push("sessionStorage")}catch{}try{document.cookie.indexOf(W+"=")!==-1&&t.push("cookie")}catch{}return t}async function ee(){let t=performance.now(),e=!1;try{e=Z(localStorage)}catch{}let n=!1;try{n=Z(sessionStorage)}catch{}let o=Dt(),r=await It(),s=Lt();return{value:{localStorage:e,sessionStorage:n,indexedDb:r,cookie:o,survivingMechanisms:s},duration:performance.now()-t}}var Wt=[()=>Math.acos(.123456789),()=>Math.asin(.123456789),()=>Math.atan(.123456789),()=>Math.atan2(.123456789,.987654321),()=>Math.cos(.123456789),()=>Math.sin(.123456789),()=>Math.tan(.123456789),()=>Math.exp(.123456789),()=>Math.log(.123456789),()=>Math.sqrt(.123456789),()=>Math.sinh(.123456789),()=>Math.cosh(.123456789),()=>Math.tanh(.123456789),()=>Math.expm1(.123456789),()=>Math.log1p(.123456789),()=>Math.cbrt(.123456789),()=>Math.hypot(.123456789,.987654321),()=>Math.fround(.123456789),()=>Math.clz32(.123456789),()=>Math.log2(.123456789),()=>Math.log10(.123456789)];async function te(){let t=performance.now(),e=Wt.map(a=>a()),n=e.map(a=>a.toString()).join(","),o=new TextEncoder().encode(n),r=await crypto.subtle.digest("SHA-256",o),s=Array.from(new Uint8Array(r)).map(a=>a.toString(16).padStart(2,"0")).join("");return{value:{values:e,hash:s},duration:performance.now()-t}}var Ot=[{tag:"div",text:"FingerprintIQ",style:"font-size:16px;font-family:Arial;padding:10px;display:inline-block;"},{tag:"span",text:"mmmmmmmmm",style:"font-size:72px;font-family:monospace;"},{tag:"span",text:"WWWWWWWWW",style:"font-size:72px;font-family:serif;"},{tag:"div",text:"The quick brown fox",style:"font-size:14px;font-family:sans-serif;width:200px;word-wrap:break-word;"}],Bt="\u{1F600}\u{1F680}\u{1F308}\u{1F3B5}\u{1F9E0}\u2764\uFE0F\u{1F44D}\u{1F602}\u{1F525}";async function ne(t){let e=`${t.x},${t.y},${t.width},${t.height},${t.top},${t.right},${t.bottom},${t.left}`,n=new TextEncoder().encode(e),o=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(o)).map(r=>r.toString(16).padStart(2,"0")).join("")}async function oe(){let t=performance.now();try{let e=document.createElement("div");e.style.position="absolute",e.style.left="-9999px",e.style.top="-9999px",document.body.appendChild(e);let n=[];for(let c of Ot){let d=document.createElement(c.tag);d.textContent=c.text,d.setAttribute("style",c.style),e.appendChild(d);let m=d.getBoundingClientRect();n.push(await ne(m))}let o=document.createElement("span");o.style.fontSize="48px",o.textContent=Bt,e.appendChild(o);let r=o.getBoundingClientRect(),s=await ne(r);e.remove();let a=n.join("|"),i=new TextEncoder().encode(a),l=await crypto.subtle.digest("SHA-256",i);return{value:{hash:Array.from(new Uint8Array(l)).map(c=>c.toString(16).padStart(2,"0")).join(""),emojiHash:s,rectCount:n.length},duration:performance.now()-t}}catch{return null}}async function re(){let t=performance.now(),e=[],n=globalThis,o=globalThis.navigator;o.webdriver===!0&&e.push("webdriver");try{let i=Object.getOwnPropertyDescriptor(Navigator.prototype,"webdriver");i&&i.configurable&&e.push("webdriver_configurable")}catch{}n._selenium!==void 0&&e.push("selenium"),n.__selenium_unwrapped!==void 0&&e.push("selenium_unwrapped"),document.$cdc_asdjflasutopfhvcZLmcfl_!==void 0&&e.push("chromedriver_cdc"),document.__webdriver_evaluate!==void 0&&e.push("webdriver_evaluate"),document.__driver_evaluate!==void 0&&e.push("driver_evaluate"),n.__playwright!==void 0&&e.push("playwright"),n.__pw_manual!==void 0&&e.push("playwright_manual"),n.__puppeteer!==void 0&&e.push("puppeteer"),n.__nightmare!==void 0&&e.push("nightmare"),(n.callPhantom!==void 0||n._phantom!==void 0)&&e.push("phantom");let r=(typeof navigator<"u"?navigator.userAgent:"").toLowerCase(),s=r.includes("chrome")&&!r.includes("edg");s&&!n.chrome&&e.push("missing_chrome_object"),r.includes("headlesschrome")&&e.push("headless_ua"),typeof navigator<"u"&&navigator.plugins&&navigator.plugins.length===0&&s&&e.push("no_plugins"),typeof navigator<"u"&&(!navigator.languages||navigator.languages.length===0)&&e.push("no_languages");let a=o.deviceMemory;typeof a=="number"&&(a<=0||a>256)&&e.push("impossible_device_memory");try{typeof Notification<"u"&&Notification.permission==="denied"&&n._notificationDenied}catch{}return(n.domAutomation!==void 0||n.domAutomationController!==void 0)&&e.push("dom_automation"),{value:{isHeadless:e.length>=2,markers:e},duration:performance.now()-t}}async function ae(){let t=performance.now();try{if(typeof speechSynthesis>"u")return null;let e=speechSynthesis.getVoices();if(e.length===0&&(e=await new Promise(i=>{let l=setTimeout(()=>i([]),2e3);speechSynthesis.onvoiceschanged=()=>{clearTimeout(l),i(speechSynthesis.getVoices())}})),e.length===0)return null;let n=e.filter(i=>i.localService).map(i=>i.name).sort(),o=e.filter(i=>!i.localService).length,r=e.find(i=>i.default)?.name??null,s=e.map(i=>`${i.name}:${i.lang}:${i.localService}`).sort().join("|"),a=await p(s);return{value:{voiceCount:e.length,localVoices:n,remoteVoiceCount:o,defaultVoice:r,hash:a},duration:performance.now()-t}}catch{return null}}async function ie(){let t=performance.now();try{let e=[],n=[];try{let c=new Intl.Collator;e.push(c.resolvedOptions().locale),n.push(`collator:${c.resolvedOptions().locale}`)}catch{}try{let c=new Intl.DateTimeFormat;e.push(c.resolvedOptions().locale);let d=c.format(new Date(2024,0,1));n.push(`dtf:${c.resolvedOptions().locale}:${d}`)}catch{}let o="";try{let c=new Intl.DisplayNames(["en"],{type:"region"});e.push(c.resolvedOptions().locale);let d=c.of("US")??"",m=c.of("JP")??"",g=c.of("DE")??"";o=`${d},${m},${g}`,n.push(`displayNames:${o}`)}catch{}let r="";try{let c=new Intl.ListFormat(["en"],{style:"long",type:"conjunction"});e.push(c.resolvedOptions().locale),r=c.format(["Alice","Bob","Carol"]),n.push(`listFormat:${r}`)}catch{}let s="";try{let c=new Intl.NumberFormat(void 0,{notation:"compact",compactDisplay:"long"});e.push(c.resolvedOptions().locale),s=c.format(21e6),n.push(`numberFormat:${s}`)}catch{}try{let c=new Intl.PluralRules;e.push(c.resolvedOptions().locale);let d=c.select(0),m=c.select(1),g=c.select(2);n.push(`pluralRules:${d},${m},${g}`)}catch{}let a="";try{let c=new Intl.RelativeTimeFormat(["en"],{numeric:"auto"});e.push(c.resolvedOptions().locale),a=c.format(-1,"year"),n.push(`relativeTime:${a}`)}catch{}let i=[...new Set(e)],l=!1;try{let c=navigator.language?.split("-")[0].toLowerCase();c&&i.length>0&&(l=i[0].split("-")[0].toLowerCase()!==c)}catch{}let u=await p(n.join("|"));return{value:{locales:i,formattedNumber:s,formattedRelativeTime:a,formattedList:r,localeSpoofed:l,hash:u},duration:performance.now()-t}}catch{return null}}async function se(){let t=performance.now();try{let e=Intl.DateTimeFormat().resolvedOptions().timeZone,n=new Date(2005,6,1).getTimezoneOffset(),o=null;try{o=Intl.DateTimeFormat(void 0,{timeZoneName:"long"}).formatToParts(new Date).find(l=>l.type==="timeZoneName")?.value??null}catch{}let r=!1;try{let a=new Date().getTimezoneOffset(),i=new Date,l=i.toLocaleString("en-US",{timeZone:"UTC",hour12:!1,hour:"numeric"}),u=i.toLocaleString("en-US",{timeZone:e,hour12:!1,hour:"numeric"}),c=parseInt(l,10),d=parseInt(u,10),m=(c-d)*60;r=Math.abs(m-a)>90}catch{}let s=await p(`${e}|${n}|${new Date().getTimezoneOffset()}`);return{value:{reported:e,computed:o,offsetHistorical:n,isSpoofed:r,hash:s},duration:performance.now()-t}}catch{return null}}var Ft=["ActiveText","ButtonBorder","ButtonFace","ButtonText","Canvas","CanvasText","Field","FieldText","GrayText","Highlight","HighlightText","LinkText","Mark","MarkText","SelectedItem","SelectedItemText","VisitedText","AccentColor","AccentColorText"],$t=["caption","icon","menu","message-box","small-caption","status-bar"];async function le(){let t=performance.now();try{if(typeof document>"u")return null;let e=getComputedStyle(document.documentElement).length,n=document.createElement("div");n.style.cssText="position:absolute;visibility:hidden;pointer-events:none;",document.body.appendChild(n);let o=[];for(let l of Ft)try{n.style.color=l;let u=getComputedStyle(n).color;o.push(`${l}:${u}`)}catch{}let r=[];for(let l of $t)try{n.style.font=l;let u=getComputedStyle(n).font;r.push(`${l}:${u}`)}catch{}document.body.removeChild(n);let s=await p(o.join("|")),a=await p(r.join("|")),i=await p(`${e}|${s}|${a}`);return{value:{propertyCount:e,systemColorHash:s,systemFontHash:a,hash:i},duration:performance.now()-t}}catch{return null}}async function ce(){let start=performance.now();try{let messages=[];try{null.x}catch(t){messages.push(t.message)}try{(void 0).x}catch(t){messages.push(t.message)}try{[...void 0]}catch(t){messages.push(t.message)}try{eval(")")}catch(t){messages.push(t.message)}try{new Array(-1)}catch(t){messages.push(t.message)}try{"abc".repeat(-1)}catch(t){messages.push(t.message)}try{let t={},e={};Object.setPrototypeOf(t,e),Object.setPrototypeOf(e,t)}catch(t){messages.push(t.message)}try{new RegExp("(")}catch(t){messages.push(t.message)}try{"".repeat(1/0)}catch(t){messages.push(t.message)}let hash=await p(messages.join("|"));return{value:{messages,hash},duration:performance.now()-start}}catch{return null}}var Nt=`
|
|
2
|
+
self.onmessage = function() {
|
|
3
|
+
var nav = {
|
|
4
|
+
hardwareConcurrency: self.navigator.hardwareConcurrency || 0,
|
|
5
|
+
platform: self.navigator.platform || '',
|
|
6
|
+
languages: Array.from(self.navigator.languages || []),
|
|
7
|
+
userAgent: self.navigator.userAgent || ''
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
var webgl = null;
|
|
11
|
+
try {
|
|
12
|
+
var canvas = new OffscreenCanvas(1, 1);
|
|
13
|
+
var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
|
14
|
+
if (gl) {
|
|
15
|
+
var ext = gl.getExtension('WEBGL_debug_renderer_info');
|
|
16
|
+
if (ext) {
|
|
17
|
+
webgl = {
|
|
18
|
+
renderer: gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) || '',
|
|
19
|
+
vendor: gl.getParameter(ext.UNMASKED_VENDOR_WEBGL) || ''
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
} catch(e) {}
|
|
24
|
+
|
|
25
|
+
self.postMessage({ nav: nav, webgl: webgl });
|
|
26
|
+
};
|
|
27
|
+
`;async function ue(){let t=performance.now();try{if(typeof Worker>"u")return null;let e=new Blob([Nt],{type:"application/javascript"}),n=URL.createObjectURL(e),o=await new Promise(i=>{let l,u=setTimeout(()=>{try{l.terminate()}catch{}URL.revokeObjectURL(n),i(null)},5e3);try{l=new Worker(n),l.onmessage=c=>{clearTimeout(u),l.terminate(),URL.revokeObjectURL(n),i(c.data)},l.onerror=()=>{clearTimeout(u),URL.revokeObjectURL(n),i(null)},l.postMessage(null)}catch{clearTimeout(u),URL.revokeObjectURL(n),i(null)}}),r=o?.nav??null,s=o?.webgl??null,a=[];if(r){r.hardwareConcurrency!==navigator.hardwareConcurrency&&a.push("hardwareConcurrency"),r.platform!==navigator.platform&&a.push("platform"),r.userAgent!==navigator.userAgent&&a.push("userAgent");let i=navigator.languages?.join(",")??"",l=r.languages?.join(",")??"";i!==l&&a.push("languages")}if(s)try{let l=document.createElement("canvas").getContext("webgl"),u=l?.getExtension("WEBGL_debug_renderer_info");if(l&&u){let c=String(l.getParameter(u.UNMASKED_RENDERER_WEBGL)??""),d=String(l.getParameter(u.UNMASKED_VENDOR_WEBGL)??"");s.renderer&&c&&s.renderer!==c&&a.push("webglRenderer"),s.vendor&&d&&s.vendor!==d&&a.push("webglVendor")}}catch{}return{value:{workerNavigator:r,workerWebGL:s,mismatches:a},duration:performance.now()-t}}catch{return null}}function Ht(){let t=[],e=performance.now();for(let n=0;n<100;n++){let o=performance.now(),r=o-e;r>0&&t.push(r),e=o}return t.length===0?0:(t.sort((n,o)=>n-o),t[0])}async function de(){let t=performance.now();try{let e=Ht(),n=null;try{let r=navigator;r.brave&&await r.brave.isBrave()&&(n="brave")}catch{}if(!n)try{screen.width%200===0&&screen.height%100===0&&e>=50&&(n="tor")}catch{}!n&&e>=80&&(n="firefox-rfp");let o=[];try{(document.querySelector("[data-duckduckgo-privacy]")??document.querySelector("[ddg-extension-hide]"))&&o.push("duckduckgo")}catch{}try{let r=document.createElement("canvas");r.width=16,r.height=16;let s=r.getContext("2d");if(s){s.fillStyle="red",s.fillRect(0,0,16,16);let a=r.toDataURL(),i=r.toDataURL();a!==i&&o.push("canvas-blocker")}}catch{}try{let s=document.createElement("canvas").getContext("webgl");if(s){let a=s.getParameter.toString?.()??"";a.includes("native")===!1&&a.length>0&&o.push("jshelter")}}catch{}try{let r=Object.getOwnPropertyDescriptor(Navigator.prototype,"plugins")??Object.getOwnPropertyDescriptor(navigator,"plugins");r&&r.get&&(r.get.toString().includes("[native code]")||o.push("trace"))}catch{}return{value:{browser:n,extensions:o,timerPrecisionMs:e},duration:performance.now()-t}}catch{return null}}async function pe(){let t=performance.now();try{let e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("width","500"),e.setAttribute("height","100"),e.style.position="absolute",e.style.left="-9999px",e.style.top="-9999px";let n=document.createElementNS("http://www.w3.org/2000/svg","text");n.setAttribute("x","10"),n.setAttribute("y","50"),n.setAttribute("font-size","16"),n.setAttribute("font-family","sans-serif"),n.textContent="\u{1F600}\u{1F680}\u{1F308}\u{1F3B5}ABCxyz",e.appendChild(n),document.body.appendChild(e);let o=[];try{let s=n.getBBox();o.push(s.width,s.height)}catch{}try{let s=n.getComputedTextLength();o.push(s)}catch{}try{let s=n.getSubStringLength(0,4),a=n.getSubStringLength(4,3);o.push(s,a)}catch{}return document.body.removeChild(e),o.length===0?null:{value:{hash:await p(o.join(",")),textLengths:o},duration:performance.now()-t}}catch{return null}}var jt=new Set(["undefined","globalThis","Infinity","NaN","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape","Object","Function","Boolean","Symbol","Error","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","AggregateError","InternalError","Number","BigInt","Math","Date","String","RegExp","Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array","Map","Set","WeakMap","WeakSet","WeakRef","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","AsyncGenerator","AsyncGeneratorFunction","Reflect","Proxy","Intl","Iterator","window","self","document","frames","parent","top","opener","closed","length","frameElement","external","location","history","navigator","screen","visualViewport","performance","crypto","console","alert","confirm","prompt","open","close","focus","blur","postMessage","requestAnimationFrame","cancelAnimationFrame","requestIdleCallback","cancelIdleCallback","setTimeout","clearTimeout","setInterval","clearInterval","queueMicrotask","fetch","XMLHttpRequest","WebSocket","EventSource","Worker","SharedWorker","ServiceWorker","Notification","PushManager","Blob","File","FileList","FileReader","FormData","URLSearchParams","URL","Headers","Request","Response","Event","EventTarget","CustomEvent","MessageEvent","ErrorEvent","ProgressEvent","UIEvent","MouseEvent","KeyboardEvent","TouchEvent","PointerEvent","WheelEvent","FocusEvent","InputEvent","CompositionEvent","DragEvent","ClipboardEvent","BeforeUnloadEvent","HashChangeEvent","PopStateEvent","PageTransitionEvent","StorageEvent","AnimationEvent","TransitionEvent","DeviceOrientationEvent","DeviceMotionEvent","MediaQueryList","MediaQueryListEvent","ResizeObserver","MutationObserver","IntersectionObserver","PerformanceObserver","HTMLElement","Element","Node","NodeList","HTMLCollection","Document","DocumentFragment","ShadowRoot","Text","Comment","Attr","CSSStyleDeclaration","DOMParser","XMLSerializer","Range","Selection","TreeWalker","NodeIterator","XPathResult","XPathExpression","Canvas","CanvasRenderingContext2D","WebGLRenderingContext","WebGL2RenderingContext","ImageData","ImageBitmap","Audio","AudioContext","AudioBuffer","AudioNode","MediaStream","MediaStreamTrack","RTCPeerConnection","IDBFactory","IDBDatabase","indexedDB","localStorage","sessionStorage","caches","cookieStore","speechSynthesis","speechRecognition","CSS","CSSAnimation","CSSTransition","customElements","reportError","AbortController","AbortSignal","TextEncoder","TextDecoder","TextDecoderStream","TextEncoderStream","TransformStream","ReadableStream","WritableStream","ByteLengthQueuingStrategy","CountQueuingStrategy","structuredClone","atob","btoa","clearImmediate","setImmediate","matchMedia","getComputedStyle","getSelection","dispatchEvent","addEventListener","removeEventListener","scrollX","scrollY","pageXOffset","pageYOffset","screenX","screenY","screenLeft","screenTop","innerWidth","innerHeight","outerWidth","outerHeight","devicePixelRatio","scrollbars","menubar","toolbar","statusbar","personalbar","locationbar","status","defaultStatus","name","origin","crossOriginIsolated","isSecureContext","trustedTypes","launchQueue","scheduler","navigation","TEMPORARY","PERSISTENT","Gamepad","GamepadEvent","SpeechSynthesis","SpeechSynthesisVoice","SpeechSynthesisUtterance","SpeechRecognition","SpeechGrammar","SpeechGrammarList","BroadcastChannel","MessageChannel","MessagePort","OffscreenCanvas","Path2D","PaymentRequest","PaymentResponse","CredentialsContainer","PublicKeyCredential","SubtleCrypto","CompressionStream","DecompressionStream","LockManager","Lock","StorageManager","BarProp","History","Location","Navigator","Screen","DataTransfer","DataTransferItem","DataTransferItemList","DOMException","DOMImplementation","DOMRect","DOMPoint","DOMMatrix","DOMRectReadOnly","DOMPointReadOnly","DOMMatrixReadOnly"]);async function me(){let t=performance.now();try{let e=Object.getOwnPropertyNames(window),n=e.length,o=0,r=0,s=[];for(let l of e){let u=l.toLowerCase();if(u.startsWith("webkit")){o++;continue}if(u.startsWith("moz")){r++;continue}jt.has(l)||l.startsWith("on")||l.startsWith("__")||/^\d+$/.test(l)||s.push(l)}s.sort();let a=s.slice(0,50),i=await p(`${n}|${o}|${r}|${a.join(",")}`);return{value:{propertyCount:n,webkitCount:o,mozCount:r,litterKeys:a,hash:i},duration:performance.now()-t}}catch{return null}}async function ge(){let t=performance.now();try{let e=new Set,n=document.documentElement;for(;n!==null;){try{let a=Object.getOwnPropertyNames(n);for(let i of a)e.add(i)}catch{}n=Object.getPrototypeOf(n)}let o=[...e].sort(),r=o.length,s=await p(o.join(","));return{value:{propertyCount:r,hash:s},duration:performance.now()-t}}catch{return null}}var Ut=['video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="hev1.1.6.L93.B0"','video/webm; codecs="vp8"','video/webm; codecs="vp9"','video/webm; codecs="av01.0.05M.08"',"video/ogg","audio/mpeg","audio/ogg","audio/webm","audio/aac","audio/flac","audio/wav"];async function fe(){let t=performance.now();try{let e={},n=document.createElement("video");for(let s of Ut){let a="";try{a=n.canPlayType(s)}catch{}let i=!1;try{typeof MediaSource<"u"&&"isTypeSupported"in MediaSource&&(i=MediaSource.isTypeSupported(s))}catch{}let l=!1;try{typeof MediaRecorder<"u"&&"isTypeSupported"in MediaRecorder&&(l=MediaRecorder.isTypeSupported(s))}catch{}e[s]={canPlay:a,mediaSource:i,mediaRecorder:l}}let o=Object.entries(e).sort(([s],[a])=>s.localeCompare(a)).map(([s,a])=>`${s}:${a.canPlay}:${a.mediaSource}:${a.mediaRecorder}`).join("|"),r=await p(o);return{value:{matrix:e,hash:r},duration:performance.now()-t}}catch{return null}}async function he(){let t=performance.now();try{let e=0;try{let a=1/0,i=performance.now();for(let l=0;l<100;l++){let u=performance.now(),c=u-i;c>0&&c<a&&(a=c),i=u}e=a===1/0?0:a}catch{}let n=0;try{let a=i=>{try{return a(i+1)}catch{return i}};n=a(0)}catch{}let o=null;try{if(navigator.storage&&navigator.storage.estimate){let a=await navigator.storage.estimate();a.quota!==void 0&&(o=Math.round(a.quota/(1024*1024)))}}catch{}let r=null;try{if("getBattery"in navigator){let a=await navigator.getBattery();r={charging:a.charging,level:a.level}}}catch{}let s=null;try{let a=performance.memory;a&&a.jsHeapSizeLimit&&(s=a.jsHeapSizeLimit)}catch{}return{value:{timingResolution:e,maxStackSize:n,storageQuotaMB:o,battery:r,heapLimit:s},duration:performance.now()-t}}catch{return null}}function Gt(t){return t.BarcodeDetector&&t.ContactsManager?"Android":t.TouchEvent&&!t.SharedWorker?"Mobile":t.HID||t.Serial||t.showDirectoryPicker?"Desktop":"Unknown"}async function ye(){let t=performance.now();try{let e={};e.BarcodeDetector=typeof globalThis.BarcodeDetector<"u",e.ContactsManager=typeof navigator.contacts<"u",e.ContentIndex=(()=>{try{return typeof self.ContentIndex<"u"}catch{return!1}})(),e.EyeDropper=typeof globalThis.EyeDropper<"u",e.FileSystemWritableFileStream=typeof globalThis.FileSystemWritableFileStream<"u",e.HID=typeof navigator.hid<"u",e.Serial=typeof navigator.serial<"u",e.USB=typeof navigator.usb<"u",e.SharedWorker=typeof globalThis.SharedWorker<"u",e.PointerEvent=typeof globalThis.PointerEvent<"u",e.TouchEvent=typeof globalThis.TouchEvent<"u",e.showDirectoryPicker=typeof globalThis.showDirectoryPicker<"u",e.showOpenFilePicker=typeof globalThis.showOpenFilePicker<"u",e.Bluetooth=typeof navigator.bluetooth<"u",e.WakeLock=typeof navigator.wakeLock<"u";let n=Gt(e),o=Object.entries(e).sort(([s],[a])=>s.localeCompare(a)).map(([s,a])=>`${s}:${a}`).join("|"),r=await p(o);return{value:{features:e,estimatedPlatform:n,hash:r},duration:performance.now()-t}}catch{return null}}var Vt=["architecture","bitness","formFactors","fullVersionList","model","platformVersion","wow64"];function ve(t){return(t??[]).map(e=>({brand:e.brand??"",version:e.version??""})).filter(e=>e.brand.length>0).sort((e,n)=>e.brand.localeCompare(n.brand)||e.version.localeCompare(n.version))}async function Se(){let t=performance.now();try{let n=navigator.userAgentData;if(!n)return{value:{available:!1,mobile:null,platform:null,architecture:null,bitness:null,model:null,platformVersion:null,wow64:null,formFactors:[],brands:[],fullVersionList:[],hash:null},duration:performance.now()-t};let o={};try{typeof n.getHighEntropyValues=="function"&&(o=await n.getHighEntropyValues(Vt)??{})}catch{o={}}let r=ve(n.brands),s=ve(o.fullVersionList),a=Array.isArray(o.formFactors)?[...o.formFactors].sort():[],i=[`mobile:${String(n.mobile??"")}`,`platform:${n.platform??""}`,`architecture:${String(o.architecture??"")}`,`bitness:${String(o.bitness??"")}`,`model:${String(o.model??"")}`,`platformVersion:${String(o.platformVersion??"")}`,`wow64:${String(o.wow64??"")}`,`brands:${r.map(l=>`${l.brand}/${l.version}`).join(",")}`,`fullVersionList:${s.map(l=>`${l.brand}/${l.version}`).join(",")}`,`formFactors:${a.join(",")}`];return{value:{available:!0,mobile:n.mobile??null,platform:n.platform??null,architecture:o.architecture??null,bitness:o.bitness??null,model:o.model??null,platformVersion:o.platformVersion??null,wow64:o.wow64??null,formFactors:a,brands:r,fullVersionList:s,hash:await p(i.join("|"))},duration:performance.now()-t}}catch{return null}}function Kt(t){return t.trim().toLowerCase()}async function we(){let t=performance.now();try{let e=navigator,n=Array.from(e.plugins??[]),o=n.map(c=>Kt(c.name)).sort(),r=o.some(c=>c.includes("pdf")),s="pdfViewerEnabled"in e?!!e.pdfViewerEnabled:null,a="globalPrivacyControl"in e?!!e.globalPrivacyControl:null,i=typeof globalThis.SpeechRecognition<"u"||typeof globalThis.webkitSpeechRecognition<"u",l={pdfViewerEnabled:s,globalPrivacyControl:a,hasPdfPlugin:r,pluginCount:n.length,hasWebGPU:"gpu"in e,hasVirtualKeyboard:"virtualKeyboard"in e,hasSpeechSynthesis:typeof globalThis.speechSynthesis<"u",hasSpeechRecognition:i,hasMediaCapabilities:"mediaCapabilities"in e,hasKeyboardLayoutApi:typeof e.keyboard=="object"&&typeof e.keyboard?.getLayoutMap=="function",hasBluetooth:"bluetooth"in e,hasUsb:"usb"in e,hasHid:"hid"in e,hasSerial:"serial"in e,hasHighEntropyUaHints:typeof e.userAgentData?.getHighEntropyValues=="function",suspiciousFlags:[],hash:""};l.pdfViewerEnabled!==null&&l.pdfViewerEnabled!==l.hasPdfPlugin&&l.suspiciousFlags.push("pdf_viewer_mismatch");let u=[`pdfViewerEnabled:${String(l.pdfViewerEnabled)}`,`globalPrivacyControl:${String(l.globalPrivacyControl)}`,`hasPdfPlugin:${String(l.hasPdfPlugin)}`,`pluginCount:${String(l.pluginCount??"")}`,`hasWebGPU:${String(l.hasWebGPU)}`,`hasVirtualKeyboard:${String(l.hasVirtualKeyboard)}`,`hasSpeechSynthesis:${String(l.hasSpeechSynthesis)}`,`hasSpeechRecognition:${String(l.hasSpeechRecognition)}`,`hasMediaCapabilities:${String(l.hasMediaCapabilities)}`,`hasKeyboardLayoutApi:${String(l.hasKeyboardLayoutApi)}`,`hasBluetooth:${String(l.hasBluetooth)}`,`hasUsb:${String(l.hasUsb)}`,`hasHid:${String(l.hasHid)}`,`hasSerial:${String(l.hasSerial)}`,`hasHighEntropyUaHints:${String(l.hasHighEntropyUaHints)}`,`plugins:${o.slice(0,8).join(",")}`,`flags:${l.suspiciousFlags.join(",")}`];return l.hash=await p(u.join("|")),{value:l,duration:performance.now()-t}}catch{return null}}function w(t){return typeof t!="number"||!Number.isFinite(t)?null:Number(t.toFixed(2))}async function be(){let t=performance.now();try{let e=window.visualViewport,n=e!=null?{width:w(e.width)??0,height:w(e.height)??0,scale:w(e.scale)??1,offsetLeft:w(e.offsetLeft)??0,offsetTop:w(e.offsetTop)??0}:null,o={screen:{width:screen.width??0,height:screen.height??0,availWidth:screen.availWidth??0,availHeight:screen.availHeight??0},window:{innerWidth:window.innerWidth??0,innerHeight:window.innerHeight??0,outerWidth:window.outerWidth??0,outerHeight:window.outerHeight??0,devicePixelRatio:w(window.devicePixelRatio)??1},visualViewport:n,orientation:{type:typeof screen.orientation?.type=="string"?screen.orientation.type:null,angle:typeof screen.orientation?.angle=="number"?screen.orientation.angle:null},chromeInsetX:window.outerWidth>0?window.outerWidth-window.innerWidth:null,chromeInsetY:window.outerHeight>0?window.outerHeight-window.innerHeight:null,suspiciousFlags:[],hash:""};(o.screen.availWidth>o.screen.width||o.screen.availHeight>o.screen.height)&&o.suspiciousFlags.push("avail_exceeds_screen"),o.window.outerWidth>0&&o.window.innerWidth>o.window.outerWidth&&o.suspiciousFlags.push("outer_width_smaller_than_inner"),o.window.outerHeight>0&&o.window.innerHeight>o.window.outerHeight&&o.suspiciousFlags.push("outer_height_smaller_than_inner"),n&&(n.width>o.window.innerWidth+1||n.height>o.window.innerHeight+1)&&o.suspiciousFlags.push("visual_viewport_exceeds_inner"),o.orientation.type?.startsWith("portrait")&&o.screen.width>o.screen.height&&o.suspiciousFlags.push("orientation_screen_mismatch"),o.orientation.type?.startsWith("landscape")&&o.screen.height>o.screen.width&&o.suspiciousFlags.push("orientation_screen_mismatch");let r=[`screen:${o.screen.width}x${o.screen.height}:${o.screen.availWidth}x${o.screen.availHeight}`,`window:${o.window.innerWidth}x${o.window.innerHeight}:${o.window.outerWidth}x${o.window.outerHeight}@${o.window.devicePixelRatio}`,`visualViewport:${n?`${n.width}x${n.height}@${n.scale}:${n.offsetLeft},${n.offsetTop}`:"none"}`,`orientation:${o.orientation.type??""}:${String(o.orientation.angle??"")}`,`chromeInsets:${String(o.chromeInsetX??"")},${String(o.chromeInsetY??"")}`,`flags:${o.suspiciousFlags.join(",")}`];return o.hash=await p(r.join("|")),{value:o,duration:performance.now()-t}}catch{return null}}function b(t){return typeof t!="number"||!Number.isFinite(t)?null:Number(t.toFixed(2))}function qt(t){return t===null?null:Math.round(t/64)*64}async function Re(){let t=performance.now();try{let e=navigator,n=performance,o=e.connection??null,r=null;try{let u=1/0,c=performance.now();for(let d=0;d<64;d+=1){let m=performance.now(),g=m-c;g>0&&g<u&&(u=g),c=m}r=u===1/0?null:b(u)}catch{r=null}let s=null;try{let u=c=>{try{return u(c+1)}catch{return c}};s=u(0)}catch{s=null}let a=null;try{let u=await navigator.storage?.estimate?.();typeof u?.quota=="number"&&(a=Math.round(u.quota/(1024*1024)))}catch{a=null}let i={hardwareConcurrency:typeof e.hardwareConcurrency=="number"?e.hardwareConcurrency:0,deviceMemory:typeof e.deviceMemory=="number"?e.deviceMemory:null,timingResolutionMs:r,maxStackSize:s,storageQuotaMB:a,jsHeapUsedMB:typeof n.memory?.usedJSHeapSize=="number"?b(n.memory.usedJSHeapSize/(1024*1024)):null,jsHeapTotalMB:typeof n.memory?.totalJSHeapSize=="number"?b(n.memory.totalJSHeapSize/(1024*1024)):null,jsHeapLimitMB:typeof n.memory?.jsHeapSizeLimit=="number"?b(n.memory.jsHeapSizeLimit/(1024*1024)):null,networkRttMs:typeof o?.rtt=="number"?b(o.rtt):null,downlinkMbps:typeof o?.downlink=="number"?b(o.downlink):null,saveData:typeof o?.saveData=="boolean"?o.saveData:null,suspiciousFlags:[],hash:""};i.hardwareConcurrency<=0&&i.suspiciousFlags.push("invalid_hardware_concurrency"),i.deviceMemory!==null&&![.25,.5,1,2,4,8,16,32].includes(i.deviceMemory)&&i.suspiciousFlags.push("unexpected_device_memory_bucket"),i.jsHeapUsedMB!==null&&i.jsHeapTotalMB!==null&&i.jsHeapUsedMB>i.jsHeapTotalMB&&i.suspiciousFlags.push("heap_used_exceeds_total"),i.jsHeapTotalMB!==null&&i.jsHeapLimitMB!==null&&i.jsHeapTotalMB>i.jsHeapLimitMB&&i.suspiciousFlags.push("heap_total_exceeds_limit"),i.networkRttMs!==null&&i.networkRttMs<0&&i.suspiciousFlags.push("negative_network_rtt");let l=[`hardwareConcurrency:${i.hardwareConcurrency}`,`deviceMemory:${String(i.deviceMemory??"")}`,`timingResolutionMs:${String(i.timingResolutionMs??"")}`,`maxStackSize:${String(i.maxStackSize??"")}`,`storageQuotaMB:${String(i.storageQuotaMB??"")}`,`heapLimitBucket:${String(qt(i.jsHeapLimitMB))}`,`networkRttMs:${String(i.networkRttMs??"")}`,`downlinkMbps:${String(i.downlinkMbps??"")}`,`saveData:${String(i.saveData??"")}`,`flags:${i.suspiciousFlags.join(",")}`];return i.hash=await p(l.join("|")),{value:i,duration:performance.now()-t}}catch{return null}}async function v(t){try{let e=navigator.permissions;return e?.query?(await e.query({name:t})).state:null}catch{return null}}function zt(t){let n={accelerometer:globalThis.Accelerometer,gyroscope:globalThis.Gyroscope,magnetometer:globalThis.Magnetometer,absoluteOrientation:globalThis.AbsoluteOrientationSensor,relativeOrientation:globalThis.RelativeOrientationSensor,ambientLight:globalThis.AmbientLightSensor}[t];if(typeof n!="function")return!1;try{return new n,!1}catch(o){let r=o instanceof Error&&typeof o.name=="string"?o.name:"";return r==="SecurityError"||r==="NotAllowedError"}}async function Ce(){let t=performance.now();try{let e={accelerometer:typeof globalThis.Accelerometer<"u",gyroscope:typeof globalThis.Gyroscope<"u",magnetometer:typeof globalThis.Magnetometer<"u",absoluteOrientation:typeof globalThis.AbsoluteOrientationSensor<"u",relativeOrientation:typeof globalThis.RelativeOrientationSensor<"u",ambientLight:typeof globalThis.AmbientLightSensor<"u",geolocation:typeof navigator.geolocation<"u",deviceMotion:typeof globalThis.DeviceMotionEvent<"u",deviceOrientation:typeof globalThis.DeviceOrientationEvent<"u"},n={geolocation:await v("geolocation"),camera:await v("camera"),microphone:await v("microphone"),clipboardRead:await v("clipboard-read"),accelerometer:await v("accelerometer"),gyroscope:await v("gyroscope"),magnetometer:await v("magnetometer")},o=Object.keys(e).filter(a=>zt(a)),r={apis:e,permissionStates:n,policyBlocked:o,availableCount:Object.values(e).filter(Boolean).length,hash:""},s=[`apis:${Object.entries(e).sort(([a],[i])=>a.localeCompare(i)).map(([a,i])=>`${a}:${i}`).join(",")}`,`permissions:${Object.entries(n).sort(([a],[i])=>a.localeCompare(i)).map(([a,i])=>`${a}:${i??"unknown"}`).join(",")}`,`blocked:${o.sort().join(",")}`];return r.hash=await p(s.join("|")),{value:r,duration:performance.now()-t}}catch{return null}}var xe="__fiq_behavior_tracker_state__",Xt=Math.PI/6;function C(){try{return performance.now()}catch{return Date.now()}}function Yt(){return{installedAt:C(),pointerMoveCount:0,pointerDistancePx:0,pointerDirectionChanges:0,clickCount:0,scrollEventCount:0,scrollBurstCount:0,keyEventCount:0,inputEventCount:0,focusTransitions:0,blurTransitions:0,visibilityTransitions:0,pointerIntervals:[],keyIntervals:[],firstPointerSample:null,lastPointerSample:null,lastPointerAngle:null,lastScrollAt:null,lastKeyAt:null}}function ke(t){return t.length===0?null:t.reduce((e,n)=>e+n,0)/t.length}function Qt(t,e,n){if(!t||!e||n<=0)return null;let o=e.x-t.x,r=e.y-t.y,s=Math.hypot(o,r);return Math.min(1,s/n)}function Ee(){return globalThis[xe]??null}function Jt(t){globalThis[xe]=t}function R(){if(typeof window>"u"||typeof document>"u"||Ee())return;let t=Yt();Jt(t);let e=u=>{let c={x:u.clientX??0,y:u.clientY??0,t:C()};if(t.pointerMoveCount+=1,t.firstPointerSample||(t.firstPointerSample=c),t.lastPointerSample){let d=c.x-t.lastPointerSample.x,m=c.y-t.lastPointerSample.y;t.pointerDistancePx+=Math.hypot(d,m);let g=c.t-t.lastPointerSample.t;if(g>0&&t.pointerIntervals.push(g),d!==0||m!==0){let f=Math.atan2(m,d);t.lastPointerAngle!==null&&Math.abs(f-t.lastPointerAngle)>Xt&&(t.pointerDirectionChanges+=1),t.lastPointerAngle=f}}t.lastPointerSample=c},n=()=>{t.clickCount+=1},o=()=>{let u=C();t.scrollEventCount+=1,t.lastScrollAt!==null&&u-t.lastScrollAt<=120&&(t.scrollBurstCount+=1),t.lastScrollAt=u},r=()=>{let u=C();if(t.keyEventCount+=1,t.lastKeyAt!==null){let c=u-t.lastKeyAt;c>0&&t.keyIntervals.push(c)}t.lastKeyAt=u},s=()=>{t.inputEventCount+=1},a=()=>{t.focusTransitions+=1},i=()=>{t.blurTransitions+=1},l=()=>{t.visibilityTransitions+=1};window.addEventListener("pointermove",e,{passive:!0,capture:!0}),window.addEventListener("click",n,{passive:!0,capture:!0}),window.addEventListener("scroll",o,{passive:!0,capture:!0}),window.addEventListener("keydown",r,{passive:!0,capture:!0}),window.addEventListener("input",s,{passive:!0,capture:!0}),window.addEventListener("focus",a,!0),window.addEventListener("blur",i,!0),document.addEventListener("visibilitychange",l,!0)}function Pe(){let t=Ee();return t?{elapsedMs:Math.max(0,Math.round(C()-t.installedAt)),pointerMoveCount:t.pointerMoveCount,pointerDistancePx:Math.round(t.pointerDistancePx),pointerDirectionChanges:t.pointerDirectionChanges,clickCount:t.clickCount,scrollEventCount:t.scrollEventCount,scrollBurstCount:t.scrollBurstCount,keyEventCount:t.keyEventCount,inputEventCount:t.inputEventCount,focusTransitions:t.focusTransitions,blurTransitions:t.blurTransitions,visibilityTransitions:t.visibilityTransitions,meanPointerIntervalMs:ke(t.pointerIntervals),meanKeyIntervalMs:ke(t.keyIntervals),pointerStraightness:Qt(t.firstPointerSample,t.lastPointerSample,t.pointerDistancePx)}:null}async function Te(){let t=performance.now();try{R();let e=Pe();if(!e)return null;let n=e.pointerMoveCount+e.clickCount+e.scrollEventCount+e.keyEventCount+e.inputEventCount,o=[],r=0,s="insufficient_data";e.elapsedMs>=750&&n>=2&&(s=n<4?"low_interaction":"human_like",e.pointerMoveCount>=8&&e.pointerStraightness!==null&&e.pointerStraightness>.985&&e.pointerDirectionChanges<=1&&(o.push("low_pointer_curvature"),r+=.24),e.scrollEventCount>=8&&e.scrollBurstCount>=3&&(o.push("scroll_burst"),r+=.16),e.keyEventCount>=4&&e.meanKeyIntervalMs!==null&&e.meanKeyIntervalMs<25&&(o.push("unusually_fast_typing"),r+=.22),e.focusTransitions+e.blurTransitions>=4&&e.elapsedMs<2500&&(o.push("rapid_focus_switches"),r+=.12),r>=.45&&n>=5&&(s="synthetic_like"));let a={elapsedMs:e.elapsedMs,totalEventCount:n,pointerMoveCount:e.pointerMoveCount,pointerDistancePx:e.pointerDistancePx,pointerDirectionChanges:e.pointerDirectionChanges,pointerStraightness:e.pointerStraightness,clickCount:e.clickCount,scrollEventCount:e.scrollEventCount,scrollBurstCount:e.scrollBurstCount,keyEventCount:e.keyEventCount,inputEventCount:e.inputEventCount,focusTransitions:e.focusTransitions,blurTransitions:e.blurTransitions,visibilityTransitions:e.visibilityTransitions,meanPointerIntervalMs:e.meanPointerIntervalMs,meanKeyIntervalMs:e.meanKeyIntervalMs,classification:s,riskScore:Number(r.toFixed(2)),reasons:o,hash:""};return a.hash=await p([`elapsedMs:${a.elapsedMs}`,`totalEventCount:${a.totalEventCount}`,`pointerMoveCount:${a.pointerMoveCount}`,`pointerDistancePx:${a.pointerDistancePx}`,`pointerDirectionChanges:${a.pointerDirectionChanges}`,`pointerStraightness:${String(a.pointerStraightness??"")}`,`clickCount:${a.clickCount}`,`scrollEventCount:${a.scrollEventCount}`,`scrollBurstCount:${a.scrollBurstCount}`,`keyEventCount:${a.keyEventCount}`,`inputEventCount:${a.inputEventCount}`,`focusTransitions:${a.focusTransitions}`,`blurTransitions:${a.blurTransitions}`,`visibilityTransitions:${a.visibilityTransitions}`,`meanPointerIntervalMs:${String(a.meanPointerIntervalMs??"")}`,`meanKeyIntervalMs:${String(a.meanKeyIntervalMs??"")}`,`classification:${a.classification}`,`riskScore:${a.riskScore}`,`reasons:${a.reasons.join(",")}`].join("|")),{value:a,duration:performance.now()-t}}catch{return null}}async function Me(){let t=performance.now(),e=!1,n=null;try{if(navigator.storage&&navigator.storage.estimate){let o=await navigator.storage.estimate();o.quota&&o.quota<200*1024*1024&&(e=!0,n="storage_quota")}}catch{}if(!e)try{let o=globalThis.indexedDB;typeof o?.databases=="function"&&await o.databases()}catch{e=!0,n="indexeddb_databases"}if(!e)try{let o=globalThis;typeof o.webkitRequestFileSystem=="function"&&await new Promise((r,s)=>{o.webkitRequestFileSystem(0,1,()=>r(),()=>s(new Error("filesystem_denied")))})}catch{e=!0,n="webkit_filesystem"}return{value:{isPrivate:e,method:n},duration:performance.now()-t}}async function _e(){let t=performance.now(),e=[];try{let n=performance.now();new Function("debugger")(),performance.now()-n>100&&e.push("debugger_timing")}catch{}try{let n=window.outerWidth-window.innerWidth,o=window.outerHeight-window.innerHeight;(n>160||o>200)&&e.push("window_size_diff")}catch{}try{let n=!1,o=new Image;Object.defineProperty(o,"id",{get(){return n=!0,"devtools-detect"}}),console.log("%c",o),n&&e.push("console_getter")}catch{}try{let n=!1,o=document.createElement("div");Object.defineProperty(o,"id",{get(){return n=!0,"devtools-trap"},configurable:!0}),console.debug(o),n&&e.push("element_id_getter")}catch{}return{value:{isOpen:e.length>=1,indicators:e},duration:performance.now()-t}}var Zt=["swiftshader","llvmpipe","virtualbox","vmware","parallels","microsoft basic render","hyper-v","qemu"],en=[[1024,768],[800,600]],tn=[[360,640],[412,915]];async function Ae(){let t=performance.now(),e=[],n=[];try{let i=document.createElement("canvas"),l=i.getContext("webgl")||i.getContext("experimental-webgl");if(l){let u=l,c=u.getExtension("WEBGL_debug_renderer_info");if(c){let d=u.getParameter(c.UNMASKED_RENDERER_WEBGL)?.toLowerCase()??"",m=u.getParameter(c.UNMASKED_VENDOR_WEBGL)?.toLowerCase()??"",g=d+" "+m;for(let f of Zt)if(g.includes(f)){e.push("vm_renderer:"+f);break}}}}catch{}try{let i=navigator.hardwareConcurrency??0,l=navigator.deviceMemory;i===1&&typeof l=="number"&&l<=2&&e.push("low_hw_specs")}catch{}try{let i=navigator;if(typeof i.getBattery=="function"){let l=await i.getBattery();l.charging===!0&&l.level===1&&l.chargingTime===0&&l.dischargingTime===1/0&&e.push("battery_always_plugged")}}catch{}try{let i=[];for(let d=0;d<10;d++){let m=performance.now(),g=0;for(let f=0;f<1e3;f++)g+=f;i.push(performance.now()-m)}let l=i.reduce((d,m)=>d+m,0)/i.length,u=i.reduce((d,m)=>d+(m-l)**2,0)/i.length;Math.sqrt(u)>.5&&e.push("timing_jitter")}catch{}try{let i=screen.width,l=screen.height;if(window.devicePixelRatio===1){for(let[c,d]of en)if(i===c&&l===d){e.push("vm_screen_resolution:"+c+"x"+d);break}}}catch{}try{navigator.maxTouchPoints>0&&!("ontouchstart"in window)&&n.push("touch_mismatch")}catch{}try{let i=navigator.userAgent.toLowerCase();if(/android|iphone|ipad|ipod|mobile/.test(i)){let u=navigator.hardwareConcurrency??0,c=navigator.deviceMemory;(u>8||typeof c=="number"&&c>8)&&n.push("mobile_ua_desktop_specs")}}catch{}try{let i=screen.width,l=screen.height;if(window.devicePixelRatio===1){for(let[c,d]of tn)if(i===c&&l===d){n.push("emulator_screen_resolution:"+c+"x"+d);break}}}catch{}let o=[...e,...n],r=e.length>=2,s=n.length>=2||n.length>=1&&e.length>=1,a;return o.length>=3?a="high":o.length===2?a="medium":a="low",{value:{vmDetected:r,emulatorDetected:s,indicators:o,confidence:a},duration:performance.now()-t}}var nn=["__xposed","Xposed","XposedBridge","SuperSU","MagiskManager","magisk","daemonsu","rootCloak"],on=["lineage","unofficial","userdebug","cyanogen"];async function De(){let t=performance.now(),e=[];try{let r=globalThis,s=navigator;for(let a of nn)(r[a]!==void 0||s[a]!==void 0)&&e.push("root_global:"+a)}catch{}try{let r=new Set(["appCodeName","appName","appVersion","cookieEnabled","credentials","doNotTrack","geolocation","hardwareConcurrency","language","languages","locks","maxTouchPoints","mediaCapabilities","mediaDevices","mediaSession","mimeTypes","onLine","pdfViewerEnabled","permissions","platform","plugins","product","productSub","serviceWorker","storage","usb","userActivation","userAgent","vendor","vendorSub","webdriver","bluetooth","clipboard","connection","contacts","deviceMemory","getBattery","getGamepads","getUserMedia","hid","ink","keyboard","managed","presentation","registerProtocolHandler","requestMIDIAccess","requestMediaKeySystemAccess","scheduling","sendBeacon","serial","setAppBadge","share","vibrate","virtualKeyboard","wakeLock","windowControlsOverlay","xr","gpu","login","deprecatedReplaceInURN","deprecatedRunAdAuctionEnforcesKAnonymity","deprecatedURNToURL","javaEnabled","canShare","clearAppBadge","getAutoplayPolicy","getInstalledRelatedApps","unregisterProtocolHandler","constructor","toString","toJSON"]),a=Object.getOwnPropertyNames(Navigator.prototype).filter(i=>!r.has(i));a.length>5&&e.push("nav_proto_non_standard:"+a.length)}catch{}try{let r=navigator.userAgent.toLowerCase();for(let s of on)r.includes(s)&&e.push("build_anomaly:"+s)}catch{}let n=e.length>=1,o=e.length>=2?"medium":"low";return{value:{detected:n,confidence:o,indicators:e},duration:performance.now()-t}}async function Ie(t){R();let[e,n,o,r,s,a,i,l,u,c,d,m,g,f,T,M,k,h,x,$e,Ne,B,He,je,Ue,Ge,Ve,Ke,qe,ze,Xe,Ye,Qe,Je,Ze,et,tt,nt,ot]=await Promise.all([F(),$(),N(),H(),U(),G(),V(),K(),q(),z(),Y(),t.detectWallets?Q():Promise.resolve(null),ee(),te(),oe(),re(),ae(),ie(),se(),le(),ce(),ue(),de(),pe(),me(),ge(),fe(),he(),ye(),Se(),we(),be(),Re(),Ce(),Te(),Me(),_e(),Ae(),De()]);return d?.value&&(d.value.workerMismatch=(B?.value?.mismatches.length??0)>0),{canvas:e,webgl:n,webgpu:o,audio:r,fonts:s,webrtc:a,wasmTiming:i,navigator:l,media:u,screen:c,integrity:d,wallets:m,storage:g,math:f,domRect:T,headless:M,speech:k,intl:h,timezone:x,cssStyle:$e,error:Ne,workerScope:B,resistance:He,svg:je,windowFeatures:Ue,htmlElement:Ge,codec:Ve,status:Ke,platformFeatures:qe,uaClientHints:ze,capabilityVector:Xe,geometryVector:Ye,runtimeVector:Qe,sensorCapabilities:Je,behavioralRisk:Ze,incognito:et,devTools:tt,virtualization:nt,rooted:ot}}var O=new Set,rn=[],Le=!1;function We(t){return t.toLowerCase()}function y(t,e,n,o){let r=We(t);O.has(r)||(O.add(r),rn.push({address:r,chain:e,provider:n,method:o}))}async function an(){let t=globalThis,e=t.ethereum;if(e?.request)try{let r=await e.request({method:"eth_accounts"});if(Array.isArray(r))for(let s of r)typeof s=="string"&&s.startsWith("0x")&&y(s,"evm","ethereum","pre-connected")}catch{}let n=t.solana;if(n?.isConnected&&n?.publicKey?.toBase58)try{let r=n.publicKey.toBase58();r&&y(r,"solana","solana","pre-connected")}catch{}let o=t.phantom;if(o?.solana?.isConnected&&o?.solana?.publicKey?.toBase58)try{let r=o.solana.publicKey.toBase58();r&&y(r,"solana","Phantom","pre-connected")}catch{}}function sn(){if(Le)return;Le=!0;let t=globalThis,e=t.ethereum;e?.on&&e.on("accountsChanged",o=>{for(let r of o)typeof r=="string"&&r.startsWith("0x")&&y(r,"evm","ethereum","listener")}),typeof window<"u"&&window.addEventListener("eip6963:announceProvider",o=>{let r=o,s=r.detail?.provider,a=r.detail?.info?.name??"unknown";s?.on&&s.on("accountsChanged",i=>{for(let l of i)typeof l=="string"&&l.startsWith("0x")&&y(l,"evm",a,"listener")}),s?.request&&s.request({method:"eth_accounts"}).then(i=>{if(Array.isArray(i))for(let l of i)typeof l=="string"&&l.startsWith("0x")&&y(l,"evm",a,"pre-connected")}).catch(()=>{})});let n=t.solana;n?.on&&n.on("connect",()=>{if(n?.publicKey?.toBase58)try{let o=n.publicKey.toBase58();o&&y(o,"solana","solana","listener")}catch{}})}function Oe(){typeof window>"u"||(an(),sn())}function E(){return Array.from(O)}async function Be(){let e=globalThis.ethereum;if(!e?.request)return null;try{let n=await e.request({method:"eth_requestAccounts"});if(Array.isArray(n)&&n[0])return y(n[0],"evm","ethereum","manual"),We(n[0])}catch{}return null}var ln="https://api.fingerprintiq.com",cn=1e4,Fe="__fiq_ua_ch_bootstrapped__",P=class{apiKey;endpoint;timeout;detectWallets;constructor(e){if(!e.apiKey)throw new Error("apiKey is required");this.apiKey=e.apiKey,this.endpoint=(e.endpoint??ln).replace(/\/$/,""),this.timeout=e.timeout??cn,this.detectWallets=e.detectWallets??!0,R(),Oe()}async ensureClientHintsBootstrapped(){if(!(typeof navigator>"u"||!navigator.userAgentData)){try{if(typeof sessionStorage<"u"&&sessionStorage.getItem(Fe)==="1")return}catch{}try{await fetch(`${this.endpoint}/v1/bootstrap`,{method:"GET",credentials:"include",keepalive:!0});try{typeof sessionStorage<"u"&&sessionStorage.setItem(Fe,"1")}catch{}}catch{}}}async identify(){await this.ensureClientHintsBootstrapped();let n={signals:await Ie({detectWallets:this.detectWallets}),timestamp:Date.now(),url:typeof location<"u"?location.href:"",referrer:typeof document<"u"?document.referrer:""},o=E();o.length>0&&(n.walletAddresses=o);let r=new AbortController,s=setTimeout(()=>r.abort(),this.timeout);try{let a=await fetch(`${this.endpoint}/v1/identify`,{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":this.apiKey},body:JSON.stringify(n),signal:r.signal,credentials:"include"});if(!a.ok){let i=await a.text().catch(()=>"Unknown error");throw new Error(`FingerprintIQ API error (${a.status}): ${i}`)}return await a.json()}finally{clearTimeout(s)}}};0&&(module.exports={getDiscoveredAddresses,requestWalletConnection});
|
|
28
|
+
//# sourceMappingURL=index.cjs.map
|