UNPKG

@mui/x-telemetry

Version:
93 lines (91 loc) 3.79 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard")); var _context = _interopRequireDefault(require("../context")); var _windowStorage = require("./window-storage"); function generateId(length) { let result = ''; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; const charactersLength = characters.length; let counter = 0; while (counter < length) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); counter += 1; } return result; } function pick(obj, keys) { return keys.reduce((acc, key) => { acc[key] = obj[key]; return acc; }, {}); } const getBrowserFingerprint = typeof window === 'undefined' || process.env.NODE_ENV === 'test' ? () => undefined : async () => { const fingerprintLCKey = 'fingerprint'; try { const existingFingerprint = (0, _windowStorage.getWindowStorageItem)('localStorage', fingerprintLCKey); if (existingFingerprint) { return JSON.parse(existingFingerprint); } const FingerprintJS = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require('@fingerprintjs/fingerprintjs'))); const fp = await FingerprintJS.load({ monitoring: false }); const fpResult = await fp.get(); const components = (0, _extends2.default)({}, fpResult.components); delete components.cookiesEnabled; const fullHash = FingerprintJS.hashComponents(components); const coreHash = FingerprintJS.hashComponents((0, _extends2.default)({}, pick(components, ['fonts', 'audio', 'languages', 'deviceMemory', 'timezone', 'sessionStorage', 'localStorage', 'indexedDB', 'openDatabase', 'platform', 'canvas', 'vendor', 'vendorFlavors', 'colorGamut', 'forcedColors', 'monochrome', 'contrast', 'reducedMotion', 'math', 'videoCard', 'architecture']))); const result = { fullHash, coreHash }; (0, _windowStorage.setWindowStorageItem)('localStorage', fingerprintLCKey, JSON.stringify(result)); return result; } catch (_) { return null; } }; function getAnonymousId() { const localStorageKey = 'anonymous_id'; const existingAnonymousId = (0, _windowStorage.getWindowStorageItem)('localStorage', localStorageKey); if (existingAnonymousId) { return existingAnonymousId; } const generated = `anid_${generateId(32)}`; if ((0, _windowStorage.setWindowStorageItem)('localStorage', localStorageKey, generated)) { return generated; } return ''; } function getSessionId() { const localStorageKey = 'session_id'; const existingSessionId = (0, _windowStorage.getWindowStorageItem)('sessionStorage', localStorageKey); if (existingSessionId) { return existingSessionId; } const generated = `sesid_${generateId(32)}`; if ((0, _windowStorage.setWindowStorageItem)('sessionStorage', localStorageKey, generated)) { return generated; } return `sestp_${generateId(32)}`; } async function getTelemetryContext() { _context.default.traits.sessionId = getSessionId(); // Initialize the context if it hasn't been initialized yet // (e.g. postinstall not run) if (!_context.default.config.isInitialized) { _context.default.traits.anonymousId = getAnonymousId(); _context.default.config.isInitialized = true; } if (!_context.default.traits.fingerprint) { _context.default.traits.fingerprint = await getBrowserFingerprint(); } return _context.default; } var _default = exports.default = getTelemetryContext;