import * as FS from "node:fs"; import * as Path from "node:path"; import type { DesktopServerExposureMode } from "@t3tools/contracts"; export interface DesktopSettings { readonly serverExposureMode: DesktopServerExposureMode; } export const DEFAULT_DESKTOP_SETTINGS: DesktopSettings = { serverExposureMode: "local-only", }; export function setDesktopServerExposurePreference( settings: DesktopSettings, requestedMode: DesktopServerExposureMode, ): DesktopSettings { return settings.serverExposureMode === requestedMode ? settings : { ...settings, serverExposureMode: requestedMode, }; } export function readDesktopSettings(settingsPath: string): DesktopSettings { try { if (!FS.existsSync(settingsPath)) { return DEFAULT_DESKTOP_SETTINGS; } const raw = FS.readFileSync(settingsPath, "utf8"); const parsed = JSON.parse(raw) as { readonly serverExposureMode?: unknown; }; return { serverExposureMode: parsed.serverExposureMode === "network-accessible" ? "network-accessible" : "local-only", }; } catch { return DEFAULT_DESKTOP_SETTINGS; } } export function writeDesktopSettings(settingsPath: string, settings: DesktopSettings): void { const directory = Path.dirname(settingsPath); const tempPath = `${settingsPath}.${process.pid}.${Date.now()}.tmp`; FS.mkdirSync(directory, { recursive: true }); FS.writeFileSync(tempPath, `${JSON.stringify(settings, null, 2)}\n`, "utf8"); FS.renameSync(tempPath, settingsPath); }