@mui/x-telemetry
Version:
MUI X Telemetry.
68 lines (63 loc) • 2.26 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { getTelemetryEnvConfigValue } from "./config.mjs";
import { fetchWithRetry } from "./fetcher.mjs";
const sendMuiXTelemetryRetries = 3;
function shouldSendTelemetry(telemetryContext) {
// Disable reporting in SSR / Node.js
if (typeof window === 'undefined') {
return false;
}
// Priority to the config (e.g. in code, env)
const envIsCollecting = getTelemetryEnvConfigValue('IS_COLLECTING');
if (typeof envIsCollecting === 'boolean') {
return envIsCollecting;
}
// Disable collection of the telemetry in CI builds,
// as it not related to development process
if (telemetryContext.traits.isCI) {
return false;
}
// Enabled by default
return true;
}
async function sendMuiXTelemetryEvent(event) {
try {
// Disable collection of the telemetry
// in production environment
if (process.env.NODE_ENV === 'production') {
return;
}
// Check eligibility using base context (no runtime resolution / fetch)
// so disabled telemetry doesn't trigger fetch('/package.json')
const {
default: baseTelemetryContext
} = await import("../context.mjs");
if (!event || !shouldSendTelemetry(baseTelemetryContext)) {
return;
}
const {
default: getTelemetryContext
} = await import("./get-context.mjs");
const telemetryContext = await getTelemetryContext();
const eventPayload = _extends({}, event, {
context: _extends({}, telemetryContext.traits, event.context)
});
if (getTelemetryEnvConfigValue('DEBUG')) {
console.log('[mui-x-telemetry] event', JSON.stringify(eventPayload, null, 2));
return;
}
// TODO: batch events and send them in a single request when there will be more
await fetchWithRetry('https://x-telemetry.mui.com/v2/telemetry/record', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Telemetry-Client-Version': "9.9.0" ?? '<dev>',
'X-Telemetry-Node-Env': process.env.NODE_ENV ?? '<unknown>'
},
body: JSON.stringify([eventPayload])
}, sendMuiXTelemetryRetries);
} catch (_) {
console.log('[mui-x-telemetry] error', _);
}
}
export default sendMuiXTelemetryEvent;