@dwield/device-biometrics-sdk 1.2.1 → 1.2.3

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.js", "../src/behavioural_biometrics/index.js", "../src/behavioural_biometrics/keystroke_dynamics.js", "../src/behavioural_biometrics/mouse_dynamics.js", "../src/device_id/index.js", "../src/device_id/detect_incognito.js", "../src/device_id/has_lied_detection.js", "../src/device_id/canvas.js", "../src/device_id/hashing.js", "../src/device_id/webgl.js", "../src/device_id/bot.js", "../src/device_id/audio_fingerprint.js"],
4
- "sourcesContent": ["// src/index.js\r\n\r\nimport * as BehaviouralBiometrics from './behavioural_biometrics/index.js';\r\nimport * as DeviceId from './device_id/index.js';\r\n\r\nexport const version = '1.2.1';\r\n\r\nfunction validateApiKey(apiKey) {\r\n console.log('Validating API Key:', apiKey);\r\n if (!apiKey || typeof apiKey !== 'string' || apiKey !== 'dwield-sdk-secret') {\r\n console.log(\"here\")\r\n throw new Error(\r\n 'Invalid API Key provided. Please provide a valid API Key to initialize the SDK.'\r\n );\r\n }\r\n}\r\n\r\n/*\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n DEVICE INFO ONLY (OLD: initDeviceId)\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*/\r\nfunction buildDeviceInfoSDK({ apiKey }) {\r\n return {\r\n product: 'device_id',\r\n version,\r\n apiKey,\r\n\r\n async getDeviceData() {\r\n return await DeviceId.getDeviceData();\r\n },\r\n };\r\n}\r\n\r\nexport function initDeviceInfo(config = {}) {\r\n const { apiKey, verbose } = config;\r\n validateApiKey(apiKey);\r\n\r\n if (verbose) console.log('[BB-SDK] Device Info SDK initialized');\r\n\r\n return buildDeviceInfoSDK({ apiKey });\r\n}\r\n\r\n/*\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n BIOMETRICS ONLY\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*/\r\nfunction buildBiometricsSDK({ apiKey }) {\r\n return {\r\n product: 'biometrics',\r\n version,\r\n apiKey,\r\n\r\n initKeyStrokeDynamics: BehaviouralBiometrics.initKeyStrokeDynamics,\r\n stopKeyStrokeDynamics: BehaviouralBiometrics.stopKeyStrokeDynamics,\r\n\r\n initMouseDynamics: BehaviouralBiometrics.initMouseDynamics,\r\n stopMouseDynamics: BehaviouralBiometrics.stopMouseDynamics,\r\n\r\n fetchMouseDynamicsData: BehaviouralBiometrics.fetchMouseDynamicsData,\r\n fetchKeyStrockDynamicsData: BehaviouralBiometrics.fetchKeyStrockDynamicsData,\r\n };\r\n}\r\n\r\nexport function initBiometrics(config = {}) {\r\n const { apiKey, verbose } = config;\r\n validateApiKey(apiKey);\r\n\r\n if (verbose) console.log('[BB-SDK] Biometrics SDK initialized');\r\n\r\n return buildBiometricsSDK({ apiKey });\r\n}\r\n\r\n/*\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n DEVICE INFO + BIOMETRICS (OLD: initCombined)\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*/\r\nfunction buildDeviceInfoWithBiometricsSDK({ apiKey }) {\r\n const biometrics = buildBiometricsSDK({ apiKey });\r\n const deviceInfo = buildDeviceInfoSDK({ apiKey });\r\n\r\n return {\r\n product: 'device_id_with_biometrics',\r\n version,\r\n apiKey,\r\n\r\n // Behavioural (original names preserved)\r\n initKeyStrokeDynamics: biometrics.initKeyStrokeDynamics,\r\n stopKeyStrokeDynamics: biometrics.stopKeyStrokeDynamics,\r\n initMouseDynamics: biometrics.initMouseDynamics,\r\n stopMouseDynamics: biometrics.stopMouseDynamics,\r\n\r\n fetchMouseDynamicsData: biometrics.fetchMouseDynamicsData,\r\n fetchKeyStrockDynamicsData: biometrics.fetchKeyStrockDynamicsData,\r\n\r\n // Device info\r\n getDeviceData: deviceInfo.getDeviceData,\r\n\r\n /**\r\n * NEW NAME \u2714\r\n * Returns device info + behavioural biometrics together\r\n */\r\n async getDeviceInfoWithBiometrics() {\r\n const behavioural = {\r\n keystroke: biometrics.fetchKeyStrockDynamicsData(),\r\n mouse: biometrics.fetchMouseDynamicsData(),\r\n };\r\n\r\n const device = await deviceInfo.getDeviceData();\r\n\r\n return {\r\n behavioural,\r\n device,\r\n timestamp: new Date().toISOString(),\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport function initDeviceInfoWithBiometrics(config = {}) {\r\n const { apiKey, verbose } = config;\r\n validateApiKey(apiKey);\r\n\r\n if (verbose) console.log('[BB-SDK] Device Info + Biometrics SDK initialized');\r\n\r\n return buildDeviceInfoWithBiometricsSDK({ apiKey });\r\n}\r\n\r\n/* Optional exports */\r\nexport { BehaviouralBiometrics, DeviceId };\r\n", "import { KeystrokeDynamicsTracker } from \"./keystroke_dynamics\";\r\nimport { MouseDynamicsTracker } from \"./mouse_dynamics\";\r\n\r\nexport const initKeyStrokeDynamics = () => {\r\n KeystrokeDynamicsTracker.startTrackingKeystrokeDynamics();\r\n};\r\n\r\nexport const stopKeyStrokeDynamics = () => {\r\n KeystrokeDynamicsTracker.stopTrackingKeystrokeDynamics();\r\n};\r\n\r\nexport const initMouseDynamics = () => {\r\n MouseDynamicsTracker.startTrackingMouseDynamics();\r\n};\r\n\r\nexport const stopMouseDynamics = () => {\r\n MouseDynamicsTracker.stopTrackingMouseDynamics();\r\n};\r\n\r\nexport const fetchMouseDynamicsData = () => {\r\n return MouseDynamicsTracker.getTrackedData();\r\n};\r\n\r\nexport const fetchKeyStrockDynamicsData = () => {\r\n return KeystrokeDynamicsTracker.getTrackedData();\r\n};\r\n", "const KeystrokeDynamicsTracker = (() => {\r\n // Private variables\r\n let _keystrokes = [];\r\n let _keystrokes_with_code = [];\r\n let _previousDown = [];\r\n let _isShiftDown = false;\r\n let _shiftTracker = [];\r\n let _dTime = 0;\r\n\r\n // Private functions\r\n const _getCurrentTimestamp = () => new Date().getTime();\r\n\r\n const _getCategory = (key, keyCode, shiftKeyPressed) => {\r\n const isUpperCaseLetter = /^[A-Z]$/.test(key);\r\n const isLowerCaseLetter = /^[a-z]$/.test(key);\r\n const isUpperCaseSymbol = /^[~!@#$%^&*()_+|}{\":?>,<]$/.test(key);\r\n if (\r\n isUpperCaseLetter ||\r\n (isUpperCaseSymbol && isPrevWasmultikeyWithShift()) ||\r\n (isLowerCaseLetter && isPrevWasmultikeyWithShift())\r\n ) {\r\n return \"uppercase\";\r\n } else if (isLowerCaseLetter) {\r\n return \"lowercase\";\r\n } else if ([8, 9, 46].includes(keyCode)) {\r\n return \"control\";\r\n } else {\r\n return \"others\";\r\n }\r\n };\r\n\r\n const isPrevWasmultikeyWithShift = () => {\r\n const prevKey = _keystrokes_with_code[_keystrokes_with_code.length - 1];\r\n return prevKey?.keyCode === 16 && prevKey?.multipleKey;\r\n };\r\n\r\n const _keyLogger = (key, keyCode, type, shiftKeyPressed) => {\r\n const timestamp = _getCurrentTimestamp();\r\n\r\n if (type === \"kd\") {\r\n _previousDown.push(timestamp);\r\n _dTime = timestamp;\r\n if (keyCode === 16) {\r\n _isShiftDown = true;\r\n _shiftTracker.push(timestamp);\r\n }\r\n }\r\n\r\n let category = _getCategory(key, keyCode, _isShiftDown);\r\n \r\n if (type === \"ku\") {\r\n const dTimeStamp = _dTime ? _dTime : _previousDown[_previousDown.length - 1];\r\n const dwellTime = timestamp - dTimeStamp;\r\n const shiftDwellTime = timestamp - _shiftTracker[0];\r\n const logKey = {\r\n dwellTime: keyCode === 16 ? shiftDwellTime : dwellTime,\r\n category,\r\n multipleKey: _isShiftDown || isPrevWasmultikeyWithShift(),\r\n pressTime: keyCode === 16 ? _shiftTracker[0] : dTimeStamp,\r\n releaseTime: timestamp,\r\n };\r\n\r\n if (keyCode === 16) {\r\n _isShiftDown = false;\r\n _shiftTracker = [];\r\n }\r\n\r\n _keystrokes.push(logKey);\r\n _keystrokes_with_code.push({...logKey, keyCode})\r\n _dTime = 0;\r\n }\r\n };\r\n\r\n const _keyEventTriggered = (e, type) => {\r\n const key = e.key;\r\n const keyCode = e.keyCode;\r\n _keyLogger(key, keyCode, type, e.shiftKey);\r\n };\r\n\r\n // Event handlers\r\n const keydownHandler = (e) => _keyEventTriggered(e, \"kd\");\r\n const keyupHandler = (e) => _keyEventTriggered(e, \"ku\");\r\n\r\n // Public method to start tracking keystroke dynamics\r\n const startTrackingKeystrokeDynamics = () => {\r\n window.addEventListener(\"keydown\", keydownHandler);\r\n window.addEventListener(\"keyup\", keyupHandler);\r\n };\r\n\r\n // Public method to stop tracking keystroke dynamics\r\n const stopTrackingKeystrokeDynamics = () => {\r\n window.removeEventListener(\"keydown\", keydownHandler);\r\n window.removeEventListener(\"keyup\", keyupHandler);\r\n _keystrokes = [];\r\n _previousDown = [];\r\n _isShiftDown = false;\r\n _shiftTracker = [];\r\n _dTime = 0;\r\n };\r\n\r\n // Public method to retrieve tracked data\r\n const getTrackedData = () => ({\r\n keystrokes: _keystrokes,\r\n });\r\n\r\n // Return public methods\r\n return {\r\n startTrackingKeystrokeDynamics,\r\n getTrackedData,\r\n stopTrackingKeystrokeDynamics\r\n };\r\n})();\r\n\r\nexport { KeystrokeDynamicsTracker };\r\n", "// Mouse Dynamics Tracker Module\r\nexport const MouseDynamicsTracker = (() => {\r\n // Private variables\r\n let _rawData = [];\r\n let _mouseClicksData = [];\r\n let _previousStop = null;\r\n let _movementTimer = null;\r\n\r\n // Private functions\r\n const _getCurrentTimestamp = () => new Date().getTime();\r\n\r\n const _findAngle = (cx, cy, ex, ey) => {\r\n const dy = ey - cy;\r\n const dx = ex - cx;\r\n let theta = Math.atan2(dy, dx) * (180 / Math.PI); // Convert radians to degrees\r\n if (theta < 0) theta += 360; // Ensure positive angle\r\n return 360 - theta;\r\n };\r\n\r\n const _getQuadrant = (angle_deg) => {\r\n const quadrants = [\"q1\", \"q2\", \"q3\", \"q4\", \"q5\", \"q6\", \"q7\", \"q8\"];\r\n return quadrants[Math.floor(angle_deg / 45)];\r\n };\r\n\r\n const _calculateDistanceBetweenPoints = (x1, y1, x2, y2) =>\r\n Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\r\n\r\n const _recordCoordinates = (x, y) => {\r\n const lastPushedElement = _rawData[_rawData.length - 1];\r\n const lastTime = lastPushedElement ? lastPushedElement.time : 0;\r\n const currentTime = _getCurrentTimestamp();\r\n const timeDifference = lastPushedElement ? currentTime - lastTime : 0;\r\n\r\n let theta_relative = 0;\r\n let distance_moved = 0;\r\n if (lastTime) {\r\n theta_relative = _findAngle(\r\n lastPushedElement.mouseX,\r\n lastPushedElement.mouseY,\r\n x,\r\n y\r\n );\r\n distance_moved = _calculateDistanceBetweenPoints(\r\n lastPushedElement.mouseX,\r\n lastPushedElement.mouseY,\r\n x,\r\n y\r\n );\r\n }\r\n\r\n const theta_origin = _findAngle(\r\n window.innerWidth / 2,\r\n window.innerHeight / 2,\r\n x,\r\n y\r\n );\r\n const quadrant = _getQuadrant(theta_origin);\r\n\r\n _rawData.push({\r\n mouseX: x,\r\n mouseY: y,\r\n time: currentTime,\r\n time_difference: timeDifference,\r\n theta_relative,\r\n quadrant,\r\n theta_origin,\r\n distance_moved,\r\n });\r\n };\r\n\r\n const _mouseMoved = (e) => {\r\n let _mouseX = e.pageX;\r\n let _mouseY = e.pageY;\r\n\r\n clearTimeout(_movementTimer);\r\n _movementTimer = setTimeout(() => {\r\n if (_previousStop) {\r\n _recordCoordinates(_mouseX, _mouseY);\r\n }\r\n _previousStop = {\r\n mouseX: _mouseX,\r\n mouseY: _mouseY,\r\n };\r\n }, 300); // Delay for recording mouse movement\r\n };\r\n\r\n const _clickEvent = (e) => {\r\n const x = e.pageX;\r\n const y = e.pageY;\r\n const timestamp = _getCurrentTimestamp();\r\n if (e.type === \"mousedown\") {\r\n _mouseClicksData.push({ X: x, Y: y, mouseDown_time: timestamp });\r\n } else if (e.type === \"mouseup\") {\r\n _mouseClicksData.push({\r\n X: x,\r\n Y: y,\r\n mouseUp_time: timestamp,\r\n timeDiff: timestamp - _mouseClicksData[_mouseClicksData.length - 1]\r\n .mouseDown_time,\r\n });\r\n }\r\n };\r\n\r\n // Public method to start tracking mouse dynamics\r\n const startTrackingMouseDynamics = () => {\r\n window.addEventListener(\"mousemove\", _mouseMoved);\r\n window.addEventListener(\"mousedown\", _clickEvent);\r\n window.addEventListener(\"mouseup\", _clickEvent);\r\n };\r\n\r\n const stopTrackingMouseDynamics = () => {\r\n _rawData = [];\r\n _mouseClicksData = [];\r\n _previousStop = null;\r\n _movementTimer = null;\r\n };\r\n\r\n // Public method to retrieve tracked data\r\n const getTrackedData = () => ({\r\n rawData: _rawData,\r\n mouseClicksData: _mouseClicksData,\r\n });\r\n\r\n // Return public methods\r\n return {\r\n startTrackingMouseDynamics,\r\n getTrackedData,\r\n stopTrackingMouseDynamics\r\n };\r\n})();\r\n\r\n", "import { isPrivate } from \"./detect_incognito\";\r\nimport { getHasLiedParameters } from \"./has_lied_detection\";\r\nimport { generateCanvasHash } from \"./canvas\";\r\nimport { x64hash128 } from \"./hashing\";\r\nimport { getWebglInfo } from \"./webgl\";\r\nimport { getBotInfo } from \"./bot\";\r\nimport { audioFingerprint } from \"./audio_fingerprint\";\r\n\r\nconst getAllValues = async () => {\r\n const browserInfo = await getBrowserInfo();\r\n const windowInfo = getWindowsInfo();\r\n const hasLiedParamters = getHasLiedParameters();\r\n const adBlock = getAdBlock();\r\n const dateOffsetTimezone = getTimeZone();\r\n const osDetails = getosDetails();\r\n const localIPAddress = await getLocalipAddress();\r\n const audioDetails = getAudioDetails();\r\n const deviceOrientation = getDeviceOrientation();\r\n const deviceMotion = getDeviceMotion();\r\n const deviceLight = getDeviceLight();\r\n const proximityEvent = getProximityEvent();\r\n const canvasId = generateCanvasHash();\r\n const audioFingerPrintFrequency = getAudioFingerPrintFrequency();\r\n const webglInfo = getWebglInfo();\r\n const fontsAvailable = await getFontsAvailable();\r\n const botInfo = getBotInfo();\r\n const batteryInfo = await getBattery();\r\n\r\n return {\r\n browserInfo: browserInfo,\r\n batteryInfo: batteryInfo,\r\n windowInfo: windowInfo,\r\n hasLiedParamters: hasLiedParamters,\r\n adBlock: adBlock,\r\n dateOffsetTimezone: dateOffsetTimezone,\r\n osDetails: osDetails,\r\n localIPAddress: localIPAddress,\r\n audioDetails: audioDetails,\r\n deviceOrientation: deviceOrientation,\r\n deviceMotion: deviceMotion,\r\n deviceLight: deviceLight,\r\n proximityEvent: proximityEvent,\r\n canvasId: canvasId,\r\n audioFingerPrintFrequency: audioFingerPrintFrequency,\r\n webglInfo: webglInfo,\r\n botInfo,\r\n fonts_available: fontsAvailable,\r\n };\r\n};\r\n\r\nasync function getBrowserInfo() {\r\n return {\r\n browser_userAgent: navigator.userAgent,\r\n browser_appName: navigator.appName,\r\n browser_appCodeName: navigator.appCodeName,\r\n browser_appVersion: navigator.appVersion,\r\n browser_platform: navigator.platform,\r\n browser_product: navigator.product,\r\n browser_productSub: navigator.productSub,\r\n browser_vendor: navigator.vendor,\r\n browser_vendorSub: navigator.vendorSub,\r\n browser_buildID: navigator.buildID,\r\n browser_oscpu: navigator.oscpu,\r\n browser_language: navigator.language,\r\n browser_hardwareConcurrency: navigator.hardwareConcurrency,\r\n browser_doNotTrack:\r\n navigator.doNotTrack === \"unspecified\" ? -1 : navigator.doNotTrack,\r\n browser_connection: navigator.connection,\r\n browser_maxTouchPoints: navigator.maxTouchPoints,\r\n browser_plugins: getBrowserPlugins(),\r\n browser_permissions: navigator.permissions,\r\n is_incognito: await isPrivate(),\r\n };\r\n}\r\n\r\nfunction getBrowserPlugins() {\r\n return Array.from(navigator.plugins).map((plugin) => {\r\n const formattedPlugin = {\r\n name: plugin.name,\r\n description: plugin.description,\r\n filename: plugin.filename,\r\n };\r\n return formattedPlugin;\r\n });\r\n}\r\n\r\nfunction getWindowsInfo() {\r\n return {\r\n window_colorDepth: window.screen.colorDepth,\r\n window_width: window.screen.width,\r\n window_height: window.screen.height,\r\n window_availWidth: window.screen.availWidth,\r\n window_availHeight: window.screen.availHeight,\r\n window_devicePixelRatio: window.devicePixelRatio,\r\n window_cookieEnabled: window.navigator.cookieEnabled,\r\n window_sessionStorage: checkSessionStorage(),\r\n window_localStorage: checkLocalStorage(),\r\n window_indexedDB: !!window.indexedDB,\r\n window_openDatabase: !!window.openDatabase,\r\n };\r\n}\r\n\r\nfunction checkSessionStorage() {\r\n let isSession;\r\n try {\r\n isSession = !!window.sessionStorage;\r\n } catch (err) {\r\n isSession = false;\r\n } finally {\r\n return isSession;\r\n }\r\n}\r\n\r\nfunction checkLocalStorage() {\r\n let isLocal;\r\n try {\r\n isLocal = !!window.localStorage;\r\n } catch (err) {\r\n isLocal = false;\r\n } finally {\r\n return isLocal;\r\n }\r\n}\r\n\r\nfunction getAdBlock() {\r\n var ads = document.createElement(\"div\");\r\n ads.innerHTML = \"&nbsp;\";\r\n ads.className = \"adsbox\";\r\n var result = false;\r\n try {\r\n document.body.appendChild(ads);\r\n result = document.getElementsByClassName(\"adsbox\")[0].offsetHeight === 0;\r\n document.body.removeChild(ads);\r\n } catch (e) {\r\n result = false;\r\n }\r\n return result;\r\n}\r\n\r\nfunction getTimeZone() {\r\n const dateObj = new Date();\r\n return dateObj.getTimezoneOffset();\r\n}\r\n\r\nexport function getOSName() {\r\n const userAgent = navigator.userAgent.toLowerCase();\r\n let os;\r\n if (userAgent.indexOf(\"windows phone\") >= 0) {\r\n os = \"Windows Phone\";\r\n } else if (\r\n userAgent.indexOf(\"windows\") >= 0 ||\r\n userAgent.indexOf(\"win16\") >= 0 ||\r\n userAgent.indexOf(\"win32\") >= 0 ||\r\n userAgent.indexOf(\"win64\") >= 0 ||\r\n userAgent.indexOf(\"win95\") >= 0 ||\r\n userAgent.indexOf(\"win98\") >= 0 ||\r\n userAgent.indexOf(\"winnt\") >= 0 ||\r\n userAgent.indexOf(\"wow64\") >= 0\r\n ) {\r\n os = \"Windows\";\r\n } else if (userAgent.indexOf(\"android\") >= 0) {\r\n os = \"Android\";\r\n } else if (\r\n userAgent.indexOf(\"linux\") >= 0 ||\r\n userAgent.indexOf(\"cros\") >= 0 ||\r\n userAgent.indexOf(\"x11\") >= 0\r\n ) {\r\n os = \"Linux\";\r\n } else if (\r\n userAgent.indexOf(\"iphone\") >= 0 ||\r\n userAgent.indexOf(\"ipad\") >= 0 ||\r\n userAgent.indexOf(\"ipod\") >= 0 ||\r\n userAgent.indexOf(\"crios\") >= 0 ||\r\n userAgent.indexOf(\"fxios\") >= 0\r\n ) {\r\n os = \"iOS\";\r\n } else if (\r\n userAgent.indexOf(\"macintosh\") >= 0 ||\r\n userAgent.indexOf(\"mac_powerpc)\") >= 0\r\n ) {\r\n os = \"Mac\";\r\n } else {\r\n os = \"Other\";\r\n }\r\n return os;\r\n}\r\n\r\nfunction getosDetails() {\r\n return {\r\n osName: getOSName(),\r\n osVersion: navigator.userAgent,\r\n };\r\n}\r\n\r\nasync function getIPDetails() {\r\n let response = await fetch(`https://api.ipify.org?format=json`);\r\n let data = await response.json();\r\n return data;\r\n}\r\n\r\nasync function getLocalipAddress() {\r\n let ipDetails = await getIPDetails();\r\n return {\r\n local_ip_address: ipDetails && ipDetails.ip,\r\n };\r\n}\r\n\r\nfunction getAudioDetails() {\r\n // Create an AudioContext\r\n const audioContext = new (window.AudioContext || window.webkitAudioContext)();\r\n if (!audioContext) {\r\n return;\r\n }\r\n // Get the audio context properties\r\n return {\r\n sampleRate: audioContext.sampleRate,\r\n destination: {\r\n maxChannelCount: audioContext.destination.maxChannelCount,\r\n channelCount: audioContext.destination.channelCount,\r\n channelCountMode: audioContext.destination.channelCountMode,\r\n channelInterpretation: audioContext.destination.channelInterpretation,\r\n },\r\n currentTime: audioContext.currentTime,\r\n state: audioContext.state,\r\n baseLatency: audioContext.baseLatency,\r\n };\r\n}\r\n\r\nfunction getDeviceOrientation() {\r\n if (window.DeviceOrientationEvent) {\r\n return window.addEventListener(\r\n \"deviceorientation\",\r\n function (event) {\r\n return {\r\n rotateDegrees: event.alpha,\r\n leftToRight: event.gamma,\r\n frontToBack: event.beta,\r\n };\r\n },\r\n true\r\n );\r\n }\r\n}\r\n\r\nfunction getDeviceMotion() {\r\n return window.addEventListener(\r\n \"devicemotion\",\r\n function (event) {\r\n return {\r\n x: event.accelerationIncludingGravity.x,\r\n y: event.accelerationIncludingGravity.y,\r\n z: event.accelerationIncludingGravity.z,\r\n };\r\n },\r\n true\r\n );\r\n}\r\n\r\nfunction getDeviceLight() {\r\n let ambientLightLevel;\r\n window.addEventListener(\"devicelight\", function (event) {\r\n ambientLightLevel = event.value;\r\n });\r\n return ambientLightLevel;\r\n}\r\n\r\nfunction getProximityEvent() {\r\n let proximityEvent;\r\n window.addEventListener(\"userproximity\", function (event) {\r\n proximityEvent = event.near;\r\n });\r\n return proximityEvent\r\n}\r\n\r\nfunction getAudioFingerPrintFrequency() {\r\n const averageFingerPrintFrequency = getAverageFingerprintFrequency();\r\n return x64hash128(averageFingerPrintFrequency, 69);\r\n}\r\n\r\nfunction getAverageFingerprintFrequency() {\r\n audioFingerprint.run(function (fingerprint) {\r\n return fingerprint;\r\n });\r\n}\r\n\r\nasync function getFontsAvailable() {\r\n try {\r\n const allWindowsMacFonts = new Set(\r\n [\r\n // Windows 10\r\n \"Arial\",\r\n \"Arial Black\",\r\n \"Bahnschrift\",\r\n \"Calibri\",\r\n \"Cambria\",\r\n \"Cambria Math\",\r\n \"Candara\",\r\n \"Comic Sans MS\",\r\n \"Consolas\",\r\n \"Constantia\",\r\n \"Corbel\",\r\n \"Courier New\",\r\n \"Ebrima\",\r\n \"Franklin Gothic Medium\",\r\n \"Gabriola\",\r\n \"Gadugi\",\r\n \"Georgia\",\r\n \"HoloLens MDL2 Assets\",\r\n \"Impact\",\r\n \"Ink Free\",\r\n \"Javanese Text\",\r\n \"Leelawadee UI\",\r\n \"Lucida Console\",\r\n \"Lucida Sans Unicode\",\r\n \"Malgun Gothic\",\r\n \"Marlett\",\r\n \"Microsoft Himalaya\",\r\n \"Microsoft JhengHei\",\r\n \"Microsoft New Tai Lue\",\r\n \"Microsoft PhagsPa\",\r\n \"Microsoft Sans Serif\",\r\n \"Microsoft Tai Le\",\r\n \"Microsoft YaHei\",\r\n \"Microsoft Yi Baiti\",\r\n \"MingLiU-ExtB\",\r\n \"Mongolian Baiti\",\r\n \"MS Gothic\",\r\n \"MV Boli\",\r\n \"Myanmar Text\",\r\n \"Nirmala UI\",\r\n \"Palatino Linotype\",\r\n \"Segoe MDL2 Assets\",\r\n \"Segoe Print\",\r\n \"Segoe Script\",\r\n \"Segoe UI\",\r\n \"Segoe UI Historic\",\r\n \"Segoe UI Emoji\",\r\n \"Segoe UI Symbol\",\r\n \"SimSun\",\r\n \"Sitka\",\r\n \"Sylfaen\",\r\n \"Symbol\",\r\n \"Tahoma\",\r\n \"Times New Roman\",\r\n \"Trebuchet MS\",\r\n \"Verdana\",\r\n \"Webdings\",\r\n \"Wingdings\",\r\n \"Yu Gothic\",\r\n // macOS\r\n \"American Typewriter\",\r\n \"Andale Mono\",\r\n \"Arial\",\r\n \"Arial Black\",\r\n \"Arial Narrow\",\r\n \"Arial Rounded MT Bold\",\r\n \"Arial Unicode MS\",\r\n \"Avenir\",\r\n \"Avenir Next\",\r\n \"Avenir Next Condensed\",\r\n \"Baskerville\",\r\n \"Big Caslon\",\r\n \"Bodoni 72\",\r\n \"Bodoni 72 Oldstyle\",\r\n \"Bodoni 72 Smallcaps\",\r\n \"Bradley Hand\",\r\n \"Brush Script MT\",\r\n \"Chalkboard\",\r\n \"Chalkboard SE\",\r\n \"Chalkduster\",\r\n \"Charter\",\r\n \"Cochin\",\r\n \"Comic Sans MS\",\r\n \"Copperplate\",\r\n \"Courier\",\r\n \"Courier New\",\r\n \"Didot\",\r\n \"DIN Alternate\",\r\n \"DIN Condensed\",\r\n \"Futura\",\r\n \"Geneva\",\r\n \"Georgia\",\r\n \"Gill Sans\",\r\n \"Helvetica\",\r\n \"Helvetica Neue\",\r\n \"Herculanum\",\r\n \"Hoefler Text\",\r\n \"Impact\",\r\n \"Lucida Grande\",\r\n \"Luminari\",\r\n \"Marker Felt\",\r\n \"Menlo\",\r\n \"Microsoft Sans Serif\",\r\n \"Monaco\",\r\n \"Noteworthy\",\r\n \"Optima\",\r\n \"Palatino\",\r\n \"Papyrus\",\r\n \"Phosphate\",\r\n \"Rockwell\",\r\n \"Savoye LET\",\r\n \"SignPainter\",\r\n \"Skia\",\r\n \"Snell Roundhand\",\r\n \"Tahoma\",\r\n \"Times\",\r\n \"Times New Roman\",\r\n \"Trattatello\",\r\n \"Trebuchet MS\",\r\n \"Verdana\",\r\n \"Zapfino\",\r\n ].sort()\r\n );\r\n const fontAvailable = new Set();\r\n await (async () => {\r\n await document.fonts.ready;\r\n\r\n for (const font of allWindowsMacFonts.values()) {\r\n if (document.fonts.check(`12px \"${font}\"`)) {\r\n fontAvailable.add(font);\r\n }\r\n }\r\n })();\r\n return [...fontAvailable.values()];\r\n } catch (error) {\r\n return [];\r\n }\r\n}\r\n\r\nasync function getBattery() {\r\n try {\r\n const batteryInfo = await navigator.getBattery();\r\n if (!batteryInfo) {\r\n return;\r\n }\r\n // Get battery status properties\r\n return {\r\n charging: batteryInfo.charging ? \"Charging\" : \"Not Charging\",\r\n level: batteryInfo.level * 100,\r\n chargingTime: batteryInfo.chargingTime,\r\n dischargingTime: batteryInfo.dischargingTime,\r\n };\r\n } catch (error) {\r\n return {};\r\n }\r\n}\r\n\r\nexport const getDeviceData = async () => {\r\n return await getAllValues();\r\n};", "export const detectIncognito = function () {\r\n return new Promise(function (resolve, reject) {\r\n let browserName = \"Unknown\";\r\n\r\n function __callback(isPrivate) {\r\n resolve({\r\n isPrivate: isPrivate,\r\n browserName: browserName,\r\n });\r\n }\r\n\r\n function identifyChromium() {\r\n const ua = navigator.userAgent;\r\n if (ua.match(/Chrome/)) {\r\n if (navigator.brave !== undefined) {\r\n return \"Brave\";\r\n } else if (ua.match(/Edg/)) {\r\n return \"Edge\";\r\n } else if (ua.match(/OPR/)) {\r\n return \"Opera\";\r\n }\r\n return \"Chrome\";\r\n } else {\r\n return \"Chromium\";\r\n }\r\n }\r\n\r\n function assertEvalToString(value) {\r\n return value === eval.toString().length;\r\n }\r\n\r\n function isSafari() {\r\n const v = navigator.vendor;\r\n return (\r\n v !== undefined && v.indexOf(\"Apple\") === 0 && assertEvalToString(37)\r\n );\r\n }\r\n\r\n function isChrome() {\r\n const v = navigator.vendor;\r\n return (\r\n v !== undefined && v.indexOf(\"Google\") === 0 && assertEvalToString(33)\r\n );\r\n }\r\n\r\n function isFirefox() {\r\n return (\r\n document.documentElement !== undefined &&\r\n document.documentElement.style.MozAppearance !== undefined &&\r\n assertEvalToString(37)\r\n );\r\n }\r\n\r\n function isMSIE() {\r\n return navigator.msSaveBlob !== undefined && assertEvalToString(39);\r\n }\r\n\r\n /**\r\n * Safari (Safari for iOS & macOS)\r\n **/\r\n\r\n function newSafariTest() {\r\n const tmp_name = String(Math.random());\r\n\r\n try {\r\n const db = window.indexedDB.open(tmp_name, 1);\r\n\r\n db.onupgradeneeded = function (i) {\r\n const res = i.target?.result;\r\n\r\n try {\r\n res\r\n .createObjectStore(\"test\", {\r\n autoIncrement: true,\r\n })\r\n .put(new Blob());\r\n\r\n __callback(false);\r\n } catch (e) {\r\n let message = e;\r\n\r\n if (e instanceof Error) {\r\n message = e.message ?? e;\r\n }\r\n\r\n if (typeof message !== \"string\") {\r\n return __callback(false);\r\n }\r\n\r\n const matchesExpectedError = /BlobURLs are not yet supported/.test(\r\n message\r\n );\r\n\r\n return __callback(matchesExpectedError);\r\n } finally {\r\n res.close();\r\n window.indexedDB.deleteDatabase(tmp_name);\r\n }\r\n };\r\n } catch (e) {\r\n return __callback(false);\r\n }\r\n }\r\n\r\n function oldSafariTest() {\r\n const openDB = window.openDatabase;\r\n const storage = window.localStorage;\r\n try {\r\n openDB(null, null, null, null);\r\n } catch (e) {\r\n return __callback(true);\r\n }\r\n try {\r\n storage.setItem(\"test\", \"1\");\r\n storage.removeItem(\"test\");\r\n } catch (e) {\r\n return __callback(true);\r\n }\r\n return __callback(false);\r\n }\r\n\r\n function safariPrivateTest() {\r\n if (navigator.maxTouchPoints !== undefined) {\r\n newSafariTest();\r\n } else {\r\n oldSafariTest();\r\n }\r\n }\r\n\r\n /**\r\n * Chrome\r\n **/\r\n\r\n function getQuotaLimit() {\r\n const w = window;\r\n if (\r\n w.performance !== undefined &&\r\n w.performance.memory !== undefined &&\r\n w.performance.memory.jsHeapSizeLimit !== undefined\r\n ) {\r\n return performance.memory.jsHeapSizeLimit;\r\n }\r\n return 1073741824;\r\n }\r\n\r\n // >= 76\r\n function storageQuotaChromePrivateTest() {\r\n navigator.webkitTemporaryStorage.queryUsageAndQuota(\r\n function (_, quota) {\r\n const quotaInMib = Math.round(quota / (1024 * 1024));\r\n const quotaLimitInMib =\r\n Math.round(getQuotaLimit() / (1024 * 1024)) * 2;\r\n\r\n __callback(quotaInMib < quotaLimitInMib);\r\n },\r\n function (e) {\r\n reject(\r\n new Error(\r\n \"detectIncognito somehow failed to query storage quota: \" +\r\n e.message\r\n )\r\n );\r\n }\r\n );\r\n }\r\n\r\n // 50 to 75\r\n function oldChromePrivateTest() {\r\n const fs = window.webkitRequestFileSystem;\r\n const success = function () {\r\n __callback(false);\r\n };\r\n const error = function () {\r\n __callback(true);\r\n };\r\n fs(0, 1, success, error);\r\n }\r\n\r\n function chromePrivateTest() {\r\n if (self.Promise !== undefined && self.Promise.allSettled !== undefined) {\r\n storageQuotaChromePrivateTest();\r\n } else {\r\n oldChromePrivateTest();\r\n }\r\n }\r\n\r\n /**\r\n * Firefox\r\n **/\r\n\r\n function firefoxPrivateTest() {\r\n __callback(navigator.serviceWorker === undefined);\r\n }\r\n\r\n /**\r\n * MSIE\r\n **/\r\n\r\n function msiePrivateTest() {\r\n __callback(window.indexedDB === undefined);\r\n }\r\n\r\n function main() {\r\n if (isSafari()) {\r\n browserName = \"Safari\";\r\n safariPrivateTest();\r\n } else if (isChrome()) {\r\n browserName = identifyChromium();\r\n chromePrivateTest();\r\n } else if (isFirefox()) {\r\n browserName = \"Firefox\";\r\n firefoxPrivateTest();\r\n } else if (isMSIE()) {\r\n browserName = \"Internet Explorer\";\r\n msiePrivateTest();\r\n } else {\r\n reject(new Error(\"detectIncognito cannot determine the browser\"));\r\n }\r\n }\r\n main();\r\n });\r\n};\r\n\r\nexport const isPrivate = async () => {\r\n try {\r\n const result = await detectIncognito();\r\n const isPrivateValue = result.isPrivate;\r\n return isPrivateValue;\r\n } catch (error) {\r\n return undefined;\r\n }\r\n};\r\n", "import { getOSName } from \"./index\";\r\n\r\nfunction getHasLiedOs() {\r\n const userAgent = navigator.userAgent.toLowerCase();\r\n let oscpu = navigator.oscpu;\r\n const platform = navigator.platform.toLowerCase();\r\n var os = getOSName();\r\n\r\n const mobileDevice =\r\n \"ontouchstart\" in window ||\r\n navigator.maxTouchPoints > 0 ||\r\n navigator.msMaxTouchPoints > 0;\r\n\r\n if (\r\n mobileDevice &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\" &&\r\n os !== \"Android\" &&\r\n os !== \"iOS\" &&\r\n os !== \"Other\" &&\r\n userAgent.indexOf(\"cros\") === -1\r\n ) {\r\n return true;\r\n }\r\n\r\n if (typeof oscpu !== \"undefined\") {\r\n oscpu = oscpu.toLowerCase();\r\n if (\r\n oscpu.indexOf(\"win\") >= 0 &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\"\r\n ) {\r\n return true;\r\n } else if (\r\n oscpu.indexOf(\"linux\") >= 0 &&\r\n os !== \"Linux\" &&\r\n os !== \"Android\"\r\n ) {\r\n return true;\r\n } else if (oscpu.indexOf(\"mac\") >= 0 && os !== \"Mac\" && os !== \"iOS\") {\r\n return true;\r\n } else if (\r\n (oscpu.indexOf(\"win\") === -1 &&\r\n oscpu.indexOf(\"linux\") === -1 &&\r\n oscpu.indexOf(\"mac\") === -1) !==\r\n (os === \"Other\")\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n if (\r\n platform.indexOf(\"win\") >= 0 &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\"\r\n ) {\r\n return true;\r\n } else if (\r\n (platform.indexOf(\"linux\") >= 0 ||\r\n platform.indexOf(\"android\") >= 0 ||\r\n platform.indexOf(\"pike\") >= 0) &&\r\n os !== \"Linux\" &&\r\n os !== \"Android\"\r\n ) {\r\n return true;\r\n } else if (\r\n (platform.indexOf(\"mac\") >= 0 ||\r\n platform.indexOf(\"ipad\") >= 0 ||\r\n platform.indexOf(\"ipod\") >= 0 ||\r\n platform.indexOf(\"iphone\") >= 0) &&\r\n os !== \"Mac\" &&\r\n os !== \"iOS\"\r\n ) {\r\n return true;\r\n } else if (platform.indexOf(\"arm\") >= 0 && os === \"Windows Phone\") {\r\n return false;\r\n } else if (\r\n platform.indexOf(\"pike\") >= 0 &&\r\n userAgent.indexOf(\"opera mini\") >= 0\r\n ) {\r\n return false;\r\n } else {\r\n var platformIsOther =\r\n platform.indexOf(\"win\") < 0 &&\r\n platform.indexOf(\"linux\") < 0 &&\r\n platform.indexOf(\"mac\") < 0 &&\r\n platform.indexOf(\"iphone\") < 0 &&\r\n platform.indexOf(\"ipad\") < 0 &&\r\n platform.indexOf(\"ipod\") < 0;\r\n if (platformIsOther !== (os === \"Other\")) {\r\n return true;\r\n }\r\n }\r\n\r\n return (\r\n typeof navigator.plugins === \"undefined\" &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\"\r\n );\r\n}\r\n\r\nfunction getHasLiedBrowser() {\r\n var userAgent = navigator.userAgent.toLowerCase();\r\n var productSub = navigator.productSub;\r\n\r\n var browser;\r\n if (userAgent.indexOf(\"edge/\") >= 0 || userAgent.indexOf(\"iemobile/\") >= 0) {\r\n return false;\r\n } else if (userAgent.indexOf(\"opera mini\") >= 0) {\r\n return false;\r\n } else if (userAgent.indexOf(\"firefox/\") >= 0) {\r\n browser = \"Firefox\";\r\n } else if (\r\n userAgent.indexOf(\"opera/\") >= 0 ||\r\n userAgent.indexOf(\" opr/\") >= 0\r\n ) {\r\n browser = \"Opera\";\r\n } else if (userAgent.indexOf(\"chrome/\") >= 0) {\r\n browser = \"Chrome\";\r\n } else if (userAgent.indexOf(\"safari/\") >= 0) {\r\n if (\r\n userAgent.indexOf(\"android 1.\") >= 0 ||\r\n userAgent.indexOf(\"android 2.\") >= 0 ||\r\n userAgent.indexOf(\"android 3.\") >= 0 ||\r\n userAgent.indexOf(\"android 4.\") >= 0\r\n ) {\r\n browser = \"AOSP\";\r\n } else {\r\n browser = \"Safari\";\r\n }\r\n } else if (userAgent.indexOf(\"trident/\") >= 0) {\r\n browser = \"Internet Explorer\";\r\n } else {\r\n browser = \"Other\";\r\n }\r\n\r\n if (\r\n (browser === \"Chrome\" || browser === \"Safari\" || browser === \"Opera\") &&\r\n productSub !== \"20030107\"\r\n ) {\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line no-eval\r\n var tempRes = eval.toString().length;\r\n if (\r\n tempRes === 37 &&\r\n browser !== \"Safari\" &&\r\n browser !== \"Firefox\" &&\r\n browser !== \"Other\"\r\n ) {\r\n return true;\r\n } else if (\r\n tempRes === 39 &&\r\n browser !== \"Internet Explorer\" &&\r\n browser !== \"Other\"\r\n ) {\r\n return true;\r\n } else if (\r\n tempRes === 33 &&\r\n browser !== \"Chrome\" &&\r\n browser !== \"AOSP\" &&\r\n browser !== \"Opera\" &&\r\n browser !== \"Other\"\r\n ) {\r\n return true;\r\n }\r\n\r\n var errFirefox;\r\n try {\r\n throw \"a\";\r\n } catch (err) {\r\n try {\r\n err.toSource();\r\n errFirefox = true;\r\n } catch (errOfErr) {\r\n errFirefox = false;\r\n }\r\n }\r\n return errFirefox && browser !== \"Firefox\" && browser !== \"Other\";\r\n}\r\n\r\nfunction getHasLiedResolution() {\r\n return (\r\n window.screen.width < window.screen.availWidth ||\r\n window.screen.height < window.screen.availHeight\r\n );\r\n}\r\n\r\nfunction getHasLiedLanguages() {\r\n if (typeof navigator.languages !== \"undefined\") {\r\n try {\r\n var firstLanguages = navigator.languages[0].substr(0, 2);\r\n if (firstLanguages !== navigator.language.substr(0, 2)) {\r\n return true;\r\n }\r\n } catch (err) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function getHasLiedParameters() {\r\n return {\r\n has_lied_os: getHasLiedOs(),\r\n has_lied_browser: getHasLiedBrowser(),\r\n has_lied_resolution: getHasLiedResolution(),\r\n has_lied_languages: getHasLiedLanguages(),\r\n };\r\n}\r\n", "export const generateCanvasHash = () => {\r\n var canvas = document.body.appendChild(document.createElement(\"canvas\"));\r\n var ctx = canvas.getContext(\"2d\");\r\n canvas.height = 200;\r\n canvas.width = 500;\r\n\r\n // Text with lowercase/uppercase/punctuation symbols\r\n var txt = \"This is a random text to generate canvas ID :) 123@\";\r\n ctx.textBaseline = \"top\";\r\n // The most common type\r\n ctx.font = \"14px 'Arial'\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.fillStyle = \"#f60\";\r\n ctx.fillRect(125, 1, 62, 20);\r\n // Some tricks for color mixing to increase the difference in rendering\r\n ctx.fillStyle = \"#069\";\r\n ctx.fillText(txt, 2, 15);\r\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n ctx.fillText(txt, 4, 17);\r\n\r\n ctx.globalCompositeOperation = \"multiply\";\r\n ctx.fillStyle = \"rgb(255,0,255)\";\r\n ctx.beginPath();\r\n ctx.arc(50, 50, 50, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n ctx.fillStyle = \"rgb(0,255,255)\";\r\n ctx.beginPath();\r\n ctx.arc(100, 50, 50, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n ctx.fillStyle = \"rgb(255,255,0)\";\r\n ctx.beginPath();\r\n ctx.arc(75, 100, 50, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n ctx.fillStyle = \"rgb(255,0,255)\";\r\n\r\n ctx.arc(75, 75, 75, 0, Math.PI * 2, true);\r\n ctx.arc(75, 75, 25, 0, Math.PI * 2, true);\r\n ctx.fill(\"evenodd\");\r\n\r\n var sha256 = (function () {\r\n // Eratosthenes seive to find primes up to 311 for magic constants. This is why SHA256 is better than SHA1\r\n var i = 1,\r\n j,\r\n K = [],\r\n H = [];\r\n\r\n while (++i < 18) {\r\n for (j = i * i; j < 312; j += i) {\r\n K[j] = 1;\r\n }\r\n }\r\n\r\n function x(num, root) {\r\n return ((Math.pow(num, 1 / root) % 1) * 4294967296) | 0;\r\n }\r\n\r\n for (i = 1, j = 0; i < 313; ) {\r\n if (!K[++i]) {\r\n H[j] = x(i, 2);\r\n K[j++] = x(i, 3);\r\n }\r\n }\r\n\r\n function S(X, n) {\r\n return (X >>> n) | (X << (32 - n));\r\n }\r\n\r\n function SHA256(b) {\r\n var HASH = H.slice((i = 0)),\r\n s = unescape(encodeURI(b)) /* encode as utf8 */,\r\n W = [],\r\n l = s.length,\r\n m = [],\r\n a,\r\n y,\r\n z;\r\n for (; i < l; )\r\n m[i >> 2] |= (s.charCodeAt(i) & 0xff) << (8 * (3 - (i++ % 4)));\r\n\r\n l *= 8;\r\n\r\n m[l >> 5] |= 0x80 << (24 - (l % 32));\r\n m[(z = ((l + 64) >> 5) | 15)] = l;\r\n\r\n for (i = 0; i < z; i += 16) {\r\n a = HASH.slice((j = 0), 8);\r\n\r\n for (; j < 64; a[4] += y) {\r\n if (j < 16) {\r\n W[j] = m[j + i];\r\n } else {\r\n W[j] =\r\n (S((y = W[j - 2]), 17) ^ S(y, 19) ^ (y >>> 10)) +\r\n (W[j - 7] | 0) +\r\n (S((y = W[j - 15]), 7) ^ S(y, 18) ^ (y >>> 3)) +\r\n (W[j - 16] | 0);\r\n }\r\n\r\n a.unshift(\r\n (y =\r\n ((a.pop() +\r\n (S((b = a[4]), 6) ^ S(b, 11) ^ S(b, 25)) +\r\n (((b & a[5]) ^ (~b & a[6])) + K[j])) |\r\n 0) +\r\n (W[j++] | 0)) +\r\n (S((l = a[0]), 2) ^ S(l, 13) ^ S(l, 22)) +\r\n ((l & a[1]) ^ (a[1] & a[2]) ^ (a[2] & l))\r\n );\r\n }\r\n\r\n for (j = 8; j--; ) HASH[j] = a[j] + HASH[j];\r\n }\r\n\r\n for (s = \"\"; j < 63; )\r\n s += ((HASH[++j >> 3] >> (4 * (7 - (j % 8)))) & 15).toString(16);\r\n\r\n return s;\r\n }\r\n\r\n return SHA256;\r\n })();\r\n\r\n const canvasHash = sha256(canvas.toDataURL());\r\n document.body.removeChild(canvas);\r\n return canvasHash;\r\n};\r\n", "function x64Add(m, n) {\r\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\r\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\r\n var o = [0, 0, 0, 0];\r\n o[3] += m[3] + n[3];\r\n o[2] += o[3] >>> 16;\r\n o[3] &= 0xffff;\r\n o[2] += m[2] + n[2];\r\n o[1] += o[2] >>> 16;\r\n o[2] &= 0xffff;\r\n o[1] += m[1] + n[1];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[0] += m[0] + n[0];\r\n o[0] &= 0xffff;\r\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\r\n}\r\nfunction x64Multiply(m, n) {\r\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\r\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\r\n var o = [0, 0, 0, 0];\r\n o[3] += m[3] * n[3];\r\n o[2] += o[3] >>> 16;\r\n o[3] &= 0xffff;\r\n o[2] += m[2] * n[3];\r\n o[1] += o[2] >>> 16;\r\n o[2] &= 0xffff;\r\n o[2] += m[3] * n[2];\r\n o[1] += o[2] >>> 16;\r\n o[2] &= 0xffff;\r\n o[1] += m[1] * n[3];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[1] += m[2] * n[2];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[1] += m[3] * n[1];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[0] += m[0] * n[3] + m[1] * n[2] + m[2] * n[1] + m[3] * n[0];\r\n o[0] &= 0xffff;\r\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\r\n}\r\nfunction x64Rotl(m, n) {\r\n n %= 64;\r\n if (n === 32) {\r\n return [m[1], m[0]];\r\n } else if (n < 32) {\r\n return [\r\n (m[0] << n) | (m[1] >>> (32 - n)),\r\n (m[1] << n) | (m[0] >>> (32 - n)),\r\n ];\r\n } else {\r\n n -= 32;\r\n return [\r\n (m[1] << n) | (m[0] >>> (32 - n)),\r\n (m[0] << n) | (m[1] >>> (32 - n)),\r\n ];\r\n }\r\n}\r\nfunction x64LeftShift(m, n) {\r\n n %= 64;\r\n if (n === 0) {\r\n return m;\r\n } else if (n < 32) {\r\n return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\r\n } else {\r\n return [m[1] << (n - 32), 0];\r\n }\r\n}\r\nfunction x64Xor(m, n) {\r\n return [m[0] ^ n[0], m[1] ^ n[1]];\r\n}\r\nfunction x64Fmix(h) {\r\n h = x64Xor(h, [0, h[0] >>> 1]);\r\n h = x64Multiply(h, [0xff51afd7, 0xed558ccd]);\r\n h = x64Xor(h, [0, h[0] >>> 1]);\r\n h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\r\n h = x64Xor(h, [0, h[0] >>> 1]);\r\n return h;\r\n}\r\nexport function x64hash128(key, seed) {\r\n key = key || \"\";\r\n seed = seed || 0;\r\n var remainder = key.length % 16;\r\n var bytes = key.length - remainder;\r\n var h1 = [0, seed];\r\n var h2 = [0, seed];\r\n var k1 = [0, 0];\r\n var k2 = [0, 0];\r\n var c1 = [0x87c37b91, 0x114253d5];\r\n var c2 = [0x4cf5ad43, 0x2745937f];\r\n for (var i = 0; i < bytes; i = i + 16) {\r\n k1 = [\r\n (key.charCodeAt(i + 4) & 0xff) |\r\n ((key.charCodeAt(i + 5) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 6) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 7) & 0xff) << 24),\r\n (key.charCodeAt(i) & 0xff) |\r\n ((key.charCodeAt(i + 1) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 2) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 3) & 0xff) << 24),\r\n ];\r\n k2 = [\r\n (key.charCodeAt(i + 12) & 0xff) |\r\n ((key.charCodeAt(i + 13) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 14) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 15) & 0xff) << 24),\r\n (key.charCodeAt(i + 8) & 0xff) |\r\n ((key.charCodeAt(i + 9) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 10) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 11) & 0xff) << 24),\r\n ];\r\n k1 = x64Multiply(k1, c1);\r\n k1 = x64Rotl(k1, 31);\r\n k1 = x64Multiply(k1, c2);\r\n h1 = x64Xor(h1, k1);\r\n h1 = x64Rotl(h1, 27);\r\n h1 = x64Add(h1, h2);\r\n h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\r\n k2 = x64Multiply(k2, c2);\r\n k2 = x64Rotl(k2, 33);\r\n k2 = x64Multiply(k2, c1);\r\n h2 = x64Xor(h2, k2);\r\n h2 = x64Rotl(h2, 31);\r\n h2 = x64Add(h2, h1);\r\n h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\r\n }\r\n k1 = [0, 0];\r\n k2 = [0, 0];\r\n switch (remainder) {\r\n case 15:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 14)], 48));\r\n case 14:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 13)], 40));\r\n case 13:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 12)], 32));\r\n case 12:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 11)], 24));\r\n case 11:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 10)], 16));\r\n case 10:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 9)], 8));\r\n case 9:\r\n k2 = x64Xor(k2, [0, key.charCodeAt(i + 8)]);\r\n k2 = x64Multiply(k2, c2);\r\n k2 = x64Rotl(k2, 33);\r\n k2 = x64Multiply(k2, c1);\r\n h2 = x64Xor(h2, k2);\r\n case 8:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 7)], 56));\r\n case 7:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 6)], 48));\r\n case 6:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 5)], 40));\r\n case 5:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 4)], 32));\r\n case 4:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 3)], 24));\r\n case 3:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 2)], 16));\r\n case 2:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 1)], 8));\r\n case 1:\r\n k1 = x64Xor(k1, [0, key.charCodeAt(i)]);\r\n k1 = x64Multiply(k1, c1);\r\n k1 = x64Rotl(k1, 31);\r\n k1 = x64Multiply(k1, c2);\r\n h1 = x64Xor(h1, k1);\r\n }\r\n h1 = x64Xor(h1, [0, key.length]);\r\n h2 = x64Xor(h2, [0, key.length]);\r\n h1 = x64Add(h1, h2);\r\n h2 = x64Add(h2, h1);\r\n h1 = x64Fmix(h1);\r\n h2 = x64Fmix(h2);\r\n h1 = x64Add(h1, h2);\r\n h2 = x64Add(h2, h1);\r\n return (\r\n (\"00000000\" + (h1[0] >>> 0).toString(16)).slice(-8) +\r\n (\"00000000\" + (h1[1] >>> 0).toString(16)).slice(-8) +\r\n (\"00000000\" + (h2[0] >>> 0).toString(16)).slice(-8) +\r\n (\"00000000\" + (h2[1] >>> 0).toString(16)).slice(-8)\r\n );\r\n}\r\n", "import { x64hash128 } from \"./hashing\";\r\n\r\nexport const getWebglInfo = () => {\r\n var canvas,\r\n ctx,\r\n width = 256,\r\n height = 128;\r\n canvas = document.body.appendChild(document.createElement(\"canvas\"));\r\n (canvas.width = width),\r\n (canvas.height = height),\r\n (ctx =\r\n canvas.getContext(\"webgl2\") ||\r\n canvas.getContext(\"experimental-webgl2\") ||\r\n canvas.getContext(\"webgl\") ||\r\n canvas.getContext(\"experimental-webgl\") ||\r\n canvas.getContext(\"moz-webgl\"));\r\n\r\n const webglInfo = {};\r\n\r\n try {\r\n if (ctx) {\r\n var debugInfo = ctx.getExtension(\"WEBGL_debug_renderer_info\");\r\n\r\n if (debugInfo) {\r\n var webglVendor = ctx.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\r\n var webglRenderer = ctx.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\r\n webglInfo.webglVendor = webglVendor;\r\n webglInfo.webglRenderer = webglRenderer;\r\n }\r\n }\r\n\r\n var f =\r\n \"attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}\";\r\n var g =\r\n \"precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}\";\r\n var h = ctx.createBuffer();\r\n\r\n ctx.bindBuffer(ctx.ARRAY_BUFFER, h);\r\n\r\n var i = new Float32Array([-0.2, -0.9, 0, 0.4, -0.26, 0, 0, 0.7321, 0]);\r\n\r\n ctx.bufferData(ctx.ARRAY_BUFFER, i, ctx.STATIC_DRAW),\r\n (h.itemSize = 3),\r\n (h.numItems = 3);\r\n\r\n var j = ctx.createProgram();\r\n var k = ctx.createShader(ctx.VERTEX_SHADER);\r\n\r\n ctx.shaderSource(k, f);\r\n ctx.compileShader(k);\r\n\r\n var l = ctx.createShader(ctx.FRAGMENT_SHADER);\r\n\r\n ctx.shaderSource(l, g);\r\n ctx.compileShader(l);\r\n ctx.attachShader(j, k);\r\n ctx.attachShader(j, l);\r\n ctx.linkProgram(j);\r\n ctx.useProgram(j);\r\n\r\n j.vertexPosAttrib = ctx.getAttribLocation(j, \"attrVertex\");\r\n j.offsetUniform = ctx.getUniformLocation(j, \"uniformOffset\");\r\n\r\n ctx.enableVertexAttribArray(j.vertexPosArray);\r\n ctx.vertexAttribPointer(j.vertexPosAttrib, h.itemSize, ctx.FLOAT, !1, 0, 0);\r\n ctx.uniform2f(j.offsetUniform, 1, 1);\r\n ctx.drawArrays(ctx.TRIANGLE_STRIP, 0, h.numItems);\r\n document.body.removeChild(canvas);\r\n } catch (e) {}\r\n\r\n var m = \"\";\r\n\r\n var n = new Uint8Array(width * height * 4);\r\n ctx.readPixels(0, 0, width, height, ctx.RGBA, ctx.UNSIGNED_BYTE, n);\r\n m = JSON.stringify(n).replace(/,?\"[0-9]+\":/g, \"\");\r\n\r\n const webglId = x64hash128(m, 69);\r\n webglInfo.webglId = webglId;\r\n return webglInfo;\r\n};\r\n", "export const getBotInfo = () => {\r\n const isWebdriver = navigator.webdriver\r\n return {isWebdriver}\r\n}", "export const audioFingerprint = (function () {\r\n var context = null;\r\n var currentTime = null;\r\n var oscillator = null;\r\n var compressor = null;\r\n var fingerprint = null;\r\n var callback = null;\r\n\r\n function run(cb, debug = false) {\r\n callback = cb;\r\n\r\n try {\r\n setup();\r\n\r\n oscillator.connect(compressor);\r\n compressor.connect(context.destination);\r\n\r\n oscillator.start(0);\r\n context.startRendering();\r\n\r\n context.oncomplete = onComplete;\r\n } catch (e) {\r\n if (debug) {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n function setup() {\r\n setContext();\r\n currentTime = context.currentTime;\r\n setOscillator();\r\n setCompressor();\r\n }\r\n\r\n function setContext() {\r\n var audioContext =\r\n window.OfflineAudioContext || window.webkitOfflineAudioContext;\r\n context = new audioContext(1, 44100, 44100);\r\n }\r\n\r\n function setOscillator() {\r\n oscillator = context.createOscillator();\r\n oscillator.type = \"triangle\";\r\n oscillator.frequency.setValueAtTime(10000, currentTime);\r\n }\r\n\r\n function setCompressor() {\r\n compressor = context.createDynamicsCompressor();\r\n\r\n setCompressorValueIfDefined(\"threshold\", -50);\r\n setCompressorValueIfDefined(\"knee\", 40);\r\n setCompressorValueIfDefined(\"ratio\", 12);\r\n setCompressorValueIfDefined(\"reduction\", -20);\r\n setCompressorValueIfDefined(\"attack\", 0);\r\n setCompressorValueIfDefined(\"release\", 0.25);\r\n }\r\n\r\n function setCompressorValueIfDefined(item, value) {\r\n if (\r\n compressor[item] !== undefined &&\r\n typeof compressor[item].setValueAtTime === \"function\"\r\n ) {\r\n compressor[item].setValueAtTime(value, context.currentTime);\r\n }\r\n }\r\n\r\n function onComplete(event) {\r\n generateFingerprints(event);\r\n compressor.disconnect();\r\n }\r\n\r\n function generateFingerprints(event) {\r\n var output = null;\r\n for (var i = 4500; 5e3 > i; i++) {\r\n var channelData = event.renderedBuffer.getChannelData(0)[i];\r\n output += Math.abs(channelData);\r\n }\r\n\r\n fingerprint = output.toString();\r\n\r\n if (typeof callback === \"function\") {\r\n return callback(fingerprint);\r\n }\r\n }\r\n\r\n return {\r\n run: run,\r\n };\r\n})();\r\n"],
5
- "mappings": "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AAoB,CACjC,GAAI,CACF,IAAM2B,EAAqB,IAAI,IAC7B,CAEE,QACA,cACA,cACA,UACA,UACA,eACA,UACA,gBACA,WACA,aACA,SACA,cACA,SACA,yBACA,WACA,SACA,UACA,uBACA,SACA,WACA,gBACA,gBACA,iBACA,sBACA,gBACA,UACA,qBACA,qBACA,wBACA,oBACA,uBACA,mBACA,kBACA,qBACA,eACA,kBACA,YACA,UACA,eACA,aACA,oBACA,oBACA,cACA,eACA,WACA,oBACA,iBACA,kBACA,SACA,QACA,UACA,SACA,SACA,kBACA,eACA,UACA,WACA,YACA,YAEA,sBACA,cACA,QACA,cACA,eACA,wBACA,mBACA,SACA,cACA,wBACA,cACA,aACA,YACA,qBACA,sBACA,eACA,kBACA,aACA,gBACA,cACA,UACA,SACA,gBACA,cACA,UACA,cACA,QACA,gBACA,gBACA,SACA,SACA,UACA,YACA,YACA,iBACA,aACA,eACA,SACA,gBACA,WACA,cACA,QACA,uBACA,SACA,aACA,SACA,WACA,UACA,YACA,WACA,aACA,cACA,OACA,kBACA,SACA,QACA,kBACA,cACA,eACA,UACA,SACF,EAAE,KAAK,CACT,EACMC,EAAgB,IAAI,IAC1B,aAAO,SAAY,CACjB,MAAM,SAAS,MAAM,MAErB,QAAWC,KAAQF,EAAmB,OAAO,EACvC,SAAS,MAAM,MAAM,SAASE,CAAI,GAAG,GACvCD,EAAc,IAAIC,CAAI,CAG5B,GAAG,EACI,CAAC,GAAGD,EAAc,OAAO,CAAC,CACnC,MAAgB,CACd,MAAO,CAAC,CACV,CACF,CAEA,eAAexB,IAAa,CAC1B,GAAI,CACF,IAAMD,EAAc,MAAM,UAAU,WAAW,EAC/C,OAAKA,EAIE,CACL,SAAUA,EAAY,SAAW,WAAa,eAC9C,MAAOA,EAAY,MAAQ,IAC3B,aAAcA,EAAY,aAC1B,gBAAiBA,EAAY,eAC/B,EARE,MASJ,MAAgB,CACd,MAAO,CAAC,CACV,CACF,CAEO,IAAM2B,EAAgB,SACpB,MAAM9D,GAAa,EJ3brB,IAAM+D,EAAU,QAEvB,SAASC,EAAeC,EAAQ,CAE9B,GADE,QAAQ,IAAI,sBAAuBA,CAAM,EACvC,CAACA,GAAU,OAAOA,GAAW,UAAYA,IAAW,oBACtD,cAAQ,IAAI,MAAM,EACZ,IAAI,MACR,iFACF,CAEJ,CAKA,SAASC,GAAmB,CAAE,OAAAD,CAAO,EAAG,CACtC,MAAO,CACL,QAAS,YACT,QAAAF,EACA,OAAAE,EAEA,MAAM,eAAgB,CACpB,OAAO,MAAeE,EAAc,CACtC,CACF,CACF,CAEO,SAASC,GAAeC,EAAS,CAAC,EAAG,CAC1C,GAAM,CAAE,OAAAJ,EAAQ,QAAAK,CAAQ,EAAID,EAC5B,OAAAL,EAAeC,CAAM,EAEjBK,GAAS,QAAQ,IAAI,sCAAsC,EAExDJ,GAAmB,CAAE,OAAAD,CAAO,CAAC,CACtC,CAKA,SAASM,GAAmB,CAAE,OAAAN,CAAO,EAAG,CACtC,MAAO,CACL,QAAS,aACT,QAAAF,EACA,OAAAE,EAEA,sBAA6CO,EAC7C,sBAA6CC,EAE7C,kBAAyCC,EACzC,kBAAyCC,EAEzC,uBAA8CC,EAC9C,2BAAkDC,CACpD,CACF,CAEO,SAASC,GAAeT,EAAS,CAAC,EAAG,CAC1C,GAAM,CAAE,OAAAJ,EAAQ,QAAAK,CAAQ,EAAID,EAC5B,OAAAL,EAAeC,CAAM,EAEjBK,GAAS,QAAQ,IAAI,qCAAqC,EAEvDC,GAAmB,CAAE,OAAAN,CAAO,CAAC,CACtC,CAKA,SAASc,GAAiC,CAAE,OAAAd,CAAO,EAAG,CACpD,IAAMe,EAAaT,GAAmB,CAAE,OAAAN,CAAO,CAAC,EAC1CgB,EAAaf,GAAmB,CAAE,OAAAD,CAAO,CAAC,EAEhD,MAAO,CACL,QAAS,4BACT,QAAAF,EACA,OAAAE,EAGA,sBAAuBe,EAAW,sBAClC,sBAAuBA,EAAW,sBAClC,kBAAmBA,EAAW,kBAC9B,kBAAmBA,EAAW,kBAE9B,uBAAwBA,EAAW,uBACnC,2BAA4BA,EAAW,2BAGvC,cAAeC,EAAW,cAM1B,MAAM,6BAA8B,CAClC,IAAMC,EAAc,CAClB,UAAWF,EAAW,2BAA2B,EACjD,MAAOA,EAAW,uBAAuB,CAC3C,EAEMG,EAAS,MAAMF,EAAW,cAAc,EAE9C,MAAO,CACL,YAAAC,EACA,OAAAC,EACA,UAAW,IAAI,KAAK,EAAE,YAAY,CACpC,CACF,CACF,CACF,CAEO,SAASC,GAA6Bf,EAAS,CAAC,EAAG,CACxD,GAAM,CAAE,OAAAJ,EAAQ,QAAAK,CAAQ,EAAID,EAC5B,OAAAL,EAAeC,CAAM,EAEjBK,GAAS,QAAQ,IAAI,mDAAmD,EAErES,GAAiC,CAAE,OAAAd,CAAO,CAAC,CACpD",
6
- "names": ["src_exports", "__export", "behavioural_biometrics_exports", "device_id_exports", "initBiometrics", "initDeviceInfo", "initDeviceInfoWithBiometrics", "version", "behavioural_biometrics_exports", "__export", "fetchKeyStrockDynamicsData", "fetchMouseDynamicsData", "initKeyStrokeDynamics", "initMouseDynamics", "stopKeyStrokeDynamics", "stopMouseDynamics", "KeystrokeDynamicsTracker", "_keystrokes", "_keystrokes_with_code", "_previousDown", "_isShiftDown", "_shiftTracker", "_dTime", "_getCurrentTimestamp", "_getCategory", "key", "keyCode", "shiftKeyPressed", "isUpperCaseLetter", "isLowerCaseLetter", "isUpperCaseSymbol", "isPrevWasmultikeyWithShift", "prevKey", "_keyLogger", "type", "timestamp", "category", "dTimeStamp", "dwellTime", "shiftDwellTime", "logKey", "_keyEventTriggered", "e", "keydownHandler", "keyupHandler", "MouseDynamicsTracker", "_rawData", "_mouseClicksData", "_previousStop", "_movementTimer", "_getCurrentTimestamp", "_findAngle", "cx", "cy", "ex", "ey", "dy", "dx", "theta", "_getQuadrant", "angle_deg", "_calculateDistanceBetweenPoints", "x1", "y1", "x2", "y2", "_recordCoordinates", "x", "y", "lastPushedElement", "lastTime", "currentTime", "timeDifference", "theta_relative", "distance_moved", "theta_origin", "quadrant", "_mouseMoved", "e", "_mouseX", "_mouseY", "_clickEvent", "timestamp", "initKeyStrokeDynamics", "KeystrokeDynamicsTracker", "stopKeyStrokeDynamics", "initMouseDynamics", "MouseDynamicsTracker", "stopMouseDynamics", "fetchMouseDynamicsData", "fetchKeyStrockDynamicsData", "device_id_exports", "__export", "getDeviceData", "getOSName", "detectIncognito", "resolve", "reject", "browserName", "__callback", "isPrivate", "identifyChromium", "ua", "assertEvalToString", "value", "isSafari", "v", "isChrome", "isFirefox", "isMSIE", "newSafariTest", "tmp_name", "db", "i", "res", "e", "message", "matchesExpectedError", "oldSafariTest", "openDB", "storage", "safariPrivateTest", "getQuotaLimit", "w", "storageQuotaChromePrivateTest", "_", "quota", "quotaInMib", "quotaLimitInMib", "oldChromePrivateTest", "fs", "chromePrivateTest", "firefoxPrivateTest", "msiePrivateTest", "main", "getHasLiedOs", "userAgent", "oscpu", "platform", "os", "getOSName", "platformIsOther", "getHasLiedBrowser", "productSub", "browser", "tempRes", "errFirefox", "err", "getHasLiedResolution", "getHasLiedLanguages", "firstLanguages", "getHasLiedParameters", "generateCanvasHash", "canvas", "ctx", "txt", "sha256", "j", "K", "H", "num", "root", "S", "X", "n", "SHA256", "b", "HASH", "s", "W", "l", "a", "z", "canvasHash", "x64Add", "m", "n", "o", "x64Multiply", "x64Rotl", "x64LeftShift", "x64Xor", "x64Fmix", "h", "x64hash128", "key", "seed", "remainder", "bytes", "h1", "h2", "k1", "k2", "c1", "c2", "i", "getWebglInfo", "canvas", "ctx", "width", "height", "webglInfo", "debugInfo", "webglVendor", "webglRenderer", "f", "g", "h", "i", "j", "k", "l", "m", "n", "webglId", "x64hash128", "getBotInfo", "audioFingerprint", "context", "currentTime", "oscillator", "compressor", "fingerprint", "callback", "run", "cb", "debug", "setup", "onComplete", "e", "setContext", "setOscillator", "setCompressor", "audioContext", "setCompressorValueIfDefined", "item", "value", "event", "generateFingerprints", "output", "i", "channelData", "getAllValues", "browserInfo", "getBrowserInfo", "windowInfo", "getWindowsInfo", "hasLiedParamters", "getHasLiedParameters", "adBlock", "getAdBlock", "dateOffsetTimezone", "getTimeZone", "osDetails", "getosDetails", "localIPAddress", "getLocalipAddress", "audioDetails", "getAudioDetails", "deviceOrientation", "getDeviceOrientation", "deviceMotion", "getDeviceMotion", "deviceLight", "getDeviceLight", "proximityEvent", "getProximityEvent", "canvasId", "generateCanvasHash", "audioFingerPrintFrequency", "getAudioFingerPrintFrequency", "webglInfo", "getWebglInfo", "fontsAvailable", "getFontsAvailable", "botInfo", "getBotInfo", "batteryInfo", "getBattery", "getBrowserPlugins", "isPrivate", "plugin", "checkSessionStorage", "checkLocalStorage", "isSession", "isLocal", "ads", "result", "getOSName", "userAgent", "os", "getIPDetails", "ipDetails", "audioContext", "event", "ambientLightLevel", "averageFingerPrintFrequency", "getAverageFingerprintFrequency", "x64hash128", "audioFingerprint", "fingerprint", "allWindowsMacFonts", "fontAvailable", "font", "getDeviceData", "version", "validateApiKey", "apiKey", "buildDeviceInfoSDK", "getDeviceData", "initDeviceInfo", "config", "verbose", "buildBiometricsSDK", "initKeyStrokeDynamics", "stopKeyStrokeDynamics", "initMouseDynamics", "stopMouseDynamics", "fetchMouseDynamicsData", "fetchKeyStrockDynamicsData", "initBiometrics", "buildDeviceInfoWithBiometricsSDK", "biometrics", "deviceInfo", "behavioural", "device", "initDeviceInfoWithBiometrics"]
4
+ "sourcesContent": ["// src/index.js\r\n\r\nimport * as BehaviouralBiometrics from './behavioural_biometrics/index.js';\r\nimport * as DeviceId from './device_id/index.js';\r\n\r\nexport const version = '1.2.3';\r\n\r\nfunction validateApiKey(apiKey) {\r\n if (!apiKey || typeof apiKey !== 'string' || apiKey !== 'dwield-sdk-secret') {\r\n throw new Error(\r\n 'Invalid API Key provided. Please provide a valid API Key to initialize the SDK.'\r\n );\r\n }\r\n}\r\n\r\n/*\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n DEVICE INFO ONLY (OLD: initDeviceId)\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*/\r\nfunction buildDeviceInfoSDK({ apiKey }) {\r\n return {\r\n product: 'device_id',\r\n version,\r\n apiKey,\r\n\r\n async getDeviceData() {\r\n return await DeviceId.getDeviceData();\r\n },\r\n };\r\n}\r\n\r\nexport function initDeviceInfo(config = {}) {\r\n const { apiKey, verbose } = config;\r\n validateApiKey(apiKey);\r\n\r\n if (verbose) console.log('[BB-SDK] Device Info SDK initialized');\r\n\r\n return buildDeviceInfoSDK({ apiKey });\r\n}\r\n\r\n/*\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n BIOMETRICS ONLY\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*/\r\nfunction buildBiometricsSDK({ apiKey }) {\r\n return {\r\n product: 'biometrics',\r\n version,\r\n apiKey,\r\n\r\n initKeyStrokeDynamics: BehaviouralBiometrics.initKeyStrokeDynamics,\r\n stopKeyStrokeDynamics: BehaviouralBiometrics.stopKeyStrokeDynamics,\r\n\r\n initMouseDynamics: BehaviouralBiometrics.initMouseDynamics,\r\n stopMouseDynamics: BehaviouralBiometrics.stopMouseDynamics,\r\n\r\n fetchMouseDynamicsData: BehaviouralBiometrics.fetchMouseDynamicsData,\r\n fetchKeyStrockDynamicsData: BehaviouralBiometrics.fetchKeyStrockDynamicsData,\r\n };\r\n}\r\n\r\nexport function initBiometrics(config = {}) {\r\n const { apiKey, verbose } = config;\r\n validateApiKey(apiKey);\r\n\r\n if (verbose) console.log('[BB-SDK] Biometrics SDK initialized');\r\n\r\n return buildBiometricsSDK({ apiKey });\r\n}\r\n\r\n/*\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n DEVICE INFO + BIOMETRICS (OLD: initCombined)\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500*/\r\nfunction buildDeviceInfoWithBiometricsSDK({ apiKey }) {\r\n const biometrics = buildBiometricsSDK({ apiKey });\r\n const deviceInfo = buildDeviceInfoSDK({ apiKey });\r\n\r\n return {\r\n product: 'device_id_with_biometrics',\r\n version,\r\n apiKey,\r\n\r\n // Behavioural (original names preserved)\r\n initKeyStrokeDynamics: biometrics.initKeyStrokeDynamics,\r\n stopKeyStrokeDynamics: biometrics.stopKeyStrokeDynamics,\r\n initMouseDynamics: biometrics.initMouseDynamics,\r\n stopMouseDynamics: biometrics.stopMouseDynamics,\r\n\r\n fetchMouseDynamicsData: biometrics.fetchMouseDynamicsData,\r\n fetchKeyStrockDynamicsData: biometrics.fetchKeyStrockDynamicsData,\r\n\r\n // Device info\r\n getDeviceData: deviceInfo.getDeviceData,\r\n\r\n /**\r\n * NEW NAME \u2714\r\n * Returns device info + behavioural biometrics together\r\n */\r\n async getDeviceInfoWithBiometrics() {\r\n const behavioural = {\r\n keystroke: biometrics.fetchKeyStrockDynamicsData(),\r\n mouse: biometrics.fetchMouseDynamicsData(),\r\n };\r\n\r\n const device = await deviceInfo.getDeviceData();\r\n\r\n return {\r\n behavioural,\r\n device,\r\n timestamp: new Date().toISOString(),\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport function initDeviceInfoWithBiometrics(config = {}) {\r\n const { apiKey, verbose } = config;\r\n validateApiKey(apiKey);\r\n\r\n if (verbose) console.log('[BB-SDK] Device Info + Biometrics SDK initialized');\r\n\r\n return buildDeviceInfoWithBiometricsSDK({ apiKey });\r\n}\r\n\r\n/* Optional exports */\r\nexport { BehaviouralBiometrics, DeviceId };\r\n", "import { KeystrokeDynamicsTracker } from \"./keystroke_dynamics\";\r\nimport { MouseDynamicsTracker } from \"./mouse_dynamics\";\r\n\r\nexport const initKeyStrokeDynamics = () => {\r\n KeystrokeDynamicsTracker.startTrackingKeystrokeDynamics();\r\n};\r\n\r\nexport const stopKeyStrokeDynamics = () => {\r\n KeystrokeDynamicsTracker.stopTrackingKeystrokeDynamics();\r\n};\r\n\r\nexport const initMouseDynamics = () => {\r\n MouseDynamicsTracker.startTrackingMouseDynamics();\r\n};\r\n\r\nexport const stopMouseDynamics = () => {\r\n MouseDynamicsTracker.stopTrackingMouseDynamics();\r\n};\r\n\r\nexport const fetchMouseDynamicsData = () => {\r\n return MouseDynamicsTracker.getTrackedData();\r\n};\r\n\r\nexport const fetchKeyStrockDynamicsData = () => {\r\n return KeystrokeDynamicsTracker.getTrackedData();\r\n};\r\n", "const KeystrokeDynamicsTracker = (() => {\r\n // Private variables\r\n let _keystrokes = [];\r\n let _keystrokes_with_code = [];\r\n let _previousDown = [];\r\n let _isShiftDown = false;\r\n let _shiftTracker = [];\r\n let _dTime = 0;\r\n\r\n // Private functions\r\n const _getCurrentTimestamp = () => new Date().getTime();\r\n\r\n const _getCategory = (key, keyCode, shiftKeyPressed) => {\r\n const isUpperCaseLetter = /^[A-Z]$/.test(key);\r\n const isLowerCaseLetter = /^[a-z]$/.test(key);\r\n const isUpperCaseSymbol = /^[~!@#$%^&*()_+|}{\":?>,<]$/.test(key);\r\n if (\r\n isUpperCaseLetter ||\r\n (isUpperCaseSymbol && isPrevWasmultikeyWithShift()) ||\r\n (isLowerCaseLetter && isPrevWasmultikeyWithShift())\r\n ) {\r\n return \"uppercase\";\r\n } else if (isLowerCaseLetter) {\r\n return \"lowercase\";\r\n } else if ([8, 9, 46].includes(keyCode)) {\r\n return \"control\";\r\n } else {\r\n return \"others\";\r\n }\r\n };\r\n\r\n const isPrevWasmultikeyWithShift = () => {\r\n const prevKey = _keystrokes_with_code[_keystrokes_with_code.length - 1];\r\n return prevKey?.keyCode === 16 && prevKey?.multipleKey;\r\n };\r\n\r\n const _keyLogger = (key, keyCode, type, shiftKeyPressed) => {\r\n const timestamp = _getCurrentTimestamp();\r\n\r\n if (type === \"kd\") {\r\n _previousDown.push(timestamp);\r\n _dTime = timestamp;\r\n if (keyCode === 16) {\r\n _isShiftDown = true;\r\n _shiftTracker.push(timestamp);\r\n }\r\n }\r\n\r\n let category = _getCategory(key, keyCode, _isShiftDown);\r\n \r\n if (type === \"ku\") {\r\n const dTimeStamp = _dTime ? _dTime : _previousDown[_previousDown.length - 1];\r\n const dwellTime = timestamp - dTimeStamp;\r\n const shiftDwellTime = timestamp - _shiftTracker[0];\r\n const logKey = {\r\n dwellTime: keyCode === 16 ? shiftDwellTime : dwellTime,\r\n category,\r\n multipleKey: _isShiftDown || isPrevWasmultikeyWithShift(),\r\n pressTime: keyCode === 16 ? _shiftTracker[0] : dTimeStamp,\r\n releaseTime: timestamp,\r\n };\r\n\r\n if (keyCode === 16) {\r\n _isShiftDown = false;\r\n _shiftTracker = [];\r\n }\r\n\r\n _keystrokes.push(logKey);\r\n _keystrokes_with_code.push({...logKey, keyCode})\r\n _dTime = 0;\r\n }\r\n };\r\n\r\n const _keyEventTriggered = (e, type) => {\r\n const key = e.key;\r\n const keyCode = e.keyCode;\r\n _keyLogger(key, keyCode, type, e.shiftKey);\r\n };\r\n\r\n // Event handlers\r\n const keydownHandler = (e) => _keyEventTriggered(e, \"kd\");\r\n const keyupHandler = (e) => _keyEventTriggered(e, \"ku\");\r\n\r\n // Public method to start tracking keystroke dynamics\r\n const startTrackingKeystrokeDynamics = () => {\r\n window.addEventListener(\"keydown\", keydownHandler);\r\n window.addEventListener(\"keyup\", keyupHandler);\r\n };\r\n\r\n // Public method to stop tracking keystroke dynamics\r\n const stopTrackingKeystrokeDynamics = () => {\r\n window.removeEventListener(\"keydown\", keydownHandler);\r\n window.removeEventListener(\"keyup\", keyupHandler);\r\n _keystrokes = [];\r\n _previousDown = [];\r\n _isShiftDown = false;\r\n _shiftTracker = [];\r\n _dTime = 0;\r\n };\r\n\r\n // Public method to retrieve tracked data\r\n const getTrackedData = () => ({\r\n keystrokes: _keystrokes,\r\n });\r\n\r\n // Return public methods\r\n return {\r\n startTrackingKeystrokeDynamics,\r\n getTrackedData,\r\n stopTrackingKeystrokeDynamics\r\n };\r\n})();\r\n\r\nexport { KeystrokeDynamicsTracker };\r\n", "// Mouse Dynamics Tracker Module\r\nexport const MouseDynamicsTracker = (() => {\r\n // Private variables\r\n let _rawData = [];\r\n let _mouseClicksData = [];\r\n let _previousStop = null;\r\n let _movementTimer = null;\r\n\r\n // Private functions\r\n const _getCurrentTimestamp = () => new Date().getTime();\r\n\r\n const _findAngle = (cx, cy, ex, ey) => {\r\n const dy = ey - cy;\r\n const dx = ex - cx;\r\n let theta = Math.atan2(dy, dx) * (180 / Math.PI); // Convert radians to degrees\r\n if (theta < 0) theta += 360; // Ensure positive angle\r\n return 360 - theta;\r\n };\r\n\r\n const _getQuadrant = (angle_deg) => {\r\n const quadrants = [\"q1\", \"q2\", \"q3\", \"q4\", \"q5\", \"q6\", \"q7\", \"q8\"];\r\n return quadrants[Math.floor(angle_deg / 45)];\r\n };\r\n\r\n const _calculateDistanceBetweenPoints = (x1, y1, x2, y2) =>\r\n Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\r\n\r\n const _recordCoordinates = (x, y) => {\r\n const lastPushedElement = _rawData[_rawData.length - 1];\r\n const lastTime = lastPushedElement ? lastPushedElement.time : 0;\r\n const currentTime = _getCurrentTimestamp();\r\n const timeDifference = lastPushedElement ? currentTime - lastTime : 0;\r\n\r\n let theta_relative = 0;\r\n let distance_moved = 0;\r\n if (lastTime) {\r\n theta_relative = _findAngle(\r\n lastPushedElement.mouseX,\r\n lastPushedElement.mouseY,\r\n x,\r\n y\r\n );\r\n distance_moved = _calculateDistanceBetweenPoints(\r\n lastPushedElement.mouseX,\r\n lastPushedElement.mouseY,\r\n x,\r\n y\r\n );\r\n }\r\n\r\n const theta_origin = _findAngle(\r\n window.innerWidth / 2,\r\n window.innerHeight / 2,\r\n x,\r\n y\r\n );\r\n const quadrant = _getQuadrant(theta_origin);\r\n\r\n _rawData.push({\r\n mouseX: x,\r\n mouseY: y,\r\n time: currentTime,\r\n time_difference: timeDifference,\r\n theta_relative,\r\n quadrant,\r\n theta_origin,\r\n distance_moved,\r\n });\r\n };\r\n\r\n const _mouseMoved = (e) => {\r\n let _mouseX = e.pageX;\r\n let _mouseY = e.pageY;\r\n\r\n clearTimeout(_movementTimer);\r\n _movementTimer = setTimeout(() => {\r\n if (_previousStop) {\r\n _recordCoordinates(_mouseX, _mouseY);\r\n }\r\n _previousStop = {\r\n mouseX: _mouseX,\r\n mouseY: _mouseY,\r\n };\r\n }, 300); // Delay for recording mouse movement\r\n };\r\n\r\n const _clickEvent = (e) => {\r\n const x = e.pageX;\r\n const y = e.pageY;\r\n const timestamp = _getCurrentTimestamp();\r\n if (e.type === \"mousedown\") {\r\n _mouseClicksData.push({ X: x, Y: y, mouseDown_time: timestamp });\r\n } else if (e.type === \"mouseup\") {\r\n _mouseClicksData.push({\r\n X: x,\r\n Y: y,\r\n mouseUp_time: timestamp,\r\n timeDiff: timestamp - _mouseClicksData[_mouseClicksData.length - 1]\r\n .mouseDown_time,\r\n });\r\n }\r\n };\r\n\r\n // Public method to start tracking mouse dynamics\r\n const startTrackingMouseDynamics = () => {\r\n window.addEventListener(\"mousemove\", _mouseMoved);\r\n window.addEventListener(\"mousedown\", _clickEvent);\r\n window.addEventListener(\"mouseup\", _clickEvent);\r\n };\r\n\r\n const stopTrackingMouseDynamics = () => {\r\n _rawData = [];\r\n _mouseClicksData = [];\r\n _previousStop = null;\r\n _movementTimer = null;\r\n };\r\n\r\n // Public method to retrieve tracked data\r\n const getTrackedData = () => ({\r\n rawData: _rawData,\r\n mouseClicksData: _mouseClicksData,\r\n });\r\n\r\n // Return public methods\r\n return {\r\n startTrackingMouseDynamics,\r\n getTrackedData,\r\n stopTrackingMouseDynamics\r\n };\r\n})();\r\n\r\n", "import { isPrivate } from \"./detect_incognito\";\r\nimport { getHasLiedParameters } from \"./has_lied_detection\";\r\nimport { generateCanvasHash } from \"./canvas\";\r\nimport { x64hash128 } from \"./hashing\";\r\nimport { getWebglInfo } from \"./webgl\";\r\nimport { getBotInfo } from \"./bot\";\r\nimport { audioFingerprint } from \"./audio_fingerprint\";\r\n\r\nconst getAllValues = async () => {\r\n const browserInfo = await getBrowserInfo();\r\n const windowInfo = getWindowsInfo();\r\n const hasLiedParamters = getHasLiedParameters();\r\n const adBlock = getAdBlock();\r\n const dateOffsetTimezone = getTimeZone();\r\n const osDetails = getosDetails();\r\n const localIPAddress = await getLocalipAddress();\r\n const audioDetails = getAudioDetails();\r\n const deviceOrientation = getDeviceOrientation();\r\n const deviceMotion = getDeviceMotion();\r\n const deviceLight = getDeviceLight();\r\n const proximityEvent = getProximityEvent();\r\n const canvasId = generateCanvasHash();\r\n const audioFingerPrintFrequency = getAudioFingerPrintFrequency();\r\n const webglInfo = getWebglInfo();\r\n const fontsAvailable = await getFontsAvailable();\r\n const botInfo = getBotInfo();\r\n const batteryInfo = await getBattery();\r\n\r\n return {\r\n browserInfo: browserInfo,\r\n batteryInfo: batteryInfo,\r\n windowInfo: windowInfo,\r\n hasLiedParamters: hasLiedParamters,\r\n adBlock: adBlock,\r\n dateOffsetTimezone: dateOffsetTimezone,\r\n osDetails: osDetails,\r\n localIPAddress: localIPAddress,\r\n audioDetails: audioDetails,\r\n deviceOrientation: deviceOrientation,\r\n deviceMotion: deviceMotion,\r\n deviceLight: deviceLight,\r\n proximityEvent: proximityEvent,\r\n canvasId: canvasId,\r\n audioFingerPrintFrequency: audioFingerPrintFrequency,\r\n webglInfo: webglInfo,\r\n botInfo,\r\n fonts_available: fontsAvailable,\r\n };\r\n};\r\n\r\nasync function getBrowserInfo() {\r\n return {\r\n browser_userAgent: navigator.userAgent,\r\n browser_appName: navigator.appName,\r\n browser_appCodeName: navigator.appCodeName,\r\n browser_appVersion: navigator.appVersion,\r\n browser_platform: navigator.platform,\r\n browser_product: navigator.product,\r\n browser_productSub: navigator.productSub,\r\n browser_vendor: navigator.vendor,\r\n browser_vendorSub: navigator.vendorSub,\r\n browser_buildID: navigator.buildID,\r\n browser_oscpu: navigator.oscpu,\r\n browser_language: navigator.language,\r\n browser_hardwareConcurrency: navigator.hardwareConcurrency,\r\n browser_doNotTrack:\r\n navigator.doNotTrack === \"unspecified\" ? -1 : navigator.doNotTrack,\r\n browser_connection: navigator.connection,\r\n browser_maxTouchPoints: navigator.maxTouchPoints,\r\n browser_plugins: getBrowserPlugins(),\r\n browser_permissions: navigator.permissions,\r\n is_incognito: await isPrivate(),\r\n };\r\n}\r\n\r\nfunction getBrowserPlugins() {\r\n return Array.from(navigator.plugins).map((plugin) => {\r\n const formattedPlugin = {\r\n name: plugin.name,\r\n description: plugin.description,\r\n filename: plugin.filename,\r\n };\r\n return formattedPlugin;\r\n });\r\n}\r\n\r\nfunction getWindowsInfo() {\r\n return {\r\n window_colorDepth: window.screen.colorDepth,\r\n window_width: window.screen.width,\r\n window_height: window.screen.height,\r\n window_availWidth: window.screen.availWidth,\r\n window_availHeight: window.screen.availHeight,\r\n window_devicePixelRatio: window.devicePixelRatio,\r\n window_cookieEnabled: window.navigator.cookieEnabled,\r\n window_sessionStorage: checkSessionStorage(),\r\n window_localStorage: checkLocalStorage(),\r\n window_indexedDB: !!window.indexedDB,\r\n window_openDatabase: !!window.openDatabase,\r\n };\r\n}\r\n\r\nfunction checkSessionStorage() {\r\n let isSession;\r\n try {\r\n isSession = !!window.sessionStorage;\r\n } catch (err) {\r\n isSession = false;\r\n } finally {\r\n return isSession;\r\n }\r\n}\r\n\r\nfunction checkLocalStorage() {\r\n let isLocal;\r\n try {\r\n isLocal = !!window.localStorage;\r\n } catch (err) {\r\n isLocal = false;\r\n } finally {\r\n return isLocal;\r\n }\r\n}\r\n\r\nfunction getAdBlock() {\r\n var ads = document.createElement(\"div\");\r\n ads.innerHTML = \"&nbsp;\";\r\n ads.className = \"adsbox\";\r\n var result = false;\r\n try {\r\n document.body.appendChild(ads);\r\n result = document.getElementsByClassName(\"adsbox\")[0].offsetHeight === 0;\r\n document.body.removeChild(ads);\r\n } catch (e) {\r\n result = false;\r\n }\r\n return result;\r\n}\r\n\r\nfunction getTimeZone() {\r\n const dateObj = new Date();\r\n return dateObj.getTimezoneOffset();\r\n}\r\n\r\nexport function getOSName() {\r\n const userAgent = navigator.userAgent.toLowerCase();\r\n let os;\r\n if (userAgent.indexOf(\"windows phone\") >= 0) {\r\n os = \"Windows Phone\";\r\n } else if (\r\n userAgent.indexOf(\"windows\") >= 0 ||\r\n userAgent.indexOf(\"win16\") >= 0 ||\r\n userAgent.indexOf(\"win32\") >= 0 ||\r\n userAgent.indexOf(\"win64\") >= 0 ||\r\n userAgent.indexOf(\"win95\") >= 0 ||\r\n userAgent.indexOf(\"win98\") >= 0 ||\r\n userAgent.indexOf(\"winnt\") >= 0 ||\r\n userAgent.indexOf(\"wow64\") >= 0\r\n ) {\r\n os = \"Windows\";\r\n } else if (userAgent.indexOf(\"android\") >= 0) {\r\n os = \"Android\";\r\n } else if (\r\n userAgent.indexOf(\"linux\") >= 0 ||\r\n userAgent.indexOf(\"cros\") >= 0 ||\r\n userAgent.indexOf(\"x11\") >= 0\r\n ) {\r\n os = \"Linux\";\r\n } else if (\r\n userAgent.indexOf(\"iphone\") >= 0 ||\r\n userAgent.indexOf(\"ipad\") >= 0 ||\r\n userAgent.indexOf(\"ipod\") >= 0 ||\r\n userAgent.indexOf(\"crios\") >= 0 ||\r\n userAgent.indexOf(\"fxios\") >= 0\r\n ) {\r\n os = \"iOS\";\r\n } else if (\r\n userAgent.indexOf(\"macintosh\") >= 0 ||\r\n userAgent.indexOf(\"mac_powerpc)\") >= 0\r\n ) {\r\n os = \"Mac\";\r\n } else {\r\n os = \"Other\";\r\n }\r\n return os;\r\n}\r\n\r\nfunction getosDetails() {\r\n return {\r\n osName: getOSName(),\r\n osVersion: navigator.userAgent,\r\n };\r\n}\r\n\r\nasync function getIPDetails() {\r\n let response = await fetch(`https://api.ipify.org?format=json`);\r\n let data = await response.json();\r\n return data;\r\n}\r\n\r\nasync function getLocalipAddress() {\r\n let ipDetails = await getIPDetails();\r\n return {\r\n local_ip_address: ipDetails && ipDetails.ip,\r\n };\r\n}\r\n\r\nfunction getAudioDetails() {\r\n // Create an AudioContext\r\n const audioContext = new (window.AudioContext || window.webkitAudioContext)();\r\n if (!audioContext) {\r\n return;\r\n }\r\n // Get the audio context properties\r\n return {\r\n sampleRate: audioContext.sampleRate,\r\n destination: {\r\n maxChannelCount: audioContext.destination.maxChannelCount,\r\n channelCount: audioContext.destination.channelCount,\r\n channelCountMode: audioContext.destination.channelCountMode,\r\n channelInterpretation: audioContext.destination.channelInterpretation,\r\n },\r\n currentTime: audioContext.currentTime,\r\n state: audioContext.state,\r\n baseLatency: audioContext.baseLatency,\r\n };\r\n}\r\n\r\nfunction getDeviceOrientation() {\r\n if (window.DeviceOrientationEvent) {\r\n return window.addEventListener(\r\n \"deviceorientation\",\r\n function (event) {\r\n return {\r\n rotateDegrees: event.alpha,\r\n leftToRight: event.gamma,\r\n frontToBack: event.beta,\r\n };\r\n },\r\n true\r\n );\r\n }\r\n}\r\n\r\nfunction getDeviceMotion() {\r\n return window.addEventListener(\r\n \"devicemotion\",\r\n function (event) {\r\n return {\r\n x: event.accelerationIncludingGravity.x,\r\n y: event.accelerationIncludingGravity.y,\r\n z: event.accelerationIncludingGravity.z,\r\n };\r\n },\r\n true\r\n );\r\n}\r\n\r\nfunction getDeviceLight() {\r\n let ambientLightLevel;\r\n window.addEventListener(\"devicelight\", function (event) {\r\n ambientLightLevel = event.value;\r\n });\r\n return ambientLightLevel;\r\n}\r\n\r\nfunction getProximityEvent() {\r\n let proximityEvent;\r\n window.addEventListener(\"userproximity\", function (event) {\r\n proximityEvent = event.near;\r\n });\r\n return proximityEvent\r\n}\r\n\r\nfunction getAudioFingerPrintFrequency() {\r\n const averageFingerPrintFrequency = getAverageFingerprintFrequency();\r\n return x64hash128(averageFingerPrintFrequency, 69);\r\n}\r\n\r\nfunction getAverageFingerprintFrequency() {\r\n audioFingerprint.run(function (fingerprint) {\r\n return fingerprint;\r\n });\r\n}\r\n\r\nasync function getFontsAvailable() {\r\n try {\r\n const allWindowsMacFonts = new Set(\r\n [\r\n // Windows 10\r\n \"Arial\",\r\n \"Arial Black\",\r\n \"Bahnschrift\",\r\n \"Calibri\",\r\n \"Cambria\",\r\n \"Cambria Math\",\r\n \"Candara\",\r\n \"Comic Sans MS\",\r\n \"Consolas\",\r\n \"Constantia\",\r\n \"Corbel\",\r\n \"Courier New\",\r\n \"Ebrima\",\r\n \"Franklin Gothic Medium\",\r\n \"Gabriola\",\r\n \"Gadugi\",\r\n \"Georgia\",\r\n \"HoloLens MDL2 Assets\",\r\n \"Impact\",\r\n \"Ink Free\",\r\n \"Javanese Text\",\r\n \"Leelawadee UI\",\r\n \"Lucida Console\",\r\n \"Lucida Sans Unicode\",\r\n \"Malgun Gothic\",\r\n \"Marlett\",\r\n \"Microsoft Himalaya\",\r\n \"Microsoft JhengHei\",\r\n \"Microsoft New Tai Lue\",\r\n \"Microsoft PhagsPa\",\r\n \"Microsoft Sans Serif\",\r\n \"Microsoft Tai Le\",\r\n \"Microsoft YaHei\",\r\n \"Microsoft Yi Baiti\",\r\n \"MingLiU-ExtB\",\r\n \"Mongolian Baiti\",\r\n \"MS Gothic\",\r\n \"MV Boli\",\r\n \"Myanmar Text\",\r\n \"Nirmala UI\",\r\n \"Palatino Linotype\",\r\n \"Segoe MDL2 Assets\",\r\n \"Segoe Print\",\r\n \"Segoe Script\",\r\n \"Segoe UI\",\r\n \"Segoe UI Historic\",\r\n \"Segoe UI Emoji\",\r\n \"Segoe UI Symbol\",\r\n \"SimSun\",\r\n \"Sitka\",\r\n \"Sylfaen\",\r\n \"Symbol\",\r\n \"Tahoma\",\r\n \"Times New Roman\",\r\n \"Trebuchet MS\",\r\n \"Verdana\",\r\n \"Webdings\",\r\n \"Wingdings\",\r\n \"Yu Gothic\",\r\n // macOS\r\n \"American Typewriter\",\r\n \"Andale Mono\",\r\n \"Arial\",\r\n \"Arial Black\",\r\n \"Arial Narrow\",\r\n \"Arial Rounded MT Bold\",\r\n \"Arial Unicode MS\",\r\n \"Avenir\",\r\n \"Avenir Next\",\r\n \"Avenir Next Condensed\",\r\n \"Baskerville\",\r\n \"Big Caslon\",\r\n \"Bodoni 72\",\r\n \"Bodoni 72 Oldstyle\",\r\n \"Bodoni 72 Smallcaps\",\r\n \"Bradley Hand\",\r\n \"Brush Script MT\",\r\n \"Chalkboard\",\r\n \"Chalkboard SE\",\r\n \"Chalkduster\",\r\n \"Charter\",\r\n \"Cochin\",\r\n \"Comic Sans MS\",\r\n \"Copperplate\",\r\n \"Courier\",\r\n \"Courier New\",\r\n \"Didot\",\r\n \"DIN Alternate\",\r\n \"DIN Condensed\",\r\n \"Futura\",\r\n \"Geneva\",\r\n \"Georgia\",\r\n \"Gill Sans\",\r\n \"Helvetica\",\r\n \"Helvetica Neue\",\r\n \"Herculanum\",\r\n \"Hoefler Text\",\r\n \"Impact\",\r\n \"Lucida Grande\",\r\n \"Luminari\",\r\n \"Marker Felt\",\r\n \"Menlo\",\r\n \"Microsoft Sans Serif\",\r\n \"Monaco\",\r\n \"Noteworthy\",\r\n \"Optima\",\r\n \"Palatino\",\r\n \"Papyrus\",\r\n \"Phosphate\",\r\n \"Rockwell\",\r\n \"Savoye LET\",\r\n \"SignPainter\",\r\n \"Skia\",\r\n \"Snell Roundhand\",\r\n \"Tahoma\",\r\n \"Times\",\r\n \"Times New Roman\",\r\n \"Trattatello\",\r\n \"Trebuchet MS\",\r\n \"Verdana\",\r\n \"Zapfino\",\r\n ].sort()\r\n );\r\n const fontAvailable = new Set();\r\n await (async () => {\r\n await document.fonts.ready;\r\n\r\n for (const font of allWindowsMacFonts.values()) {\r\n if (document.fonts.check(`12px \"${font}\"`)) {\r\n fontAvailable.add(font);\r\n }\r\n }\r\n })();\r\n return [...fontAvailable.values()];\r\n } catch (error) {\r\n return [];\r\n }\r\n}\r\n\r\nasync function getBattery() {\r\n try {\r\n const batteryInfo = await navigator.getBattery();\r\n if (!batteryInfo) {\r\n return;\r\n }\r\n // Get battery status properties\r\n return {\r\n charging: batteryInfo.charging ? \"Charging\" : \"Not Charging\",\r\n level: batteryInfo.level * 100,\r\n chargingTime: batteryInfo.chargingTime,\r\n dischargingTime: batteryInfo.dischargingTime,\r\n };\r\n } catch (error) {\r\n return {};\r\n }\r\n}\r\n\r\nexport const getDeviceData = async () => {\r\n return await getAllValues();\r\n};", "export const detectIncognito = function () {\r\n return new Promise(function (resolve, reject) {\r\n let browserName = \"Unknown\";\r\n\r\n function __callback(isPrivate) {\r\n resolve({\r\n isPrivate: isPrivate,\r\n browserName: browserName,\r\n });\r\n }\r\n\r\n function identifyChromium() {\r\n const ua = navigator.userAgent;\r\n if (ua.match(/Chrome/)) {\r\n if (navigator.brave !== undefined) {\r\n return \"Brave\";\r\n } else if (ua.match(/Edg/)) {\r\n return \"Edge\";\r\n } else if (ua.match(/OPR/)) {\r\n return \"Opera\";\r\n }\r\n return \"Chrome\";\r\n } else {\r\n return \"Chromium\";\r\n }\r\n }\r\n\r\n function assertEvalToString(value) {\r\n return value === eval.toString().length;\r\n }\r\n\r\n function isSafari() {\r\n const v = navigator.vendor;\r\n return (\r\n v !== undefined && v.indexOf(\"Apple\") === 0 && assertEvalToString(37)\r\n );\r\n }\r\n\r\n function isChrome() {\r\n const v = navigator.vendor;\r\n return (\r\n v !== undefined && v.indexOf(\"Google\") === 0 && assertEvalToString(33)\r\n );\r\n }\r\n\r\n function isFirefox() {\r\n return (\r\n document.documentElement !== undefined &&\r\n document.documentElement.style.MozAppearance !== undefined &&\r\n assertEvalToString(37)\r\n );\r\n }\r\n\r\n function isMSIE() {\r\n return navigator.msSaveBlob !== undefined && assertEvalToString(39);\r\n }\r\n\r\n /**\r\n * Safari (Safari for iOS & macOS)\r\n **/\r\n\r\n function newSafariTest() {\r\n const tmp_name = String(Math.random());\r\n\r\n try {\r\n const db = window.indexedDB.open(tmp_name, 1);\r\n\r\n db.onupgradeneeded = function (i) {\r\n const res = i.target?.result;\r\n\r\n try {\r\n res\r\n .createObjectStore(\"test\", {\r\n autoIncrement: true,\r\n })\r\n .put(new Blob());\r\n\r\n __callback(false);\r\n } catch (e) {\r\n let message = e;\r\n\r\n if (e instanceof Error) {\r\n message = e.message ?? e;\r\n }\r\n\r\n if (typeof message !== \"string\") {\r\n return __callback(false);\r\n }\r\n\r\n const matchesExpectedError = /BlobURLs are not yet supported/.test(\r\n message\r\n );\r\n\r\n return __callback(matchesExpectedError);\r\n } finally {\r\n res.close();\r\n window.indexedDB.deleteDatabase(tmp_name);\r\n }\r\n };\r\n } catch (e) {\r\n return __callback(false);\r\n }\r\n }\r\n\r\n function oldSafariTest() {\r\n const openDB = window.openDatabase;\r\n const storage = window.localStorage;\r\n try {\r\n openDB(null, null, null, null);\r\n } catch (e) {\r\n return __callback(true);\r\n }\r\n try {\r\n storage.setItem(\"test\", \"1\");\r\n storage.removeItem(\"test\");\r\n } catch (e) {\r\n return __callback(true);\r\n }\r\n return __callback(false);\r\n }\r\n\r\n function safariPrivateTest() {\r\n if (navigator.maxTouchPoints !== undefined) {\r\n newSafariTest();\r\n } else {\r\n oldSafariTest();\r\n }\r\n }\r\n\r\n /**\r\n * Chrome\r\n **/\r\n\r\n function getQuotaLimit() {\r\n const w = window;\r\n if (\r\n w.performance !== undefined &&\r\n w.performance.memory !== undefined &&\r\n w.performance.memory.jsHeapSizeLimit !== undefined\r\n ) {\r\n return performance.memory.jsHeapSizeLimit;\r\n }\r\n return 1073741824;\r\n }\r\n\r\n // >= 76\r\n function storageQuotaChromePrivateTest() {\r\n navigator.webkitTemporaryStorage.queryUsageAndQuota(\r\n function (_, quota) {\r\n const quotaInMib = Math.round(quota / (1024 * 1024));\r\n const quotaLimitInMib =\r\n Math.round(getQuotaLimit() / (1024 * 1024)) * 2;\r\n\r\n __callback(quotaInMib < quotaLimitInMib);\r\n },\r\n function (e) {\r\n reject(\r\n new Error(\r\n \"detectIncognito somehow failed to query storage quota: \" +\r\n e.message\r\n )\r\n );\r\n }\r\n );\r\n }\r\n\r\n // 50 to 75\r\n function oldChromePrivateTest() {\r\n const fs = window.webkitRequestFileSystem;\r\n const success = function () {\r\n __callback(false);\r\n };\r\n const error = function () {\r\n __callback(true);\r\n };\r\n fs(0, 1, success, error);\r\n }\r\n\r\n function chromePrivateTest() {\r\n if (self.Promise !== undefined && self.Promise.allSettled !== undefined) {\r\n storageQuotaChromePrivateTest();\r\n } else {\r\n oldChromePrivateTest();\r\n }\r\n }\r\n\r\n /**\r\n * Firefox\r\n **/\r\n\r\n function firefoxPrivateTest() {\r\n __callback(navigator.serviceWorker === undefined);\r\n }\r\n\r\n /**\r\n * MSIE\r\n **/\r\n\r\n function msiePrivateTest() {\r\n __callback(window.indexedDB === undefined);\r\n }\r\n\r\n function main() {\r\n if (isSafari()) {\r\n browserName = \"Safari\";\r\n safariPrivateTest();\r\n } else if (isChrome()) {\r\n browserName = identifyChromium();\r\n chromePrivateTest();\r\n } else if (isFirefox()) {\r\n browserName = \"Firefox\";\r\n firefoxPrivateTest();\r\n } else if (isMSIE()) {\r\n browserName = \"Internet Explorer\";\r\n msiePrivateTest();\r\n } else {\r\n reject(new Error(\"detectIncognito cannot determine the browser\"));\r\n }\r\n }\r\n main();\r\n });\r\n};\r\n\r\nexport const isPrivate = async () => {\r\n try {\r\n const result = await detectIncognito();\r\n const isPrivateValue = result.isPrivate;\r\n return isPrivateValue;\r\n } catch (error) {\r\n return undefined;\r\n }\r\n};\r\n", "import { getOSName } from \"./index\";\r\n\r\nfunction getHasLiedOs() {\r\n const userAgent = navigator.userAgent.toLowerCase();\r\n let oscpu = navigator.oscpu;\r\n const platform = navigator.platform.toLowerCase();\r\n var os = getOSName();\r\n\r\n const mobileDevice =\r\n \"ontouchstart\" in window ||\r\n navigator.maxTouchPoints > 0 ||\r\n navigator.msMaxTouchPoints > 0;\r\n\r\n if (\r\n mobileDevice &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\" &&\r\n os !== \"Android\" &&\r\n os !== \"iOS\" &&\r\n os !== \"Other\" &&\r\n userAgent.indexOf(\"cros\") === -1\r\n ) {\r\n return true;\r\n }\r\n\r\n if (typeof oscpu !== \"undefined\") {\r\n oscpu = oscpu.toLowerCase();\r\n if (\r\n oscpu.indexOf(\"win\") >= 0 &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\"\r\n ) {\r\n return true;\r\n } else if (\r\n oscpu.indexOf(\"linux\") >= 0 &&\r\n os !== \"Linux\" &&\r\n os !== \"Android\"\r\n ) {\r\n return true;\r\n } else if (oscpu.indexOf(\"mac\") >= 0 && os !== \"Mac\" && os !== \"iOS\") {\r\n return true;\r\n } else if (\r\n (oscpu.indexOf(\"win\") === -1 &&\r\n oscpu.indexOf(\"linux\") === -1 &&\r\n oscpu.indexOf(\"mac\") === -1) !==\r\n (os === \"Other\")\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n if (\r\n platform.indexOf(\"win\") >= 0 &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\"\r\n ) {\r\n return true;\r\n } else if (\r\n (platform.indexOf(\"linux\") >= 0 ||\r\n platform.indexOf(\"android\") >= 0 ||\r\n platform.indexOf(\"pike\") >= 0) &&\r\n os !== \"Linux\" &&\r\n os !== \"Android\"\r\n ) {\r\n return true;\r\n } else if (\r\n (platform.indexOf(\"mac\") >= 0 ||\r\n platform.indexOf(\"ipad\") >= 0 ||\r\n platform.indexOf(\"ipod\") >= 0 ||\r\n platform.indexOf(\"iphone\") >= 0) &&\r\n os !== \"Mac\" &&\r\n os !== \"iOS\"\r\n ) {\r\n return true;\r\n } else if (platform.indexOf(\"arm\") >= 0 && os === \"Windows Phone\") {\r\n return false;\r\n } else if (\r\n platform.indexOf(\"pike\") >= 0 &&\r\n userAgent.indexOf(\"opera mini\") >= 0\r\n ) {\r\n return false;\r\n } else {\r\n var platformIsOther =\r\n platform.indexOf(\"win\") < 0 &&\r\n platform.indexOf(\"linux\") < 0 &&\r\n platform.indexOf(\"mac\") < 0 &&\r\n platform.indexOf(\"iphone\") < 0 &&\r\n platform.indexOf(\"ipad\") < 0 &&\r\n platform.indexOf(\"ipod\") < 0;\r\n if (platformIsOther !== (os === \"Other\")) {\r\n return true;\r\n }\r\n }\r\n\r\n return (\r\n typeof navigator.plugins === \"undefined\" &&\r\n os !== \"Windows\" &&\r\n os !== \"Windows Phone\"\r\n );\r\n}\r\n\r\nfunction getHasLiedBrowser() {\r\n var userAgent = navigator.userAgent.toLowerCase();\r\n var productSub = navigator.productSub;\r\n\r\n var browser;\r\n if (userAgent.indexOf(\"edge/\") >= 0 || userAgent.indexOf(\"iemobile/\") >= 0) {\r\n return false;\r\n } else if (userAgent.indexOf(\"opera mini\") >= 0) {\r\n return false;\r\n } else if (userAgent.indexOf(\"firefox/\") >= 0) {\r\n browser = \"Firefox\";\r\n } else if (\r\n userAgent.indexOf(\"opera/\") >= 0 ||\r\n userAgent.indexOf(\" opr/\") >= 0\r\n ) {\r\n browser = \"Opera\";\r\n } else if (userAgent.indexOf(\"chrome/\") >= 0) {\r\n browser = \"Chrome\";\r\n } else if (userAgent.indexOf(\"safari/\") >= 0) {\r\n if (\r\n userAgent.indexOf(\"android 1.\") >= 0 ||\r\n userAgent.indexOf(\"android 2.\") >= 0 ||\r\n userAgent.indexOf(\"android 3.\") >= 0 ||\r\n userAgent.indexOf(\"android 4.\") >= 0\r\n ) {\r\n browser = \"AOSP\";\r\n } else {\r\n browser = \"Safari\";\r\n }\r\n } else if (userAgent.indexOf(\"trident/\") >= 0) {\r\n browser = \"Internet Explorer\";\r\n } else {\r\n browser = \"Other\";\r\n }\r\n\r\n if (\r\n (browser === \"Chrome\" || browser === \"Safari\" || browser === \"Opera\") &&\r\n productSub !== \"20030107\"\r\n ) {\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line no-eval\r\n var tempRes = eval.toString().length;\r\n if (\r\n tempRes === 37 &&\r\n browser !== \"Safari\" &&\r\n browser !== \"Firefox\" &&\r\n browser !== \"Other\"\r\n ) {\r\n return true;\r\n } else if (\r\n tempRes === 39 &&\r\n browser !== \"Internet Explorer\" &&\r\n browser !== \"Other\"\r\n ) {\r\n return true;\r\n } else if (\r\n tempRes === 33 &&\r\n browser !== \"Chrome\" &&\r\n browser !== \"AOSP\" &&\r\n browser !== \"Opera\" &&\r\n browser !== \"Other\"\r\n ) {\r\n return true;\r\n }\r\n\r\n var errFirefox;\r\n try {\r\n throw \"a\";\r\n } catch (err) {\r\n try {\r\n err.toSource();\r\n errFirefox = true;\r\n } catch (errOfErr) {\r\n errFirefox = false;\r\n }\r\n }\r\n return errFirefox && browser !== \"Firefox\" && browser !== \"Other\";\r\n}\r\n\r\nfunction getHasLiedResolution() {\r\n return (\r\n window.screen.width < window.screen.availWidth ||\r\n window.screen.height < window.screen.availHeight\r\n );\r\n}\r\n\r\nfunction getHasLiedLanguages() {\r\n if (typeof navigator.languages !== \"undefined\") {\r\n try {\r\n var firstLanguages = navigator.languages[0].substr(0, 2);\r\n if (firstLanguages !== navigator.language.substr(0, 2)) {\r\n return true;\r\n }\r\n } catch (err) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function getHasLiedParameters() {\r\n return {\r\n has_lied_os: getHasLiedOs(),\r\n has_lied_browser: getHasLiedBrowser(),\r\n has_lied_resolution: getHasLiedResolution(),\r\n has_lied_languages: getHasLiedLanguages(),\r\n };\r\n}\r\n", "export const generateCanvasHash = () => {\r\n var canvas = document.body.appendChild(document.createElement(\"canvas\"));\r\n var ctx = canvas.getContext(\"2d\");\r\n canvas.height = 200;\r\n canvas.width = 500;\r\n\r\n // Text with lowercase/uppercase/punctuation symbols\r\n var txt = \"This is a random text to generate canvas ID :) 123@\";\r\n ctx.textBaseline = \"top\";\r\n // The most common type\r\n ctx.font = \"14px 'Arial'\";\r\n ctx.textBaseline = \"alphabetic\";\r\n ctx.fillStyle = \"#f60\";\r\n ctx.fillRect(125, 1, 62, 20);\r\n // Some tricks for color mixing to increase the difference in rendering\r\n ctx.fillStyle = \"#069\";\r\n ctx.fillText(txt, 2, 15);\r\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n ctx.fillText(txt, 4, 17);\r\n\r\n ctx.globalCompositeOperation = \"multiply\";\r\n ctx.fillStyle = \"rgb(255,0,255)\";\r\n ctx.beginPath();\r\n ctx.arc(50, 50, 50, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n ctx.fillStyle = \"rgb(0,255,255)\";\r\n ctx.beginPath();\r\n ctx.arc(100, 50, 50, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n ctx.fillStyle = \"rgb(255,255,0)\";\r\n ctx.beginPath();\r\n ctx.arc(75, 100, 50, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n ctx.fillStyle = \"rgb(255,0,255)\";\r\n\r\n ctx.arc(75, 75, 75, 0, Math.PI * 2, true);\r\n ctx.arc(75, 75, 25, 0, Math.PI * 2, true);\r\n ctx.fill(\"evenodd\");\r\n\r\n var sha256 = (function () {\r\n // Eratosthenes seive to find primes up to 311 for magic constants. This is why SHA256 is better than SHA1\r\n var i = 1,\r\n j,\r\n K = [],\r\n H = [];\r\n\r\n while (++i < 18) {\r\n for (j = i * i; j < 312; j += i) {\r\n K[j] = 1;\r\n }\r\n }\r\n\r\n function x(num, root) {\r\n return ((Math.pow(num, 1 / root) % 1) * 4294967296) | 0;\r\n }\r\n\r\n for (i = 1, j = 0; i < 313; ) {\r\n if (!K[++i]) {\r\n H[j] = x(i, 2);\r\n K[j++] = x(i, 3);\r\n }\r\n }\r\n\r\n function S(X, n) {\r\n return (X >>> n) | (X << (32 - n));\r\n }\r\n\r\n function SHA256(b) {\r\n var HASH = H.slice((i = 0)),\r\n s = unescape(encodeURI(b)) /* encode as utf8 */,\r\n W = [],\r\n l = s.length,\r\n m = [],\r\n a,\r\n y,\r\n z;\r\n for (; i < l; )\r\n m[i >> 2] |= (s.charCodeAt(i) & 0xff) << (8 * (3 - (i++ % 4)));\r\n\r\n l *= 8;\r\n\r\n m[l >> 5] |= 0x80 << (24 - (l % 32));\r\n m[(z = ((l + 64) >> 5) | 15)] = l;\r\n\r\n for (i = 0; i < z; i += 16) {\r\n a = HASH.slice((j = 0), 8);\r\n\r\n for (; j < 64; a[4] += y) {\r\n if (j < 16) {\r\n W[j] = m[j + i];\r\n } else {\r\n W[j] =\r\n (S((y = W[j - 2]), 17) ^ S(y, 19) ^ (y >>> 10)) +\r\n (W[j - 7] | 0) +\r\n (S((y = W[j - 15]), 7) ^ S(y, 18) ^ (y >>> 3)) +\r\n (W[j - 16] | 0);\r\n }\r\n\r\n a.unshift(\r\n (y =\r\n ((a.pop() +\r\n (S((b = a[4]), 6) ^ S(b, 11) ^ S(b, 25)) +\r\n (((b & a[5]) ^ (~b & a[6])) + K[j])) |\r\n 0) +\r\n (W[j++] | 0)) +\r\n (S((l = a[0]), 2) ^ S(l, 13) ^ S(l, 22)) +\r\n ((l & a[1]) ^ (a[1] & a[2]) ^ (a[2] & l))\r\n );\r\n }\r\n\r\n for (j = 8; j--; ) HASH[j] = a[j] + HASH[j];\r\n }\r\n\r\n for (s = \"\"; j < 63; )\r\n s += ((HASH[++j >> 3] >> (4 * (7 - (j % 8)))) & 15).toString(16);\r\n\r\n return s;\r\n }\r\n\r\n return SHA256;\r\n })();\r\n\r\n const canvasHash = sha256(canvas.toDataURL());\r\n document.body.removeChild(canvas);\r\n return canvasHash;\r\n};\r\n", "function x64Add(m, n) {\r\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\r\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\r\n var o = [0, 0, 0, 0];\r\n o[3] += m[3] + n[3];\r\n o[2] += o[3] >>> 16;\r\n o[3] &= 0xffff;\r\n o[2] += m[2] + n[2];\r\n o[1] += o[2] >>> 16;\r\n o[2] &= 0xffff;\r\n o[1] += m[1] + n[1];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[0] += m[0] + n[0];\r\n o[0] &= 0xffff;\r\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\r\n}\r\nfunction x64Multiply(m, n) {\r\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\r\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\r\n var o = [0, 0, 0, 0];\r\n o[3] += m[3] * n[3];\r\n o[2] += o[3] >>> 16;\r\n o[3] &= 0xffff;\r\n o[2] += m[2] * n[3];\r\n o[1] += o[2] >>> 16;\r\n o[2] &= 0xffff;\r\n o[2] += m[3] * n[2];\r\n o[1] += o[2] >>> 16;\r\n o[2] &= 0xffff;\r\n o[1] += m[1] * n[3];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[1] += m[2] * n[2];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[1] += m[3] * n[1];\r\n o[0] += o[1] >>> 16;\r\n o[1] &= 0xffff;\r\n o[0] += m[0] * n[3] + m[1] * n[2] + m[2] * n[1] + m[3] * n[0];\r\n o[0] &= 0xffff;\r\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\r\n}\r\nfunction x64Rotl(m, n) {\r\n n %= 64;\r\n if (n === 32) {\r\n return [m[1], m[0]];\r\n } else if (n < 32) {\r\n return [\r\n (m[0] << n) | (m[1] >>> (32 - n)),\r\n (m[1] << n) | (m[0] >>> (32 - n)),\r\n ];\r\n } else {\r\n n -= 32;\r\n return [\r\n (m[1] << n) | (m[0] >>> (32 - n)),\r\n (m[0] << n) | (m[1] >>> (32 - n)),\r\n ];\r\n }\r\n}\r\nfunction x64LeftShift(m, n) {\r\n n %= 64;\r\n if (n === 0) {\r\n return m;\r\n } else if (n < 32) {\r\n return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\r\n } else {\r\n return [m[1] << (n - 32), 0];\r\n }\r\n}\r\nfunction x64Xor(m, n) {\r\n return [m[0] ^ n[0], m[1] ^ n[1]];\r\n}\r\nfunction x64Fmix(h) {\r\n h = x64Xor(h, [0, h[0] >>> 1]);\r\n h = x64Multiply(h, [0xff51afd7, 0xed558ccd]);\r\n h = x64Xor(h, [0, h[0] >>> 1]);\r\n h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\r\n h = x64Xor(h, [0, h[0] >>> 1]);\r\n return h;\r\n}\r\nexport function x64hash128(key, seed) {\r\n key = key || \"\";\r\n seed = seed || 0;\r\n var remainder = key.length % 16;\r\n var bytes = key.length - remainder;\r\n var h1 = [0, seed];\r\n var h2 = [0, seed];\r\n var k1 = [0, 0];\r\n var k2 = [0, 0];\r\n var c1 = [0x87c37b91, 0x114253d5];\r\n var c2 = [0x4cf5ad43, 0x2745937f];\r\n for (var i = 0; i < bytes; i = i + 16) {\r\n k1 = [\r\n (key.charCodeAt(i + 4) & 0xff) |\r\n ((key.charCodeAt(i + 5) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 6) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 7) & 0xff) << 24),\r\n (key.charCodeAt(i) & 0xff) |\r\n ((key.charCodeAt(i + 1) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 2) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 3) & 0xff) << 24),\r\n ];\r\n k2 = [\r\n (key.charCodeAt(i + 12) & 0xff) |\r\n ((key.charCodeAt(i + 13) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 14) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 15) & 0xff) << 24),\r\n (key.charCodeAt(i + 8) & 0xff) |\r\n ((key.charCodeAt(i + 9) & 0xff) << 8) |\r\n ((key.charCodeAt(i + 10) & 0xff) << 16) |\r\n ((key.charCodeAt(i + 11) & 0xff) << 24),\r\n ];\r\n k1 = x64Multiply(k1, c1);\r\n k1 = x64Rotl(k1, 31);\r\n k1 = x64Multiply(k1, c2);\r\n h1 = x64Xor(h1, k1);\r\n h1 = x64Rotl(h1, 27);\r\n h1 = x64Add(h1, h2);\r\n h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\r\n k2 = x64Multiply(k2, c2);\r\n k2 = x64Rotl(k2, 33);\r\n k2 = x64Multiply(k2, c1);\r\n h2 = x64Xor(h2, k2);\r\n h2 = x64Rotl(h2, 31);\r\n h2 = x64Add(h2, h1);\r\n h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\r\n }\r\n k1 = [0, 0];\r\n k2 = [0, 0];\r\n switch (remainder) {\r\n case 15:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 14)], 48));\r\n case 14:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 13)], 40));\r\n case 13:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 12)], 32));\r\n case 12:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 11)], 24));\r\n case 11:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 10)], 16));\r\n case 10:\r\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 9)], 8));\r\n case 9:\r\n k2 = x64Xor(k2, [0, key.charCodeAt(i + 8)]);\r\n k2 = x64Multiply(k2, c2);\r\n k2 = x64Rotl(k2, 33);\r\n k2 = x64Multiply(k2, c1);\r\n h2 = x64Xor(h2, k2);\r\n case 8:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 7)], 56));\r\n case 7:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 6)], 48));\r\n case 6:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 5)], 40));\r\n case 5:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 4)], 32));\r\n case 4:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 3)], 24));\r\n case 3:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 2)], 16));\r\n case 2:\r\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 1)], 8));\r\n case 1:\r\n k1 = x64Xor(k1, [0, key.charCodeAt(i)]);\r\n k1 = x64Multiply(k1, c1);\r\n k1 = x64Rotl(k1, 31);\r\n k1 = x64Multiply(k1, c2);\r\n h1 = x64Xor(h1, k1);\r\n }\r\n h1 = x64Xor(h1, [0, key.length]);\r\n h2 = x64Xor(h2, [0, key.length]);\r\n h1 = x64Add(h1, h2);\r\n h2 = x64Add(h2, h1);\r\n h1 = x64Fmix(h1);\r\n h2 = x64Fmix(h2);\r\n h1 = x64Add(h1, h2);\r\n h2 = x64Add(h2, h1);\r\n return (\r\n (\"00000000\" + (h1[0] >>> 0).toString(16)).slice(-8) +\r\n (\"00000000\" + (h1[1] >>> 0).toString(16)).slice(-8) +\r\n (\"00000000\" + (h2[0] >>> 0).toString(16)).slice(-8) +\r\n (\"00000000\" + (h2[1] >>> 0).toString(16)).slice(-8)\r\n );\r\n}\r\n", "import { x64hash128 } from \"./hashing\";\r\n\r\nexport const getWebglInfo = () => {\r\n var canvas,\r\n ctx,\r\n width = 256,\r\n height = 128;\r\n canvas = document.body.appendChild(document.createElement(\"canvas\"));\r\n (canvas.width = width),\r\n (canvas.height = height),\r\n (ctx =\r\n canvas.getContext(\"webgl2\") ||\r\n canvas.getContext(\"experimental-webgl2\") ||\r\n canvas.getContext(\"webgl\") ||\r\n canvas.getContext(\"experimental-webgl\") ||\r\n canvas.getContext(\"moz-webgl\"));\r\n\r\n const webglInfo = {};\r\n\r\n try {\r\n if (ctx) {\r\n var debugInfo = ctx.getExtension(\"WEBGL_debug_renderer_info\");\r\n\r\n if (debugInfo) {\r\n var webglVendor = ctx.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\r\n var webglRenderer = ctx.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\r\n webglInfo.webglVendor = webglVendor;\r\n webglInfo.webglRenderer = webglRenderer;\r\n }\r\n }\r\n\r\n var f =\r\n \"attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}\";\r\n var g =\r\n \"precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}\";\r\n var h = ctx.createBuffer();\r\n\r\n ctx.bindBuffer(ctx.ARRAY_BUFFER, h);\r\n\r\n var i = new Float32Array([-0.2, -0.9, 0, 0.4, -0.26, 0, 0, 0.7321, 0]);\r\n\r\n ctx.bufferData(ctx.ARRAY_BUFFER, i, ctx.STATIC_DRAW),\r\n (h.itemSize = 3),\r\n (h.numItems = 3);\r\n\r\n var j = ctx.createProgram();\r\n var k = ctx.createShader(ctx.VERTEX_SHADER);\r\n\r\n ctx.shaderSource(k, f);\r\n ctx.compileShader(k);\r\n\r\n var l = ctx.createShader(ctx.FRAGMENT_SHADER);\r\n\r\n ctx.shaderSource(l, g);\r\n ctx.compileShader(l);\r\n ctx.attachShader(j, k);\r\n ctx.attachShader(j, l);\r\n ctx.linkProgram(j);\r\n ctx.useProgram(j);\r\n\r\n j.vertexPosAttrib = ctx.getAttribLocation(j, \"attrVertex\");\r\n j.offsetUniform = ctx.getUniformLocation(j, \"uniformOffset\");\r\n\r\n ctx.enableVertexAttribArray(j.vertexPosArray);\r\n ctx.vertexAttribPointer(j.vertexPosAttrib, h.itemSize, ctx.FLOAT, !1, 0, 0);\r\n ctx.uniform2f(j.offsetUniform, 1, 1);\r\n ctx.drawArrays(ctx.TRIANGLE_STRIP, 0, h.numItems);\r\n document.body.removeChild(canvas);\r\n } catch (e) {}\r\n\r\n var m = \"\";\r\n\r\n var n = new Uint8Array(width * height * 4);\r\n ctx.readPixels(0, 0, width, height, ctx.RGBA, ctx.UNSIGNED_BYTE, n);\r\n m = JSON.stringify(n).replace(/,?\"[0-9]+\":/g, \"\");\r\n\r\n const webglId = x64hash128(m, 69);\r\n webglInfo.webglId = webglId;\r\n return webglInfo;\r\n};\r\n", "export const getBotInfo = () => {\r\n const isWebdriver = navigator.webdriver\r\n return {isWebdriver}\r\n}", "export const audioFingerprint = (function () {\r\n var context = null;\r\n var currentTime = null;\r\n var oscillator = null;\r\n var compressor = null;\r\n var fingerprint = null;\r\n var callback = null;\r\n\r\n function run(cb, debug = false) {\r\n callback = cb;\r\n\r\n try {\r\n setup();\r\n\r\n oscillator.connect(compressor);\r\n compressor.connect(context.destination);\r\n\r\n oscillator.start(0);\r\n context.startRendering();\r\n\r\n context.oncomplete = onComplete;\r\n } catch (e) {\r\n if (debug) {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n function setup() {\r\n setContext();\r\n currentTime = context.currentTime;\r\n setOscillator();\r\n setCompressor();\r\n }\r\n\r\n function setContext() {\r\n var audioContext =\r\n window.OfflineAudioContext || window.webkitOfflineAudioContext;\r\n context = new audioContext(1, 44100, 44100);\r\n }\r\n\r\n function setOscillator() {\r\n oscillator = context.createOscillator();\r\n oscillator.type = \"triangle\";\r\n oscillator.frequency.setValueAtTime(10000, currentTime);\r\n }\r\n\r\n function setCompressor() {\r\n compressor = context.createDynamicsCompressor();\r\n\r\n setCompressorValueIfDefined(\"threshold\", -50);\r\n setCompressorValueIfDefined(\"knee\", 40);\r\n setCompressorValueIfDefined(\"ratio\", 12);\r\n setCompressorValueIfDefined(\"reduction\", -20);\r\n setCompressorValueIfDefined(\"attack\", 0);\r\n setCompressorValueIfDefined(\"release\", 0.25);\r\n }\r\n\r\n function setCompressorValueIfDefined(item, value) {\r\n if (\r\n compressor[item] !== undefined &&\r\n typeof compressor[item].setValueAtTime === \"function\"\r\n ) {\r\n compressor[item].setValueAtTime(value, context.currentTime);\r\n }\r\n }\r\n\r\n function onComplete(event) {\r\n generateFingerprints(event);\r\n compressor.disconnect();\r\n }\r\n\r\n function generateFingerprints(event) {\r\n var output = null;\r\n for (var i = 4500; 5e3 > i; i++) {\r\n var channelData = event.renderedBuffer.getChannelData(0)[i];\r\n output += Math.abs(channelData);\r\n }\r\n\r\n fingerprint = output.toString();\r\n\r\n if (typeof callback === \"function\") {\r\n return callback(fingerprint);\r\n }\r\n }\r\n\r\n return {\r\n run: run,\r\n };\r\n})();\r\n"],
5
+ "mappings": "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AAC,CACH,CAEA,eAAe1B,IAAoB,CACjC,GAAI,CACF,IAAM2B,EAAqB,IAAI,IAC7B,CAEE,QACA,cACA,cACA,UACA,UACA,eACA,UACA,gBACA,WACA,aACA,SACA,cACA,SACA,yBACA,WACA,SACA,UACA,uBACA,SACA,WACA,gBACA,gBACA,iBACA,sBACA,gBACA,UACA,qBACA,qBACA,wBACA,oBACA,uBACA,mBACA,kBACA,qBACA,eACA,kBACA,YACA,UACA,eACA,aACA,oBACA,oBACA,cACA,eACA,WACA,oBACA,iBACA,kBACA,SACA,QACA,UACA,SACA,SACA,kBACA,eACA,UACA,WACA,YACA,YAEA,sBACA,cACA,QACA,cACA,eACA,wBACA,mBACA,SACA,cACA,wBACA,cACA,aACA,YACA,qBACA,sBACA,eACA,kBACA,aACA,gBACA,cACA,UACA,SACA,gBACA,cACA,UACA,cACA,QACA,gBACA,gBACA,SACA,SACA,UACA,YACA,YACA,iBACA,aACA,eACA,SACA,gBACA,WACA,cACA,QACA,uBACA,SACA,aACA,SACA,WACA,UACA,YACA,WACA,aACA,cACA,OACA,kBACA,SACA,QACA,kBACA,cACA,eACA,UACA,SACF,EAAE,KAAK,CACT,EACMC,EAAgB,IAAI,IAC1B,aAAO,SAAY,CACjB,MAAM,SAAS,MAAM,MAErB,QAAWC,KAAQF,EAAmB,OAAO,EACvC,SAAS,MAAM,MAAM,SAASE,CAAI,GAAG,GACvCD,EAAc,IAAIC,CAAI,CAG5B,GAAG,EACI,CAAC,GAAGD,EAAc,OAAO,CAAC,CACnC,MAAgB,CACd,MAAO,CAAC,CACV,CACF,CAEA,eAAexB,IAAa,CAC1B,GAAI,CACF,IAAMD,EAAc,MAAM,UAAU,WAAW,EAC/C,OAAKA,EAIE,CACL,SAAUA,EAAY,SAAW,WAAa,eAC9C,MAAOA,EAAY,MAAQ,IAC3B,aAAcA,EAAY,aAC1B,gBAAiBA,EAAY,eAC/B,EARE,MASJ,MAAgB,CACd,MAAO,CAAC,CACV,CACF,CAEO,IAAM2B,EAAgB,SACpB,MAAM9D,GAAa,EJ3brB,IAAM+D,EAAU,QAEvB,SAASC,EAAeC,EAAQ,CAC9B,GAAI,CAACA,GAAU,OAAOA,GAAW,UAAYA,IAAW,oBACtD,MAAM,IAAI,MACR,iFACF,CAEJ,CAKA,SAASC,GAAmB,CAAE,OAAAD,CAAO,EAAG,CACtC,MAAO,CACL,QAAS,YACT,QAAAF,EACA,OAAAE,EAEA,MAAM,eAAgB,CACpB,OAAO,MAAeE,EAAc,CACtC,CACF,CACF,CAEO,SAASC,GAAeC,EAAS,CAAC,EAAG,CAC1C,GAAM,CAAE,OAAAJ,EAAQ,QAAAK,CAAQ,EAAID,EAC5B,OAAAL,EAAeC,CAAM,EAEjBK,GAAS,QAAQ,IAAI,sCAAsC,EAExDJ,GAAmB,CAAE,OAAAD,CAAO,CAAC,CACtC,CAKA,SAASM,GAAmB,CAAE,OAAAN,CAAO,EAAG,CACtC,MAAO,CACL,QAAS,aACT,QAAAF,EACA,OAAAE,EAEA,sBAA6CO,EAC7C,sBAA6CC,EAE7C,kBAAyCC,EACzC,kBAAyCC,EAEzC,uBAA8CC,EAC9C,2BAAkDC,CACpD,CACF,CAEO,SAASC,GAAeT,EAAS,CAAC,EAAG,CAC1C,GAAM,CAAE,OAAAJ,EAAQ,QAAAK,CAAQ,EAAID,EAC5B,OAAAL,EAAeC,CAAM,EAEjBK,GAAS,QAAQ,IAAI,qCAAqC,EAEvDC,GAAmB,CAAE,OAAAN,CAAO,CAAC,CACtC,CAKA,SAASc,GAAiC,CAAE,OAAAd,CAAO,EAAG,CACpD,IAAMe,EAAaT,GAAmB,CAAE,OAAAN,CAAO,CAAC,EAC1CgB,EAAaf,GAAmB,CAAE,OAAAD,CAAO,CAAC,EAEhD,MAAO,CACL,QAAS,4BACT,QAAAF,EACA,OAAAE,EAGA,sBAAuBe,EAAW,sBAClC,sBAAuBA,EAAW,sBAClC,kBAAmBA,EAAW,kBAC9B,kBAAmBA,EAAW,kBAE9B,uBAAwBA,EAAW,uBACnC,2BAA4BA,EAAW,2BAGvC,cAAeC,EAAW,cAM1B,MAAM,6BAA8B,CAClC,IAAMC,EAAc,CAClB,UAAWF,EAAW,2BAA2B,EACjD,MAAOA,EAAW,uBAAuB,CAC3C,EAEMG,EAAS,MAAMF,EAAW,cAAc,EAE9C,MAAO,CACL,YAAAC,EACA,OAAAC,EACA,UAAW,IAAI,KAAK,EAAE,YAAY,CACpC,CACF,CACF,CACF,CAEO,SAASC,GAA6Bf,EAAS,CAAC,EAAG,CACxD,GAAM,CAAE,OAAAJ,EAAQ,QAAAK,CAAQ,EAAID,EAC5B,OAAAL,EAAeC,CAAM,EAEjBK,GAAS,QAAQ,IAAI,mDAAmD,EAErES,GAAiC,CAAE,OAAAd,CAAO,CAAC,CACpD",
6
+ "names": ["src_exports", "__export", "behavioural_biometrics_exports", "device_id_exports", "initBiometrics", "initDeviceInfo", "initDeviceInfoWithBiometrics", "version", "behavioural_biometrics_exports", "__export", "fetchKeyStrockDynamicsData", "fetchMouseDynamicsData", "initKeyStrokeDynamics", "initMouseDynamics", "stopKeyStrokeDynamics", "stopMouseDynamics", "KeystrokeDynamicsTracker", "_keystrokes", "_keystrokes_with_code", "_previousDown", "_isShiftDown", "_shiftTracker", "_dTime", "_getCurrentTimestamp", "_getCategory", "key", "keyCode", "shiftKeyPressed", "isUpperCaseLetter", "isLowerCaseLetter", "isUpperCaseSymbol", "isPrevWasmultikeyWithShift", "prevKey", "_keyLogger", "type", "timestamp", "category", "dTimeStamp", "dwellTime", "shiftDwellTime", "logKey", "_keyEventTriggered", "e", "keydownHandler", "keyupHandler", "MouseDynamicsTracker", "_rawData", "_mouseClicksData", "_previousStop", "_movementTimer", "_getCurrentTimestamp", "_findAngle", "cx", "cy", "ex", "ey", "dy", "dx", "theta", "_getQuadrant", "angle_deg", "_calculateDistanceBetweenPoints", "x1", "y1", "x2", "y2", "_recordCoordinates", "x", "y", "lastPushedElement", "lastTime", "currentTime", "timeDifference", "theta_relative", "distance_moved", "theta_origin", "quadrant", "_mouseMoved", "e", "_mouseX", "_mouseY", "_clickEvent", "timestamp", "initKeyStrokeDynamics", "KeystrokeDynamicsTracker", "stopKeyStrokeDynamics", "initMouseDynamics", "MouseDynamicsTracker", "stopMouseDynamics", "fetchMouseDynamicsData", "fetchKeyStrockDynamicsData", "device_id_exports", "__export", "getDeviceData", "getOSName", "detectIncognito", "resolve", "reject", "browserName", "__callback", "isPrivate", "identifyChromium", "ua", "assertEvalToString", "value", "isSafari", "v", "isChrome", "isFirefox", "isMSIE", "newSafariTest", "tmp_name", "db", "i", "res", "e", "message", "matchesExpectedError", "oldSafariTest", "openDB", "storage", "safariPrivateTest", "getQuotaLimit", "w", "storageQuotaChromePrivateTest", "_", "quota", "quotaInMib", "quotaLimitInMib", "oldChromePrivateTest", "fs", "chromePrivateTest", "firefoxPrivateTest", "msiePrivateTest", "main", "getHasLiedOs", "userAgent", "oscpu", "platform", "os", "getOSName", "platformIsOther", "getHasLiedBrowser", "productSub", "browser", "tempRes", "errFirefox", "err", "getHasLiedResolution", "getHasLiedLanguages", "firstLanguages", "getHasLiedParameters", "generateCanvasHash", "canvas", "ctx", "txt", "sha256", "i", "j", "K", "H", "num", "root", "S", "X", "n", "SHA256", "b", "HASH", "s", "W", "l", "a", "z", "canvasHash", "x64Add", "m", "n", "o", "x64Multiply", "x64Rotl", "x64LeftShift", "x64Xor", "x64Fmix", "h", "x64hash128", "key", "seed", "remainder", "bytes", "h1", "h2", "k1", "k2", "c1", "c2", "i", "getWebglInfo", "canvas", "ctx", "width", "height", "webglInfo", "debugInfo", "webglVendor", "webglRenderer", "f", "g", "h", "i", "j", "k", "l", "m", "n", "webglId", "x64hash128", "getBotInfo", "audioFingerprint", "context", "currentTime", "oscillator", "compressor", "fingerprint", "callback", "run", "cb", "debug", "setup", "onComplete", "e", "setContext", "setOscillator", "setCompressor", "audioContext", "setCompressorValueIfDefined", "item", "value", "event", "generateFingerprints", "output", "i", "channelData", "getAllValues", "browserInfo", "getBrowserInfo", "windowInfo", "getWindowsInfo", "hasLiedParamters", "getHasLiedParameters", "adBlock", "getAdBlock", "dateOffsetTimezone", "getTimeZone", "osDetails", "getosDetails", "localIPAddress", "getLocalipAddress", "audioDetails", "getAudioDetails", "deviceOrientation", "getDeviceOrientation", "deviceMotion", "getDeviceMotion", "deviceLight", "getDeviceLight", "proximityEvent", "getProximityEvent", "canvasId", "generateCanvasHash", "audioFingerPrintFrequency", "getAudioFingerPrintFrequency", "webglInfo", "getWebglInfo", "fontsAvailable", "getFontsAvailable", "botInfo", "getBotInfo", "batteryInfo", "getBattery", "getBrowserPlugins", "isPrivate", "plugin", "checkSessionStorage", "checkLocalStorage", "isSession", "isLocal", "ads", "result", "getOSName", "userAgent", "os", "getIPDetails", "ipDetails", "audioContext", "event", "ambientLightLevel", "averageFingerPrintFrequency", "getAverageFingerprintFrequency", "x64hash128", "audioFingerprint", "fingerprint", "allWindowsMacFonts", "fontAvailable", "font", "getDeviceData", "version", "validateApiKey", "apiKey", "buildDeviceInfoSDK", "getDeviceData", "initDeviceInfo", "config", "verbose", "buildBiometricsSDK", "initKeyStrokeDynamics", "stopKeyStrokeDynamics", "initMouseDynamics", "stopMouseDynamics", "fetchMouseDynamicsData", "fetchKeyStrockDynamicsData", "initBiometrics", "buildDeviceInfoWithBiometricsSDK", "biometrics", "deviceInfo", "behavioural", "device", "initDeviceInfoWithBiometrics"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dwield/device-biometrics-sdk",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "description": "A JavaScript SDK providing Device Info, Behavioural Biometrics, and Combined Fingerprinting capabilities.",
5
5
  "author": "Hariprasad",
6
6
  "keywords": [