import { datadogRum } from '@datadog/browser-rum'; import { DATADOG_RUM_FOR_DEV } from './constants'; import { clearOverride, enableOverride } from './override'; interface DevConsole { start: () => void; stop: () => void; } interface DevGlobalSlot { [DATADOG_RUM_FOR_DEV]?: DevConsole; } declare global { interface Window { datadogRumForDev?: DevConsole; } } /* istanbul ignore next: thin seam over location.reload, which jsdom does not implement */ function reloadPage(): void { globalThis.location.reload(); } function start(): void { enableOverride(); // eslint-disable-next-line no-console console.info(`[datadog-rum] ${DATADOG_RUM_FOR_DEV}.start(): RUM enabled for 12h; reloading.`); reloadPage(); } function stop(): void { try { datadogRum.stopSession(); } catch { // ignore: SDK may not be initialized } clearOverride(); // eslint-disable-next-line no-console console.info(`[datadog-rum] ${DATADOG_RUM_FOR_DEV}.stop(): override cleared; reloading.`); reloadPage(); } export function installDevConsole(): void { const slot = globalThis as unknown as DevGlobalSlot; if (slot[DATADOG_RUM_FOR_DEV]) { return; } slot[DATADOG_RUM_FOR_DEV] = { start, stop }; globalThis.addEventListener('storage', event => { if (event.key === DATADOG_RUM_FOR_DEV) { reloadPage(); } }); }