@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/dist/index.d.ts
ADDED
|
@@ -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
|