fpscanner 1.0.2 → 1.0.4-beta.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/dist/detections/hasMismatchPlatformWorker.d.ts.map +1 -1
- package/dist/detections/hasMismatchWebGLInWorker.d.ts.map +1 -1
- package/dist/detections/hasMissingChromeObject.d.ts.map +1 -1
- package/dist/fpScanner.cjs.js +32 -16
- package/dist/fpScanner.es.js +233 -200
- package/dist/signals/worker.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/detections/hasMismatchPlatformWorker.ts +27 -1
- package/src/detections/hasMismatchWebGLInWorker.ts +15 -3
- package/src/detections/hasMissingChromeObject.ts +21 -1
- package/src/signals/worker.ts +40 -23
package/dist/fpScanner.es.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
function
|
|
1
|
+
function ie() {
|
|
2
2
|
return navigator.webdriver;
|
|
3
3
|
}
|
|
4
|
-
function
|
|
4
|
+
function ae() {
|
|
5
5
|
return navigator.userAgent;
|
|
6
6
|
}
|
|
7
|
-
function
|
|
7
|
+
function oe() {
|
|
8
8
|
return navigator.platform;
|
|
9
9
|
}
|
|
10
|
-
const l = "ERROR", r = "INIT", s = "NA",
|
|
11
|
-
function
|
|
10
|
+
const l = "ERROR", r = "INIT", s = "NA", v = "SKIPPED", g = "high", S = "low", se = "medium";
|
|
11
|
+
function f(t) {
|
|
12
12
|
let e = 0;
|
|
13
13
|
for (let n = 0, i = t.length; n < i; n++) {
|
|
14
14
|
let a = t.charCodeAt(n);
|
|
@@ -16,14 +16,14 @@ function p(t) {
|
|
|
16
16
|
}
|
|
17
17
|
return e.toString(16).padStart(8, "0");
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function m(t, e) {
|
|
20
20
|
for (const n in t)
|
|
21
21
|
t[n] = e;
|
|
22
22
|
}
|
|
23
|
-
function
|
|
23
|
+
function ce() {
|
|
24
24
|
return navigator.buildID === "20181001000000";
|
|
25
25
|
}
|
|
26
|
-
function
|
|
26
|
+
function le() {
|
|
27
27
|
try {
|
|
28
28
|
let t = !1;
|
|
29
29
|
const e = Error.prepareStackTrace;
|
|
@@ -36,25 +36,25 @@ function ce() {
|
|
|
36
36
|
return l;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
function
|
|
39
|
+
function ue() {
|
|
40
40
|
const t = {
|
|
41
41
|
vendor: r,
|
|
42
42
|
renderer: r
|
|
43
43
|
};
|
|
44
|
-
if (
|
|
45
|
-
return
|
|
44
|
+
if (ce())
|
|
45
|
+
return m(t, s), t;
|
|
46
46
|
try {
|
|
47
47
|
var e = document.createElement("canvas"), n = e.getContext("webgl") || e.getContext("experimental-webgl");
|
|
48
|
-
n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info") >= 0 ? (t.vendor = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL), t.renderer = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)) :
|
|
48
|
+
n.getSupportedExtensions().indexOf("WEBGL_debug_renderer_info") >= 0 ? (t.vendor = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_VENDOR_WEBGL), t.renderer = n.getParameter(n.getExtension("WEBGL_debug_renderer_info").UNMASKED_RENDERER_WEBGL)) : m(t, s);
|
|
49
49
|
} catch {
|
|
50
|
-
|
|
50
|
+
m(t, l);
|
|
51
51
|
}
|
|
52
52
|
return t;
|
|
53
53
|
}
|
|
54
|
-
function
|
|
54
|
+
function de() {
|
|
55
55
|
return "__pwInitScripts" in window || "__playwright__binding__" in window;
|
|
56
56
|
}
|
|
57
|
-
function
|
|
57
|
+
function ge() {
|
|
58
58
|
return navigator.hardwareConcurrency || s;
|
|
59
59
|
}
|
|
60
60
|
function he() {
|
|
@@ -71,15 +71,15 @@ function he() {
|
|
|
71
71
|
} catch {
|
|
72
72
|
t.push(-1);
|
|
73
73
|
}
|
|
74
|
-
}),
|
|
74
|
+
}), f(t.map(String).join(","));
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function me() {
|
|
77
77
|
return navigator.deviceMemory || s;
|
|
78
78
|
}
|
|
79
|
-
function
|
|
79
|
+
function pe() {
|
|
80
80
|
return eval.toString().length;
|
|
81
81
|
}
|
|
82
|
-
function
|
|
82
|
+
function fe() {
|
|
83
83
|
const t = {
|
|
84
84
|
timezone: r,
|
|
85
85
|
localeLanguage: r
|
|
@@ -95,7 +95,7 @@ function pe() {
|
|
|
95
95
|
}
|
|
96
96
|
return t;
|
|
97
97
|
}
|
|
98
|
-
function
|
|
98
|
+
function ve() {
|
|
99
99
|
return {
|
|
100
100
|
width: window.screen.width,
|
|
101
101
|
height: window.screen.height,
|
|
@@ -108,13 +108,13 @@ function fe() {
|
|
|
108
108
|
hasMultipleDisplays: typeof screen.isExtended < "u" ? screen.isExtended : s
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
|
-
function
|
|
111
|
+
function we() {
|
|
112
112
|
return {
|
|
113
113
|
languages: navigator.languages,
|
|
114
114
|
language: navigator.language
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
|
-
async function
|
|
117
|
+
async function ye() {
|
|
118
118
|
const t = {
|
|
119
119
|
vendor: r,
|
|
120
120
|
architecture: r,
|
|
@@ -126,13 +126,13 @@ async function we() {
|
|
|
126
126
|
const e = await navigator.gpu.requestAdapter();
|
|
127
127
|
e && (t.vendor = e.info.vendor, t.architecture = e.info.architecture, t.device = e.info.device, t.description = e.info.description);
|
|
128
128
|
} catch {
|
|
129
|
-
|
|
129
|
+
m(t, l);
|
|
130
130
|
}
|
|
131
131
|
else
|
|
132
|
-
|
|
132
|
+
m(t, s);
|
|
133
133
|
return t;
|
|
134
134
|
}
|
|
135
|
-
function
|
|
135
|
+
function be() {
|
|
136
136
|
const t = [
|
|
137
137
|
"__driver_evaluate",
|
|
138
138
|
"__webdriver_evaluate",
|
|
@@ -166,7 +166,7 @@ function ye() {
|
|
|
166
166
|
}
|
|
167
167
|
return e = e || !!document.__webdriver_script_fn || !!window.domAutomation || !!window.domAutomationController, e;
|
|
168
168
|
}
|
|
169
|
-
function
|
|
169
|
+
function Se() {
|
|
170
170
|
try {
|
|
171
171
|
const t = "webdriver", e = window.navigator;
|
|
172
172
|
if (!e[t] && !e.hasOwnProperty(t)) {
|
|
@@ -179,7 +179,7 @@ function be() {
|
|
|
179
179
|
return !1;
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
|
-
async function
|
|
182
|
+
async function Ce() {
|
|
183
183
|
const t = window.navigator, e = {
|
|
184
184
|
architecture: r,
|
|
185
185
|
bitness: r,
|
|
@@ -204,25 +204,25 @@ async function Se() {
|
|
|
204
204
|
]);
|
|
205
205
|
e.architecture = n.architecture, e.bitness = n.bitness, e.brands = n.brands, e.mobile = n.mobile, e.model = n.model, e.platform = n.platform, e.platformVersion = n.platformVersion, e.uaFullVersion = n.uaFullVersion;
|
|
206
206
|
} catch {
|
|
207
|
-
|
|
207
|
+
m(e, l);
|
|
208
208
|
}
|
|
209
209
|
else
|
|
210
|
-
|
|
210
|
+
m(e, s);
|
|
211
211
|
return e;
|
|
212
212
|
}
|
|
213
|
-
function
|
|
213
|
+
function Ae() {
|
|
214
214
|
if (!navigator.plugins) return !1;
|
|
215
215
|
const t = typeof navigator.plugins.toString == "function" ? navigator.plugins.toString() : navigator.plugins.constructor && typeof navigator.plugins.constructor.toString == "function" ? navigator.plugins.constructor.toString() : typeof navigator.plugins;
|
|
216
216
|
return t === "[object PluginArray]" || t === "[object MSPluginsCollection]" || t === "[object HTMLPluginsCollection]";
|
|
217
217
|
}
|
|
218
|
-
function
|
|
218
|
+
function Pe() {
|
|
219
219
|
if (!navigator.plugins) return s;
|
|
220
220
|
const t = [];
|
|
221
221
|
for (let e = 0; e < navigator.plugins.length; e++)
|
|
222
222
|
t.push(navigator.plugins[e].name);
|
|
223
|
-
return
|
|
223
|
+
return f(t.join(","));
|
|
224
224
|
}
|
|
225
|
-
function
|
|
225
|
+
function Me() {
|
|
226
226
|
return navigator.plugins ? navigator.plugins.length : s;
|
|
227
227
|
}
|
|
228
228
|
function xe() {
|
|
@@ -241,7 +241,7 @@ function We() {
|
|
|
241
241
|
return l;
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
function
|
|
244
|
+
function ke() {
|
|
245
245
|
const t = {
|
|
246
246
|
isValidPluginArray: r,
|
|
247
247
|
pluginCount: r,
|
|
@@ -250,9 +250,9 @@ function Me() {
|
|
|
250
250
|
pluginOverflow: r
|
|
251
251
|
};
|
|
252
252
|
try {
|
|
253
|
-
t.isValidPluginArray =
|
|
253
|
+
t.isValidPluginArray = Ae(), t.pluginCount = Me(), t.pluginNamesHash = Pe(), t.pluginConsistency1 = xe(), t.pluginOverflow = We();
|
|
254
254
|
} catch {
|
|
255
|
-
|
|
255
|
+
m(t, l);
|
|
256
256
|
}
|
|
257
257
|
return t;
|
|
258
258
|
}
|
|
@@ -276,12 +276,12 @@ async function Ee() {
|
|
|
276
276
|
webcams: e.videoinput
|
|
277
277
|
});
|
|
278
278
|
} else
|
|
279
|
-
return
|
|
279
|
+
return m(e, s), t(e);
|
|
280
280
|
} else
|
|
281
|
-
return
|
|
281
|
+
return m(e, s), t(e);
|
|
282
282
|
});
|
|
283
283
|
}
|
|
284
|
-
function
|
|
284
|
+
function De() {
|
|
285
285
|
const t = {
|
|
286
286
|
webdriver: r,
|
|
287
287
|
userAgent: r,
|
|
@@ -296,7 +296,7 @@ function ke() {
|
|
|
296
296
|
const i = e.contentWindow?.navigator;
|
|
297
297
|
t.webdriver = i.webdriver ?? !1, t.userAgent = i.userAgent ?? s, t.platform = i.platform ?? s, t.memory = i.deviceMemory ?? s, t.cpuCount = i.hardwareConcurrency ?? s, t.language = i.language ?? s;
|
|
298
298
|
} catch {
|
|
299
|
-
|
|
299
|
+
m(t, l);
|
|
300
300
|
} finally {
|
|
301
301
|
if (n)
|
|
302
302
|
try {
|
|
@@ -306,7 +306,7 @@ function ke() {
|
|
|
306
306
|
}
|
|
307
307
|
return t;
|
|
308
308
|
}
|
|
309
|
-
async function
|
|
309
|
+
async function _e() {
|
|
310
310
|
return new Promise((t) => {
|
|
311
311
|
const e = {
|
|
312
312
|
vendor: r,
|
|
@@ -318,33 +318,49 @@ async function De() {
|
|
|
318
318
|
cpuCount: r
|
|
319
319
|
};
|
|
320
320
|
let n = null, i = null, a = null;
|
|
321
|
-
const
|
|
321
|
+
const d = () => {
|
|
322
322
|
a && clearTimeout(a), n && n.terminate(), i && URL.revokeObjectURL(i);
|
|
323
323
|
};
|
|
324
324
|
try {
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
|
|
325
|
+
const p = `var fingerprintWorker = {
|
|
326
|
+
userAgent: 'NA',
|
|
327
|
+
language: 'NA',
|
|
328
|
+
cpuCount: 'NA',
|
|
329
|
+
platform: 'NA',
|
|
330
|
+
memory: 'NA',
|
|
331
|
+
vendor: 'NA',
|
|
332
|
+
renderer: 'NA'
|
|
333
|
+
};
|
|
334
|
+
try {
|
|
328
335
|
fingerprintWorker.userAgent = navigator.userAgent;
|
|
329
336
|
fingerprintWorker.language = navigator.language;
|
|
330
337
|
fingerprintWorker.cpuCount = navigator.hardwareConcurrency;
|
|
331
338
|
fingerprintWorker.platform = navigator.platform;
|
|
332
|
-
|
|
333
|
-
|
|
339
|
+
if (typeof navigator.deviceMemory !== 'undefined') {
|
|
340
|
+
fingerprintWorker.memory = navigator.deviceMemory;
|
|
341
|
+
}
|
|
334
342
|
|
|
335
|
-
var canvas = new OffscreenCanvas(1, 1);
|
|
336
|
-
fingerprintWorker.vendor = 'INIT';
|
|
337
|
-
fingerprintWorker.renderer = 'INIT';
|
|
338
|
-
var gl = canvas.getContext('webgl');
|
|
339
|
-
const isFirefox = navigator.userAgent.includes('Firefox');
|
|
340
343
|
try {
|
|
341
|
-
if (
|
|
342
|
-
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
343
|
-
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
344
|
-
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
345
|
-
} else {
|
|
344
|
+
if (typeof OffscreenCanvas === 'undefined') {
|
|
346
345
|
fingerprintWorker.vendor = 'NA';
|
|
347
346
|
fingerprintWorker.renderer = 'NA';
|
|
347
|
+
} else {
|
|
348
|
+
var canvas = new OffscreenCanvas(1, 1);
|
|
349
|
+
var gl = canvas.getContext('webgl');
|
|
350
|
+
var isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
|
|
351
|
+
if (gl && !isFirefox) {
|
|
352
|
+
var glExt = gl.getExtension('WEBGL_debug_renderer_info');
|
|
353
|
+
if (glExt) {
|
|
354
|
+
fingerprintWorker.vendor = gl.getParameter(glExt.UNMASKED_VENDOR_WEBGL);
|
|
355
|
+
fingerprintWorker.renderer = gl.getParameter(glExt.UNMASKED_RENDERER_WEBGL);
|
|
356
|
+
} else {
|
|
357
|
+
fingerprintWorker.vendor = 'NA';
|
|
358
|
+
fingerprintWorker.renderer = 'NA';
|
|
359
|
+
}
|
|
360
|
+
} else {
|
|
361
|
+
fingerprintWorker.vendor = 'NA';
|
|
362
|
+
fingerprintWorker.renderer = 'NA';
|
|
363
|
+
}
|
|
348
364
|
}
|
|
349
365
|
} catch (_) {
|
|
350
366
|
fingerprintWorker.vendor = 'ERROR';
|
|
@@ -353,26 +369,27 @@ async function De() {
|
|
|
353
369
|
self.postMessage(fingerprintWorker);
|
|
354
370
|
} catch (e) {
|
|
355
371
|
self.postMessage(fingerprintWorker);
|
|
356
|
-
}`, w = new Blob([
|
|
372
|
+
}`, w = new Blob([p], { type: "application/javascript" });
|
|
357
373
|
i = URL.createObjectURL(w), n = new Worker(i), a = window.setTimeout(() => {
|
|
358
|
-
|
|
374
|
+
d(), m(e, l), t(e);
|
|
359
375
|
}, 2e3), n.onmessage = function(o) {
|
|
360
376
|
try {
|
|
361
|
-
|
|
377
|
+
const h = (y) => typeof y > "u" ? s : y;
|
|
378
|
+
e.vendor = h(o.data.vendor), e.renderer = h(o.data.renderer), e.userAgent = h(o.data.userAgent), e.language = h(o.data.language), e.platform = h(o.data.platform), e.memory = h(o.data.memory), e.cpuCount = h(o.data.cpuCount);
|
|
362
379
|
} catch {
|
|
363
|
-
|
|
380
|
+
m(e, l);
|
|
364
381
|
} finally {
|
|
365
|
-
|
|
382
|
+
d(), t(e);
|
|
366
383
|
}
|
|
367
384
|
}, n.onerror = function() {
|
|
368
|
-
|
|
385
|
+
d(), m(e, l), t(e);
|
|
369
386
|
};
|
|
370
387
|
} catch {
|
|
371
|
-
|
|
388
|
+
d(), m(e, l), t(e);
|
|
372
389
|
}
|
|
373
390
|
});
|
|
374
391
|
}
|
|
375
|
-
function
|
|
392
|
+
function Re() {
|
|
376
393
|
const t = {
|
|
377
394
|
toSourceError: r,
|
|
378
395
|
hasToSource: !1
|
|
@@ -393,7 +410,7 @@ function _e() {
|
|
|
393
410
|
}
|
|
394
411
|
return t;
|
|
395
412
|
}
|
|
396
|
-
const
|
|
413
|
+
const C = [
|
|
397
414
|
'audio/mp4; codecs="mp4a.40.2"',
|
|
398
415
|
"audio/mpeg;",
|
|
399
416
|
'audio/webm; codecs="vorbis"',
|
|
@@ -402,7 +419,7 @@ const S = [
|
|
|
402
419
|
'audio/ogg; codecs="speex"',
|
|
403
420
|
'audio/ogg; codecs="flac"',
|
|
404
421
|
'audio/3gpp; codecs="samr"'
|
|
405
|
-
],
|
|
422
|
+
], A = [
|
|
406
423
|
'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',
|
|
407
424
|
'video/mp4; codecs="avc1.42E01E"',
|
|
408
425
|
'video/mp4; codecs="avc1.58A01E"',
|
|
@@ -416,7 +433,7 @@ const S = [
|
|
|
416
433
|
'video/3gpp; codecs="mp4v.20.8"',
|
|
417
434
|
'video/x-matroska; codecs="theora"'
|
|
418
435
|
];
|
|
419
|
-
function
|
|
436
|
+
function P(t, e) {
|
|
420
437
|
const n = {};
|
|
421
438
|
try {
|
|
422
439
|
const i = document.createElement(e);
|
|
@@ -432,7 +449,7 @@ function A(t, e) {
|
|
|
432
449
|
}
|
|
433
450
|
return n;
|
|
434
451
|
}
|
|
435
|
-
function
|
|
452
|
+
function M(t) {
|
|
436
453
|
const e = {}, n = window.MediaSource;
|
|
437
454
|
if (!n || typeof n.isTypeSupported != "function") {
|
|
438
455
|
for (const i of t)
|
|
@@ -452,14 +469,14 @@ function x(t) {
|
|
|
452
469
|
const e = window.RTCRtpReceiver;
|
|
453
470
|
if (e && typeof e.getCapabilities == "function") {
|
|
454
471
|
const n = e.getCapabilities(t);
|
|
455
|
-
return
|
|
472
|
+
return f(JSON.stringify(n));
|
|
456
473
|
}
|
|
457
474
|
return s;
|
|
458
475
|
} catch {
|
|
459
476
|
return l;
|
|
460
477
|
}
|
|
461
478
|
}
|
|
462
|
-
function
|
|
479
|
+
function Ie() {
|
|
463
480
|
const t = {
|
|
464
481
|
audioCanPlayTypeHash: s,
|
|
465
482
|
videoCanPlayTypeHash: s,
|
|
@@ -471,16 +488,16 @@ function Re() {
|
|
|
471
488
|
};
|
|
472
489
|
try {
|
|
473
490
|
t.hasMediaSource = !!window.MediaSource;
|
|
474
|
-
const e =
|
|
475
|
-
t.audioCanPlayTypeHash =
|
|
476
|
-
const i =
|
|
477
|
-
t.audioMediaSourceHash =
|
|
491
|
+
const e = P(C, "audio"), n = P(A, "video");
|
|
492
|
+
t.audioCanPlayTypeHash = f(JSON.stringify(e)), t.videoCanPlayTypeHash = f(JSON.stringify(n));
|
|
493
|
+
const i = M(C), a = M(A);
|
|
494
|
+
t.audioMediaSourceHash = f(JSON.stringify(i)), t.videoMediaSourceHash = f(JSON.stringify(a)), t.rtcAudioCapabilitiesHash = x("audio"), t.rtcVideoCapabilitiesHash = x("video");
|
|
478
495
|
} catch {
|
|
479
|
-
|
|
496
|
+
m(t, l);
|
|
480
497
|
}
|
|
481
498
|
return t;
|
|
482
499
|
}
|
|
483
|
-
async function
|
|
500
|
+
async function Le() {
|
|
484
501
|
return new Promise((t) => {
|
|
485
502
|
try {
|
|
486
503
|
const e = new Image(), n = document.createElement("canvas").getContext("2d");
|
|
@@ -494,22 +511,22 @@ async function Ie() {
|
|
|
494
511
|
}
|
|
495
512
|
});
|
|
496
513
|
}
|
|
497
|
-
function
|
|
514
|
+
function Te() {
|
|
498
515
|
var t = document.createElement("canvas");
|
|
499
516
|
t.width = 400, t.height = 200, t.style.display = "inline";
|
|
500
517
|
var e = t.getContext("2d");
|
|
501
518
|
try {
|
|
502
|
-
return e.rect(0, 0, 10, 10), e.rect(2, 2, 6, 6), e.textBaseline = "alphabetic", e.fillStyle = "#f60", e.fillRect(125, 1, 62, 20), e.fillStyle = "#069", e.font = "11pt no-real-font-123", e.fillText("Cwm fjordbank glyphs vext quiz, 😃", 2, 15), e.fillStyle = "rgba(102, 204, 0, 0.2)", e.font = "18pt Arial", e.fillText("Cwm fjordbank glyphs vext quiz, 😃", 4, 45), e.globalCompositeOperation = "multiply", e.fillStyle = "rgb(255,0,255)", e.beginPath(), e.arc(50, 50, 50, 0, 2 * Math.PI, !0), e.closePath(), e.fill(), e.fillStyle = "rgb(0,255,255)", e.beginPath(), e.arc(100, 50, 50, 0, 2 * Math.PI, !0), e.closePath(), e.fill(), e.fillStyle = "rgb(255,255,0)", e.beginPath(), e.arc(75, 100, 50, 0, 2 * Math.PI, !0), e.closePath(), e.fill(), e.fillStyle = "rgb(255,0,255)", e.arc(75, 75, 75, 0, 2 * Math.PI, !0), e.arc(75, 75, 25, 0, 2 * Math.PI, !0), e.fill("evenodd"),
|
|
519
|
+
return e.rect(0, 0, 10, 10), e.rect(2, 2, 6, 6), e.textBaseline = "alphabetic", e.fillStyle = "#f60", e.fillRect(125, 1, 62, 20), e.fillStyle = "#069", e.font = "11pt no-real-font-123", e.fillText("Cwm fjordbank glyphs vext quiz, 😃", 2, 15), e.fillStyle = "rgba(102, 204, 0, 0.2)", e.font = "18pt Arial", e.fillText("Cwm fjordbank glyphs vext quiz, 😃", 4, 45), e.globalCompositeOperation = "multiply", e.fillStyle = "rgb(255,0,255)", e.beginPath(), e.arc(50, 50, 50, 0, 2 * Math.PI, !0), e.closePath(), e.fill(), e.fillStyle = "rgb(0,255,255)", e.beginPath(), e.arc(100, 50, 50, 0, 2 * Math.PI, !0), e.closePath(), e.fill(), e.fillStyle = "rgb(255,255,0)", e.beginPath(), e.arc(75, 100, 50, 0, 2 * Math.PI, !0), e.closePath(), e.fill(), e.fillStyle = "rgb(255,0,255)", e.arc(75, 75, 75, 0, 2 * Math.PI, !0), e.arc(75, 75, 25, 0, 2 * Math.PI, !0), e.fill("evenodd"), f(t.toDataURL());
|
|
503
520
|
} catch {
|
|
504
521
|
return l;
|
|
505
522
|
}
|
|
506
523
|
}
|
|
507
|
-
async function
|
|
524
|
+
async function Oe() {
|
|
508
525
|
const t = {
|
|
509
526
|
hasModifiedCanvas: r,
|
|
510
527
|
canvasFingerprint: r
|
|
511
528
|
};
|
|
512
|
-
return t.hasModifiedCanvas = await
|
|
529
|
+
return t.hasModifiedCanvas = await Le(), t.canvasFingerprint = Te(), t;
|
|
513
530
|
}
|
|
514
531
|
function He() {
|
|
515
532
|
const t = ["deviceMemory", "hardwareConcurrency", "language", "languages", "platform"], e = [];
|
|
@@ -519,34 +536,34 @@ function He() {
|
|
|
519
536
|
}
|
|
520
537
|
return e.join("");
|
|
521
538
|
}
|
|
522
|
-
function
|
|
539
|
+
function Ue() {
|
|
523
540
|
return Math.random().toString(36).substring(2, 15);
|
|
524
541
|
}
|
|
525
|
-
function
|
|
542
|
+
function Ne() {
|
|
526
543
|
return (/* @__PURE__ */ new Date()).getTime();
|
|
527
544
|
}
|
|
528
|
-
function
|
|
545
|
+
function Fe() {
|
|
529
546
|
return window.location.href;
|
|
530
547
|
}
|
|
531
548
|
function W(t, e) {
|
|
532
549
|
const n = t.signals;
|
|
533
550
|
return e === "iframe" ? n.contexts.iframe.webdriver !== n.automation.webdriver || n.contexts.iframe.userAgent !== n.browser.userAgent || n.contexts.iframe.platform !== n.device.platform || n.contexts.iframe.memory !== n.device.memory || n.contexts.iframe.cpuCount !== n.device.cpuCount : n.contexts.webWorker.webdriver !== n.automation.webdriver || n.contexts.webWorker.userAgent !== n.browser.userAgent || n.contexts.webWorker.platform !== n.device.platform || n.contexts.webWorker.memory !== n.device.memory || n.contexts.webWorker.cpuCount !== n.device.cpuCount;
|
|
534
551
|
}
|
|
535
|
-
function
|
|
552
|
+
function Ge() {
|
|
536
553
|
const t = {
|
|
537
554
|
bitmask: r,
|
|
538
555
|
extensions: []
|
|
539
|
-
}, e = document.body.hasAttribute("data-gr-ext-installed"), n = typeof window.ethereum < "u", i = document.getElementById("coupon-birds-drop-div") !== null, a = document.querySelector("deepl-input-controller") !== null,
|
|
556
|
+
}, e = document.body.hasAttribute("data-gr-ext-installed"), n = typeof window.ethereum < "u", i = document.getElementById("coupon-birds-drop-div") !== null, a = document.querySelector("deepl-input-controller") !== null, d = document.getElementById("monica-content-root") !== null, p = document.querySelector("chatgpt-sidebar") !== null, w = typeof window.__REQUESTLY__ < "u", o = Array.from(document.querySelectorAll("*")).filter((h) => h.tagName.toLowerCase().startsWith("veepn-")).length > 0;
|
|
540
557
|
return t.bitmask = [
|
|
541
558
|
e ? "1" : "0",
|
|
542
559
|
n ? "1" : "0",
|
|
543
560
|
i ? "1" : "0",
|
|
544
561
|
a ? "1" : "0",
|
|
545
|
-
|
|
546
|
-
|
|
562
|
+
d ? "1" : "0",
|
|
563
|
+
p ? "1" : "0",
|
|
547
564
|
w ? "1" : "0",
|
|
548
565
|
o ? "1" : "0"
|
|
549
|
-
].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"), i && t.extensions.push("coupon-birds"), a && t.extensions.push("deepl"),
|
|
566
|
+
].join(""), e && t.extensions.push("grammarly"), n && t.extensions.push("metamask"), i && t.extensions.push("coupon-birds"), a && t.extensions.push("deepl"), d && t.extensions.push("monica-ai"), p && t.extensions.push("sider-ai"), w && t.extensions.push("requestly"), o && t.extensions.push("veepn"), t;
|
|
550
567
|
}
|
|
551
568
|
function c(t) {
|
|
552
569
|
try {
|
|
@@ -555,7 +572,7 @@ function c(t) {
|
|
|
555
572
|
return !1;
|
|
556
573
|
}
|
|
557
574
|
}
|
|
558
|
-
function
|
|
575
|
+
function Ve() {
|
|
559
576
|
const t = {
|
|
560
577
|
bitmask: r,
|
|
561
578
|
chrome: c(() => "chrome" in window),
|
|
@@ -608,7 +625,7 @@ function Be() {
|
|
|
608
625
|
window.matchMedia(`(color: ${n})`).matches && (e = n);
|
|
609
626
|
t.colorDepth = e;
|
|
610
627
|
} catch {
|
|
611
|
-
|
|
628
|
+
m(t, l);
|
|
612
629
|
}
|
|
613
630
|
return t;
|
|
614
631
|
}
|
|
@@ -616,83 +633,99 @@ function je(t) {
|
|
|
616
633
|
const e = t.signals.device.screenResolution;
|
|
617
634
|
return e.width === 800 && e.height === 600 || e.availableWidth === 800 && e.availableHeight === 600 || e.innerWidth === 800 && e.innerHeight === 600;
|
|
618
635
|
}
|
|
619
|
-
function Ne(t) {
|
|
620
|
-
return t.signals.automation.webdriver === !0;
|
|
621
|
-
}
|
|
622
636
|
function ze(t) {
|
|
623
|
-
return
|
|
637
|
+
return t.signals.automation.webdriver === !0;
|
|
624
638
|
}
|
|
625
639
|
function $e(t) {
|
|
626
|
-
return t.signals.automation.
|
|
640
|
+
return !!t.signals.automation.selenium;
|
|
627
641
|
}
|
|
628
642
|
function Qe(t) {
|
|
629
|
-
return t.signals.automation.
|
|
643
|
+
return t.signals.automation.cdp === !0;
|
|
630
644
|
}
|
|
631
645
|
function qe(t) {
|
|
632
|
-
return
|
|
646
|
+
return t.signals.automation.playwright === !0;
|
|
633
647
|
}
|
|
634
648
|
function Ke(t) {
|
|
635
|
-
return typeof t.signals.device.
|
|
649
|
+
return typeof t.signals.device.memory != "number" ? !1 : t.signals.device.memory > 32 || t.signals.device.memory < 0.25;
|
|
636
650
|
}
|
|
637
651
|
function Je(t) {
|
|
638
|
-
|
|
639
|
-
return t.signals.browser.features.chrome === !1 && typeof e == "string" && e.includes("Chrome");
|
|
652
|
+
return typeof t.signals.device.cpuCount != "number" ? !1 : t.signals.device.cpuCount > 70;
|
|
640
653
|
}
|
|
641
654
|
function Ye(t) {
|
|
642
|
-
return t.
|
|
655
|
+
return t.includes("Android") || t.includes("iPhone") || t.includes("iPod") || t.includes("iPad");
|
|
643
656
|
}
|
|
644
657
|
function Ze(t) {
|
|
645
|
-
|
|
658
|
+
const e = t.signals.browser.userAgent;
|
|
659
|
+
return typeof e != "string" || !e.includes("Chrome") || Ye(e) ? !1 : t.signals.browser.features.chrome === !1;
|
|
646
660
|
}
|
|
647
661
|
function Xe(t) {
|
|
648
|
-
|
|
649
|
-
return e.vendor === l || e.renderer === l || n.vendor === s || n.renderer === s || e.vendor === f ? !1 : e.vendor !== n.vendor || e.renderer !== n.renderer;
|
|
662
|
+
return t.signals.contexts.iframe.webdriver === !0;
|
|
650
663
|
}
|
|
651
664
|
function et(t) {
|
|
652
|
-
return t.signals.contexts.webWorker.
|
|
665
|
+
return t.signals.contexts.webWorker.webdriver === !0;
|
|
666
|
+
}
|
|
667
|
+
function b(t) {
|
|
668
|
+
return typeof t != "string" || t.length === 0 ? !0 : t === s || t === l || t === v || t === r;
|
|
653
669
|
}
|
|
654
670
|
function tt(t) {
|
|
671
|
+
const e = t.signals.contexts.webWorker, n = t.signals.graphics.webGL;
|
|
672
|
+
return b(n.vendor) || b(n.renderer) || b(e.vendor) || b(e.renderer) ? !1 : e.vendor !== n.vendor || e.renderer !== n.renderer;
|
|
673
|
+
}
|
|
674
|
+
function rt(t, e) {
|
|
675
|
+
const n = t.includes("iPad"), i = e.includes("iPad");
|
|
676
|
+
if (n === i)
|
|
677
|
+
return !1;
|
|
678
|
+
const a = (d) => d === "MacIntel" || d === "MacPPC";
|
|
679
|
+
return a(t) || a(e);
|
|
680
|
+
}
|
|
681
|
+
function nt(t) {
|
|
682
|
+
if (t.signals.contexts.webWorker.platform === s || t.signals.contexts.webWorker.platform === l || t.signals.contexts.webWorker.platform === v)
|
|
683
|
+
return !1;
|
|
684
|
+
const e = t.signals.device.platform, n = t.signals.contexts.webWorker.platform;
|
|
685
|
+
return !(e === n || rt(e, n));
|
|
686
|
+
}
|
|
687
|
+
function it(t) {
|
|
655
688
|
return t.signals.contexts.iframe.platform === s || t.signals.contexts.iframe.platform === l ? !1 : t.signals.device.platform !== t.signals.contexts.iframe.platform;
|
|
656
689
|
}
|
|
657
|
-
function
|
|
690
|
+
function at(t) {
|
|
658
691
|
return t.signals.automation.webdriverWritable === !0;
|
|
659
692
|
}
|
|
660
|
-
function
|
|
693
|
+
function ot(t) {
|
|
661
694
|
return t.signals.graphics.webGL.renderer.includes("SwiftShader");
|
|
662
695
|
}
|
|
663
|
-
function
|
|
696
|
+
function st(t) {
|
|
664
697
|
return t.signals.locale.internationalization.timezone === "UTC";
|
|
665
698
|
}
|
|
666
|
-
function
|
|
699
|
+
function ct(t) {
|
|
667
700
|
const e = t.signals.locale.languages.languages, n = t.signals.locale.languages.language;
|
|
668
701
|
return n && e && Array.isArray(e) && e.length > 0 ? e[0] !== n : !1;
|
|
669
702
|
}
|
|
670
|
-
function
|
|
703
|
+
function lt(t) {
|
|
671
704
|
return !!(t.signals.browser.features.chrome && t.signals.browser.etsl !== 33 || t.signals.browser.features.safari && t.signals.browser.etsl !== 37 || t.signals.browser.userAgent.includes("Firefox") && t.signals.browser.etsl !== 37);
|
|
672
705
|
}
|
|
673
|
-
function
|
|
706
|
+
function ut(t) {
|
|
674
707
|
return [
|
|
675
708
|
t.signals.browser.userAgent,
|
|
676
709
|
t.signals.contexts.iframe.userAgent,
|
|
677
710
|
t.signals.contexts.webWorker.userAgent
|
|
678
711
|
].some((n) => /bot|headless/i.test(n.toLowerCase()));
|
|
679
712
|
}
|
|
680
|
-
function
|
|
713
|
+
function dt(t) {
|
|
681
714
|
const e = t.signals.graphics.webgpu, n = t.signals.graphics.webGL, i = t.signals.browser.userAgent;
|
|
682
715
|
return !!((n.vendor.includes("Apple") || n.renderer.includes("Apple")) && !i.includes("Mac") || e.vendor.includes("apple") && !i.includes("Mac") || e.vendor.includes("apple") && !n.renderer.includes("Apple"));
|
|
683
716
|
}
|
|
684
|
-
function
|
|
717
|
+
function gt(t) {
|
|
685
718
|
const e = t.signals.device.platform, n = t.signals.browser.userAgent, i = t.signals.browser.highEntropyValues.platform;
|
|
686
719
|
return !!(n.includes("Mac") && (e.includes("Win") || e.includes("Linux")) || n.includes("Windows") && (e.includes("Mac") || e.includes("Linux")) || n.includes("Linux") && (e.includes("Mac") || e.includes("Win")) || i !== l && i !== s && (i.includes("Mac") && (e.includes("Win") || e.includes("Linux")) || i.includes("Windows") && (e.includes("Mac") || e.includes("Linux")) || i.includes("Linux") && (e.includes("Mac") || e.includes("Win"))));
|
|
687
720
|
}
|
|
688
|
-
async function
|
|
721
|
+
async function ht(t, e) {
|
|
689
722
|
const n = new TextEncoder().encode(e), i = new TextEncoder().encode(t), a = new Uint8Array(i.length);
|
|
690
|
-
for (let
|
|
691
|
-
a[
|
|
692
|
-
const
|
|
693
|
-
return btoa(
|
|
723
|
+
for (let p = 0; p < i.length; p++)
|
|
724
|
+
a[p] = i[p] ^ n[p % n.length];
|
|
725
|
+
const d = String.fromCharCode(...a);
|
|
726
|
+
return btoa(d);
|
|
694
727
|
}
|
|
695
|
-
class
|
|
728
|
+
class pt {
|
|
696
729
|
constructor() {
|
|
697
730
|
this.fingerprint = {
|
|
698
731
|
signals: {
|
|
@@ -921,7 +954,7 @@ class ht {
|
|
|
921
954
|
*/
|
|
922
955
|
generateFingerprintScannerId() {
|
|
923
956
|
try {
|
|
924
|
-
const e = this.fingerprint.signals, n = this.fingerprint.fastBotDetectionDetails, i = "FS1",
|
|
957
|
+
const e = this.fingerprint.signals, n = this.fingerprint.fastBotDetectionDetails, i = "FS1", d = [
|
|
925
958
|
n.headlessChromeScreenResolution.detected,
|
|
926
959
|
n.hasWebdriver.detected,
|
|
927
960
|
n.hasWebdriverWritable.detected,
|
|
@@ -944,19 +977,19 @@ class ht {
|
|
|
944
977
|
n.hasGPUMismatch.detected,
|
|
945
978
|
n.hasPlatformMismatch.detected
|
|
946
979
|
// Add other detection rules output here
|
|
947
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
980
|
+
].map((u) => u ? "1" : "0").join(""), p = [
|
|
948
981
|
e.automation.webdriver === !0,
|
|
949
982
|
e.automation.webdriverWritable === !0,
|
|
950
983
|
e.automation.selenium === !0,
|
|
951
984
|
e.automation.cdp === !0,
|
|
952
985
|
e.automation.playwright === !0
|
|
953
|
-
].map((u) => u ? "1" : "0").join(""), w =
|
|
986
|
+
].map((u) => u ? "1" : "0").join(""), w = f(String(e.automation.navigatorPropertyDescriptors)).slice(0, 4), o = `${p}h${w}`, h = typeof e.device.screenResolution.width == "number" ? e.device.screenResolution.width : 0, y = typeof e.device.screenResolution.height == "number" ? e.device.screenResolution.height : 0, k = typeof e.device.cpuCount == "number" ? String(e.device.cpuCount).padStart(2, "0") : "00", E = typeof e.device.memory == "number" ? String(Math.round(e.device.memory)).padStart(2, "0") : "00", D = [
|
|
954
987
|
e.device.screenResolution.hasMultipleDisplays === !0,
|
|
955
988
|
e.device.mediaQueries.prefersReducedMotion === !0,
|
|
956
989
|
e.device.mediaQueries.prefersReducedTransparency === !0,
|
|
957
990
|
e.device.mediaQueries.hover === !0,
|
|
958
991
|
e.device.mediaQueries.anyHover === !0
|
|
959
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
992
|
+
].map((u) => u ? "1" : "0").join(""), _ = [
|
|
960
993
|
e.device.platform,
|
|
961
994
|
e.device.screenResolution.pixelDepth,
|
|
962
995
|
e.device.screenResolution.colorDepth,
|
|
@@ -968,7 +1001,7 @@ class ht {
|
|
|
968
1001
|
e.device.mediaQueries.pointer,
|
|
969
1002
|
e.device.mediaQueries.anyPointer,
|
|
970
1003
|
e.device.mediaQueries.colorDepth
|
|
971
|
-
].map((u) => String(u)).join("|"),
|
|
1004
|
+
].map((u) => String(u)).join("|"), R = f(_).slice(0, 6), I = `${h}x${y}c${k}m${E}b${D}h${R}`, L = typeof e.browser.features.bitmask == "string" ? e.browser.features.bitmask : "0000000000", T = typeof e.browser.extensions.bitmask == "string" ? e.browser.extensions.bitmask : "00000000", O = [
|
|
972
1005
|
e.browser.plugins.isValidPluginArray === !0,
|
|
973
1006
|
e.browser.plugins.pluginConsistency1 === !0,
|
|
974
1007
|
e.browser.plugins.pluginOverflow === !0,
|
|
@@ -986,9 +1019,9 @@ class ht {
|
|
|
986
1019
|
e.browser.highEntropyValues.platformVersion,
|
|
987
1020
|
e.browser.highEntropyValues.uaFullVersion,
|
|
988
1021
|
e.browser.highEntropyValues.mobile
|
|
989
|
-
].map((u) => String(u)).join("|"),
|
|
1022
|
+
].map((u) => String(u)).join("|"), U = f(H).slice(0, 6), N = `f${L}e${T}p${O}h${U}`, F = [
|
|
990
1023
|
e.graphics.canvas.hasModifiedCanvas === !0
|
|
991
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
1024
|
+
].map((u) => u ? "1" : "0").join(""), G = [
|
|
992
1025
|
e.graphics.webGL.vendor,
|
|
993
1026
|
e.graphics.webGL.renderer,
|
|
994
1027
|
e.graphics.webgpu.vendor,
|
|
@@ -996,26 +1029,26 @@ class ht {
|
|
|
996
1029
|
e.graphics.webgpu.device,
|
|
997
1030
|
e.graphics.webgpu.description,
|
|
998
1031
|
e.graphics.canvas.canvasFingerprint
|
|
999
|
-
].map((u) => String(u)).join("|"),
|
|
1032
|
+
].map((u) => String(u)).join("|"), V = f(G).slice(0, 6), B = `${F}h${V}`, j = [
|
|
1000
1033
|
e.codecs.hasMediaSource === !0
|
|
1001
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
1034
|
+
].map((u) => u ? "1" : "0").join(""), z = [
|
|
1002
1035
|
e.codecs.audioCanPlayTypeHash,
|
|
1003
1036
|
e.codecs.videoCanPlayTypeHash,
|
|
1004
1037
|
e.codecs.audioMediaSourceHash,
|
|
1005
1038
|
e.codecs.videoMediaSourceHash,
|
|
1006
1039
|
e.codecs.rtcAudioCapabilitiesHash,
|
|
1007
1040
|
e.codecs.rtcVideoCapabilitiesHash
|
|
1008
|
-
].map((u) => String(u)).join("|"),
|
|
1041
|
+
].map((u) => String(u)).join("|"), $ = f(z).slice(0, 6), Q = `${j}h${$}`, q = typeof e.locale.languages.language == "string" ? e.locale.languages.language.slice(0, 2).toLowerCase() : "xx", K = Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.length : 0, J = (typeof e.locale.internationalization.timezone == "string" ? e.locale.internationalization.timezone : "unknown").replace(/[\/\s]/g, "-"), Y = [
|
|
1009
1042
|
e.locale.internationalization.timezone,
|
|
1010
1043
|
e.locale.internationalization.localeLanguage,
|
|
1011
1044
|
Array.isArray(e.locale.languages.languages) ? e.locale.languages.languages.join(",") : e.locale.languages.languages,
|
|
1012
1045
|
e.locale.languages.language
|
|
1013
|
-
].map((u) => String(u)).join("|"),
|
|
1046
|
+
].map((u) => String(u)).join("|"), Z = f(Y).slice(0, 4), X = `${q}${K}t${J}_h${Z}`, ee = [
|
|
1014
1047
|
W(this.fingerprint, "iframe"),
|
|
1015
1048
|
W(this.fingerprint, "worker"),
|
|
1016
1049
|
e.contexts.iframe.webdriver === !0,
|
|
1017
1050
|
e.contexts.webWorker.webdriver === !0
|
|
1018
|
-
].map((u) => u ? "1" : "0").join(""),
|
|
1051
|
+
].map((u) => u ? "1" : "0").join(""), te = [
|
|
1019
1052
|
e.contexts.iframe.userAgent,
|
|
1020
1053
|
e.contexts.iframe.platform,
|
|
1021
1054
|
e.contexts.iframe.memory,
|
|
@@ -1028,17 +1061,17 @@ class ht {
|
|
|
1028
1061
|
e.contexts.webWorker.language,
|
|
1029
1062
|
e.contexts.webWorker.vendor,
|
|
1030
1063
|
e.contexts.webWorker.renderer
|
|
1031
|
-
].map((u) => String(u)).join("|"),
|
|
1064
|
+
].map((u) => String(u)).join("|"), re = f(te).slice(0, 6), ne = `${ee}h${re}`;
|
|
1032
1065
|
return [
|
|
1033
1066
|
i,
|
|
1034
|
-
|
|
1067
|
+
d,
|
|
1035
1068
|
o,
|
|
1036
|
-
|
|
1037
|
-
|
|
1069
|
+
I,
|
|
1070
|
+
N,
|
|
1038
1071
|
B,
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1072
|
+
Q,
|
|
1073
|
+
X,
|
|
1074
|
+
ne
|
|
1042
1075
|
].join("_");
|
|
1043
1076
|
} catch (e) {
|
|
1044
1077
|
return console.error("Error generating fingerprint scanner id", e), l;
|
|
@@ -1048,34 +1081,34 @@ class ht {
|
|
|
1048
1081
|
const n = "__DEFAULT_FPSCANNER_KEY__";
|
|
1049
1082
|
return n.length > 20 && n.indexOf("DEFAULT") > 0 && n.indexOf("FPSCANNER") > 0 && console.warn(
|
|
1050
1083
|
'[fpscanner] WARNING: Using default encryption key! Run "npx fpscanner build --key=your-secret-key" to inject your own key. See: https://github.com/antoinevastel/fpscanner#advanced-custom-builds'
|
|
1051
|
-
), await
|
|
1084
|
+
), await ht(JSON.stringify(e), n);
|
|
1052
1085
|
}
|
|
1053
1086
|
/**
|
|
1054
1087
|
* Detection rules with name and severity.
|
|
1055
1088
|
*/
|
|
1056
1089
|
getDetectionRules() {
|
|
1057
1090
|
return [
|
|
1058
|
-
{ name: "headlessChromeScreenResolution", severity:
|
|
1059
|
-
{ name: "hasWebdriver", severity:
|
|
1060
|
-
{ name: "hasWebdriverWritable", severity:
|
|
1061
|
-
{ name: "hasSeleniumProperty", severity:
|
|
1062
|
-
{ name: "hasCDP", severity:
|
|
1063
|
-
{ name: "hasPlaywright", severity:
|
|
1064
|
-
{ name: "hasImpossibleDeviceMemory", severity:
|
|
1065
|
-
{ name: "hasHighCPUCount", severity:
|
|
1066
|
-
{ name: "hasMissingChromeObject", severity:
|
|
1067
|
-
{ name: "hasWebdriverIframe", severity:
|
|
1068
|
-
{ name: "hasWebdriverWorker", severity:
|
|
1069
|
-
{ name: "hasMismatchWebGLInWorker", severity:
|
|
1070
|
-
{ name: "hasMismatchPlatformIframe", severity:
|
|
1071
|
-
{ name: "hasMismatchPlatformWorker", severity:
|
|
1072
|
-
{ name: "hasSwiftshaderRenderer", severity:
|
|
1073
|
-
{ name: "hasUTCTimezone", severity:
|
|
1074
|
-
{ name: "hasMismatchLanguages", severity:
|
|
1075
|
-
{ name: "hasInconsistentEtsl", severity:
|
|
1076
|
-
{ name: "hasBotUserAgent", severity:
|
|
1077
|
-
{ name: "hasGPUMismatch", severity:
|
|
1078
|
-
{ name: "hasPlatformMismatch", severity:
|
|
1091
|
+
{ name: "headlessChromeScreenResolution", severity: g, test: je },
|
|
1092
|
+
{ name: "hasWebdriver", severity: g, test: ze },
|
|
1093
|
+
{ name: "hasWebdriverWritable", severity: g, test: at },
|
|
1094
|
+
{ name: "hasSeleniumProperty", severity: g, test: $e },
|
|
1095
|
+
{ name: "hasCDP", severity: g, test: Qe },
|
|
1096
|
+
{ name: "hasPlaywright", severity: g, test: qe },
|
|
1097
|
+
{ name: "hasImpossibleDeviceMemory", severity: g, test: Ke },
|
|
1098
|
+
{ name: "hasHighCPUCount", severity: g, test: Je },
|
|
1099
|
+
{ name: "hasMissingChromeObject", severity: g, test: Ze },
|
|
1100
|
+
{ name: "hasWebdriverIframe", severity: g, test: Xe },
|
|
1101
|
+
{ name: "hasWebdriverWorker", severity: g, test: et },
|
|
1102
|
+
{ name: "hasMismatchWebGLInWorker", severity: g, test: tt },
|
|
1103
|
+
{ name: "hasMismatchPlatformIframe", severity: g, test: it },
|
|
1104
|
+
{ name: "hasMismatchPlatformWorker", severity: g, test: nt },
|
|
1105
|
+
{ name: "hasSwiftshaderRenderer", severity: S, test: ot },
|
|
1106
|
+
{ name: "hasUTCTimezone", severity: se, test: st },
|
|
1107
|
+
{ name: "hasMismatchLanguages", severity: S, test: ct },
|
|
1108
|
+
{ name: "hasInconsistentEtsl", severity: g, test: lt },
|
|
1109
|
+
{ name: "hasBotUserAgent", severity: g, test: ut },
|
|
1110
|
+
{ name: "hasGPUMismatch", severity: g, test: dt },
|
|
1111
|
+
{ name: "hasPlatformMismatch", severity: g, test: gt }
|
|
1079
1112
|
];
|
|
1080
1113
|
}
|
|
1081
1114
|
runDetectionRules() {
|
|
@@ -1112,59 +1145,59 @@ class ht {
|
|
|
1112
1145
|
return n;
|
|
1113
1146
|
}
|
|
1114
1147
|
async collectFingerprint(e = { encrypt: !0 }) {
|
|
1115
|
-
const { encrypt: n = !0, skipWorker: i = !1 } = e, a = this.fingerprint.signals,
|
|
1148
|
+
const { encrypt: n = !0, skipWorker: i = !1 } = e, a = this.fingerprint.signals, d = {
|
|
1116
1149
|
// Automation signals
|
|
1117
|
-
webdriver: this.collectSignal(
|
|
1118
|
-
webdriverWritable: this.collectSignal(
|
|
1119
|
-
selenium: this.collectSignal(
|
|
1120
|
-
cdp: this.collectSignal(
|
|
1121
|
-
playwright: this.collectSignal(
|
|
1150
|
+
webdriver: this.collectSignal(ie),
|
|
1151
|
+
webdriverWritable: this.collectSignal(Se),
|
|
1152
|
+
selenium: this.collectSignal(be),
|
|
1153
|
+
cdp: this.collectSignal(le),
|
|
1154
|
+
playwright: this.collectSignal(de),
|
|
1122
1155
|
navigatorPropertyDescriptors: this.collectSignal(He),
|
|
1123
1156
|
// Device signals
|
|
1124
|
-
cpuCount: this.collectSignal(
|
|
1125
|
-
memory: this.collectSignal(
|
|
1126
|
-
platform: this.collectSignal(
|
|
1127
|
-
screenResolution: this.collectSignal(
|
|
1157
|
+
cpuCount: this.collectSignal(ge),
|
|
1158
|
+
memory: this.collectSignal(me),
|
|
1159
|
+
platform: this.collectSignal(oe),
|
|
1160
|
+
screenResolution: this.collectSignal(ve),
|
|
1128
1161
|
multimediaDevices: this.collectSignal(Ee),
|
|
1129
1162
|
mediaQueries: this.collectSignal(Be),
|
|
1130
1163
|
// Browser signals
|
|
1131
|
-
userAgent: this.collectSignal(
|
|
1132
|
-
browserFeatures: this.collectSignal(
|
|
1133
|
-
plugins: this.collectSignal(
|
|
1134
|
-
browserExtensions: this.collectSignal(
|
|
1135
|
-
highEntropyValues: this.collectSignal(
|
|
1136
|
-
etsl: this.collectSignal(
|
|
1164
|
+
userAgent: this.collectSignal(ae),
|
|
1165
|
+
browserFeatures: this.collectSignal(Ve),
|
|
1166
|
+
plugins: this.collectSignal(ke),
|
|
1167
|
+
browserExtensions: this.collectSignal(Ge),
|
|
1168
|
+
highEntropyValues: this.collectSignal(Ce),
|
|
1169
|
+
etsl: this.collectSignal(pe),
|
|
1137
1170
|
maths: this.collectSignal(he),
|
|
1138
|
-
toSourceError: this.collectSignal(
|
|
1171
|
+
toSourceError: this.collectSignal(Re),
|
|
1139
1172
|
// Graphics signals
|
|
1140
|
-
webGL: this.collectSignal(
|
|
1141
|
-
webgpu: this.collectSignal(
|
|
1142
|
-
canvas: this.collectSignal(
|
|
1173
|
+
webGL: this.collectSignal(ue),
|
|
1174
|
+
webgpu: this.collectSignal(ye),
|
|
1175
|
+
canvas: this.collectSignal(Oe),
|
|
1143
1176
|
// Codecs
|
|
1144
|
-
mediaCodecs: this.collectSignal(
|
|
1177
|
+
mediaCodecs: this.collectSignal(Ie),
|
|
1145
1178
|
// Locale signals
|
|
1146
|
-
internationalization: this.collectSignal(
|
|
1147
|
-
languages: this.collectSignal(
|
|
1179
|
+
internationalization: this.collectSignal(fe),
|
|
1180
|
+
languages: this.collectSignal(we),
|
|
1148
1181
|
// Context signals
|
|
1149
|
-
iframe: this.collectSignal(
|
|
1182
|
+
iframe: this.collectSignal(De),
|
|
1150
1183
|
webWorker: i ? Promise.resolve({
|
|
1151
|
-
webdriver:
|
|
1152
|
-
userAgent:
|
|
1153
|
-
platform:
|
|
1154
|
-
memory:
|
|
1155
|
-
cpuCount:
|
|
1156
|
-
language:
|
|
1157
|
-
vendor:
|
|
1158
|
-
renderer:
|
|
1159
|
-
}) : this.collectSignal(
|
|
1184
|
+
webdriver: v,
|
|
1185
|
+
userAgent: v,
|
|
1186
|
+
platform: v,
|
|
1187
|
+
memory: v,
|
|
1188
|
+
cpuCount: v,
|
|
1189
|
+
language: v,
|
|
1190
|
+
vendor: v,
|
|
1191
|
+
renderer: v
|
|
1192
|
+
}) : this.collectSignal(_e),
|
|
1160
1193
|
// Meta signals
|
|
1161
|
-
nonce: this.collectSignal(
|
|
1162
|
-
time: this.collectSignal(
|
|
1163
|
-
url: this.collectSignal(
|
|
1164
|
-
},
|
|
1165
|
-
return a.automation.webdriver = o.webdriver, a.automation.webdriverWritable = o.webdriverWritable, a.automation.selenium = o.selenium, a.automation.cdp = o.cdp, a.automation.playwright = o.playwright, a.automation.navigatorPropertyDescriptors = o.navigatorPropertyDescriptors, a.device.cpuCount = o.cpuCount, a.device.memory = o.memory, a.device.platform = o.platform, a.device.screenResolution = o.screenResolution, a.device.multimediaDevices = o.multimediaDevices, a.device.mediaQueries = o.mediaQueries, a.browser.userAgent = o.userAgent, a.browser.features = o.browserFeatures, a.browser.plugins = o.plugins, a.browser.extensions = o.browserExtensions, a.browser.highEntropyValues = o.highEntropyValues, a.browser.etsl = o.etsl, a.browser.maths = o.maths, a.browser.toSourceError = o.toSourceError, a.graphics.webGL = o.webGL, a.graphics.webgpu = o.webgpu, a.graphics.canvas = o.canvas, a.codecs = o.mediaCodecs, a.locale.internationalization = o.internationalization, a.locale.languages = o.languages, a.contexts.iframe = o.iframe, a.contexts.webWorker = o.webWorker, this.fingerprint.nonce = o.nonce, this.fingerprint.time = o.time, this.fingerprint.url = o.url, this.fingerprint.fastBotDetectionDetails = this.runDetectionRules(), this.fingerprint.fastBotDetection = Object.values(this.fingerprint.fastBotDetectionDetails).some((
|
|
1194
|
+
nonce: this.collectSignal(Ue),
|
|
1195
|
+
time: this.collectSignal(Ne),
|
|
1196
|
+
url: this.collectSignal(Fe)
|
|
1197
|
+
}, p = Object.keys(d), w = await Promise.all(Object.values(d)), o = Object.fromEntries(p.map((h, y) => [h, w[y]]));
|
|
1198
|
+
return a.automation.webdriver = o.webdriver, a.automation.webdriverWritable = o.webdriverWritable, a.automation.selenium = o.selenium, a.automation.cdp = o.cdp, a.automation.playwright = o.playwright, a.automation.navigatorPropertyDescriptors = o.navigatorPropertyDescriptors, a.device.cpuCount = o.cpuCount, a.device.memory = o.memory, a.device.platform = o.platform, a.device.screenResolution = o.screenResolution, a.device.multimediaDevices = o.multimediaDevices, a.device.mediaQueries = o.mediaQueries, a.browser.userAgent = o.userAgent, a.browser.features = o.browserFeatures, a.browser.plugins = o.plugins, a.browser.extensions = o.browserExtensions, a.browser.highEntropyValues = o.highEntropyValues, a.browser.etsl = o.etsl, a.browser.maths = o.maths, a.browser.toSourceError = o.toSourceError, a.graphics.webGL = o.webGL, a.graphics.webgpu = o.webgpu, a.graphics.canvas = o.canvas, a.codecs = o.mediaCodecs, a.locale.internationalization = o.internationalization, a.locale.languages = o.languages, a.contexts.iframe = o.iframe, a.contexts.webWorker = o.webWorker, this.fingerprint.nonce = o.nonce, this.fingerprint.time = o.time, this.fingerprint.url = o.url, this.fingerprint.fastBotDetectionDetails = this.runDetectionRules(), this.fingerprint.fastBotDetection = Object.values(this.fingerprint.fastBotDetectionDetails).some((h) => h.detected), this.fingerprint.fsid = this.generateFingerprintScannerId(), n ? await this.encryptFingerprint(JSON.stringify(this.fingerprint)) : this.fingerprint;
|
|
1166
1199
|
}
|
|
1167
1200
|
}
|
|
1168
1201
|
export {
|
|
1169
|
-
|
|
1202
|
+
pt as default
|
|
1170
1203
|
};
|