UNPKG

@mui/x-telemetry

Version:
37 lines (34 loc) 1.36 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getAnonymousProjectId; var _child_process = require("child_process"); var _crypto = require("crypto"); var _util = _interopRequireDefault(require("util")); const asyncExec = _util.default.promisify(_child_process.exec); async function execCLI(command) { try { const response = await asyncExec(command, { timeout: 1000, windowsHide: true }); return String(response).trim(); } catch (_) { return null; } } // Q: Why does MUI need a project ID? Why is it looking at my git remote? // A: // MUI's telemetry always anonymizes these values. We need a way to // differentiate different projects to track feature usage accurately. // For example, to prevent a feature from appearing to be constantly `used` // and then `unused` when switching between local projects. async function getRawProjectId() { return (await execCLI(`git config --local --get remote.origin.url`)) || process.env.REPOSITORY_URL || (await execCLI(`git rev-parse --show-toplevel`)) || process.cwd(); } async function getAnonymousProjectId() { const rawProjectId = await getRawProjectId(); return (0, _crypto.createHash)('sha256').update(rawProjectId).digest('hex'); }