feat: add serverUrl configuration support with settings.json fallback

Implement serverUrl initialization following the cliApiToken design pattern:
- Environment variable HAPI_SERVER_URL (highest priority, allows temporary override)
- settings.json serverUrl field (user persistent configuration)
- Default value 'http://localhost:3006' (fallback)

Changes:
- Add serverUrl field to Settings interface (persistence.ts)
- Convert serverUrl to private property with getter/setter (configuration.ts)
- Create initializeServerUrl module to load from settings (serverUrlInit.ts)
- Integrate serverUrl initialization in tokenInit flow (tokenInit.ts)
- Skip auto-start when serverUrl is configured in settings (autoStartServer.ts)
This commit is contained in:
weishu
2026-01-08 10:37:37 +08:00
parent cb69001385
commit 9dc69d1e80
5 changed files with 56 additions and 3 deletions
+31
View File
@@ -0,0 +1,31 @@
/**
* Server URL initialization module
*
* Handles HAPI_SERVER_URL initialization with priority:
* 1. Environment variable (highest - allows temporary override)
* 2. Settings file (~/.hapi/settings.json)
* 3. Default value (http://localhost:3006)
*/
import { configuration } from '@/configuration'
import { readSettings } from '@/persistence'
/**
* Initialize server URL
* Must be called before any API operations
*/
export async function initializeServerUrl(): Promise<void> {
// 1. Environment variable has highest priority (allows temporary override)
if (process.env.HAPI_SERVER_URL) {
return
}
// 2. Read from settings file
const settings = await readSettings()
if (settings.serverUrl) {
configuration._setServerUrl(settings.serverUrl)
return
}
// 3. Default value already set in configuration constructor
}
+4
View File
@@ -12,12 +12,16 @@ import { stdin as input, stdout as output } from 'node:process'
import chalk from 'chalk'
import { configuration } from '@/configuration'
import { readSettings, updateSettings } from '@/persistence'
import { initializeServerUrl } from '@/ui/serverUrlInit'
/**
* Initialize CLI API token
* Must be called before any API operations
*/
export async function initializeToken(): Promise<void> {
// Initialize server URL first (env > settings.json > default)
await initializeServerUrl()
// 1. Environment variable has highest priority (allows temporary override)
if (configuration.cliApiToken) {
return