@mui/x-telemetry
Version:
MUI X Telemetry.
62 lines (58 loc) • 2.02 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { getTelemetryEnvConfigValue } from "./config.js";
import { fetchWithRetry } from "./fetcher.js";
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;
}
// Disabled by default
return false;
}
async function sendMuiXTelemetryEvent(event) {
try {
// Disable collection of the telemetry
// in production environment
if (process.env.NODE_ENV === 'production') {
return;
}
const {
default: getTelemetryContext
} = await import("./get-context.js");
const telemetryContext = await getTelemetryContext();
if (!event || !shouldSendTelemetry(telemetryContext)) {
return;
}
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': "8.5.3" ?? '<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;