Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@fingerprintjs/fingerprintjs

Package Overview
Dependencies
Maintainers
2
Versions
82
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fingerprintjs/fingerprintjs - npm Package Compare versions

Comparing version 3.0.0-beta.2 to 3.0.0-beta.3

190

dist/fp.cjs.js
/**
* FingerprintJS v3.0.0-beta.2 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* FingerprintJS v3.0.0-beta.3 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -246,3 +246,3 @@ *

var version = "3.0.0-beta.2";
var version = "3.0.0-beta.3";

@@ -526,3 +526,5 @@ function requestIdleCallbackIfAvailable(fallbackTimeout) {

const plugins = [];
for (const plugin of navigator.plugins) {
// Safari 10 doesn't support iterating navigator.plugins with for...of
for (let i = 0; i < navigator.plugins.length; ++i) {
const plugin = navigator.plugins[i];
if (!plugin) {

@@ -658,14 +660,97 @@ continue;

/*
* Functions to help with browser features
*/
const w$2 = window;
const n$2 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$2,
'msLaunchUri' in n$2,
'msSaveBlob' in n$2,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$2,
'mediaSession' in n$2,
n$2.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$2,
'BatteryManager' in w$2,
'webkitMediaStream' in w$2,
'webkitSpeechGrammar' in w$2,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$2;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$2,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$2,
'mozInnerScreenX' in w$2,
'CSSMozDocumentRule' in w$2,
'CanvasCaptureMediaStream' in w$2,
]) >= 4;
}
/**
* Checks whether the browser is based on Chromium version ≥86 without using user-agent.
* It doesn't check that the browser is based on Chromium, there is a separate function for this.
*/
function isChromium86OrNewer() {
// Checked in Chrome 85 vs Chrome 86 both on desktop and Android
return countTruthy([
!('MediaSettingsRange' in w$2),
!('PhotoCapabilities' in w$2),
'RTCEncodedAudioFrame' in w$2,
('' + w$2.Intl) === '[object Intl]',
]) >= 2;
}
const n$3 = navigator;
function getLanguages() {
const result = [];
const language = n$2.language || n$2.userLanguage || n$2.browserLanguage || n$2.systemLanguage;
const language = n$3.language || n$3.userLanguage || n$3.browserLanguage || n$3.systemLanguage;
if (language !== undefined) {
result.push([language]);
}
if (Array.isArray(n$2.languages)) {
result.push(n$2.languages);
if (Array.isArray(n$3.languages)) {
// Starting from Chromium 86, there is only a single value in `navigator.language` in Incognito mode:
// the value of `navigator.language`. Therefore the value is ignored in this browser.
if (!(isChromium() && isChromium86OrNewer())) {
result.push(n$3.languages);
}
}
else if (typeof n$2.languages === 'string') {
const languages = n$2.languages;
else if (typeof n$3.languages === 'string') {
const languages = n$3.languages;
if (languages) {

@@ -686,7 +771,7 @@ result.push(languages.split(','));

const w$2 = window;
const w$3 = window;
function getScreenResolution() {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$2.screen.width), toInt(w$2.screen.height)];
const dimensions = [toInt(w$3.screen.width), toInt(w$3.screen.height)];
dimensions.sort().reverse();

@@ -696,8 +781,8 @@ return dimensions;

const w$3 = window;
const w$4 = window;
function getAvailableScreenResolution() {
if (w$3.screen.availWidth && w$3.screen.availHeight) {
if (w$4.screen.availWidth && w$4.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$3.screen.availWidth), toInt(w$3.screen.availHeight)];
const dimensions = [toInt(w$4.screen.availWidth), toInt(w$4.screen.availHeight)];
dimensions.sort().reverse();

@@ -724,7 +809,7 @@ return dimensions;

const w$4 = window;
const w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$4.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$4.Intl.DateTimeFormat().resolvedOptions().timeZone;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
}

@@ -755,68 +840,2 @@ return undefined;

/*
* Functions to help with browser features
*/
const w$5 = window;
const n$3 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$5,
'msLaunchUri' in n$3,
'msSaveBlob' in n$3,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$3,
'mediaSession' in n$3,
n$3.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$5,
'BatteryManager' in w$5,
'webkitMediaStream' in w$5,
'webkitSpeechGrammar' in w$5,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$5;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$3,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$5,
'mozInnerScreenX' in w$5,
'CSSMozDocumentRule' in w$5,
'CanvasCaptureMediaStream' in w$5,
]) >= 4;
}
function getIndexedDB() {

@@ -967,3 +986,3 @@ // IE and Edge don't allow accessing indexedDB in private mode, therefore IE and Edge will have different

catch (error) {
result = { error: 'message' in error ? error : { message: error } };
result = error && typeof error === 'object' && 'message' in error ? { error } : { error: { message: error } };
}

@@ -1023,3 +1042,3 @@ nextTimestamp = Date.now();

/**
* The class isn't exported to not expose the constructor.
* The class isn't exported from the index file to not expose the constructor.
* The hiding gives more freedom for future non-breaking updates.

@@ -1054,2 +1073,5 @@ */

return tslib.__awaiter(this, void 0, void 0, function* () {
// A delay is required to ensure consistent entropy components.
// See https://github.com/fingerprintjs/fingerprintjs/issues/254
// and https://github.com/fingerprintjs/fingerprintjs/issues/307
yield requestIdleCallbackIfAvailable(delayFallback);

@@ -1056,0 +1078,0 @@ return new OpenAgent();

/**
* FingerprintJS v3.0.0-beta.2 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* FingerprintJS v3.0.0-beta.3 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -4,0 +4,0 @@ *

/**
* FingerprintJS v3.0.0-beta.2 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* FingerprintJS v3.0.0-beta.3 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -242,3 +242,3 @@ *

var version = "3.0.0-beta.2";
var version = "3.0.0-beta.3";

@@ -522,3 +522,5 @@ function requestIdleCallbackIfAvailable(fallbackTimeout) {

const plugins = [];
for (const plugin of navigator.plugins) {
// Safari 10 doesn't support iterating navigator.plugins with for...of
for (let i = 0; i < navigator.plugins.length; ++i) {
const plugin = navigator.plugins[i];
if (!plugin) {

@@ -654,14 +656,97 @@ continue;

/*
* Functions to help with browser features
*/
const w$2 = window;
const n$2 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$2,
'msLaunchUri' in n$2,
'msSaveBlob' in n$2,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$2,
'mediaSession' in n$2,
n$2.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$2,
'BatteryManager' in w$2,
'webkitMediaStream' in w$2,
'webkitSpeechGrammar' in w$2,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$2;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$2,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$2,
'mozInnerScreenX' in w$2,
'CSSMozDocumentRule' in w$2,
'CanvasCaptureMediaStream' in w$2,
]) >= 4;
}
/**
* Checks whether the browser is based on Chromium version ≥86 without using user-agent.
* It doesn't check that the browser is based on Chromium, there is a separate function for this.
*/
function isChromium86OrNewer() {
// Checked in Chrome 85 vs Chrome 86 both on desktop and Android
return countTruthy([
!('MediaSettingsRange' in w$2),
!('PhotoCapabilities' in w$2),
'RTCEncodedAudioFrame' in w$2,
('' + w$2.Intl) === '[object Intl]',
]) >= 2;
}
const n$3 = navigator;
function getLanguages() {
const result = [];
const language = n$2.language || n$2.userLanguage || n$2.browserLanguage || n$2.systemLanguage;
const language = n$3.language || n$3.userLanguage || n$3.browserLanguage || n$3.systemLanguage;
if (language !== undefined) {
result.push([language]);
}
if (Array.isArray(n$2.languages)) {
result.push(n$2.languages);
if (Array.isArray(n$3.languages)) {
// Starting from Chromium 86, there is only a single value in `navigator.language` in Incognito mode:
// the value of `navigator.language`. Therefore the value is ignored in this browser.
if (!(isChromium() && isChromium86OrNewer())) {
result.push(n$3.languages);
}
}
else if (typeof n$2.languages === 'string') {
const languages = n$2.languages;
else if (typeof n$3.languages === 'string') {
const languages = n$3.languages;
if (languages) {

@@ -682,7 +767,7 @@ result.push(languages.split(','));

const w$2 = window;
const w$3 = window;
function getScreenResolution() {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$2.screen.width), toInt(w$2.screen.height)];
const dimensions = [toInt(w$3.screen.width), toInt(w$3.screen.height)];
dimensions.sort().reverse();

@@ -692,8 +777,8 @@ return dimensions;

const w$3 = window;
const w$4 = window;
function getAvailableScreenResolution() {
if (w$3.screen.availWidth && w$3.screen.availHeight) {
if (w$4.screen.availWidth && w$4.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$3.screen.availWidth), toInt(w$3.screen.availHeight)];
const dimensions = [toInt(w$4.screen.availWidth), toInt(w$4.screen.availHeight)];
dimensions.sort().reverse();

@@ -720,7 +805,7 @@ return dimensions;

const w$4 = window;
const w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$4.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$4.Intl.DateTimeFormat().resolvedOptions().timeZone;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
}

@@ -751,68 +836,2 @@ return undefined;

/*
* Functions to help with browser features
*/
const w$5 = window;
const n$3 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$5,
'msLaunchUri' in n$3,
'msSaveBlob' in n$3,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$3,
'mediaSession' in n$3,
n$3.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$5,
'BatteryManager' in w$5,
'webkitMediaStream' in w$5,
'webkitSpeechGrammar' in w$5,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$5;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$3,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$5,
'mozInnerScreenX' in w$5,
'CSSMozDocumentRule' in w$5,
'CanvasCaptureMediaStream' in w$5,
]) >= 4;
}
function getIndexedDB() {

@@ -963,3 +982,3 @@ // IE and Edge don't allow accessing indexedDB in private mode, therefore IE and Edge will have different

catch (error) {
result = { error: 'message' in error ? error : { message: error } };
result = error && typeof error === 'object' && 'message' in error ? { error } : { error: { message: error } };
}

@@ -1019,3 +1038,3 @@ nextTimestamp = Date.now();

/**
* The class isn't exported to not expose the constructor.
* The class isn't exported from the index file to not expose the constructor.
* The hiding gives more freedom for future non-breaking updates.

@@ -1050,2 +1069,5 @@ */

return __awaiter(this, void 0, void 0, function* () {
// A delay is required to ensure consistent entropy components.
// See https://github.com/fingerprintjs/fingerprintjs/issues/254
// and https://github.com/fingerprintjs/fingerprintjs/issues/307
yield requestIdleCallbackIfAvailable(delayFallback);

@@ -1052,0 +1074,0 @@ return new OpenAgent();

/**
* FingerprintJS v3.0.0-beta.2 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* FingerprintJS v3.0.0-beta.3 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -268,3 +268,3 @@ *

var version = "3.0.0-beta.2";
var version = "3.0.0-beta.3";

@@ -548,3 +548,5 @@ function requestIdleCallbackIfAvailable(fallbackTimeout) {

const plugins = [];
for (const plugin of navigator.plugins) {
// Safari 10 doesn't support iterating navigator.plugins with for...of
for (let i = 0; i < navigator.plugins.length; ++i) {
const plugin = navigator.plugins[i];
if (!plugin) {

@@ -680,14 +682,97 @@ continue;

/*
* Functions to help with browser features
*/
const w$2 = window;
const n$2 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$2,
'msLaunchUri' in n$2,
'msSaveBlob' in n$2,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$2,
'mediaSession' in n$2,
n$2.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$2,
'BatteryManager' in w$2,
'webkitMediaStream' in w$2,
'webkitSpeechGrammar' in w$2,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$2;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$2,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$2,
'mozInnerScreenX' in w$2,
'CSSMozDocumentRule' in w$2,
'CanvasCaptureMediaStream' in w$2,
]) >= 4;
}
/**
* Checks whether the browser is based on Chromium version ≥86 without using user-agent.
* It doesn't check that the browser is based on Chromium, there is a separate function for this.
*/
function isChromium86OrNewer() {
// Checked in Chrome 85 vs Chrome 86 both on desktop and Android
return countTruthy([
!('MediaSettingsRange' in w$2),
!('PhotoCapabilities' in w$2),
'RTCEncodedAudioFrame' in w$2,
('' + w$2.Intl) === '[object Intl]',
]) >= 2;
}
const n$3 = navigator;
function getLanguages() {
const result = [];
const language = n$2.language || n$2.userLanguage || n$2.browserLanguage || n$2.systemLanguage;
const language = n$3.language || n$3.userLanguage || n$3.browserLanguage || n$3.systemLanguage;
if (language !== undefined) {
result.push([language]);
}
if (Array.isArray(n$2.languages)) {
result.push(n$2.languages);
if (Array.isArray(n$3.languages)) {
// Starting from Chromium 86, there is only a single value in `navigator.language` in Incognito mode:
// the value of `navigator.language`. Therefore the value is ignored in this browser.
if (!(isChromium() && isChromium86OrNewer())) {
result.push(n$3.languages);
}
}
else if (typeof n$2.languages === 'string') {
const languages = n$2.languages;
else if (typeof n$3.languages === 'string') {
const languages = n$3.languages;
if (languages) {

@@ -708,7 +793,7 @@ result.push(languages.split(','));

const w$2 = window;
const w$3 = window;
function getScreenResolution() {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$2.screen.width), toInt(w$2.screen.height)];
const dimensions = [toInt(w$3.screen.width), toInt(w$3.screen.height)];
dimensions.sort().reverse();

@@ -718,8 +803,8 @@ return dimensions;

const w$3 = window;
const w$4 = window;
function getAvailableScreenResolution() {
if (w$3.screen.availWidth && w$3.screen.availHeight) {
if (w$4.screen.availWidth && w$4.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$3.screen.availWidth), toInt(w$3.screen.availHeight)];
const dimensions = [toInt(w$4.screen.availWidth), toInt(w$4.screen.availHeight)];
dimensions.sort().reverse();

@@ -746,7 +831,7 @@ return dimensions;

const w$4 = window;
const w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$4.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$4.Intl.DateTimeFormat().resolvedOptions().timeZone;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
}

@@ -777,68 +862,2 @@ return undefined;

/*
* Functions to help with browser features
*/
const w$5 = window;
const n$3 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$5,
'msLaunchUri' in n$3,
'msSaveBlob' in n$3,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$3,
'mediaSession' in n$3,
n$3.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$5,
'BatteryManager' in w$5,
'webkitMediaStream' in w$5,
'webkitSpeechGrammar' in w$5,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$5;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$3,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$5,
'mozInnerScreenX' in w$5,
'CSSMozDocumentRule' in w$5,
'CanvasCaptureMediaStream' in w$5,
]) >= 4;
}
function getIndexedDB() {

@@ -989,3 +1008,3 @@ // IE and Edge don't allow accessing indexedDB in private mode, therefore IE and Edge will have different

catch (error) {
result = { error: 'message' in error ? error : { message: error } };
result = error && typeof error === 'object' && 'message' in error ? { error } : { error: { message: error } };
}

@@ -1045,3 +1064,3 @@ nextTimestamp = Date.now();

/**
* The class isn't exported to not expose the constructor.
* The class isn't exported from the index file to not expose the constructor.
* The hiding gives more freedom for future non-breaking updates.

@@ -1076,2 +1095,5 @@ */

return __awaiter(this, void 0, void 0, function* () {
// A delay is required to ensure consistent entropy components.
// See https://github.com/fingerprintjs/fingerprintjs/issues/254
// and https://github.com/fingerprintjs/fingerprintjs/issues/307
yield requestIdleCallbackIfAvailable(delayFallback);

@@ -1078,0 +1100,0 @@ return new OpenAgent();

/**
* FingerprintJS v3.0.0-beta.2 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* FingerprintJS v3.0.0-beta.3 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -9,2 +9,2 @@ *

var FingerprintJS=function(t){"use strict";function e(t,e){t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]],e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]];var n=[0,0,0,0];return n[3]+=t[3]+e[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=t[2]+e[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=t[1]+e[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=t[0]+e[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function n(t,e){t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]],e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]];var n=[0,0,0,0];return n[3]+=t[3]*e[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=t[2]*e[3],n[1]+=n[2]>>>16,n[2]&=65535,n[2]+=t[3]*e[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=t[1]*e[3],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=t[2]*e[2],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=t[3]*e[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=t[0]*e[3]+t[1]*e[2]+t[2]*e[1]+t[3]*e[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function o(t,e){return 32===(e%=64)?[t[1],t[0]]:e<32?[t[0]<<e|t[1]>>>32-e,t[1]<<e|t[0]>>>32-e]:(e-=32,[t[1]<<e|t[0]>>>32-e,t[0]<<e|t[1]>>>32-e])}function r(t,e){return 0===(e%=64)?t:e<32?[t[0]<<e|t[1]>>>32-e,t[1]<<e]:[t[1]<<e-32,0]}function i(t,e){return[t[0]^e[0],t[1]^e[1]]}function a(t){return t=i(t,[0,t[0]>>>1]),t=i(t=n(t,[4283543511,3981806797]),[0,t[0]>>>1]),t=i(t=n(t,[3301882366,444984403]),[0,t[0]>>>1])}function c(t,c){c=c||0;for(var s=(t=t||"").length%16,u=t.length-s,l=[0,c],d=[0,c],f=[0,0],h=[0,0],g=[2277735313,289559509],m=[1291169091,658871167],p=0;p<u;p+=16)f=[255&t.charCodeAt(p+4)|(255&t.charCodeAt(p+5))<<8|(255&t.charCodeAt(p+6))<<16|(255&t.charCodeAt(p+7))<<24,255&t.charCodeAt(p)|(255&t.charCodeAt(p+1))<<8|(255&t.charCodeAt(p+2))<<16|(255&t.charCodeAt(p+3))<<24],h=[255&t.charCodeAt(p+12)|(255&t.charCodeAt(p+13))<<8|(255&t.charCodeAt(p+14))<<16|(255&t.charCodeAt(p+15))<<24,255&t.charCodeAt(p+8)|(255&t.charCodeAt(p+9))<<8|(255&t.charCodeAt(p+10))<<16|(255&t.charCodeAt(p+11))<<24],f=o(f=n(f,g),31),l=e(l=o(l=i(l,f=n(f,m)),27),d),l=e(n(l,[0,5]),[0,1390208809]),h=o(h=n(h,m),33),d=e(d=o(d=i(d,h=n(h,g)),31),l),d=e(n(d,[0,5]),[0,944331445]);switch(f=[0,0],h=[0,0],s){case 15:h=i(h,r([0,t.charCodeAt(p+14)],48));case 14:h=i(h,r([0,t.charCodeAt(p+13)],40));case 13:h=i(h,r([0,t.charCodeAt(p+12)],32));case 12:h=i(h,r([0,t.charCodeAt(p+11)],24));case 11:h=i(h,r([0,t.charCodeAt(p+10)],16));case 10:h=i(h,r([0,t.charCodeAt(p+9)],8));case 9:h=n(h=i(h,[0,t.charCodeAt(p+8)]),m),d=i(d,h=n(h=o(h,33),g));case 8:f=i(f,r([0,t.charCodeAt(p+7)],56));case 7:f=i(f,r([0,t.charCodeAt(p+6)],48));case 6:f=i(f,r([0,t.charCodeAt(p+5)],40));case 5:f=i(f,r([0,t.charCodeAt(p+4)],32));case 4:f=i(f,r([0,t.charCodeAt(p+3)],24));case 3:f=i(f,r([0,t.charCodeAt(p+2)],16));case 2:f=i(f,r([0,t.charCodeAt(p+1)],8));case 1:f=n(f=i(f,[0,t.charCodeAt(p)]),g),l=i(l,f=n(f=o(f,31),m))}return l=e(l=i(l,[0,t.length]),d=i(d,[0,t.length])),d=e(d,l),l=e(l=a(l),d=a(d)),d=e(d,l),("00000000"+(l[0]>>>0).toString(16)).slice(-8)+("00000000"+(l[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}function s(t,e,n,o){return new(n||(n=Promise))((function(r,i){function a(t){try{s(o.next(t))}catch(e){i(e)}}function c(t){try{s(o.throw(t))}catch(e){i(e)}}function s(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}s((o=o.apply(t,e||[])).next())}))}function u(t){return"number"==typeof t?0|t:parseInt(t)}function l(t){return t.reduce(((t,e)=>t+(e?1:0)),0)}const d=navigator,f=window;const h=document,g=["monospace","sans-serif","serif"],m=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],p={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal"};function v(t){return t.toDataURL()}const y=navigator,C=window;const S=navigator;const w=window;const A=window;const b=window;const M=window,T=navigator,k=document;function O(){return l(["msWriteProfilerMark"in M,"msLaunchUri"in T,"msSaveBlob"in T])>=2}const x=document;const P={osCpu:function(){return navigator.oscpu},languages:function(){const t=[],e=S.language||S.userLanguage||S.browserLanguage||S.systemLanguage;if(void 0!==e&&t.push([e]),Array.isArray(S.languages))t.push(S.languages);else if("string"==typeof S.languages){const e=S.languages;e&&t.push(e.split(","))}return t},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return navigator.deviceMemory},screenResolution:function(){const t=[u(w.screen.width),u(w.screen.height)];return t.sort().reverse(),t},availableScreenResolution:function(){if(A.screen.availWidth&&A.screen.availHeight){const t=[u(A.screen.availWidth),u(A.screen.availHeight)];return t.sort().reverse(),t}},hardwareConcurrency:function(){try{const t=u(navigator.hardwareConcurrency);return isNaN(t)?1:t}catch(t){return 1}},timezoneOffset:function(){return(new Date).getTimezoneOffset()},timezone:function(){var t;if(null===(t=b.Intl)||void 0===t?void 0:t.DateTimeFormat)return(new b.Intl.DateTimeFormat).resolvedOptions().timeZone},sessionStorage:function(){try{return!!window.sessionStorage}catch(t){return!0}},localStorage:function(){try{return!!window.localStorage}catch(t){return!0}},indexedDB:function(){if(!O())try{return!!window.indexedDB}catch(t){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(!navigator.plugins)return;const t=[];for(const e of navigator.plugins){if(!e)continue;const n=[];for(const t of e)n.push({type:t.type,suffixes:t.suffixes});t.push({name:e.name,description:e.description,mimeTypes:n})}return t},canvas:function(){const[t,e]=function(){const t=document.createElement("canvas");return t.width=240,t.height=140,t.style.display="inline",[t,t.getContext("2d")]}();if(!function(t,e){return!(!e||!t.toDataURL)}(t,e))return{winding:!1,data:""};e.rect(0,0,10,10),e.rect(2,2,6,6);const n=!e.isPointInPath(5,5,"evenodd");e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.font="11pt no-real-font-123";const o="Cwm fjordbank 😃 gly";return e.fillText(o,2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText(o,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"),{winding:n,data:v(t)}},touchSupport:function(){let t,e=0;void 0!==y.maxTouchPoints?e=u(y.maxTouchPoints):void 0!==y.msMaxTouchPoints&&(e=y.msMaxTouchPoints);try{document.createEvent("TouchEvent"),t=!0}catch(n){t=!1}return{maxTouchPoints:e,touchEvent:t,touchStart:"ontouchstart"in C}},fonts:function(){const t=h.body,e=h.createElement("div"),n=h.createElement("div"),o={},r={},i=()=>{const t=h.createElement("span");return Object.assign(t.style,p,{position:"absolute",left:"-9999px",fontSize:"48px"}),t.textContent="mmMwWLliI0O&1",t},a=(t,e)=>{const n=i();return n.style.fontFamily=`'${t}',${e}`,n},c=t=>g.some(((e,n)=>t[n].offsetWidth!==o[e]||t[n].offsetHeight!==r[e])),s=g.map((t=>{const n=i();return n.style.fontFamily=t,e.appendChild(n),n}));t.appendChild(e);for(let d=0,f=g.length;d<f;d++)o[g[d]]=s[d].offsetWidth,r[g[d]]=s[d].offsetHeight;const u=(()=>{const t={};for(const e of m)t[e]=g.map((t=>{const o=a(e,t);return n.appendChild(o),o}));return t})();t.appendChild(n);const l=[];for(let d=0,f=m.length;d<f;d++)c(u[m[d]])&&l.push(m[d]);return t.removeChild(n),t.removeChild(e),l},audio:function(){return s(this,void 0,void 0,(function*(){if(d.userAgent.match(/OS 11.+Version\/11.+Safari/))return-1;const t=f.OfflineAudioContext||f.webkitOfflineAudioContext;if(!t)return-2;const e=new t(1,44100,44100),n=e.createOscillator();n.type="triangle",n.frequency.setValueAtTime(1e4,e.currentTime);const o=e.createDynamicsCompressor();for(const[r,i]of[["threshold",-50],["knee",40],["ratio",12],["reduction",-20],["attack",0],["release",.25]])"function"==typeof o[r].setValueAtTime&&o[r].setValueAtTime(i,e.currentTime);return n.connect(o),o.connect(e.destination),n.start(0),e.startRendering(),new Promise((t=>{const r=setTimeout((()=>{e.oncomplete=()=>{},t(-3)}),1e3);e.oncomplete=e=>{let i;try{clearTimeout(r),i=e.renderedBuffer.getChannelData(0).slice(4500,5e3).reduce(((t,e)=>t+Math.abs(e)),0),n.disconnect(),o.disconnect()}catch(a){return void t(-4)}t(i)}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(t){try{return t.toSource(),!0}catch(e){return!1}}},vendor:function(){return navigator.vendor},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{x.cookie="cookietest=1";const t=-1!==x.cookie.indexOf("cookietest=");return x.cookie="cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT",t}catch(t){return!1}}};function I(t,e,n){return s(this,void 0,void 0,(function*(){let o=Date.now();const r={};for(const a of Object.keys(t)){if(function(t,e){for(let n=0,o=t.length;n<o;++n)if(t[n]===e)return!0;return!1}(n,a))continue;let c,s;try{c={value:yield t[a](e)}}catch(i){c={error:"message"in i?i:{message:i}}}s=Date.now(),r[a]=Object.assign(Object.assign({},c),{duration:s-o}),o=s}return r}))}function B(t){let e="";for(const n of Object.keys(t)){const o=t[n],r=o.error?"error":JSON.stringify(o.value);e+=`${e?"|":""}${n.replace(/([:|\\])/g,"\\$1")}:${r}`}return e}function D(t){return JSON.stringify(t,((t,e)=>{var n;return e instanceof Error?Object.assign(Object.assign({},e),{message:e.message,stack:null===(n=e.stack)||void 0===n?void 0:n.split("\n")}):e}),2)}class E{get(t={}){return s(this,void 0,void 0,(function*(){const e=yield I(P,void 0,[]),n=function(t){let e;return{components:t,get visitorId(){return void 0===e&&(e=c(B(this.components))),e},set visitorId(t){e=t}}}(e);return t.debug&&console.log(`Copy the text below to get the debug data:\n\n\`\`\`\nversion: 3.0.0-beta.2\ngetOptions: ${JSON.stringify(t,void 0,2)}\nvisitorId: ${n.visitorId}\ncomponents: ${D(e)}\n\`\`\``),n}))}}const L=c,R=c;return t.componentsToCanonicalString=B,t.componentsToDebugString=D,t.getComponents=I,t.getHash=L,t.isChromium=function(){return l(["userActivation"in T,"mediaSession"in T,0===T.vendor.indexOf("Google"),"BackgroundFetchManager"in M,"BatteryManager"in M,"webkitMediaStream"in M,"webkitSpeechGrammar"in M])>=5},t.isDesktopSafari=function(){return"safari"in M},t.isGecko=function(){var t;return l(["buildID"in T,(null===(t=k.documentElement)||void 0===t?void 0:t.style)&&"MozAppearance"in k.documentElement.style,"MediaRecorderErrorEvent"in M,"mozInnerScreenX"in M,"CSSMozDocumentRule"in M,"CanvasCaptureMediaStream"in M])>=4},t.isIEOrOldEdge=O,t.load=function({delayFallback:t=50}={}){return s(this,void 0,void 0,(function*(){var e;return yield(e=t,new Promise((t=>{window.requestIdleCallback?window.requestIdleCallback((()=>t())):setTimeout(t,e)}))),new E}))},t.murmurX64Hash128=R,t}({});
var FingerprintJS=function(t){"use strict";function e(t,e){t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]],e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]];var n=[0,0,0,0];return n[3]+=t[3]+e[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=t[2]+e[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=t[1]+e[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=t[0]+e[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function n(t,e){t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]],e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]];var n=[0,0,0,0];return n[3]+=t[3]*e[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=t[2]*e[3],n[1]+=n[2]>>>16,n[2]&=65535,n[2]+=t[3]*e[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=t[1]*e[3],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=t[2]*e[2],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=t[3]*e[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=t[0]*e[3]+t[1]*e[2]+t[2]*e[1]+t[3]*e[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function o(t,e){return 32===(e%=64)?[t[1],t[0]]:e<32?[t[0]<<e|t[1]>>>32-e,t[1]<<e|t[0]>>>32-e]:(e-=32,[t[1]<<e|t[0]>>>32-e,t[0]<<e|t[1]>>>32-e])}function r(t,e){return 0===(e%=64)?t:e<32?[t[0]<<e|t[1]>>>32-e,t[1]<<e]:[t[1]<<e-32,0]}function i(t,e){return[t[0]^e[0],t[1]^e[1]]}function a(t){return t=i(t,[0,t[0]>>>1]),t=i(t=n(t,[4283543511,3981806797]),[0,t[0]>>>1]),t=i(t=n(t,[3301882366,444984403]),[0,t[0]>>>1])}function c(t,c){c=c||0;for(var s=(t=t||"").length%16,u=t.length-s,l=[0,c],d=[0,c],f=[0,0],h=[0,0],g=[2277735313,289559509],m=[1291169091,658871167],p=0;p<u;p+=16)f=[255&t.charCodeAt(p+4)|(255&t.charCodeAt(p+5))<<8|(255&t.charCodeAt(p+6))<<16|(255&t.charCodeAt(p+7))<<24,255&t.charCodeAt(p)|(255&t.charCodeAt(p+1))<<8|(255&t.charCodeAt(p+2))<<16|(255&t.charCodeAt(p+3))<<24],h=[255&t.charCodeAt(p+12)|(255&t.charCodeAt(p+13))<<8|(255&t.charCodeAt(p+14))<<16|(255&t.charCodeAt(p+15))<<24,255&t.charCodeAt(p+8)|(255&t.charCodeAt(p+9))<<8|(255&t.charCodeAt(p+10))<<16|(255&t.charCodeAt(p+11))<<24],f=o(f=n(f,g),31),l=e(l=o(l=i(l,f=n(f,m)),27),d),l=e(n(l,[0,5]),[0,1390208809]),h=o(h=n(h,m),33),d=e(d=o(d=i(d,h=n(h,g)),31),l),d=e(n(d,[0,5]),[0,944331445]);switch(f=[0,0],h=[0,0],s){case 15:h=i(h,r([0,t.charCodeAt(p+14)],48));case 14:h=i(h,r([0,t.charCodeAt(p+13)],40));case 13:h=i(h,r([0,t.charCodeAt(p+12)],32));case 12:h=i(h,r([0,t.charCodeAt(p+11)],24));case 11:h=i(h,r([0,t.charCodeAt(p+10)],16));case 10:h=i(h,r([0,t.charCodeAt(p+9)],8));case 9:h=n(h=i(h,[0,t.charCodeAt(p+8)]),m),d=i(d,h=n(h=o(h,33),g));case 8:f=i(f,r([0,t.charCodeAt(p+7)],56));case 7:f=i(f,r([0,t.charCodeAt(p+6)],48));case 6:f=i(f,r([0,t.charCodeAt(p+5)],40));case 5:f=i(f,r([0,t.charCodeAt(p+4)],32));case 4:f=i(f,r([0,t.charCodeAt(p+3)],24));case 3:f=i(f,r([0,t.charCodeAt(p+2)],16));case 2:f=i(f,r([0,t.charCodeAt(p+1)],8));case 1:f=n(f=i(f,[0,t.charCodeAt(p)]),g),l=i(l,f=n(f=o(f,31),m))}return l=e(l=i(l,[0,t.length]),d=i(d,[0,t.length])),d=e(d,l),l=e(l=a(l),d=a(d)),d=e(d,l),("00000000"+(l[0]>>>0).toString(16)).slice(-8)+("00000000"+(l[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}function s(t,e,n,o){return new(n||(n=Promise))((function(r,i){function a(t){try{s(o.next(t))}catch(e){i(e)}}function c(t){try{s(o.throw(t))}catch(e){i(e)}}function s(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}s((o=o.apply(t,e||[])).next())}))}function u(t){return"number"==typeof t?0|t:parseInt(t)}function l(t){return t.reduce(((t,e)=>t+(e?1:0)),0)}const d=navigator,f=window;const h=document,g=["monospace","sans-serif","serif"],m=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],p={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal"};function v(t){return t.toDataURL()}const y=navigator,C=window;const S=window,w=navigator,A=document;function b(){return l(["msWriteProfilerMark"in S,"msLaunchUri"in w,"msSaveBlob"in w])>=2}function M(){return l(["userActivation"in w,"mediaSession"in w,0===w.vendor.indexOf("Google"),"BackgroundFetchManager"in S,"BatteryManager"in S,"webkitMediaStream"in S,"webkitSpeechGrammar"in S])>=5}const T=navigator;const k=window;const O=window;const P=window;const x=document;const I={osCpu:function(){return navigator.oscpu},languages:function(){const t=[],e=T.language||T.userLanguage||T.browserLanguage||T.systemLanguage;if(void 0!==e&&t.push([e]),Array.isArray(T.languages))M()&&l([!("MediaSettingsRange"in S),!("PhotoCapabilities"in S),"RTCEncodedAudioFrame"in S,""+S.Intl=="[object Intl]"])>=2||t.push(T.languages);else if("string"==typeof T.languages){const e=T.languages;e&&t.push(e.split(","))}return t},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return navigator.deviceMemory},screenResolution:function(){const t=[u(k.screen.width),u(k.screen.height)];return t.sort().reverse(),t},availableScreenResolution:function(){if(O.screen.availWidth&&O.screen.availHeight){const t=[u(O.screen.availWidth),u(O.screen.availHeight)];return t.sort().reverse(),t}},hardwareConcurrency:function(){try{const t=u(navigator.hardwareConcurrency);return isNaN(t)?1:t}catch(t){return 1}},timezoneOffset:function(){return(new Date).getTimezoneOffset()},timezone:function(){var t;if(null===(t=P.Intl)||void 0===t?void 0:t.DateTimeFormat)return(new P.Intl.DateTimeFormat).resolvedOptions().timeZone},sessionStorage:function(){try{return!!window.sessionStorage}catch(t){return!0}},localStorage:function(){try{return!!window.localStorage}catch(t){return!0}},indexedDB:function(){if(!b())try{return!!window.indexedDB}catch(t){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(!navigator.plugins)return;const t=[];for(let e=0;e<navigator.plugins.length;++e){const n=navigator.plugins[e];if(!n)continue;const o=[];for(const t of n)o.push({type:t.type,suffixes:t.suffixes});t.push({name:n.name,description:n.description,mimeTypes:o})}return t},canvas:function(){const[t,e]=function(){const t=document.createElement("canvas");return t.width=240,t.height=140,t.style.display="inline",[t,t.getContext("2d")]}();if(!function(t,e){return!(!e||!t.toDataURL)}(t,e))return{winding:!1,data:""};e.rect(0,0,10,10),e.rect(2,2,6,6);const n=!e.isPointInPath(5,5,"evenodd");e.textBaseline="alphabetic",e.fillStyle="#f60",e.fillRect(125,1,62,20),e.fillStyle="#069",e.font="11pt no-real-font-123";const o="Cwm fjordbank 😃 gly";return e.fillText(o,2,15),e.fillStyle="rgba(102, 204, 0, 0.2)",e.font="18pt Arial",e.fillText(o,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"),{winding:n,data:v(t)}},touchSupport:function(){let t,e=0;void 0!==y.maxTouchPoints?e=u(y.maxTouchPoints):void 0!==y.msMaxTouchPoints&&(e=y.msMaxTouchPoints);try{document.createEvent("TouchEvent"),t=!0}catch(n){t=!1}return{maxTouchPoints:e,touchEvent:t,touchStart:"ontouchstart"in C}},fonts:function(){const t=h.body,e=h.createElement("div"),n=h.createElement("div"),o={},r={},i=()=>{const t=h.createElement("span");return Object.assign(t.style,p,{position:"absolute",left:"-9999px",fontSize:"48px"}),t.textContent="mmMwWLliI0O&1",t},a=(t,e)=>{const n=i();return n.style.fontFamily=`'${t}',${e}`,n},c=t=>g.some(((e,n)=>t[n].offsetWidth!==o[e]||t[n].offsetHeight!==r[e])),s=g.map((t=>{const n=i();return n.style.fontFamily=t,e.appendChild(n),n}));t.appendChild(e);for(let d=0,f=g.length;d<f;d++)o[g[d]]=s[d].offsetWidth,r[g[d]]=s[d].offsetHeight;const u=(()=>{const t={};for(const e of m)t[e]=g.map((t=>{const o=a(e,t);return n.appendChild(o),o}));return t})();t.appendChild(n);const l=[];for(let d=0,f=m.length;d<f;d++)c(u[m[d]])&&l.push(m[d]);return t.removeChild(n),t.removeChild(e),l},audio:function(){return s(this,void 0,void 0,(function*(){if(d.userAgent.match(/OS 11.+Version\/11.+Safari/))return-1;const t=f.OfflineAudioContext||f.webkitOfflineAudioContext;if(!t)return-2;const e=new t(1,44100,44100),n=e.createOscillator();n.type="triangle",n.frequency.setValueAtTime(1e4,e.currentTime);const o=e.createDynamicsCompressor();for(const[r,i]of[["threshold",-50],["knee",40],["ratio",12],["reduction",-20],["attack",0],["release",.25]])"function"==typeof o[r].setValueAtTime&&o[r].setValueAtTime(i,e.currentTime);return n.connect(o),o.connect(e.destination),n.start(0),e.startRendering(),new Promise((t=>{const r=setTimeout((()=>{e.oncomplete=()=>{},t(-3)}),1e3);e.oncomplete=e=>{let i;try{clearTimeout(r),i=e.renderedBuffer.getChannelData(0).slice(4500,5e3).reduce(((t,e)=>t+Math.abs(e)),0),n.disconnect(),o.disconnect()}catch(a){return void t(-4)}t(i)}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(t){try{return t.toSource(),!0}catch(e){return!1}}},vendor:function(){return navigator.vendor},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{x.cookie="cookietest=1";const t=-1!==x.cookie.indexOf("cookietest=");return x.cookie="cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT",t}catch(t){return!1}}};function B(t,e,n){return s(this,void 0,void 0,(function*(){let o=Date.now();const r={};for(const a of Object.keys(t)){if(function(t,e){for(let n=0,o=t.length;n<o;++n)if(t[n]===e)return!0;return!1}(n,a))continue;let c,s;try{c={value:yield t[a](e)}}catch(i){c=i&&"object"==typeof i&&"message"in i?{error:i}:{error:{message:i}}}s=Date.now(),r[a]=Object.assign(Object.assign({},c),{duration:s-o}),o=s}return r}))}function E(t){let e="";for(const n of Object.keys(t)){const o=t[n],r=o.error?"error":JSON.stringify(o.value);e+=`${e?"|":""}${n.replace(/([:|\\])/g,"\\$1")}:${r}`}return e}function D(t){return JSON.stringify(t,((t,e)=>{var n;return e instanceof Error?Object.assign(Object.assign({},e),{message:e.message,stack:null===(n=e.stack)||void 0===n?void 0:n.split("\n")}):e}),2)}class R{get(t={}){return s(this,void 0,void 0,(function*(){const e=yield B(I,void 0,[]),n=function(t){let e;return{components:t,get visitorId(){return void 0===e&&(e=c(E(this.components))),e},set visitorId(t){e=t}}}(e);return t.debug&&console.log(`Copy the text below to get the debug data:\n\n\`\`\`\nversion: 3.0.0-beta.3\ngetOptions: ${JSON.stringify(t,void 0,2)}\nvisitorId: ${n.visitorId}\ncomponents: ${D(e)}\n\`\`\``),n}))}}const L=c,F=c;return t.componentsToCanonicalString=E,t.componentsToDebugString=D,t.getComponents=B,t.getHash=L,t.isChromium=M,t.isDesktopSafari=function(){return"safari"in S},t.isGecko=function(){var t;return l(["buildID"in w,(null===(t=A.documentElement)||void 0===t?void 0:t.style)&&"MozAppearance"in A.documentElement.style,"MediaRecorderErrorEvent"in S,"mozInnerScreenX"in S,"CSSMozDocumentRule"in S,"CanvasCaptureMediaStream"in S])>=4},t.isIEOrOldEdge=b,t.load=function({delayFallback:t=50}={}){return s(this,void 0,void 0,(function*(){var e;return yield(e=t,new Promise((t=>{window.requestIdleCallback?window.requestIdleCallback((()=>t())):setTimeout(t,e)}))),new R}))},t.murmurX64Hash128=F,t}({});
/**
* FingerprintJS v3.0.0-beta.2 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* FingerprintJS v3.0.0-beta.3 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -271,3 +271,3 @@ *

var version = "3.0.0-beta.2";
var version = "3.0.0-beta.3";

@@ -551,3 +551,5 @@ function requestIdleCallbackIfAvailable(fallbackTimeout) {

const plugins = [];
for (const plugin of navigator.plugins) {
// Safari 10 doesn't support iterating navigator.plugins with for...of
for (let i = 0; i < navigator.plugins.length; ++i) {
const plugin = navigator.plugins[i];
if (!plugin) {

@@ -683,14 +685,97 @@ continue;

/*
* Functions to help with browser features
*/
const w$2 = window;
const n$2 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$2,
'msLaunchUri' in n$2,
'msSaveBlob' in n$2,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$2,
'mediaSession' in n$2,
n$2.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$2,
'BatteryManager' in w$2,
'webkitMediaStream' in w$2,
'webkitSpeechGrammar' in w$2,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$2;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$2,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$2,
'mozInnerScreenX' in w$2,
'CSSMozDocumentRule' in w$2,
'CanvasCaptureMediaStream' in w$2,
]) >= 4;
}
/**
* Checks whether the browser is based on Chromium version ≥86 without using user-agent.
* It doesn't check that the browser is based on Chromium, there is a separate function for this.
*/
function isChromium86OrNewer() {
// Checked in Chrome 85 vs Chrome 86 both on desktop and Android
return countTruthy([
!('MediaSettingsRange' in w$2),
!('PhotoCapabilities' in w$2),
'RTCEncodedAudioFrame' in w$2,
('' + w$2.Intl) === '[object Intl]',
]) >= 2;
}
const n$3 = navigator;
function getLanguages() {
const result = [];
const language = n$2.language || n$2.userLanguage || n$2.browserLanguage || n$2.systemLanguage;
const language = n$3.language || n$3.userLanguage || n$3.browserLanguage || n$3.systemLanguage;
if (language !== undefined) {
result.push([language]);
}
if (Array.isArray(n$2.languages)) {
result.push(n$2.languages);
if (Array.isArray(n$3.languages)) {
// Starting from Chromium 86, there is only a single value in `navigator.language` in Incognito mode:
// the value of `navigator.language`. Therefore the value is ignored in this browser.
if (!(isChromium() && isChromium86OrNewer())) {
result.push(n$3.languages);
}
}
else if (typeof n$2.languages === 'string') {
const languages = n$2.languages;
else if (typeof n$3.languages === 'string') {
const languages = n$3.languages;
if (languages) {

@@ -711,7 +796,7 @@ result.push(languages.split(','));

const w$2 = window;
const w$3 = window;
function getScreenResolution() {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$2.screen.width), toInt(w$2.screen.height)];
const dimensions = [toInt(w$3.screen.width), toInt(w$3.screen.height)];
dimensions.sort().reverse();

@@ -721,8 +806,8 @@ return dimensions;

const w$3 = window;
const w$4 = window;
function getAvailableScreenResolution() {
if (w$3.screen.availWidth && w$3.screen.availHeight) {
if (w$4.screen.availWidth && w$4.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
const dimensions = [toInt(w$3.screen.availWidth), toInt(w$3.screen.availHeight)];
const dimensions = [toInt(w$4.screen.availWidth), toInt(w$4.screen.availHeight)];
dimensions.sort().reverse();

@@ -749,7 +834,7 @@ return dimensions;

const w$4 = window;
const w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$4.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$4.Intl.DateTimeFormat().resolvedOptions().timeZone;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
}

@@ -780,68 +865,2 @@ return undefined;

/*
* Functions to help with browser features
*/
const w$5 = window;
const n$3 = navigator;
const d$1 = document;
/**
* Checks whether the browser is Internet Explorer or pre-Chromium Edge without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isIEOrOldEdge() {
// The properties are checked to be in IE 10, IE 11 and Edge 18 and not to be in other browsers
return countTruthy([
'msWriteProfilerMark' in w$5,
'msLaunchUri' in n$3,
'msSaveBlob' in n$3,
]) >= 2;
}
/**
* Checks whether the browser is based on Chromium without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isChromium() {
// Based on research in September 2020
return countTruthy([
'userActivation' in n$3,
'mediaSession' in n$3,
n$3.vendor.indexOf('Google') === 0,
'BackgroundFetchManager' in w$5,
'BatteryManager' in w$5,
'webkitMediaStream' in w$5,
'webkitSpeechGrammar' in w$5,
]) >= 5;
}
/**
* Checks whether the WebKit browser is a desktop Safari.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isDesktopSafari() {
return 'safari' in w$5;
}
/**
* Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.
*
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function isGecko() {
var _a;
// Based on research in September 2020
return countTruthy([
'buildID' in n$3,
((_a = d$1.documentElement) === null || _a === void 0 ? void 0 : _a.style) && 'MozAppearance' in d$1.documentElement.style,
'MediaRecorderErrorEvent' in w$5,
'mozInnerScreenX' in w$5,
'CSSMozDocumentRule' in w$5,
'CanvasCaptureMediaStream' in w$5,
]) >= 4;
}
function getIndexedDB() {

@@ -992,3 +1011,3 @@ // IE and Edge don't allow accessing indexedDB in private mode, therefore IE and Edge will have different

catch (error) {
result = { error: 'message' in error ? error : { message: error } };
result = error && typeof error === 'object' && 'message' in error ? { error } : { error: { message: error } };
}

@@ -1048,3 +1067,3 @@ nextTimestamp = Date.now();

/**
* The class isn't exported to not expose the constructor.
* The class isn't exported from the index file to not expose the constructor.
* The hiding gives more freedom for future non-breaking updates.

@@ -1079,2 +1098,5 @@ */

return __awaiter(this, void 0, void 0, function* () {
// A delay is required to ensure consistent entropy components.
// See https://github.com/fingerprintjs/fingerprintjs/issues/254
// and https://github.com/fingerprintjs/fingerprintjs/issues/307
yield requestIdleCallbackIfAvailable(delayFallback);

@@ -1081,0 +1103,0 @@ return new OpenAgent();

/**
* FingerprintJS v3.0.0-beta.2 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* FingerprintJS v3.0.0-beta.3 - Copyright (c) FingerprintJS, Inc, 2020 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -9,2 +9,2 @@ *

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).FingerprintJS={})}(this,(function(e){"use strict";function t(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]+t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]+t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]+t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]+t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function n(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]*t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]*t[3],n[1]+=n[2]>>>16,n[2]&=65535,n[2]+=e[3]*t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]*t[3],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[2]*t[2],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[3]*t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function o(e,t){return 32===(t%=64)?[e[1],e[0]]:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])}function r(e,t){return 0===(t%=64)?e:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]}function i(e,t){return[e[0]^t[0],e[1]^t[1]]}function a(e){return e=i(e,[0,e[0]>>>1]),e=i(e=n(e,[4283543511,3981806797]),[0,e[0]>>>1]),e=i(e=n(e,[3301882366,444984403]),[0,e[0]>>>1])}function c(e,c){c=c||0;for(var s=(e=e||"").length%16,u=e.length-s,l=[0,c],d=[0,c],f=[0,0],h=[0,0],g=[2277735313,289559509],m=[1291169091,658871167],p=0;p<u;p+=16)f=[255&e.charCodeAt(p+4)|(255&e.charCodeAt(p+5))<<8|(255&e.charCodeAt(p+6))<<16|(255&e.charCodeAt(p+7))<<24,255&e.charCodeAt(p)|(255&e.charCodeAt(p+1))<<8|(255&e.charCodeAt(p+2))<<16|(255&e.charCodeAt(p+3))<<24],h=[255&e.charCodeAt(p+12)|(255&e.charCodeAt(p+13))<<8|(255&e.charCodeAt(p+14))<<16|(255&e.charCodeAt(p+15))<<24,255&e.charCodeAt(p+8)|(255&e.charCodeAt(p+9))<<8|(255&e.charCodeAt(p+10))<<16|(255&e.charCodeAt(p+11))<<24],f=o(f=n(f,g),31),l=t(l=o(l=i(l,f=n(f,m)),27),d),l=t(n(l,[0,5]),[0,1390208809]),h=o(h=n(h,m),33),d=t(d=o(d=i(d,h=n(h,g)),31),l),d=t(n(d,[0,5]),[0,944331445]);switch(f=[0,0],h=[0,0],s){case 15:h=i(h,r([0,e.charCodeAt(p+14)],48));case 14:h=i(h,r([0,e.charCodeAt(p+13)],40));case 13:h=i(h,r([0,e.charCodeAt(p+12)],32));case 12:h=i(h,r([0,e.charCodeAt(p+11)],24));case 11:h=i(h,r([0,e.charCodeAt(p+10)],16));case 10:h=i(h,r([0,e.charCodeAt(p+9)],8));case 9:h=n(h=i(h,[0,e.charCodeAt(p+8)]),m),d=i(d,h=n(h=o(h,33),g));case 8:f=i(f,r([0,e.charCodeAt(p+7)],56));case 7:f=i(f,r([0,e.charCodeAt(p+6)],48));case 6:f=i(f,r([0,e.charCodeAt(p+5)],40));case 5:f=i(f,r([0,e.charCodeAt(p+4)],32));case 4:f=i(f,r([0,e.charCodeAt(p+3)],24));case 3:f=i(f,r([0,e.charCodeAt(p+2)],16));case 2:f=i(f,r([0,e.charCodeAt(p+1)],8));case 1:f=n(f=i(f,[0,e.charCodeAt(p)]),g),l=i(l,f=n(f=o(f,31),m))}return l=t(l=i(l,[0,e.length]),d=i(d,[0,e.length])),d=t(d,l),l=t(l=a(l),d=a(d)),d=t(d,l),("00000000"+(l[0]>>>0).toString(16)).slice(-8)+("00000000"+(l[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}function s(e,t,n,o){return new(n||(n=Promise))((function(r,i){function a(e){try{s(o.next(e))}catch(t){i(t)}}function c(e){try{s(o.throw(e))}catch(t){i(t)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,c)}s((o=o.apply(e,t||[])).next())}))}function u(e){return"number"==typeof e?0|e:parseInt(e)}function l(e){return e.reduce(((e,t)=>e+(t?1:0)),0)}const d=navigator,f=window;const h=document,g=["monospace","sans-serif","serif"],m=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],p={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal"};function v(e){return e.toDataURL()}const y=navigator,C=window;const S=navigator;const w=window;const A=window;const b=window;const M=window,T=navigator,x=document;function O(){return l(["msWriteProfilerMark"in M,"msLaunchUri"in T,"msSaveBlob"in T])>=2}const k=document;const P={osCpu:function(){return navigator.oscpu},languages:function(){const e=[],t=S.language||S.userLanguage||S.browserLanguage||S.systemLanguage;if(void 0!==t&&e.push([t]),Array.isArray(S.languages))e.push(S.languages);else if("string"==typeof S.languages){const t=S.languages;t&&e.push(t.split(","))}return e},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return navigator.deviceMemory},screenResolution:function(){const e=[u(w.screen.width),u(w.screen.height)];return e.sort().reverse(),e},availableScreenResolution:function(){if(A.screen.availWidth&&A.screen.availHeight){const e=[u(A.screen.availWidth),u(A.screen.availHeight)];return e.sort().reverse(),e}},hardwareConcurrency:function(){try{const e=u(navigator.hardwareConcurrency);return isNaN(e)?1:e}catch(e){return 1}},timezoneOffset:function(){return(new Date).getTimezoneOffset()},timezone:function(){var e;if(null===(e=b.Intl)||void 0===e?void 0:e.DateTimeFormat)return(new b.Intl.DateTimeFormat).resolvedOptions().timeZone},sessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},localStorage:function(){try{return!!window.localStorage}catch(e){return!0}},indexedDB:function(){if(!O())try{return!!window.indexedDB}catch(e){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(!navigator.plugins)return;const e=[];for(const t of navigator.plugins){if(!t)continue;const n=[];for(const e of t)n.push({type:e.type,suffixes:e.suffixes});e.push({name:t.name,description:t.description,mimeTypes:n})}return e},canvas:function(){const[e,t]=function(){const e=document.createElement("canvas");return e.width=240,e.height=140,e.style.display="inline",[e,e.getContext("2d")]}();if(!function(e,t){return!(!t||!e.toDataURL)}(e,t))return{winding:!1,data:""};t.rect(0,0,10,10),t.rect(2,2,6,6);const n=!t.isPointInPath(5,5,"evenodd");t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.font="11pt no-real-font-123";const o="Cwm fjordbank 😃 gly";return t.fillText(o,2,15),t.fillStyle="rgba(102, 204, 0, 0.2)",t.font="18pt Arial",t.fillText(o,4,45),t.globalCompositeOperation="multiply",t.fillStyle="rgb(255,0,255)",t.beginPath(),t.arc(50,50,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(0,255,255)",t.beginPath(),t.arc(100,50,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(255,255,0)",t.beginPath(),t.arc(75,100,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(255,0,255)",t.arc(75,75,75,0,2*Math.PI,!0),t.arc(75,75,25,0,2*Math.PI,!0),t.fill("evenodd"),{winding:n,data:v(e)}},touchSupport:function(){let e,t=0;void 0!==y.maxTouchPoints?t=u(y.maxTouchPoints):void 0!==y.msMaxTouchPoints&&(t=y.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(n){e=!1}return{maxTouchPoints:t,touchEvent:e,touchStart:"ontouchstart"in C}},fonts:function(){const e=h.body,t=h.createElement("div"),n=h.createElement("div"),o={},r={},i=()=>{const e=h.createElement("span");return Object.assign(e.style,p,{position:"absolute",left:"-9999px",fontSize:"48px"}),e.textContent="mmMwWLliI0O&1",e},a=(e,t)=>{const n=i();return n.style.fontFamily=`'${e}',${t}`,n},c=e=>g.some(((t,n)=>e[n].offsetWidth!==o[t]||e[n].offsetHeight!==r[t])),s=g.map((e=>{const n=i();return n.style.fontFamily=e,t.appendChild(n),n}));e.appendChild(t);for(let d=0,f=g.length;d<f;d++)o[g[d]]=s[d].offsetWidth,r[g[d]]=s[d].offsetHeight;const u=(()=>{const e={};for(const t of m)e[t]=g.map((e=>{const o=a(t,e);return n.appendChild(o),o}));return e})();e.appendChild(n);const l=[];for(let d=0,f=m.length;d<f;d++)c(u[m[d]])&&l.push(m[d]);return e.removeChild(n),e.removeChild(t),l},audio:function(){return s(this,void 0,void 0,(function*(){if(d.userAgent.match(/OS 11.+Version\/11.+Safari/))return-1;const e=f.OfflineAudioContext||f.webkitOfflineAudioContext;if(!e)return-2;const t=new e(1,44100,44100),n=t.createOscillator();n.type="triangle",n.frequency.setValueAtTime(1e4,t.currentTime);const o=t.createDynamicsCompressor();for(const[r,i]of[["threshold",-50],["knee",40],["ratio",12],["reduction",-20],["attack",0],["release",.25]])"function"==typeof o[r].setValueAtTime&&o[r].setValueAtTime(i,t.currentTime);return n.connect(o),o.connect(t.destination),n.start(0),t.startRendering(),new Promise((e=>{const r=setTimeout((()=>{t.oncomplete=()=>{},e(-3)}),1e3);t.oncomplete=t=>{let i;try{clearTimeout(r),i=t.renderedBuffer.getChannelData(0).slice(4500,5e3).reduce(((e,t)=>e+Math.abs(t)),0),n.disconnect(),o.disconnect()}catch(a){return void e(-4)}e(i)}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(e){try{return e.toSource(),!0}catch(t){return!1}}},vendor:function(){return navigator.vendor},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{k.cookie="cookietest=1";const e=-1!==k.cookie.indexOf("cookietest=");return k.cookie="cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT",e}catch(e){return!1}}};function I(e,t,n){return s(this,void 0,void 0,(function*(){let o=Date.now();const r={};for(const a of Object.keys(e)){if(function(e,t){for(let n=0,o=e.length;n<o;++n)if(e[n]===t)return!0;return!1}(n,a))continue;let c,s;try{c={value:yield e[a](t)}}catch(i){c={error:"message"in i?i:{message:i}}}s=Date.now(),r[a]=Object.assign(Object.assign({},c),{duration:s-o}),o=s}return r}))}function B(e){let t="";for(const n of Object.keys(e)){const o=e[n],r=o.error?"error":JSON.stringify(o.value);t+=`${t?"|":""}${n.replace(/([:|\\])/g,"\\$1")}:${r}`}return t}function D(e){return JSON.stringify(e,((e,t)=>{var n;return t instanceof Error?Object.assign(Object.assign({},t),{message:t.message,stack:null===(n=t.stack)||void 0===n?void 0:n.split("\n")}):t}),2)}class E{get(e={}){return s(this,void 0,void 0,(function*(){const t=yield I(P,void 0,[]),n=function(e){let t;return{components:e,get visitorId(){return void 0===t&&(t=c(B(this.components))),t},set visitorId(e){t=e}}}(t);return e.debug&&console.log(`Copy the text below to get the debug data:\n\n\`\`\`\nversion: 3.0.0-beta.2\ngetOptions: ${JSON.stringify(e,void 0,2)}\nvisitorId: ${n.visitorId}\ncomponents: ${D(t)}\n\`\`\``),n}))}}const L=c,R=c;e.componentsToCanonicalString=B,e.componentsToDebugString=D,e.getComponents=I,e.getHash=L,e.isChromium=function(){return l(["userActivation"in T,"mediaSession"in T,0===T.vendor.indexOf("Google"),"BackgroundFetchManager"in M,"BatteryManager"in M,"webkitMediaStream"in M,"webkitSpeechGrammar"in M])>=5},e.isDesktopSafari=function(){return"safari"in M},e.isGecko=function(){var e;return l(["buildID"in T,(null===(e=x.documentElement)||void 0===e?void 0:e.style)&&"MozAppearance"in x.documentElement.style,"MediaRecorderErrorEvent"in M,"mozInnerScreenX"in M,"CSSMozDocumentRule"in M,"CanvasCaptureMediaStream"in M])>=4},e.isIEOrOldEdge=O,e.load=function({delayFallback:e=50}={}){return s(this,void 0,void 0,(function*(){var t;return yield(t=e,new Promise((e=>{window.requestIdleCallback?window.requestIdleCallback((()=>e())):setTimeout(e,t)}))),new E}))},e.murmurX64Hash128=R,Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).FingerprintJS={})}(this,(function(e){"use strict";function t(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]+t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]+t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]+t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]+t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function n(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]*t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]*t[3],n[1]+=n[2]>>>16,n[2]&=65535,n[2]+=e[3]*t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]*t[3],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[2]*t[2],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[3]*t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function o(e,t){return 32===(t%=64)?[e[1],e[0]]:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])}function r(e,t){return 0===(t%=64)?e:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]}function i(e,t){return[e[0]^t[0],e[1]^t[1]]}function a(e){return e=i(e,[0,e[0]>>>1]),e=i(e=n(e,[4283543511,3981806797]),[0,e[0]>>>1]),e=i(e=n(e,[3301882366,444984403]),[0,e[0]>>>1])}function c(e,c){c=c||0;for(var s=(e=e||"").length%16,u=e.length-s,l=[0,c],d=[0,c],f=[0,0],h=[0,0],g=[2277735313,289559509],m=[1291169091,658871167],p=0;p<u;p+=16)f=[255&e.charCodeAt(p+4)|(255&e.charCodeAt(p+5))<<8|(255&e.charCodeAt(p+6))<<16|(255&e.charCodeAt(p+7))<<24,255&e.charCodeAt(p)|(255&e.charCodeAt(p+1))<<8|(255&e.charCodeAt(p+2))<<16|(255&e.charCodeAt(p+3))<<24],h=[255&e.charCodeAt(p+12)|(255&e.charCodeAt(p+13))<<8|(255&e.charCodeAt(p+14))<<16|(255&e.charCodeAt(p+15))<<24,255&e.charCodeAt(p+8)|(255&e.charCodeAt(p+9))<<8|(255&e.charCodeAt(p+10))<<16|(255&e.charCodeAt(p+11))<<24],f=o(f=n(f,g),31),l=t(l=o(l=i(l,f=n(f,m)),27),d),l=t(n(l,[0,5]),[0,1390208809]),h=o(h=n(h,m),33),d=t(d=o(d=i(d,h=n(h,g)),31),l),d=t(n(d,[0,5]),[0,944331445]);switch(f=[0,0],h=[0,0],s){case 15:h=i(h,r([0,e.charCodeAt(p+14)],48));case 14:h=i(h,r([0,e.charCodeAt(p+13)],40));case 13:h=i(h,r([0,e.charCodeAt(p+12)],32));case 12:h=i(h,r([0,e.charCodeAt(p+11)],24));case 11:h=i(h,r([0,e.charCodeAt(p+10)],16));case 10:h=i(h,r([0,e.charCodeAt(p+9)],8));case 9:h=n(h=i(h,[0,e.charCodeAt(p+8)]),m),d=i(d,h=n(h=o(h,33),g));case 8:f=i(f,r([0,e.charCodeAt(p+7)],56));case 7:f=i(f,r([0,e.charCodeAt(p+6)],48));case 6:f=i(f,r([0,e.charCodeAt(p+5)],40));case 5:f=i(f,r([0,e.charCodeAt(p+4)],32));case 4:f=i(f,r([0,e.charCodeAt(p+3)],24));case 3:f=i(f,r([0,e.charCodeAt(p+2)],16));case 2:f=i(f,r([0,e.charCodeAt(p+1)],8));case 1:f=n(f=i(f,[0,e.charCodeAt(p)]),g),l=i(l,f=n(f=o(f,31),m))}return l=t(l=i(l,[0,e.length]),d=i(d,[0,e.length])),d=t(d,l),l=t(l=a(l),d=a(d)),d=t(d,l),("00000000"+(l[0]>>>0).toString(16)).slice(-8)+("00000000"+(l[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}function s(e,t,n,o){return new(n||(n=Promise))((function(r,i){function a(e){try{s(o.next(e))}catch(t){i(t)}}function c(e){try{s(o.throw(e))}catch(t){i(t)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,c)}s((o=o.apply(e,t||[])).next())}))}function u(e){return"number"==typeof e?0|e:parseInt(e)}function l(e){return e.reduce(((e,t)=>e+(t?1:0)),0)}const d=navigator,f=window;const h=document,g=["monospace","sans-serif","serif"],m=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],p={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal"};function v(e){return e.toDataURL()}const y=navigator,C=window;const S=window,w=navigator,A=document;function b(){return l(["msWriteProfilerMark"in S,"msLaunchUri"in w,"msSaveBlob"in w])>=2}function M(){return l(["userActivation"in w,"mediaSession"in w,0===w.vendor.indexOf("Google"),"BackgroundFetchManager"in S,"BatteryManager"in S,"webkitMediaStream"in S,"webkitSpeechGrammar"in S])>=5}const T=navigator;const x=window;const O=window;const k=window;const P=document;const I={osCpu:function(){return navigator.oscpu},languages:function(){const e=[],t=T.language||T.userLanguage||T.browserLanguage||T.systemLanguage;if(void 0!==t&&e.push([t]),Array.isArray(T.languages))M()&&l([!("MediaSettingsRange"in S),!("PhotoCapabilities"in S),"RTCEncodedAudioFrame"in S,""+S.Intl=="[object Intl]"])>=2||e.push(T.languages);else if("string"==typeof T.languages){const t=T.languages;t&&e.push(t.split(","))}return e},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return navigator.deviceMemory},screenResolution:function(){const e=[u(x.screen.width),u(x.screen.height)];return e.sort().reverse(),e},availableScreenResolution:function(){if(O.screen.availWidth&&O.screen.availHeight){const e=[u(O.screen.availWidth),u(O.screen.availHeight)];return e.sort().reverse(),e}},hardwareConcurrency:function(){try{const e=u(navigator.hardwareConcurrency);return isNaN(e)?1:e}catch(e){return 1}},timezoneOffset:function(){return(new Date).getTimezoneOffset()},timezone:function(){var e;if(null===(e=k.Intl)||void 0===e?void 0:e.DateTimeFormat)return(new k.Intl.DateTimeFormat).resolvedOptions().timeZone},sessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},localStorage:function(){try{return!!window.localStorage}catch(e){return!0}},indexedDB:function(){if(!b())try{return!!window.indexedDB}catch(e){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(!navigator.plugins)return;const e=[];for(let t=0;t<navigator.plugins.length;++t){const n=navigator.plugins[t];if(!n)continue;const o=[];for(const e of n)o.push({type:e.type,suffixes:e.suffixes});e.push({name:n.name,description:n.description,mimeTypes:o})}return e},canvas:function(){const[e,t]=function(){const e=document.createElement("canvas");return e.width=240,e.height=140,e.style.display="inline",[e,e.getContext("2d")]}();if(!function(e,t){return!(!t||!e.toDataURL)}(e,t))return{winding:!1,data:""};t.rect(0,0,10,10),t.rect(2,2,6,6);const n=!t.isPointInPath(5,5,"evenodd");t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.font="11pt no-real-font-123";const o="Cwm fjordbank 😃 gly";return t.fillText(o,2,15),t.fillStyle="rgba(102, 204, 0, 0.2)",t.font="18pt Arial",t.fillText(o,4,45),t.globalCompositeOperation="multiply",t.fillStyle="rgb(255,0,255)",t.beginPath(),t.arc(50,50,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(0,255,255)",t.beginPath(),t.arc(100,50,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(255,255,0)",t.beginPath(),t.arc(75,100,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(255,0,255)",t.arc(75,75,75,0,2*Math.PI,!0),t.arc(75,75,25,0,2*Math.PI,!0),t.fill("evenodd"),{winding:n,data:v(e)}},touchSupport:function(){let e,t=0;void 0!==y.maxTouchPoints?t=u(y.maxTouchPoints):void 0!==y.msMaxTouchPoints&&(t=y.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(n){e=!1}return{maxTouchPoints:t,touchEvent:e,touchStart:"ontouchstart"in C}},fonts:function(){const e=h.body,t=h.createElement("div"),n=h.createElement("div"),o={},r={},i=()=>{const e=h.createElement("span");return Object.assign(e.style,p,{position:"absolute",left:"-9999px",fontSize:"48px"}),e.textContent="mmMwWLliI0O&1",e},a=(e,t)=>{const n=i();return n.style.fontFamily=`'${e}',${t}`,n},c=e=>g.some(((t,n)=>e[n].offsetWidth!==o[t]||e[n].offsetHeight!==r[t])),s=g.map((e=>{const n=i();return n.style.fontFamily=e,t.appendChild(n),n}));e.appendChild(t);for(let d=0,f=g.length;d<f;d++)o[g[d]]=s[d].offsetWidth,r[g[d]]=s[d].offsetHeight;const u=(()=>{const e={};for(const t of m)e[t]=g.map((e=>{const o=a(t,e);return n.appendChild(o),o}));return e})();e.appendChild(n);const l=[];for(let d=0,f=m.length;d<f;d++)c(u[m[d]])&&l.push(m[d]);return e.removeChild(n),e.removeChild(t),l},audio:function(){return s(this,void 0,void 0,(function*(){if(d.userAgent.match(/OS 11.+Version\/11.+Safari/))return-1;const e=f.OfflineAudioContext||f.webkitOfflineAudioContext;if(!e)return-2;const t=new e(1,44100,44100),n=t.createOscillator();n.type="triangle",n.frequency.setValueAtTime(1e4,t.currentTime);const o=t.createDynamicsCompressor();for(const[r,i]of[["threshold",-50],["knee",40],["ratio",12],["reduction",-20],["attack",0],["release",.25]])"function"==typeof o[r].setValueAtTime&&o[r].setValueAtTime(i,t.currentTime);return n.connect(o),o.connect(t.destination),n.start(0),t.startRendering(),new Promise((e=>{const r=setTimeout((()=>{t.oncomplete=()=>{},e(-3)}),1e3);t.oncomplete=t=>{let i;try{clearTimeout(r),i=t.renderedBuffer.getChannelData(0).slice(4500,5e3).reduce(((e,t)=>e+Math.abs(t)),0),n.disconnect(),o.disconnect()}catch(a){return void e(-4)}e(i)}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(e){try{return e.toSource(),!0}catch(t){return!1}}},vendor:function(){return navigator.vendor},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{P.cookie="cookietest=1";const e=-1!==P.cookie.indexOf("cookietest=");return P.cookie="cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT",e}catch(e){return!1}}};function B(e,t,n){return s(this,void 0,void 0,(function*(){let o=Date.now();const r={};for(const a of Object.keys(e)){if(function(e,t){for(let n=0,o=e.length;n<o;++n)if(e[n]===t)return!0;return!1}(n,a))continue;let c,s;try{c={value:yield e[a](t)}}catch(i){c=i&&"object"==typeof i&&"message"in i?{error:i}:{error:{message:i}}}s=Date.now(),r[a]=Object.assign(Object.assign({},c),{duration:s-o}),o=s}return r}))}function E(e){let t="";for(const n of Object.keys(e)){const o=e[n],r=o.error?"error":JSON.stringify(o.value);t+=`${t?"|":""}${n.replace(/([:|\\])/g,"\\$1")}:${r}`}return t}function D(e){return JSON.stringify(e,((e,t)=>{var n;return t instanceof Error?Object.assign(Object.assign({},t),{message:t.message,stack:null===(n=t.stack)||void 0===n?void 0:n.split("\n")}):t}),2)}class R{get(e={}){return s(this,void 0,void 0,(function*(){const t=yield B(I,void 0,[]),n=function(e){let t;return{components:e,get visitorId(){return void 0===t&&(t=c(E(this.components))),t},set visitorId(e){t=e}}}(t);return e.debug&&console.log(`Copy the text below to get the debug data:\n\n\`\`\`\nversion: 3.0.0-beta.3\ngetOptions: ${JSON.stringify(e,void 0,2)}\nvisitorId: ${n.visitorId}\ncomponents: ${D(t)}\n\`\`\``),n}))}}const L=c,F=c;e.componentsToCanonicalString=E,e.componentsToDebugString=D,e.getComponents=B,e.getHash=L,e.isChromium=M,e.isDesktopSafari=function(){return"safari"in S},e.isGecko=function(){var e;return l(["buildID"in w,(null===(e=A.documentElement)||void 0===e?void 0:e.style)&&"MozAppearance"in A.documentElement.style,"MediaRecorderErrorEvent"in S,"mozInnerScreenX"in S,"CSSMozDocumentRule"in S,"CanvasCaptureMediaStream"in S])>=4},e.isIEOrOldEdge=b,e.load=function({delayFallback:e=50}={}){return s(this,void 0,void 0,(function*(){var t;return yield(t=e,new Promise((e=>{window.requestIdleCallback?window.requestIdleCallback((()=>e())):setTimeout(e,t)}))),new R}))},e.murmurX64Hash128=F,Object.defineProperty(e,"__esModule",{value:!0})}));
{
"name": "@fingerprintjs/fingerprintjs",
"version": "3.0.0-beta.2",
"version": "3.0.0-beta.3",
"license": "MIT",

@@ -13,3 +13,8 @@ "main": "dist/fp.cjs.js",

"scripts": {
"build": "rimraf dist && rollup -c"
"build": "rimraf dist && rollup -c",
"build:watch": "yarn build --watch",
"playground:start": "cd playground && webpack-dev-server --mode development",
"playground:build": "cd playground && webpack --mode production",
"test:local": "karma start tests/karma.local.config.js --single-run",
"test:browserstack": "karma start tests/karma.browserstack.config.js --single-run"
},

@@ -23,2 +28,14 @@ "dependencies": {

"@rollup/plugin-typescript": "^6.0.0",
"@types/jasmine": "^3.5.14",
"@types/ua-parser-js": "^0.7.33",
"clean-webpack-plugin": "^3.0.0",
"html-webpack-plugin": "^4.5.0",
"karma": "^5.2.3",
"karma-browserstack-launcher": "^1.6.0",
"karma-chrome-launcher": "^3.1.0",
"karma-firefox-launcher": "^1.3.0",
"karma-jasmine": "^4.0.1",
"karma-spec-reporter": "^0.0.32",
"karma-summary-reporter": "^1.9.0",
"karma-typescript": "^5.2.0",
"rimraf": "^3.0.2",

@@ -29,4 +46,10 @@ "rollup": "^2.28.2",

"rollup-plugin-terser": "^7.0.2",
"typescript": "^4.0.3"
"terser-webpack-plugin": "^4.2.2",
"ts-loader": "^8.0.4",
"typescript": "^4.0.3",
"ua-parser-js": "^0.7.22",
"webpack": "^4.44.2",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0"
}
}

@@ -7,2 +7,21 @@ # FingerprintJS

### In browser
```html
<script>
function onFingerprintJSLoad(fp) {
fp.get().then(({ visitorId }) => console.log(visitorId));
}
</script>
<script
async src="https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3.0.0-beta.2/dist/fp.min.js"
onload="FingerprintJS.load().then(onFingerprintJSLoad)"
></script>
```
A simple way to start but not recommended because AdBlock and similar browser extensions often block this URL.
You should at least upload the script to your server.
### Webpack/Rollup/Browserify
```bash

@@ -18,2 +37,3 @@ npm i @fingerprintjs/fingerprintjs

const { visitorId } = await fpjs.get();
console.log(visitorId);
})();

@@ -32,3 +52,3 @@ ```

### How to build
### Development playground

@@ -38,12 +58,61 @@ ```bash

yarn install
yarn playground:start # Add '--port 8765' to change the server port
```
Then open http://localhost:8080 in a browser.
It's reloaded every time the source code is changed.
To build the playground distribution code (e.g. to upload to a static server), run:
```bash
yarn playground:build
```
The result will appear at `playground/dist`.
### How to build
To build the distribution files of the library, run:
```bash
yarn build
```
The files will appear at `dist`.
### How to test
There are automatic tests.
They are run by [Jasmine](https://jasmine.github.io) in real browsers using [Karma](https://karma-runner.github.io).
To run the tests in a browser on your machine, build the project and run:
```bash
yarn test:local --browsers ChromeHeadless
# or to run in Firefox
yarn test:local --browsers FirefoxHeadless
# or to run in both
yarn test:local
```
To run the tests in browsers on [BrowserStack](https://www.browserstack.com), get a BrowserStack access key and run:
```bash
# For Linux, macOS and WSL (Linux on Windows)
BROWSERSTACK_USERNAME=your-username BROWSERSTACK_ACCESS_KEY=your-key yarn test:browserstack
```
Or make a PR to this repository, the test will run in BrowserStack automatically.
BrowserStack sessions are unstable, so a session can fail for no reason;
restart the testing when you see no clear errors related to the tests.
Unit test files are located right next to individual module files that they check.
Integration tests are located in the `tests` directory.
### How to publish
1. Bump the version. Changing the number in [package.json](package.json) is enough.
2. Build the project.
3. Run
2. Build and test the project.
3. See what's will get into the NPM package, make sure it contains the distributive files and no excess files.
To see, run `yarn pack`, an archive will appear nearby, open it with any archive browser.
4. Run
```bash
yarn publish --access public # Add '--tag beta' (without the quotes) if you release a beta version
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc