@mui/x-telemetry
Version:
MUI X Telemetry.
37 lines (34 loc) • 1.36 kB
JavaScript
;
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');
}