import { readPrivacyPreferences, writePrivacyPreferences, type PrivacyPreferences, } from '../src/home-paths' import { isAgentEnv } from './commands/inspect/env' import { confirm } from './prompt' function isCi(): boolean { return ( process.env.CI === '1' || process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true' ) } export function canPromptForPrivacyChoice(): boolean { return process.stdin.isTTY === true && !isCi() && !isAgentEnv() } export function diagnosticsAllowedForCurrentProcess( preferences: PrivacyPreferences = readPrivacyPreferences(), ): boolean { const doNotTrack = process.env.DO_NOT_TRACK if (doNotTrack === '1' || doNotTrack === 'true') return false if (!canPromptForPrivacyChoice()) return false return preferences.configured && preferences.productAnalytics } export async function ensurePrivacyChoice(options: { prompt: boolean }): Promise { const current = readPrivacyPreferences() if (current.configured) return current if (!options.prompt || !canPromptForPrivacyChoice()) { return { productAnalytics: false, crashReports: false, configured: false, } } const allowed = await confirm( 'Share anonymous package incompatibilities and error classes to improve rnx?', false, ) // the engine's historical analytics and crash transports carry broader // payloads, so crashReports stays off. productAnalytics is now consent for // the bounded CLI diagnostic transport only. writePrivacyPreferences({ productAnalytics: allowed, crashReports: false }) return readPrivacyPreferences() }