| import path from "node:path"; |
| import { resolveGatewayProfileSuffix } from "./constants.js"; |
|
|
| const windowsAbsolutePath = /^[a-zA-Z]:[\\/]/; |
| const windowsUncPath = /^\\\\/; |
|
|
| export function resolveHomeDir(env: Record<string, string | undefined>): string { |
| const home = env.HOME?.trim() || env.USERPROFILE?.trim(); |
| if (!home) { |
| throw new Error("Missing HOME"); |
| } |
| return home; |
| } |
|
|
| export function resolveUserPathWithHome(input: string, home?: string): string { |
| const trimmed = input.trim(); |
| if (!trimmed) { |
| return trimmed; |
| } |
| if (trimmed.startsWith("~")) { |
| if (!home) { |
| throw new Error("Missing HOME"); |
| } |
| const expanded = trimmed.replace(/^~(?=$|[\\/])/, home); |
| return path.resolve(expanded); |
| } |
| if (windowsAbsolutePath.test(trimmed) || windowsUncPath.test(trimmed)) { |
| return trimmed; |
| } |
| return path.resolve(trimmed); |
| } |
|
|
| export function resolveGatewayStateDir(env: Record<string, string | undefined>): string { |
| const override = env.OPENCLAW_STATE_DIR?.trim(); |
| if (override) { |
| const home = override.startsWith("~") ? resolveHomeDir(env) : undefined; |
| return resolveUserPathWithHome(override, home); |
| } |
| const home = resolveHomeDir(env); |
| const suffix = resolveGatewayProfileSuffix(env.OPENCLAW_PROFILE); |
| return path.join(home, `.openskynet${suffix}`); |
| } |
|
|