@thumbmarkjs/thumbmarkjs 1.9.1 → 1.10.1
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/README.md +96 -102
- package/dist/thumbmark.cjs +2 -0
- package/dist/thumbmark.cjs.map +1 -0
- package/dist/thumbmark.esm.d.ts +6 -0
- package/dist/thumbmark.esm.js +1 -1
- package/dist/thumbmark.esm.js.map +1 -1
- package/dist/thumbmark.umd.js +1 -1
- package/dist/thumbmark.umd.js.map +1 -1
- package/dist/types/factory.d.ts +0 -4
- package/dist/types/options.d.ts +6 -0
- package/package.json +107 -71
- package/src/factory.ts +0 -4
- package/src/functions/api.ts +19 -6
- package/src/functions/index.ts +1 -1
- package/src/options.ts +7 -0
- package/dist/thumbmark.cjs.js +0 -2
- package/dist/thumbmark.cjs.js.map +0 -1
- package/dist/types/components/intl/index.d.ts +0 -2
- package/dist/types/components/mediaDevices/index.d.ts +0 -2
- package/src/components/canvas/index.test.ts +0 -38
- package/src/components/hardware/index.test.ts +0 -80
- package/src/components/intl/index.test.ts +0 -124
- package/src/components/intl/index.ts +0 -41
- package/src/components/mediaDevices/index.test.ts +0 -120
- package/src/components/mediaDevices/index.ts +0 -26
- package/src/components/system/browser.test.ts +0 -108
- package/src/components/webgl/index.test.ts +0 -223
- package/src/functions/api.test.ts +0 -366
- package/src/functions/filterComponents.test.ts +0 -273
- package/src/functions/functions.test.ts +0 -142
- package/src/functions/metadata.test.ts +0 -211
- package/src/options.test.ts +0 -10
- package/src/thumbmark.custom-components.test.ts +0 -87
- package/src/thumbmark.test.ts +0 -59
- package/src/utils/cache.test.ts +0 -95
- package/src/utils/raceAll.test.ts +0 -86
- package/src/utils/stableStringify.test.ts +0 -335
- package/src/utils/visitorId.test.ts +0 -102
package/README.md
CHANGED
|
@@ -1,150 +1,144 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
<picture>
|
|
2
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://www.thumbmarkjs.com/logo-dark.svg?v=2">
|
|
3
|
+
<source media="(prefers-color-scheme: light)" srcset="https://www.thumbmarkjs.com/logo-light.svg?v=2">
|
|
4
|
+
<img alt="ThumbmarkJS" src="https://www.thumbmarkjs.com/logo-dark.svg?v=2" height="60">
|
|
5
|
+
</picture><br><br>
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/@thumbmarkjs/thumbmarkjs)
|
|
8
|
+
[](https://www.npmjs.com/package/@thumbmarkjs/thumbmarkjs)
|
|
9
|
+
[](https://www.jsdelivr.com/package/npm/@thumbmarkjs/thumbmarkjs)
|
|
10
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
ThumbmarkJS is a free, open-source JavaScript browser fingerprinting library. Use it to identify returning visitors, detect fraud and bots, and more — all client-side, with no backend required.
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
MIT-licensed and commercially usable, it is used on **60,000+ websites**, generating over a **billion fingerprints every month**.
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
- Produces significantly **more unique fingerprints** by adding server-side components
|
|
16
|
-
- Adds smart signals such as bot, vpn, tor & datacenter traffic detection, and also **threat level**
|
|
17
|
-
- Provides uniqueness scoring
|
|
16
|
+
## Try it now
|
|
18
17
|
|
|
18
|
+
Visit the [live demo →](https://www.thumbmarkjs.com/resources/demo/) to see your browser's fingerprint and the individual components that make it up.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Or paste this into your browser's developer console to get your fingerprint hash and component breakdown directly:
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
```javascript
|
|
23
|
+
import('https://cdn.jsdelivr.net/npm/@thumbmarkjs/thumbmarkjs/dist/thumbmark.umd.js')
|
|
24
|
+
.then(() => {
|
|
25
|
+
const tm = new ThumbmarkJS.Thumbmark();
|
|
26
|
+
tm.get().then((res) => console.log(res));
|
|
27
|
+
})
|
|
28
|
+
```
|
|
23
29
|
|
|
30
|
+
## Performance
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
The client library achieves ~80% uniqueness across general browser populations. Mac/Safari users can show higher collision rates or higher noise depending on the audience.
|
|
26
33
|
|
|
27
|
-
|
|
34
|
+
### Need higher accuracy? Try the ThumbmarkJS API
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
The open-source library is great for many use cases, but if you need production-grade accuracy for fraud prevention or user identification, the [ThumbmarkJS API](https://www.thumbmarkjs.com) takes it significantly further. A free tier is available.
|
|
30
37
|
|
|
31
|
-
|
|
32
|
-
The visitor ID further improves both uniqueness and especially stability. Detailed statistics coming.
|
|
38
|
+
The API combines the client-side signals with server-side analysis — including TLS handshake details, HTTP headers, and connection-level data — to produce fingerprints with over 99% uniqueness. It also adds smart signals: bot detection, VPN and TOR detection, datacenter traffic identification, and a threat level score per visitor.
|
|
33
39
|
|
|
34
|
-
|
|
40
|
+
[Learn more at thumbmarkjs.com →](https://www.thumbmarkjs.com)
|
|
35
41
|
|
|
36
|
-
|
|
42
|
+
## Installation
|
|
37
43
|
|
|
38
|
-
|
|
44
|
+
### NPM
|
|
39
45
|
|
|
40
|
-
|
|
46
|
+
```bash
|
|
47
|
+
npm install @thumbmarkjs/thumbmarkjs
|
|
48
|
+
```
|
|
41
49
|
|
|
42
|
-
|
|
50
|
+
> ⚠️ ThumbmarkJS runs in the browser. It requires browser APIs to compute fingerprint components and cannot run server-side.
|
|
43
51
|
|
|
44
|
-
|
|
52
|
+
See the [NPM usage guide →](https://docs.thumbmarkjs.com/docs/installation/usage-npm)
|
|
45
53
|
|
|
46
|
-
|
|
54
|
+
### CDN (jsDelivr)
|
|
47
55
|
|
|
48
|
-
Transpiled bundles are available on [
|
|
56
|
+
Transpiled bundles are available on [jsDelivr](https://www.jsdelivr.com/package/npm/@thumbmarkjs/thumbmarkjs):
|
|
49
57
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
| Format | URL |
|
|
59
|
+
|---|---|
|
|
60
|
+
| UMD | `https://cdn.jsdelivr.net/npm/@thumbmarkjs/thumbmarkjs/dist/thumbmark.umd.js` |
|
|
61
|
+
| CommonJS | `https://cdn.jsdelivr.net/npm/@thumbmarkjs/thumbmarkjs/dist/thumbmark.cjs.js` |
|
|
62
|
+
| ESM | `https://cdn.jsdelivr.net/npm/@thumbmarkjs/thumbmarkjs/dist/thumbmark.esm.js` |
|
|
54
63
|
|
|
55
|
-
|
|
64
|
+
## Documentation
|
|
56
65
|
|
|
57
|
-
|
|
66
|
+
Full documentation at **[docs.thumbmarkjs.com](https://docs.thumbmarkjs.com/docs/intro)** — including installation, configuration, integrations, and the API reference.
|
|
58
67
|
|
|
59
|
-
|
|
60
|
-
.then(() => {
|
|
61
|
-
const tm = new ThumbmarkJS.Thumbmark();
|
|
62
|
-
tm.get().then((res) => {
|
|
63
|
-
console.log(res)
|
|
64
|
-
})
|
|
65
|
-
})
|
|
68
|
+
### Configuration
|
|
66
69
|
|
|
67
|
-
|
|
70
|
+
Options are passed to the `Thumbmark` constructor:
|
|
68
71
|
|
|
69
|
-
|
|
72
|
+
```javascript
|
|
73
|
+
const tm = new ThumbmarkJS.Thumbmark({
|
|
74
|
+
option_key: option_value
|
|
75
|
+
})
|
|
76
|
+
```
|
|
70
77
|
|
|
71
|
-
|
|
78
|
+
| Option | Type | Default | Description |
|
|
79
|
+
|---|---|---|---|
|
|
80
|
+
| `api_key` | string | — | API key from [thumbmarkjs.com](https://thumbmarkjs.com). Enables server-side signals and visitorId. |
|
|
81
|
+
| `exclude` | string[] | — | Components to exclude from the fingerprint hash. Excluding a top-level component also improves performance. |
|
|
82
|
+
| `include` | string[] | — | Only include these components. `exclude` still applies. |
|
|
83
|
+
| `permissions_to_check` | string[] | — | Limit which browser permissions are checked. Permissions are the slowest component to resolve. |
|
|
84
|
+
| `timeout` | integer | 5000 | Component timeout in milliseconds. |
|
|
85
|
+
| `logging` | boolean | true | At most 0.01% of runs collect anonymous logs to improve the library. Has no effect on users. |
|
|
86
|
+
| `performance` | boolean | false | When true, includes per-component resolution time in milliseconds. |
|
|
87
|
+
| `stabilize` | string[] | `['private', 'iframe']` | Preset exclusion list for stability across private browsing and iframes. |
|
|
88
|
+
| `metadata` | varies | — | Passed to webhooks. Does not affect the fingerprint. |
|
|
72
89
|
|
|
73
|
-
|
|
90
|
+
See the [configuration reference →](https://docs.thumbmarkjs.com/docs/configuration/options)
|
|
74
91
|
|
|
75
|
-
|
|
76
|
-
npm install @thumbmarkjs/thumbmarkjs
|
|
77
|
-
```
|
|
92
|
+
### Integrations
|
|
78
93
|
|
|
79
|
-
|
|
94
|
+
React, Vue, Angular, and Preact integration plugins are available. [See the integrations docs →](https://docs.thumbmarkjs.com/docs/category/integrations)
|
|
80
95
|
|
|
81
|
-
|
|
96
|
+
### Fingerprint components
|
|
82
97
|
|
|
83
|
-
|
|
98
|
+
ThumbmarkJS combines multiple browser fingerprinting techniques to maximise uniqueness. The following signals are collected client-side:
|
|
84
99
|
|
|
85
|
-
|
|
100
|
+
- Audio fingerprinting
|
|
101
|
+
- Canvas fingerprinting
|
|
102
|
+
- WebGL fingerprinting and GPU info
|
|
103
|
+
- Available fonts and rendering behaviour
|
|
104
|
+
- Hardware details
|
|
105
|
+
- Browser languages and timezone
|
|
106
|
+
- Math precision characteristics
|
|
107
|
+
- Browser permissions
|
|
108
|
+
- Installed plugins
|
|
109
|
+
- Screen details and media queries
|
|
110
|
+
- Speech synthesis voices
|
|
111
|
+
- System and browser details
|
|
112
|
+
- WebRTC fingerprinting
|
|
86
113
|
|
|
87
|
-
|
|
114
|
+
The following are available via the API only:
|
|
88
115
|
|
|
89
|
-
|
|
116
|
+
- TLS handshake details
|
|
117
|
+
- HTTP headers
|
|
118
|
+
- Connection and IP details
|
|
90
119
|
|
|
91
|
-
|
|
92
|
-
const tm = new ThumbmarkJS.Thumbmark({
|
|
93
|
-
option_key: option_value
|
|
94
|
-
})
|
|
95
|
-
```
|
|
120
|
+
See the [full components reference →](https://docs.thumbmarkjs.com/docs/category/components)
|
|
96
121
|
|
|
97
|
-
|
|
98
|
-
| - | - | - | - |
|
|
99
|
-
| api_key | string | 'ae8679607bf79f......' | Setting this to a key you've obtained from [https://thumbmarkjs.com](thumbmarkjs.com) makes thumbmarks incredibly more unique and enables **visitorId**
|
|
100
|
-
| exclude | string[] | ['webgl', 'system.browser.version'] | Removes components from the fingerprint hash. An excluded top-level component improves performance. |
|
|
101
|
-
| include | string[] | ['webgl', 'system.browser.version'] | Only includes the listed components. exclude still excludes included components. |
|
|
102
|
-
| permissions_to_check | string[] | ['gyroscope', 'accelerometer'] | Checks only selected permissions. Like 'include', but more low-level. Permissions take the longest to resolve, so this is if you need to cut down some milliseconds. |
|
|
103
|
-
| timeout | integer | 5000 | Default is 5000. Component timeout in milliseconds.
|
|
104
|
-
| logging | boolean | true | Default is true. Some releases collect at most 0.01% logs to improve the library. This doesn't affect the user. |
|
|
105
|
-
| performance | boolean | false | Default is false. Setting to true includes millisecond performance of component resolving |
|
|
106
|
-
| stabilize | string[] | ['private', 'iframe'] | A preset exclusion list for different scenarios. Default is `['private', 'iframe']` which means thumbmark uses settings designed to stabilize for private browsing and iframes (i.e. thumbmark should be stable over those situations).
|
|
107
|
-
| metadata | varies | 'event-123' | Passes metadata to webhooks. Does not affect thumbmark. |
|
|
122
|
+
### Custom components
|
|
108
123
|
|
|
109
|
-
|
|
124
|
+
Add your own signals to the fingerprint with `includeComponent(key, fn)`:
|
|
110
125
|
|
|
111
126
|
```javascript
|
|
112
|
-
|
|
113
|
-
api_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
|
114
|
-
exclude: ['math']
|
|
115
|
-
});
|
|
127
|
+
tm.includeComponent('my_signal', () => 'custom_value');
|
|
116
128
|
```
|
|
117
129
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
You can add custom components to the hash with `includeComponent`, which takes two parameters, the `key` being the key of the component in the JSON and the function that returns the value (a string, a number or a JSON object). Custom components are described in [here in the documentation](https://docs.thumbmarkjs.com/docs/configuration/custom-components).
|
|
121
|
-
`Thumbmark#includeComponent()` stores the component on that instance.
|
|
122
|
-
For legacy compatibility, deprecated top-level `includeComponent()` registrations are still merged during execution.
|
|
123
|
-
If both define the same key, the instance registration wins.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
## Components included in fingerprint
|
|
127
|
-
- audio fingerprint
|
|
128
|
-
- canvas fingerprint
|
|
129
|
-
- webgl fingerprint
|
|
130
|
-
- available fonts and how they render
|
|
131
|
-
- videocard
|
|
132
|
-
- browser languages and time zone
|
|
133
|
-
- browser permissions
|
|
134
|
-
- available plugins
|
|
135
|
-
- a ton of screen details including media queries
|
|
136
|
-
- TLS handshake details (API only)
|
|
137
|
-
- HTTP headers (API only)
|
|
138
|
-
- Connection/IP details (API only)
|
|
130
|
+
The function can return a string, number, or object. See the [custom components docs →](https://docs.thumbmarkjs.com/docs/configuration/custom-components)
|
|
139
131
|
|
|
140
|
-
|
|
132
|
+
### Technical details
|
|
141
133
|
|
|
142
|
-
|
|
134
|
+
The library is intentionally simple to build, extend, and audit. See [technical_details.md](technical_details.md) for an overview of the architecture.
|
|
143
135
|
|
|
144
|
-
|
|
136
|
+
## Using ThumbmarkJS?
|
|
145
137
|
|
|
146
|
-
|
|
138
|
+
We'd love to hear about your use case. [Share your experience →](https://form.jotform.com/261132396063352)
|
|
147
139
|
|
|
148
|
-
|
|
140
|
+
## Community & support
|
|
149
141
|
|
|
150
|
-
-
|
|
142
|
+
- 💬 [Discord](https://discord.gg/PAqxQ3TnDA) — questions, ideas, and discussion
|
|
143
|
+
- 📧 [contact@thumbmarkjs.com](mailto:contact@thumbmarkjs.com)
|
|
144
|
+
- 📖 [Documentation](https://docs.thumbmarkjs.com)
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=2592e5,t="thumbmark",n="https://api.thumbmarkjs.com",r={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,cache_lifetime_in_ms:0,performance:!1,experimental:!1,simple_request:!1,property_name_factory:e=>`${t}_${e}`};let o={...r};const i={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["audio.sampleHash","hardware.deviceMemory","header.acceptLanguage.q","system.hardwareConcurrency","plugins"],browsers:["brave"]},{exclude:["tls.extensions"],browsers:["firefox","chrome","safari"]},{exclude:["header.acceptLanguage"],browsers:["edge","chrome"]}],iframe:[{exclude:["system.applePayVersion","system.cookieEnabled"],browsers:["safari"]},{exclude:["permissions"]}],vpn:[{exclude:["ip"]}],always:[{exclude:["speech"],browsers:["brave","firefox"]}]},a="undefined"!=typeof window?window.OfflineAudioContext||window.webkitOfflineAudioContext:null;function s(e){let t=0;for(let n=0;n<e.length;++n)t+=Math.abs(e[n]);return t}function c(e,t,n){if(1===e.length)return e[0];if(3===e.length){const r=e[0].data,o=e[1].data,i=e[2].data,a=new Uint8ClampedArray(r.length);for(let e=0;e<r.length;e++){const t=r[e],n=o[e],s=i[e];a[e]=t===n||t===s?t:n===s?n:t}return new ImageData(a,t,n)}let r=[];for(let t=0;t<e[0].data.length;t++){let n=[];for(let r=0;r<e.length;r++)n.push(e[r].data[t]);r.push(l(n))}const o=new Uint8ClampedArray(r);return new ImageData(o,t,n)}function l(e){if(0===e.length)return 0;const t={};for(const n of e)t[n]=(t[n]||0)+1;let n=e[0];for(const e in t)t[e]>t[n]&&(n=parseInt(e,10));return n}function u(e){return e^=e>>>16,e=Math.imul(e,2246822507),e^=e>>>13,e=Math.imul(e,3266489909),(e^=e>>>16)>>>0}const m=new Uint32Array([597399067,2869860233,951274213,2716044179]);function d(e,t){return e<<t|e>>>32-t}function p(e,t=0){if(t=t?0|t:0,"string"==typeof e&&(e=function(e){if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(e).buffer;const t=[];for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);r<128?t.push(r):r<2048?t.push(192|r>>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return new Uint8Array(t).buffer}(e)),!(e instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");const n=new Uint32Array([t,t,t,t]);!function(e,t){const n=e.byteLength/16|0,r=new Uint32Array(e,0,4*n);for(let e=0;e<n;e++){const n=r.subarray(4*e,4*(e+1));n[0]=Math.imul(n[0],m[0]),n[0]=d(n[0],15),n[0]=Math.imul(n[0],m[1]),t[0]=t[0]^n[0],t[0]=d(t[0],19),t[0]=t[0]+t[1],t[0]=Math.imul(t[0],5)+1444728091,n[1]=Math.imul(n[1],m[1]),n[1]=d(n[1],16),n[1]=Math.imul(n[1],m[2]),t[1]=t[1]^n[1],t[1]=d(t[1],17),t[1]=t[1]+t[2],t[1]=Math.imul(t[1],5)+197830471,n[2]=Math.imul(n[2],m[2]),n[2]=d(n[2],17),n[2]=Math.imul(n[2],m[3]),t[2]=t[2]^n[2],t[2]=d(t[2],15),t[2]=t[2]+t[3],t[2]=Math.imul(t[2],5)+2530024501,n[3]=Math.imul(n[3],m[3]),n[3]=d(n[3],18),n[3]=Math.imul(n[3],m[0]),t[3]=t[3]^n[3],t[3]=d(t[3],13),t[3]=t[3]+t[0],t[3]=Math.imul(t[3],5)+850148119}}(e,n),function(e,t){const n=e.byteLength/16|0,r=e.byteLength%16,o=new Uint32Array(4),i=new Uint8Array(e,16*n,r);switch(r){case 15:o[3]=o[3]^i[14]<<16;case 14:o[3]=o[3]^i[13]<<8;case 13:o[3]=o[3]^i[12],o[3]=Math.imul(o[3],m[3]),o[3]=d(o[3],18),o[3]=Math.imul(o[3],m[0]),t[3]=t[3]^o[3];case 12:o[2]=o[2]^i[11]<<24;case 11:o[2]=o[2]^i[10]<<16;case 10:o[2]=o[2]^i[9]<<8;case 9:o[2]=o[2]^i[8],o[2]=Math.imul(o[2],m[2]),o[2]=d(o[2],17),o[2]=Math.imul(o[2],m[3]),t[2]=t[2]^o[2];case 8:o[1]=o[1]^i[7]<<24;case 7:o[1]=o[1]^i[6]<<16;case 6:o[1]=o[1]^i[5]<<8;case 5:o[1]=o[1]^i[4],o[1]=Math.imul(o[1],m[1]),o[1]=d(o[1],16),o[1]=Math.imul(o[1],m[2]),t[1]=t[1]^o[1];case 4:o[0]=o[0]^i[3]<<24;case 3:o[0]=o[0]^i[2]<<16;case 2:o[0]=o[0]^i[1]<<8;case 1:o[0]=o[0]^i[0],o[0]=Math.imul(o[0],m[0]),o[0]=d(o[0],15),o[0]=Math.imul(o[0],m[1]),t[0]=t[0]^o[0]}}(e,n),function(e,t){t[0]=t[0]^e.byteLength,t[1]=t[1]^e.byteLength,t[2]=t[2]^e.byteLength,t[3]=t[3]^e.byteLength,t[0]=t[0]+t[1]|0,t[0]=t[0]+t[2]|0,t[0]=t[0]+t[3]|0,t[1]=t[1]+t[0]|0,t[2]=t[2]+t[0]|0,t[3]=t[3]+t[0]|0,t[0]=u(t[0]),t[1]=u(t[1]),t[2]=u(t[2]),t[3]=u(t[3]),t[0]=t[0]+t[1]|0,t[0]=t[0]+t[2]|0,t[0]=t[0]+t[3]|0,t[1]=t[1]+t[0]|0,t[2]=t[2]+t[0]|0,t[3]=t[3]+t[0]|0}(e,n);const r=new Uint8Array(n.buffer);return Array.from(r).map((e=>e.toString(16).padStart(2,"0"))).join("")}const f=280;async function h(e){for(var t;!document.body;)await g(50);const n=document.createElement("iframe");n.setAttribute("frameBorder","0");const r=n.style;r.setProperty("position","fixed"),r.setProperty("display","block","important"),r.setProperty("visibility","visible"),r.setProperty("border","0"),r.setProperty("opacity","0"),n.src="about:blank",document.body.appendChild(n);const o=n.contentDocument||(null===(t=n.contentWindow)||void 0===t?void 0:t.document);if(!o)throw new Error("Iframe document is not accessible");e({iframe:o}),setTimeout((()=>{document.body.removeChild(n)}),0)}function g(e,t){return new Promise((n=>setTimeout(n,e,t)))}const w=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],v=["monospace","sans-serif","serif"];function y(e,t){return e.font=`72px ${t}`,e.measureText("WwMmLli0Oo").width}function S(){var e;const t=document.createElement("canvas"),n=null!==(e=t.getContext("webgl"))&&void 0!==e?e:t.getContext("experimental-webgl");if(n&&"getParameter"in n)try{const e=(n.getParameter(n.VENDOR)||"").toString(),t=(n.getParameter(n.RENDERER)||"").toString();let r={vendor:e,renderer:t,version:(n.getParameter(n.VERSION)||"").toString(),shadingLanguageVersion:(n.getParameter(n.SHADING_LANGUAGE_VERSION)||"").toString()};if(!t.length||!e.length){const e=n.getExtension("WEBGL_debug_renderer_info");if(e){const t=(n.getParameter(e.UNMASKED_VENDOR_WEBGL)||"").toString(),o=(n.getParameter(e.UNMASKED_RENDERER_WEBGL)||"").toString();t&&(r.vendorUnmasked=t),o&&(r.rendererUnmasked=o)}}return r}catch(e){}return"undefined"}function b(){const e=new Float32Array(1),t=new Uint8Array(e.buffer);return e[0]=1/0,e[0]=e[0]-e[0],t[3]}const x=(e,t,n,r)=>{const o=(n-t)/r;let i=0;for(let n=0;n<r;n++){i+=e(t+(n+.5)*o)}return i*o};function _(e,t){const n={};return t.forEach((t=>{const r=function(e){if(0===e.length)return null;const t={};e.forEach((e=>{const n=String(e);t[n]=(t[n]||0)+1}));let n=e[0],r=1;return Object.keys(t).forEach((e=>{t[e]>r&&(n=e,r=t[e])})),n}(e.map((e=>t in e?e[t]:void 0)).filter((e=>void 0!==e)));r&&(n[t]=r)})),n}const M=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];const C=new Map;function P(){if("undefined"==typeof navigator)return{name:"unknown",version:"unknown"};const e=!!navigator.brave,t=(e?"B|":"N|")+navigator.userAgent,n=C.get(t);if(n)return n;const r=[{name:"Brave",detect:()=>e}];let o;for(const e of r)if(e.detect()){const n=A(navigator.userAgent);return o={name:e.name,version:n.version},C.set(t,o),o}return o=A(navigator.userAgent),C.set(t,o),o}function A(e){var t,n,r,o,i,a;const s=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],c={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi"};for(const l of s){const s=e.match(l);if(s){let e=null===(t=s.groups)||void 0===t?void 0:t.name,u=(null===(n=s.groups)||void 0===n?void 0:n.version)||(null===(r=s.groups)||void 0===r?void 0:r.version1)||(null===(o=s.groups)||void 0===o?void 0:o.version2);if(e||!(null===(i=s.groups)||void 0===i?void 0:i.version1)&&!(null===(a=s.groups)||void 0===a?void 0:a.version2)||(e="Safari"),!e&&l.source.includes("Opera Mini")&&(e="Opera Mini"),!e&&l.source.includes("Opera Mobi")&&(e="Opera Mobi"),!e&&l.source.includes("Opera")&&(e="Opera"),!e&&s[1]&&(e=s[1]),!u&&s[2]&&(u=s[2]),e){return{name:c[e.toLowerCase()]||e,version:u||"unknown"}}}}return{name:"unknown",version:"unknown"}}function E(){if("undefined"==typeof navigator||!navigator.userAgent)return!1;const e=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(e)&&!/iPad/i.test(e)}function T(){let e=[];const t={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(t).forEach((n=>{t[n].forEach((t=>{matchMedia(`(${n}: ${t})`).matches&&e.push(`${n}: ${t}`)}))})),e}function R(){if("https:"===window.location.protocol&&"function"==typeof window.ApplePaySession)try{const e=window.ApplePaySession.supportsVersion;for(let t=15;t>0;t--)if(e(t))return t}catch(e){return 0}return 0}const k="SamsungBrowser"!==P().name?1:3,I="Brave"!==P().name,O=137,L=(()=>{const e=new Float32Array(548),t=2*Math.PI/O;for(let n=0;n<O;n++){const r=n*t;e[4*n]=0,e[4*n+1]=0,e[4*n+2]=100*Math.cos(r),e[4*n+3]=50*Math.sin(r)}return e})();let B=null;function D(){try{if("undefined"==typeof document)return null;const e=document.createElement("canvas");e.width=200,e.height=100;const t=e.getContext("webgl");if(!t)return null;e.addEventListener("webglcontextlost",(e=>{e.preventDefault(),B=null}),{once:!0});const n=t.createShader(t.VERTEX_SHADER),r=t.createShader(t.FRAGMENT_SHADER);if(!n||!r)return null;if(t.shaderSource(n,"\n attribute vec2 position;\n void main() {\n gl_Position = vec4(position, 0.0, 1.0);\n }\n"),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))return null;if(t.shaderSource(r,"\n precision mediump float;\n void main() {\n gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color\n }\n"),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))return null;const o=t.createProgram();if(!o)return null;if(t.attachShader(o,n),t.attachShader(o,r),t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS))return null;const i=t.createBuffer();return i?(t.bindBuffer(t.ARRAY_BUFFER,i),t.bufferData(t.ARRAY_BUFFER,L,t.STATIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),{canvas:e,gl:t,program:o,buffer:i}):null}catch(e){return null}}function $(e){const t=new Set;return function e(n){if(n&&n.toJSON&&"function"==typeof n.toJSON&&(n=n.toJSON()),void 0===n)return;if("number"==typeof n)return isFinite(n)?""+n:"null";if("object"!=typeof n)return JSON.stringify(n);let r,o;if(Array.isArray(n)){for(o="[",r=0;r<n.length;r++)r&&(o+=","),o+=e(n[r])||"null";return o+"]"}if(null===n)return"null";if(t.has(n))throw new TypeError("Converting circular structure to JSON");t.add(n);const i=Object.keys(n).sort();for(o="",r=0;r<i.length;r++){const t=i[r],a=e(n[t]);a&&(o&&(o+=","),o+=JSON.stringify(t)+":"+a)}return t.delete(n),"{"+o+"}"}(e)||""}const N=["𝔄","𝔅","ℭ","𝔇","𝔈","𝔉","𝔸","𝔹","ℂ","𝔻","𝔼","𝔽"],F=["β","ψ","λ","ε","ζ","α","ξ","μ","ρ","φ","κ","τ","η","σ","ι","ω","γ","ν","χ","δ","θ","π","υ","ο"];function U(e,t){return`<math><mrow>${t}</mrow></math>`}function V(){let e="<mo>∏</mo>";return N.forEach(((t,n)=>{const r=2*n,o=F.slice(r,r+2);2===o.length&&(e+=`<mmultiscripts><mi>${t}</mi><none/><mi>${o[1]}</mi><mprescripts></mprescripts><mi>${o[0]}</mi><none/></mmultiscripts>`)})),U(0,`<munderover><mmultiscripts>${e}</mmultiscripts></munderover>`)}function j(){const e=[];return N.forEach(((t,n)=>{const r=2*n,o=F.slice(r,r+2);2===o.length&&e.push(U(0,`<mmultiscripts><mi>${t}</mi><none/><mi>${o[1]}</mi><mprescripts></mprescripts><mi>${o[0]}</mi><none/></mmultiscripts>`))})),e}const W={audio:async function(){return a?async function(){return new Promise(((e,t)=>{try{const t=new a(1,5e3,44100),n=t.createBufferSource(),r=t.createOscillator();r.frequency.value=1e3;const o=t.createDynamicsCompressor();let i;o.threshold.value=-50,o.knee.value=40,o.ratio.value=12,o.attack.value=0,o.release.value=.2,r.connect(o),o.connect(t.destination),r.start(),t.oncomplete=r=>{i=r.renderedBuffer.getChannelData(0),e({sampleHash:s(i),maxChannels:t.destination.maxChannelCount,channelCountMode:n.channelCountMode})},t.startRendering()}catch(e){t(e)}}))}():null},canvas:async function(){return new Promise((e=>{const t=Array.from({length:3},(()=>function(){const e=document.createElement("canvas"),t=e.getContext("2d");if(!t)return null;e.width=f,e.height=20;const n=t.createLinearGradient(0,0,e.width,e.height);n.addColorStop(0,"red"),n.addColorStop(1/6,"orange"),n.addColorStop(2/6,"yellow"),n.addColorStop(.5,"green"),n.addColorStop(4/6,"blue"),n.addColorStop(5/6,"indigo"),n.addColorStop(1,"violet"),t.fillStyle=n,t.fillRect(0,0,e.width,e.height);const r="Random Text WMwmil10Oo";return t.font="23.123px Arial",t.fillStyle="black",t.fillText(r,-5,15),t.fillStyle="rgba(0, 0, 255, 0.5)",t.fillText(r,-3.3,17.7),t.beginPath(),t.moveTo(0,0),t.lineTo(2*e.width/7,e.height),t.strokeStyle="white",t.lineWidth=2,t.stroke(),t.getImageData(0,0,e.width,e.height)}())).filter((e=>null!==e));0!==t.length?e({commonPixelsHash:p(c(t,f,20).data.toString()).toString()}):e(null)}))},fonts:async function(e){return new Promise((e=>{try{h((async({iframe:t})=>{const n=t.createElement("canvas").getContext("2d");if(!n)return void e(null);const r=v.map((e=>y(n,e)));let o={};w.forEach((e=>{const t=y(n,e);r.includes(t)||(o[e]=t)})),e(o)}))}catch(t){e(null)}}))},hardware:function(){return new Promise(((e,t)=>{const n=void 0!==navigator.deviceMemory?navigator.deviceMemory:0,r=window.performance&&window.performance.memory?window.performance.memory:0;e({videocard:S(),architecture:b(),deviceMemory:n.toString()||"undefined",jsHeapSizeLimit:r.jsHeapSizeLimit||0})}))},locales:function(){return new Promise((e=>{e({languages:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone})}))},math:function(){return new Promise((e=>{e({acos:Math.acos(.5),asin:x(Math.asin,-1,1,97),cos:x(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:x(Math.sin,-Math.PI,Math.PI,97),tan:x(Math.tan,0,2*Math.PI,97)})}))},permissions:async function(e){const t=(null==e?void 0:e.permissions_to_check)||M;return _(await Promise.all(Array.from({length:3},(()=>async function(e){const t={};for(const n of e)try{const e=await navigator.permissions.query({name:n});t[n]=e.state.toString()}catch(e){}return t}(t)))),t)},plugins:async function(){const e=[];if(navigator.plugins)for(let t=0;t<navigator.plugins.length;t++){const n=navigator.plugins[t];e.push([n.name,n.filename,n.description].join("|"))}return new Promise((t=>{t({plugins:e})}))},screen:function(){return new Promise((e=>{if("undefined"==typeof matchMedia||"undefined"==typeof screen)return void e(null);const t={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:T()};E()&&navigator.maxTouchPoints>0&&(t.resolution=function(){const e=window.screen.width,t=window.screen.height,n=Math.max(e,t).toString(),r=Math.min(e,t).toString();return`${n}x${r}`}()),e(t)}))},system:function(){return new Promise((e=>{const t=P();e({platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:t.name,version:t.version},mobile:E(),applePayVersion:R(),cookieEnabled:window.navigator.cookieEnabled})}))},webgl:async function(){const e=I?(B||(B=D()),B):D();if(!e)return{webgl:"unsupported"};try{const t=Array.from({length:k},(()=>function(e){const{canvas:t,gl:n,program:r,buffer:o}=e;try{n.useProgram(r),n.bindBuffer(n.ARRAY_BUFFER,o);const e=n.getAttribLocation(r,"position");n.enableVertexAttribArray(e),n.vertexAttribPointer(e,2,n.FLOAT,!1,0,0),n.viewport(0,0,t.width,t.height),n.clearColor(0,0,0,1),n.clear(n.COLOR_BUFFER_BIT),n.drawArrays(n.LINES,0,274);const i=new Uint8ClampedArray(t.width*t.height*4);return n.readPixels(0,0,t.width,t.height,n.RGBA,n.UNSIGNED_BYTE,i),new ImageData(i,t.width,t.height)}catch(e){return B=null,new ImageData(1,1)}finally{n.bindBuffer(n.ARRAY_BUFFER,null),n.useProgram(null),n.viewport(0,0,n.drawingBufferWidth,n.drawingBufferHeight),n.clearColor(0,0,0,0)}}(e)));return{commonPixelsHash:p(c(t,e.canvas.width,e.canvas.height).data.toString()).toString()}}catch(e){return{webgl:"unsupported"}}},webrtc:async function(e){return new Promise((e=>{let t;try{const n=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(!n)return void e({supported:!1,error:"WebRTC not supported"});t=new n({iceCandidatePoolSize:1,iceServers:[]});const r=t;r.createDataChannel("");(async()=>{try{const t={offerToReceiveAudio:!0,offerToReceiveVideo:!0},n=await r.createOffer(t);await r.setLocalDescription(n);const o=n.sdp||"",i=[...new Set((o.match(/extmap:\d+ [^\n\r]+/g)||[]).map((e=>e.replace(/extmap:\d+ /,""))))].sort(),a=e=>{const t=o.match(new RegExp(`m=${e} [^\\s]+ [^\\s]+ ([^\\n\\r]+)`));return t?t[1].split(" "):[]},s=(e,t)=>t.map((t=>{const n=new RegExp(`(rtpmap|fmtp|rtcp-fb):${t} (.+)`,"g"),r=[...o.matchAll(n)];if(!r.length)return null;const i={};return r.forEach((t=>{const[n,r,o]=t,a=o.split("/");"rtpmap"===r?(i.mimeType=`${e}/${a[0]}`,i.clockRate=+a[1],"audio"===e&&(i.channels=+a[2]||1)):"rtcp-fb"===r?(i.feedbackSupport=i.feedbackSupport||[],i.feedbackSupport.push(o)):"fmtp"===r&&(i.sdpFmtpLine=o)})),i})).filter(Boolean),c=s("audio",a("audio")),l=s("video",a("video")),u={audio:{count:c.length,hash:p($(c))},video:{count:l.length,hash:p($(l))},extensionsHash:p($(i))};r.close();const m={supported:!0,...u,candidateType:"host"};e({details:m,hash:p($(m))})}catch(t){r.close(),e({supported:!0,error:`WebRTC offer failed: ${t.message}`})}})()}catch(n){null==t||t.close(),e({supported:!1,error:`WebRTC error: ${n.message}`})}}))},speech:async function(){return new Promise((e=>{try{if("undefined"==typeof window||!window.speechSynthesis||"function"!=typeof window.speechSynthesis.getVoices)return void e({supported:!1,error:"Speech Synthesis API not supported"});let t=!1,n=null;const r=r=>{if(!t){t=!0,n&&clearTimeout(n);try{const t=r.map((e=>{const t=e=>e.replace(/\\/g,"\\\\").replace(/,/g,"\\,");return[t(e.voiceURI||""),t(e.name||""),t(e.lang||""),e.localService?"1":"0",e.default?"1":"0"].join(",")}));t.sort();const n={voiceCount:r.length,voicesHash:p($(t))};e({details:n,hash:p($(n))})}catch(t){e({supported:!0,error:`Voice processing failed: ${t.message}`})}}},o=window.speechSynthesis.getVoices();if(o.length>0)return void r(o);n=setTimeout((()=>{const e=window.speechSynthesis.getVoices();r(e)}),800);const i=()=>{window.speechSynthesis.removeEventListener("voiceschanged",i);const e=window.speechSynthesis.getVoices();r(e)};window.speechSynthesis.addEventListener("voiceschanged",i)}catch(t){e({supported:!1,error:`Speech Synthesis error: ${t.message}`})}}))}},H={mathml:async function(){return new Promise((e=>{try{h((async({iframe:t})=>{try{if(!function(e){try{const t=e.createElement("math");t.innerHTML="<mrow><mi>x</mi></mrow>",t.style.position="absolute",t.style.visibility="hidden",e.body.appendChild(t);const n=t.getBoundingClientRect();return e.body.removeChild(t),n.width>0&&n.height>0}catch(e){return!1}}(t))return void e({supported:!1,error:"MathML not supported"});const n=[U("integral","<msubsup><mo>∫</mo><mi>a</mi><mi>b</mi></msubsup><mfrac><mrow><mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mrow><mi>g</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow></mfrac><mi>dx</mi>"),U("fraction","<mfrac><mrow><mi>π</mi><mo>×</mo><msup><mi>r</mi><mn>2</mn></msup></mrow><mrow><mn>2</mn><mi>σ</mi></mrow></mfrac>"),U("matrix","<mo>[</mo><mtable><mtr><mtd><mi>α</mi></mtd><mtd><mi>β</mi></mtd></mtr><mtr><mtd><mi>γ</mi></mtd><mtd><mi>δ</mi></mtd></mtr></mtable><mo>]</mo>"),V(),...j()],r=[];let o="";n.forEach(((e,n)=>{const i=function(e,t){try{const n=t.createElement("math");n.innerHTML=e.replace(/<\/?math>/g,""),n.style.whiteSpace="nowrap",n.style.position="absolute",n.style.visibility="hidden",n.style.top="-9999px",t.body.appendChild(n);const r=n.getBoundingClientRect(),o=(t.defaultView||window).getComputedStyle(n),i={dimensions:{width:r.width,height:r.height},fontInfo:{fontFamily:o.fontFamily,fontSize:o.fontSize,fontWeight:o.fontWeight,fontStyle:o.fontStyle,lineHeight:o.lineHeight,fontVariant:o.fontVariant||"normal",fontStretch:o.fontStretch||"normal",fontSizeAdjust:o.fontSizeAdjust||"none",textRendering:o.textRendering||"auto",fontFeatureSettings:o.fontFeatureSettings||"normal",fontVariantNumeric:o.fontVariantNumeric||"normal",fontKerning:o.fontKerning||"auto"}};return t.body.removeChild(n),i}catch(e){return{error:e.message}}}(e,t);r.push({width:i.dimensions.width,height:i.dimensions.height}),0===n&&i.fontInfo&&(o=p($(i.fontInfo)))}));const i={fontStyleHash:o,dimensions:r};e({details:i,hash:p($(i))})}catch(t){e({supported:!1,error:`MathML error: ${t.message}`})}}))}catch(t){e({supported:!1,error:`MathML error: ${t.message}`})}}))}},z={},G={timeout:"true"};function q(){return"1.10.1"}function J(e,t){var n,r;let o=P();if("unknown"===o.name&&t){const e=null===(n=t.system)||void 0===n?void 0:n.browser;(null==e?void 0:e.name)&&(o={name:String(e.name),version:String(e.version||"unknown")})}const a=o.name.toLowerCase(),s=parseInt(o.version.split(".")[0]||"0",10),c=Array.isArray(null==e?void 0:e.exclude)?[...e.exclude]:[],l=[...new Set([...(null==e?void 0:e.stabilize)||[],"always"])];for(const e of l){const t=i[e];if(t)for(const e of t)"browsers"in e&&!(null===(r=e.browsers)||void 0===r?void 0:r.some((e=>{const t=e.match(/(.+?)(>=)(\d+)/);return t?a===t[1]&&s>=+t[3]:a===e})))||c.push(...e.exclude)}return c}function K(e,t){const n=J(t,e),r=Array.isArray(null==t?void 0:t.include)?t.include:[];return function e(t,o=""){const i={};for(const[a,s]of Object.entries(t)){const t=o?`${o}.${a}`:a;if("object"!=typeof s||Array.isArray(s)||null===s){const e=n.some((e=>t.startsWith(e))),o=r.some((e=>t.startsWith(e)));e&&!o||(i[a]=s)}else{const n=e(s,t);Object.keys(n).length>0&&(i[a]=n)}}return i}(e)}const Y="visitor_id";function X(e){return e.storage_property_name?e.storage_property_name:e.property_name_factory(Y)}const Z=`${t}_${Y}`;function Q(e,t){try{localStorage.setItem(X(t),e)}catch(e){}}const ee="cache";function te(e){try{const t=localStorage.getItem(e.property_name_factory(ee)),n=JSON.parse(t);return n||{}}catch(e){}return{}}function ne(t){return t.cache_lifetime_in_ms>e?Date.now()+e:Date.now()+t.cache_lifetime_in_ms}class re extends Error{constructor(e){super(`HTTP error! status: ${e}`),this.status=e}}let oe=null,ie=null;async function ae(e,t,n,r){const o=n.simple_request?{"Content-Type":"text/plain"}:{"x-api-key":n.api_key,Authorization:"custom-authorized","Content-Type":"application/json"},i=await fetch(e,{method:"POST",headers:o,body:JSON.stringify(t)});if(!i.ok)throw new re(i.status);const a=await i.json();return a.visitorId&&a.visitorId!==r&&Q(a.visitorId,n),ie=a,function(e,t){if(!e.cache_api_call||!e.cache_lifetime_in_ms)return;!function(e,t){const n={...te(e),...t};try{localStorage.setItem(e.property_name_factory(ee),JSON.stringify(n))}catch(e){}}(e,{apiResponseExpiry:ne(e),apiResponse:t})}(n,a),a}const se=(e,t)=>{if(e.cache_api_call){if(ie)return Promise.resolve(ie);const t=function(e){const t=te(e);if(t&&t.apiResponse&&t.apiResponseExpiry&&Date.now()<=t.apiResponseExpiry)return t.apiResponse;return}(e);if(t)return Promise.resolve(t);if(oe)return oe}const r=e.api_endpoint||n;let o;try{const e=new URL(r);o="/"!==e.pathname||r.endsWith("/")?r:`${e.origin}/thumbmark`}catch(e){o=`${r}/thumbmark`}const i=function(e){try{const t=X(e);let n=localStorage.getItem(t);return n||t===Z||(n=localStorage.getItem(Z),n&&Q(n,e)),n}catch(e){return null}}(e),{api_key:a,...s}=e,c={components:t,options:s,clientHash:p($(t)),version:"1.10.1"};if(i&&(c.visitorId=i),e.metadata){const t="function"==typeof e.metadata?e.metadata():e.metadata;if(t){("string"==typeof t?t.length:JSON.stringify(t).length)>1e3?console.error("ThumbmarkJS: Metadata exceeds 1000 characters. Skipping metadata."):c.metadata=t}}const l=e.timeout||5e3,u=async function(e,t,n,r){for(let o=0;o<3;o++){o>0&&await new Promise((e=>setTimeout(e,200*o)));try{return await ae(e,t,n,r)}catch(e){if(e instanceof re||2===o)throw e}}throw new Error("Unreachable")}(o,c,e,i).finally((()=>{oe=null})),m=new Promise((t=>{setTimeout((()=>{const n=te(e);t((null==n?void 0:n.apiResponse)||{info:{timed_out:!0},...i&&{visitorId:i}})}),l)}));return oe=Promise.race([u,m]),oe};async function ce(e,t={}){var o,i;if("undefined"==typeof document||"undefined"==typeof window)return{thumbmark:"",components:{},info:{},version:"1.10.1",error:[{type:"fatal",message:"Browser environment required"}]};try{const a={...r,...e},s=[],c=a.logging&&!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4,l={...W,...z,...t},{elapsed:u,resolvedComponents:m,errors:d,pipelineTimings:f}=await le(l,a);s.push(...d);let h={},g={},w={};if(c||a.experimental){const{elapsed:e,resolvedComponents:t,errors:n,pipelineTimings:r}=await le(H,a);h=t,g=e,w=r,s.push(...n)}const v=a.api_key||a.simple_request?se(a,m):null;let y=null;if(v)try{y=await v}catch(e){if(e instanceof re&&403===e.status)return{error:[{type:"api_unauthorized",message:"Invalid API key or quota exceeded"}],components:{},info:{},version:"1.10.1",thumbmark:""};s.push({type:e instanceof re?"api_error":"network_error",message:e instanceof Error?e.message:String(e)})}(null===(o=null==y?void 0:y.info)||void 0===o?void 0:o.timed_out)&&s.push({type:"api_timeout",message:"API request timed out"});const S=performance.now(),b=K((null==y?void 0:y.components)||{},a),x=performance.now()-S,_={...m,...b},M=(null==y?void 0:y.info)||{uniqueness:{score:"api only"}};let C,P=0,A=0;if(null==y?void 0:y.thumbmark)C=y.thumbmark;else{const e=performance.now(),t=$(_);P=performance.now()-e;const n=performance.now();C=p(t),A=performance.now()-n}const E="1.10.1";c&&async function(e,t,r,o={},i=[]){var a;const s=`${n}/log`,c={thumbmark:e,components:t,experimental:o,version:"1.10.1",options:r,path:null===(a=null===window||void 0===window?void 0:window.location)||void 0===a?void 0:a.pathname,...i.length>0&&{errors:i}};sessionStorage.setItem("_tmjs_l","1");try{await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})}catch(e){}}(C,_,a,h,s).catch((()=>{}));const T=null!==(i=w["_pipeline.filter"])&&void 0!==i?i:0,R={"_pipeline.dispatch":f["_pipeline.dispatch"],"_pipeline.resolve":f["_pipeline.resolve"],"_pipeline.filter":f["_pipeline.filter"]+T+x,"_pipeline.stringify":P,"_pipeline.hash":A,"_pipeline.assembly":0},k={...u,...g,...f,...R},I=a.performance?{elapsed:k}:{},O=performance.now(),L={...(null==y?void 0:y.visitorId)&&{visitorId:y.visitorId},thumbmark:C,components:_,info:M,version:E,...I,...s.length>0&&{error:s},...Object.keys(h).length>0&&a.experimental&&{experimental:h},...(null==y?void 0:y.requestId)&&{requestId:y.requestId},...(null==y?void 0:y.metadata)&&{metadata:y.metadata}};return k["_pipeline.assembly"]=performance.now()-O,L}catch(e){return{thumbmark:"",components:{},info:{},version:"1.10.1",error:[{type:"fatal",message:e instanceof Error?e.message:String(e)}]}}}async function le(e,t){const n={...r,...t},o=J(n).filter((e=>!e.includes("."))),i=Object.entries(e).filter((([e])=>{var t;return!(null===(t=null==n?void 0:n.exclude)||void 0===t?void 0:t.includes(e))})).filter((([e])=>!o.includes(e))).filter((([e])=>{var t,r,o,i;return(null===(t=null==n?void 0:n.include)||void 0===t?void 0:t.some((e=>e.includes("."))))?null===(r=null==n?void 0:n.include)||void 0===r?void 0:r.some((t=>t.startsWith(e))):0===(null===(o=null==n?void 0:n.include)||void 0===o?void 0:o.length)||(null===(i=null==n?void 0:n.include)||void 0===i?void 0:i.includes(e))})),a=i.map((([e])=>e)),s={},c=performance.now(),l=i.map((([e,n])=>{const r=performance.now(),o=n(t);return s[`_dispatch.${e}`]=performance.now()-r,o})),u=performance.now()-c,m=performance.now(),d=await function(e,t,n){return Promise.all(e.map((e=>{const r=performance.now();let o;const i=e.then((e=>(void 0!==o&&clearTimeout(o),{value:e,elapsed:performance.now()-r}))).catch((e=>(void 0!==o&&clearTimeout(o),{value:n,elapsed:performance.now()-r,error:e instanceof Error?e.message:String(e)}))),a=new Promise((e=>{o=setTimeout((()=>{e({value:n,elapsed:performance.now()-r,error:"timeout"})}),t)}));return Promise.race([i,a])})))}(l,(null==n?void 0:n.timeout)||5e3,G),p=performance.now()-m,f={},h={},g=[];d.forEach(((e,t)=>{var n;const r=a[t];f[r]=null!==(n=e.elapsed)&&void 0!==n?n:0,"timeout"===e.error?g.push({type:"component_timeout",message:`Component '${r}' timed out`,component:r}):e.error&&g.push({type:"component_error",message:e.error,component:r}),null!=e.value&&(h[r]=e.value)}));const w=performance.now(),v=K(h,n),y={"_pipeline.dispatch":u,"_pipeline.resolve":p,"_pipeline.filter":performance.now()-w,...s};return{elapsed:f,resolvedComponents:v,errors:g,pipelineTimings:y}}exports.Thumbmark=class{constructor(e){this.options={...r,...e},this.customComponents={}}async get(e){return ce({...this.options,...e},this.customComponents)}getVersion(){return"1.10.1"}includeComponent(e,t){this.customComponents[e]=t}},exports.filterThumbmarkData=K,exports.getFingerprint=async function(e){try{const t=await ce(o);return e?{hash:t.thumbmark.toString(),data:t.components}:t.thumbmark.toString()}catch(e){throw e}},exports.getFingerprintData=async function(){return(await ce(o)).components},exports.getFingerprintPerformance=async function(){try{const{elapsed:e,resolvedComponents:t}=await le(W,o);return{...t,elapsed:e}}catch(e){throw e}},exports.getThumbmark=ce,exports.getVersion=q,exports.includeComponent=(e,t,n)=>{z[e]=t},exports.setOption=function(e,t){o[e]=t},exports.stabilizationExclusionRules=i,exports.stableStringify=$;
|
|
2
|
+
//# sourceMappingURL=thumbmark.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbmark.cjs","sources":["../src/options.ts","../src/components/audio/index.ts","../src/utils/commonPixels.ts","../src/utils/hash.ts","../src/components/canvas/index.ts","../src/utils/ephemeralIFrame.ts","../src/components/fonts/index.ts","../src/components/hardware/index.ts","../src/components/math/index.ts","../src/utils/getMostFrequent.ts","../src/components/permissions/index.ts","../src/components/system/browser.ts","../src/components/screen/index.ts","../src/components/system/index.ts","../src/components/webgl/index.ts","../src/utils/stableStringify.ts","../src/components/mathml/index.ts","../src/factory.ts","../src/components/locales/index.ts","../src/components/plugins/index.ts","../src/components/webrtc/index.ts","../src/components/speech/index.ts","../src/utils/version.ts","../src/functions/filterComponents.ts","../src/utils/visitorId.ts","../src/utils/cache.ts","../src/functions/api.ts","../src/functions/index.ts","../src/utils/log.ts","../src/utils/raceAll.ts","../src/thumbmark.ts","../src/functions/legacy_functions.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["MAXIMUM_CACHE_LIFETIME","DEFAULT_STORAGE_PREFIX","DEFAULT_API_ENDPOINT","defaultOptions","exclude","include","stabilize","logging","timeout","cache_api_call","cache_lifetime_in_ms","performance","experimental","simple_request","property_name_factory","name","options","stabilizationExclusionRules","private","browsers","iframe","vpn","always","OfflineAudioContextClass","window","OfflineAudioContext","webkitOfflineAudioContext","calculateHash","samples","hash","i","length","Math","abs","getCommonPixels","images","width","height","a","data","b","c","out","Uint8ClampedArray","x","y","z","ImageData","finalData","indice","u","push","getMostFrequent","pixelArray","arr","frequencyMap","num","mostFrequent","parseInt","fmix","input","imul","C","Uint32Array","rotl","m","n","key","seed","text","TextEncoder","encode","buffer","utf8","charCode","charCodeAt","Uint8Array","encodeUtf8","ArrayBuffer","TypeError","blocks","byteLength","view32","k","subarray","body","reminder","tail","finalize","byteArray","Array","from","map","byte","toString","padStart","join","_WIDTH","async","ephemeralIFrame","callback","document","wait","createElement","setAttribute","style","setProperty","src","appendChild","iframeDocument","contentDocument","_a","contentWindow","Error","setTimeout","removeChild","durationMs","resolveWith","Promise","resolve","availableFonts","baseFonts","measureSingleFont","ctx","font","measureText","getVideoCard","canvas","gl","getContext","vendor","getParameter","VENDOR","renderer","RENDERER","result","version","VERSION","shadingLanguageVersion","SHADING_LANGUAGE_VERSION","debugInfo","getExtension","vendorUnmasked","UNMASKED_VENDOR_WEBGL","rendererUnmasked","UNMASKED_RENDERER_WEBGL","error","getArchitecture","f","Float32Array","u8","Infinity","integrate","h","sum","mostFrequentValuesInArrayOfDictionaries","keys","forEach","mostFrequentValueForKey","element","String","highestFrequency","Object","mostFrequentValue","obj","undefined","filter","val","defaultPermissionKeys","browserCache","Map","getBrowser","navigator","isBrave","brave","cacheKey","userAgent","cached","get","privacyBrowserStrategies","detect","strategy","parsed","parseBrowserFromUA","set","ua","regexes","browserNameMap","edg","edga","edgios","opr","opx","crios","fxios","samsung","vivaldi","regex","match","groups","_b","_c","version1","_d","version2","_e","_f","source","includes","toLowerCase","isMobileUserAgent","test","matchMedias","results","mediaQueries","pointer","hover","update","scripting","value","matchMedia","matches","getApplePayVersion","location","protocol","ApplePaySession","versionCheck","supportsVersion","_RUNS","_USE_CACHE","_NUM_SPOKES","_VERTICES","v","angleIncrement","PI","angle","cos","sin","_cache","setupWebGL","addEventListener","event","preventDefault","once","vertexShader","createShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","program","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","_","stableStringify","seen","Set","stringify","node","toJSON","isFinite","JSON","isArray","has","add","sort","delete","BLACKBOARD_BOLD","GREEK_SYMBOLS","createMathML","content","createComplexNestedStructure","nestedContent","bbSymbol","bbIndex","startIdx","greekSet","slice","createSymbolStructures","structures","tm_component_promises","audio","reject","audioContext","audioBuffer","createBufferSource","oscillator","createOscillator","frequency","compressor","createDynamicsCompressor","threshold","knee","ratio","attack","release","connect","destination","start","oncomplete","renderedBuffer","getChannelData","sampleHash","maxChannels","maxChannelCount","channelCountMode","startRendering","createAudioFingerprint","imageDatas","gradient","createLinearGradient","addColorStop","fillStyle","fillRect","randomText","fillText","beginPath","moveTo","lineTo","strokeStyle","lineWidth","stroke","getImageData","generateCanvasImageData","commonPixelsHash","fonts","defaultWidths","fontWidth","hardware","deviceMemory","memoryInfo","memory","videocard","architecture","jsHeapSizeLimit","locales","languages","language","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","math","acos","asin","largeCos","largeSin","largeTan","tan","permissions","permission_keys","permissions_to_check","all","permissionStatus","feature","status","query","state","getBrowserPermissionsOnce","plugins","plugin","filename","description","screen","is_touchscreen","maxTouchPoints","colorDepth","mediaMatches","w","longer","max","shorter","min","screenResolution","system","browser","platform","productSub","product","useragent","hardwareConcurrency","mobile","applePayVersion","cookieEnabled","webgl","cache","useProgram","positionAttribute","getAttribLocation","enableVertexAttribArray","vertexAttribPointer","FLOAT","viewport","clearColor","clear","COLOR_BUFFER_BIT","drawArrays","LINES","pixelData","readPixels","RGBA","UNSIGNED_BYTE","drawingBufferWidth","drawingBufferHeight","renderImage","webrtc","connection","RTCPeerConnection","webkitRTCPeerConnection","mozRTCPeerConnection","supported","iceCandidatePoolSize","iceServers","conn","createDataChannel","offerOptions","offerToReceiveAudio","offerToReceiveVideo","offer","createOffer","setLocalDescription","sdp","extensions","replace","getDescriptors","mediaType","RegExp","split","constructDescriptions","descriptors","descriptor","matcher","matchAll","type","parts","mimeType","clockRate","channels","feedbackSupport","sdpFmtpLine","Boolean","audioCodecs","videoCodecs","compressedData","count","video","extensionsHash","close","candidateType","details","message","processOffer","speech","speechSynthesis","getVoices","voicesResolved","timeoutHandle","processVoices","voices","clearTimeout","voiceSignatures","voice","escapeValue","voiceURI","lang","localService","default","voiceCount","voicesHash","onVoicesChanged","removeEventListener","tm_experimental_component_promises","mathml","testElement","innerHTML","position","visibility","rect","getBoundingClientRect","isMathMLSupported","dimensionsArray","fontStyleHash","struct","measurement","mathElement","whiteSpace","top","computedStyle","defaultView","getComputedStyle","measurements","dimensions","fontInfo","fontFamily","fontSize","fontWeight","fontStyle","lineHeight","fontVariant","fontStretch","fontSizeAdjust","textRendering","fontFeatureSettings","fontVariantNumeric","fontKerning","measureMathMLStructure","customComponents","timeoutInstance","getVersion","getExcludeList","majorVer","excludeList","stabilizationOptions","option","rules","rule","some","br","filterThumbmarkData","includeList","performFilter","currentObj","path","entries","currentPath","isExcluded","exclusion","startsWith","isIncluded","inclusion","filtered","DEFAULT_STORAGE_PROPERTY_NAME","getVisitorIdPropertyName","_options","storage_property_name","DEFAULT_VISITOR_ID_NAME","setVisitorId","visitorId","localStorage","setItem","CACHE_KEY","getCache","rawCache","getItem","jsonCache","parse","getApiResponseExpiry","Date","now","ApiError","constructor","super","this","currentApiPromise","apiPromiseResult","callApi","endpoint","headers","api_key","Authorization","response","fetch","method","ok","json","values","newValues","setCache","apiResponseExpiry","apiResponse","setCachedApiResponse","getApiPromise","components","getCachedApiResponse","apiEndpoint","api_endpoint","URL","pathname","endsWith","origin","propertyName","getVisitorId","_omitApiKey","optionsForBody","requestBody","clientHash","metadata","resolvedMetadata","console","timeoutMs","apiCall","attempt","r","MAX_RETRIES","callApiWithRetry","finally","info","timed_out","race","getThumbmark","instanceCustomComponents","thumbmark","allErrors","shouldLog","sessionStorage","random","allComponents","elapsed","resolvedComponents","clientComponentsResult","errors","componentErrors","pipelineTimings","mainPipelineTimings","resolveClientComponents","experimentalComponents","experimentalElapsed","expPipelineTimings","expElapsed","expErrors","expTimings","apiPromise","apiResult","filterStart","apiComponents","filterMs","uniqueness","score","stringifyMs","hashMs","stringifyStart","stringified","hashStart","thisHash","thumbmarkData","experimentalData","url","payload","logThumbmarkData","catch","expFilterMs","_pipelineTimings","allElapsed","maybeElapsed","assemblyStart","requestId","e","comps","opts","topLevelExcludes","perComponentDispatch","dispatchStart","promises","fn","t0","p","dispatchMs","resolveStart","resolvedValues","timeoutTime","timeoutVal","startTime","timeoutId","resultPromise","then","err","timeoutPromise","raceAllPerformance","resolveMs","resolvedComponentsRaw","index","component","overrideOptions","includeComponent","includeData","creationFunction"],"mappings":"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EACH,MAAM,IAAII,MAAM,qCAIlBb,EAAS,CAAEhF,OAAQyF,IAGnBK,YAAW,KACTb,SAAShB,KAAK8B,YAAY/F,EAAO,GAChC,EACL,CAEM,SAAUkF,EAAec,EAAoBC,GACjD,OAAO,IAAIC,SAASC,GAAYL,WAAWK,EAASH,EAAYC,IAClE,CC5BF,MAAMG,EAAiB,CACnB,QACA,cACA,eACA,mBACA,QACA,UACA,SACA,aACA,SACA,UACA,UACA,QACA,UACA,UACA,iBACA,gBACA,aACA,UACA,cACA,eACA,UACA,UACA,mBACA,gBACA,QACA,aACA,MACA,YACA,YACA,yBACA,WACA,SACA,UACA,YACA,YACA,SACA,cACA,eACA,QACA,eACA,QACA,OACA,SACA,gBACA,iBACA,sBACA,UACA,eACA,oBACA,aACA,SACA,YACA,SACA,cACA,YACA,SACA,WACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,SACA,cACA,YACA,WACA,YACA,SACA,mBACA,WACA,QACA,cACA,eACA,WACA,OACA,kBACA,aACA,SACA,UACA,QACA,kBACA,gBACA,eACA,SACA,eACA,UACA,aAGIC,EAAY,CAAC,YAAa,aAAc,SA4ChD,SAASC,EAAkBC,EAA+BC,GAGtD,OADAD,EAAIC,KAAO,QAAQA,IACZD,EAAIE,YAFU,cAEQzF,KACjC,CCjIA,SAAS0F,UACL,MAAMC,EAAS1B,SAASE,cAAc,UAChCyB,EAA+B,QAA1BjB,EAAAgB,EAAOE,WAAW,gBAAQ,IAAAlB,EAAAA,EAAIgB,EAAOE,WAAW,sBAE3D,GAAID,GAAM,iBAAkBA,EACxB,IAEI,MAAME,GAAUF,EAAGG,aAAaH,EAAGI,SAAW,IAAItC,WAC5CuC,GAAYL,EAAGG,aAAaH,EAAGM,WAAa,IAAIxC,WAEtD,IAAIyC,EAA6B,CAC7BL,OAAQA,EACRG,SAAUA,EACVG,SAAUR,EAAGG,aAAaH,EAAGS,UAAY,IAAI3C,WAC7C4C,wBAAyBV,EAAGG,aAAaH,EAAGW,2BAA6B,IAAI7C,YAIjF,IAAKuC,EAAStG,SAAWmG,EAAOnG,OAAQ,CACpC,MAAM6G,E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"}
|
package/dist/thumbmark.esm.d.ts
CHANGED
|
@@ -19,6 +19,12 @@ interface OptionsAfterDefaults {
|
|
|
19
19
|
logging?: boolean;
|
|
20
20
|
api_key?: string;
|
|
21
21
|
api_endpoint?: string;
|
|
22
|
+
/**
|
|
23
|
+
* When true, the API request is sent as a CORS "simple request" (Content-Type: text/plain,
|
|
24
|
+
* no custom headers). Use this when routing through a proxy that attaches the real API key.
|
|
25
|
+
* Requires neither api_key nor Authorization header from the client side.
|
|
26
|
+
*/
|
|
27
|
+
simple_request?: boolean;
|
|
22
28
|
/**
|
|
23
29
|
* @deprecated This will be removed in Thumbmarkjs 2.0, use cache_lifetime_in_ms instead
|
|
24
30
|
*/
|