@mui/x-telemetry
Version:
MUI X Telemetry.
46 lines (45 loc) • 2.12 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import fs from 'fs';
import path from 'path';
import { randomBytes } from 'crypto';
import { fileURLToPath } from 'url';
import getEnvironmentInfo from "./get-environment-info.js";
import getAnonymousProjectId from "./get-project-id.js";
import getAnonymousMachineId from "./get-machine-id.js";
import { TelemetryStorage } from "./storage.js";
const dirname = typeof __dirname === 'string' ? __dirname // cjs build in root dir
: (() => {
const filename = fileURLToPath(import.meta.url);
// esm build in `esm` directory, so we need to go up two levels
return path.dirname(path.dirname(filename));
})();
(async () => {
// If Node.js support permissions, we need to check if the current user has
// the necessary permissions to write to the file system.
if (typeof process.permission !== 'undefined' && !(process.permission.has('fs.read') && process.permission.has('fs.write'))) {
return;
}
const storage = await TelemetryStorage.init({
distDir: process.cwd()
});
const [environmentInfo, projectId, machineId] = await Promise.all([getEnvironmentInfo(), getAnonymousProjectId(), getAnonymousMachineId()]);
const contextData = {
config: {
isInitialized: true
},
traits: _extends({}, environmentInfo, {
machineId,
projectId,
sessionId: randomBytes(32).toString('hex'),
anonymousId: storage.anonymousId
})
};
const writeContextData = (filePath, format) => {
const targetPath = path.resolve(dirname, '..', filePath, 'context.js');
fs.writeFileSync(targetPath, format(JSON.stringify(contextData, null, 2)));
};
writeContextData('esm', content => `export default ${content};`);
writeContextData('', content => [`"use strict";`, `Object.defineProperty(exports, "__esModule", { value: true });`, `exports.default = void 0;`, `var _default = exports.default = ${content};`].join('\n'));
})().catch(error => {
console.error('[telemetry] Failed to make initialization. Please, report error to MUI X team:\n' + 'https://mui.com/r/x-telemetry-postinstall-troubleshoot\n', error);
});