import { mkdir, readFile, writeFile } from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { randomUUID } from "node:crypto"; export type TelemetryBootstrap = { distinctId: string; appVersion: string; platform: NodeJS.Platform; }; export function defaultDataDir( platform: NodeJS.Platform, env: Record, homeDir: string, ): string | null { void platform; if (env.AO_DATA_DIR) return env.AO_DATA_DIR; if (!homeDir) return null; return path.join(homeDir, ".ao", "data"); } export async function loadOrCreateTelemetryInstallId(dataDir: string): Promise { const file = path.join(dataDir, "telemetry_install_id"); try { const existing = (await readFile(file, "utf8")).trim(); if (existing) return existing; } catch { // Create the id on first use. } await mkdir(dataDir, { recursive: true }); const distinctId = `ins_${randomUUID()}`; await writeFile(file, `${distinctId}\n`, { mode: 0o600 }); return distinctId; } export async function buildTelemetryBootstrap( env: Record, appVersion: string, platform: NodeJS.Platform, homeDir = os.homedir(), ): Promise { const dataDir = defaultDataDir(platform, env, homeDir); if (!dataDir) return null; return { distinctId: await loadOrCreateTelemetryInstallId(dataDir), appVersion, platform, }; }