import * as OS from "node:os"; import { Effect, FileSystem } from "effect"; import { runProcess } from "../../processRunner.ts"; interface ResolveServerEnvironmentLabelInput { readonly cwdBaseName: string; readonly platform?: NodeJS.Platform; readonly hostname?: string | null; } function normalizeLabel(value: string | null | undefined): string | null { const trimmed = value?.trim(); return trimmed && trimmed.length > 0 ? trimmed : null; } function parseMachineInfoValue(raw: string, key: string): string | null { for (const line of raw.split(/\r?\n/g)) { const trimmed = line.trim(); if (trimmed.length === 0 || trimmed.startsWith("#") || !trimmed.startsWith(`${key}=`)) { continue; } const value = trimmed.slice(key.length + 1).trim(); if ( (value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'")) ) { return normalizeLabel(value.slice(1, -1)); } return normalizeLabel(value); } return null; } const readLinuxMachineInfo = Effect.fn("readLinuxMachineInfo")(function* () { const fileSystem = yield* FileSystem.FileSystem; const exists = yield* fileSystem .exists("/etc/machine-info") .pipe(Effect.orElseSucceed(() => false)); if (!exists) { return null; } return yield* fileSystem .readFileString("/etc/machine-info") .pipe(Effect.orElseSucceed(() => null)); }); const runFriendlyLabelCommand = Effect.fn("runFriendlyLabelCommand")(function* ( command: string, args: readonly string[], ) { const result = yield* Effect.tryPromise({ try: () => runProcess(command, args, { allowNonZeroExit: true, }), catch: () => null, }).pipe(Effect.orElseSucceed(() => null)); if (!result || result.code !== 0) { return null; } return normalizeLabel(result.stdout); }); const resolveFriendlyHostLabel = Effect.fn("resolveFriendlyHostLabel")(function* ( platform: NodeJS.Platform, ) { if (platform === "darwin") { return yield* runFriendlyLabelCommand("scutil", ["--get", "ComputerName"]); } if (platform === "linux") { const machineInfo = normalizeLabel(yield* readLinuxMachineInfo()); if (machineInfo) { const prettyHostname = parseMachineInfoValue(machineInfo, "PRETTY_HOSTNAME"); if (prettyHostname) { return prettyHostname; } } return yield* runFriendlyLabelCommand("hostnamectl", ["--pretty"]); } return null; }); export const resolveServerEnvironmentLabel = Effect.fn("resolveServerEnvironmentLabel")(function* ( input: ResolveServerEnvironmentLabelInput, ) { const platform = input.platform ?? process.platform; const friendlyHostLabel = yield* resolveFriendlyHostLabel(platform); if (friendlyHostLabel) { return friendlyHostLabel; } const hostname = normalizeLabel(input.hostname ?? OS.hostname()); if (hostname) { return hostname; } return normalizeLabel(input.cwdBaseName) ?? "T3 environment"; });