import { readFile, writeFile } from 'node:fs/promises'; import { join } from 'node:path'; import { ensureDir, getOpenClawConfigDir } from './paths'; type OpenClawConfig = Record; const OPENCLAW_CONFIG_FILE_NAME = 'openclaw.json'; export function getOpenClawConfigPath(): string { return join(getOpenClawConfigDir(), OPENCLAW_CONFIG_FILE_NAME); } async function readOpenClawConfig(): Promise { const configPath = getOpenClawConfigPath(); try { const raw = await readFile(configPath, 'utf-8'); return JSON.parse(raw) as OpenClawConfig; } catch { return {}; } } async function writeOpenClawConfig(config: OpenClawConfig): Promise { ensureDir(getOpenClawConfigDir()); await writeFile(getOpenClawConfigPath(), JSON.stringify(config, null, 2), 'utf-8'); } export async function syncBrowserConfigToOpenClaw(): Promise { const config = await readOpenClawConfig(); const browser = ( config.browser && typeof config.browser === 'object' ? { ...(config.browser as Record) } : {} ) as Record; let changed = false; if (browser.enabled === undefined) { browser.enabled = true; changed = true; } if (browser.defaultProfile === undefined) { browser.defaultProfile = 'openclaw'; changed = true; } if (browser.ssrfPolicy == null) { browser.ssrfPolicy = { dangerouslyAllowPrivateNetwork: true }; changed = true; } else if ( typeof browser.ssrfPolicy === 'object' && (browser.ssrfPolicy as Record).dangerouslyAllowPrivateNetwork === undefined ) { (browser.ssrfPolicy as Record).dangerouslyAllowPrivateNetwork = true; changed = true; } if (!changed) { return; } config.browser = browser; await writeOpenClawConfig(config); }