@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.
@@ -0,0 +1,406 @@
1
+ /** Configuration for the FingerprintIQ SDK */
2
+ interface FingerprintIQConfig {
3
+ apiKey: string;
4
+ endpoint?: string;
5
+ timeout?: number;
6
+ detectWallets?: boolean;
7
+ }
8
+ interface SignalResult<T = unknown> {
9
+ value: T;
10
+ duration: number;
11
+ }
12
+ interface CanvasSignal {
13
+ hash: string;
14
+ isFarbled: boolean;
15
+ }
16
+ interface WebGLSignal {
17
+ renderer: string;
18
+ vendor: string;
19
+ extensions: string[];
20
+ params: Record<string, number>;
21
+ gpuTimingMs: number | null;
22
+ isSoftwareRenderer: boolean;
23
+ }
24
+ interface WebGPUSignal {
25
+ available: boolean;
26
+ vendor: string;
27
+ architecture: string;
28
+ device: string;
29
+ description: string;
30
+ features: string[];
31
+ }
32
+ interface AudioSignal {
33
+ hash: string;
34
+ sampleRate: number;
35
+ maxChannelCount: number;
36
+ isSuspended: boolean;
37
+ }
38
+ interface FontSignal {
39
+ detected: string[];
40
+ count: number;
41
+ isSpoofed: boolean;
42
+ }
43
+ interface WebRTCSignal {
44
+ localIpHash: string | null;
45
+ candidateCount: number;
46
+ candidateTypes: string[];
47
+ multipleNics: boolean;
48
+ }
49
+ interface WasmTimingSignal {
50
+ medianMs: number;
51
+ stddevMs: number;
52
+ }
53
+ interface NavigatorSignal {
54
+ hardwareConcurrency: number;
55
+ deviceMemory: number | null;
56
+ maxTouchPoints: number;
57
+ languages: string[];
58
+ platform: string;
59
+ cookieEnabled: boolean;
60
+ doNotTrack: string | null;
61
+ keyboardLayout: string | null;
62
+ connectionType: string | null;
63
+ hasBluetooth: boolean;
64
+ hasUsb: boolean;
65
+ hasHid: boolean;
66
+ hasSerial: boolean;
67
+ hasWakeLock: boolean;
68
+ hasGpu: boolean;
69
+ bluetoothAvailable: boolean | null;
70
+ }
71
+ interface MediaSignal {
72
+ colorScheme: string;
73
+ contrast: string;
74
+ forcedColors: boolean;
75
+ pointer: string;
76
+ hover: string;
77
+ displayMode: string;
78
+ reducedMotion: boolean;
79
+ colorGamut: string;
80
+ }
81
+ interface ScreenSignal {
82
+ width: number;
83
+ height: number;
84
+ availWidth: number;
85
+ availHeight: number;
86
+ colorDepth: number;
87
+ pixelRatio: number;
88
+ isFirefoxRfp: boolean;
89
+ }
90
+ interface IntegritySignal {
91
+ tamperedApis: string[];
92
+ workerMismatch: boolean;
93
+ lieScore: number;
94
+ }
95
+ interface WalletSignal {
96
+ detected: string[];
97
+ count: number;
98
+ evmProviders: string[];
99
+ solanaProviders: string[];
100
+ multipleWallets: boolean;
101
+ versions: Record<string, string>;
102
+ }
103
+ interface StorageSignal {
104
+ localStorage: boolean;
105
+ sessionStorage: boolean;
106
+ indexedDb: boolean;
107
+ cookie: boolean;
108
+ survivingMechanisms: string[];
109
+ }
110
+ interface MathSignal {
111
+ values: number[];
112
+ hash: string;
113
+ }
114
+ interface DOMRectSignal {
115
+ hash: string;
116
+ emojiHash: string;
117
+ rectCount: number;
118
+ }
119
+ interface HeadlessSignal {
120
+ isHeadless: boolean;
121
+ markers: string[];
122
+ }
123
+ interface SpeechSignal {
124
+ voiceCount: number;
125
+ localVoices: string[];
126
+ remoteVoiceCount: number;
127
+ defaultVoice: string | null;
128
+ hash: string;
129
+ }
130
+ interface IntlSignal {
131
+ locales: string[];
132
+ formattedNumber: string;
133
+ formattedRelativeTime: string;
134
+ formattedList: string;
135
+ localeSpoofed: boolean;
136
+ hash: string;
137
+ }
138
+ interface TimezoneSignal {
139
+ reported: string;
140
+ computed: string | null;
141
+ offsetHistorical: number;
142
+ isSpoofed: boolean;
143
+ hash: string;
144
+ }
145
+ interface CssStyleSignal {
146
+ propertyCount: number;
147
+ systemColorHash: string;
148
+ systemFontHash: string;
149
+ hash: string;
150
+ }
151
+ interface ErrorSignal {
152
+ messages: string[];
153
+ hash: string;
154
+ }
155
+ interface WorkerScopeSignal {
156
+ workerNavigator: {
157
+ hardwareConcurrency: number;
158
+ platform: string;
159
+ languages: string[];
160
+ userAgent: string;
161
+ } | null;
162
+ workerWebGL: {
163
+ renderer: string;
164
+ vendor: string;
165
+ } | null;
166
+ mismatches: string[];
167
+ }
168
+ interface ResistanceSignal {
169
+ browser: string | null;
170
+ extensions: string[];
171
+ timerPrecisionMs: number;
172
+ }
173
+ interface SvgSignal {
174
+ hash: string;
175
+ textLengths: number[];
176
+ }
177
+ interface WindowFeaturesSignal {
178
+ propertyCount: number;
179
+ webkitCount: number;
180
+ mozCount: number;
181
+ litterKeys: string[];
182
+ hash: string;
183
+ }
184
+ interface HtmlElementSignal {
185
+ propertyCount: number;
186
+ hash: string;
187
+ }
188
+ interface CodecSignal {
189
+ matrix: Record<string, {
190
+ canPlay: string;
191
+ mediaSource: boolean;
192
+ mediaRecorder: boolean;
193
+ }>;
194
+ hash: string;
195
+ }
196
+ interface StatusSignal {
197
+ timingResolution: number;
198
+ maxStackSize: number;
199
+ storageQuotaMB: number | null;
200
+ battery: {
201
+ charging: boolean;
202
+ level: number;
203
+ } | null;
204
+ heapLimit: number | null;
205
+ }
206
+ interface PlatformFeaturesSignal {
207
+ features: Record<string, boolean>;
208
+ estimatedPlatform: string;
209
+ hash: string;
210
+ }
211
+ interface UAClientHintsBrand {
212
+ brand: string;
213
+ version: string;
214
+ }
215
+ interface UAClientHintsSignal {
216
+ available: boolean;
217
+ mobile: boolean | null;
218
+ platform: string | null;
219
+ architecture: string | null;
220
+ bitness: string | null;
221
+ model: string | null;
222
+ platformVersion: string | null;
223
+ wow64: boolean | null;
224
+ formFactors: string[];
225
+ brands: UAClientHintsBrand[];
226
+ fullVersionList: UAClientHintsBrand[];
227
+ hash: string | null;
228
+ }
229
+ interface CapabilityVectorSignal {
230
+ pdfViewerEnabled: boolean | null;
231
+ globalPrivacyControl: boolean | null;
232
+ hasPdfPlugin: boolean;
233
+ pluginCount: number | null;
234
+ hasWebGPU: boolean;
235
+ hasVirtualKeyboard: boolean;
236
+ hasSpeechSynthesis: boolean;
237
+ hasSpeechRecognition: boolean;
238
+ hasMediaCapabilities: boolean;
239
+ hasKeyboardLayoutApi: boolean;
240
+ hasBluetooth: boolean;
241
+ hasUsb: boolean;
242
+ hasHid: boolean;
243
+ hasSerial: boolean;
244
+ hasHighEntropyUaHints: boolean;
245
+ suspiciousFlags: string[];
246
+ hash: string;
247
+ }
248
+ interface GeometryVectorSignal {
249
+ screen: {
250
+ width: number;
251
+ height: number;
252
+ availWidth: number;
253
+ availHeight: number;
254
+ };
255
+ window: {
256
+ innerWidth: number;
257
+ innerHeight: number;
258
+ outerWidth: number;
259
+ outerHeight: number;
260
+ devicePixelRatio: number;
261
+ };
262
+ visualViewport: {
263
+ width: number;
264
+ height: number;
265
+ scale: number;
266
+ offsetLeft: number;
267
+ offsetTop: number;
268
+ } | null;
269
+ orientation: {
270
+ type: string | null;
271
+ angle: number | null;
272
+ };
273
+ chromeInsetX: number | null;
274
+ chromeInsetY: number | null;
275
+ suspiciousFlags: string[];
276
+ hash: string;
277
+ }
278
+ interface RuntimeVectorSignal {
279
+ hardwareConcurrency: number;
280
+ deviceMemory: number | null;
281
+ timingResolutionMs: number | null;
282
+ maxStackSize: number | null;
283
+ storageQuotaMB: number | null;
284
+ jsHeapUsedMB: number | null;
285
+ jsHeapTotalMB: number | null;
286
+ jsHeapLimitMB: number | null;
287
+ networkRttMs: number | null;
288
+ downlinkMbps: number | null;
289
+ saveData: boolean | null;
290
+ suspiciousFlags: string[];
291
+ hash: string;
292
+ }
293
+ interface SensorCapabilitiesSignal {
294
+ apis: Record<string, boolean>;
295
+ permissionStates: Record<string, string | null>;
296
+ policyBlocked: string[];
297
+ availableCount: number;
298
+ hash: string;
299
+ }
300
+ interface BehavioralRiskSignal {
301
+ elapsedMs: number;
302
+ totalEventCount: number;
303
+ pointerMoveCount: number;
304
+ pointerDistancePx: number;
305
+ pointerDirectionChanges: number;
306
+ pointerStraightness: number | null;
307
+ clickCount: number;
308
+ scrollEventCount: number;
309
+ scrollBurstCount: number;
310
+ keyEventCount: number;
311
+ inputEventCount: number;
312
+ focusTransitions: number;
313
+ blurTransitions: number;
314
+ visibilityTransitions: number;
315
+ meanPointerIntervalMs: number | null;
316
+ meanKeyIntervalMs: number | null;
317
+ classification: "insufficient_data" | "low_interaction" | "human_like" | "synthetic_like";
318
+ riskScore: number;
319
+ reasons: string[];
320
+ hash: string;
321
+ }
322
+ interface IncognitoSignal {
323
+ isPrivate: boolean;
324
+ method: string | null;
325
+ }
326
+ interface DevToolsSignal {
327
+ isOpen: boolean;
328
+ indicators: string[];
329
+ }
330
+ interface VirtualizationSignal {
331
+ vmDetected: boolean;
332
+ emulatorDetected: boolean;
333
+ indicators: string[];
334
+ confidence: "low" | "medium" | "high";
335
+ }
336
+ interface RootedSignal {
337
+ detected: boolean;
338
+ confidence: "low" | "medium";
339
+ indicators: string[];
340
+ }
341
+ interface ClientSignals {
342
+ canvas: SignalResult<CanvasSignal> | null;
343
+ webgl: SignalResult<WebGLSignal> | null;
344
+ webgpu: SignalResult<WebGPUSignal> | null;
345
+ audio: SignalResult<AudioSignal> | null;
346
+ fonts: SignalResult<FontSignal> | null;
347
+ webrtc: SignalResult<WebRTCSignal> | null;
348
+ wasmTiming: SignalResult<WasmTimingSignal> | null;
349
+ navigator: SignalResult<NavigatorSignal> | null;
350
+ media: SignalResult<MediaSignal> | null;
351
+ screen: SignalResult<ScreenSignal> | null;
352
+ integrity: SignalResult<IntegritySignal> | null;
353
+ wallets: SignalResult<WalletSignal> | null;
354
+ storage: SignalResult<StorageSignal> | null;
355
+ math: SignalResult<MathSignal> | null;
356
+ domRect: SignalResult<DOMRectSignal> | null;
357
+ headless: SignalResult<HeadlessSignal> | null;
358
+ speech: SignalResult<SpeechSignal> | null;
359
+ intl: SignalResult<IntlSignal> | null;
360
+ timezone: SignalResult<TimezoneSignal> | null;
361
+ cssStyle: SignalResult<CssStyleSignal> | null;
362
+ error: SignalResult<ErrorSignal> | null;
363
+ workerScope: SignalResult<WorkerScopeSignal> | null;
364
+ resistance: SignalResult<ResistanceSignal> | null;
365
+ svg: SignalResult<SvgSignal> | null;
366
+ windowFeatures: SignalResult<WindowFeaturesSignal> | null;
367
+ htmlElement: SignalResult<HtmlElementSignal> | null;
368
+ codec: SignalResult<CodecSignal> | null;
369
+ status: SignalResult<StatusSignal> | null;
370
+ platformFeatures: SignalResult<PlatformFeaturesSignal> | null;
371
+ uaClientHints: SignalResult<UAClientHintsSignal> | null;
372
+ capabilityVector: SignalResult<CapabilityVectorSignal> | null;
373
+ geometryVector: SignalResult<GeometryVectorSignal> | null;
374
+ runtimeVector: SignalResult<RuntimeVectorSignal> | null;
375
+ sensorCapabilities: SignalResult<SensorCapabilitiesSignal> | null;
376
+ behavioralRisk: SignalResult<BehavioralRiskSignal> | null;
377
+ incognito: SignalResult<IncognitoSignal> | null;
378
+ devTools: SignalResult<DevToolsSignal> | null;
379
+ virtualization: SignalResult<VirtualizationSignal> | null;
380
+ rooted: SignalResult<RootedSignal> | null;
381
+ }
382
+ interface IdentifyResponse {
383
+ visitorId: string;
384
+ confidence: number;
385
+ botProbability: number;
386
+ signals: Record<string, unknown>;
387
+ wallets?: WalletSignal;
388
+ timestamp: number;
389
+ visitCount: number;
390
+ firstSeenAt: number;
391
+ }
392
+
393
+ declare function getDiscoveredAddresses(): string[];
394
+ declare function requestWalletConnection(): Promise<string | null>;
395
+
396
+ declare class FingerprintIQ {
397
+ private readonly apiKey;
398
+ private readonly endpoint;
399
+ private readonly timeout;
400
+ private readonly detectWallets;
401
+ constructor(config: FingerprintIQConfig);
402
+ private ensureClientHintsBootstrapped;
403
+ identify(): Promise<IdentifyResponse>;
404
+ }
405
+
406
+ export { type AudioSignal, type BehavioralRiskSignal, type CanvasSignal, type CapabilityVectorSignal, type ClientSignals, type CodecSignal, type CssStyleSignal, type DOMRectSignal, type ErrorSignal, type FingerprintIQConfig, type FontSignal, type GeometryVectorSignal, type HeadlessSignal, type HtmlElementSignal, type IdentifyResponse, type IntegritySignal, type IntlSignal, type MathSignal, type MediaSignal, type NavigatorSignal, type PlatformFeaturesSignal, type ResistanceSignal, type RuntimeVectorSignal, type ScreenSignal, type SensorCapabilitiesSignal, type SpeechSignal, type StatusSignal, type StorageSignal, type SvgSignal, type TimezoneSignal, type UAClientHintsBrand, type UAClientHintsSignal, type WalletSignal, type WasmTimingSignal, type WebGLSignal, type WebGPUSignal, type WebRTCSignal, type WindowFeaturesSignal, type WorkerScopeSignal, FingerprintIQ as default, getDiscoveredAddresses, requestWalletConnection };
@@ -0,0 +1,28 @@
1
+ "use strict";var FingerprintIQ=(()=>{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});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)}}};return ct(un);})();
28
+ //# sourceMappingURL=index.global.js.map